<!--
@license
Copyright (C) 2016 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../test/common-test-setup.html"/>
<dom-module id="mock-diff-response">
  <template></template>
  <script>
    (function() {
      'use strict';

      const RESPONSE = {
        meta_a: {
          name: 'lorem-ipsum.txt',
          content_type: 'text/plain',
          lines: 45,
        },
        meta_b: {
          name: 'lorem-ipsum.txt',
          content_type: 'text/plain',
          lines: 48,
        },
        intraline_status: 'OK',
        change_type: 'MODIFIED',
        diff_header: [
          'diff --git a/lorem-ipsum.txt b/lorem-ipsum.txt',
          'index b2adcf4..554ae49 100644',
          '--- a/lorem-ipsum.txt',
          '+++ b/lorem-ipsum.txt',
        ],
        content: [
          {
            ab: [
              'Lorem ipsum dolor sit amet, suspendisse inceptos vehicula, ' +
                'nulla phasellus.',
              'Mattis lectus.',
              'Sodales duis.',
              'Orci a faucibus.',
            ],
          },
          {
            b: [
              'Nullam neque, ligula ac, id blandit.',
              'Sagittis tincidunt torquent, tempor nunc amet.',
              'At rhoncus id.',
            ],
          },
          {
            ab: [
              'Sem nascetur, erat ut, non in.',
              'A donec, venenatis pellentesque dis.',
              'Mauris mauris.',
              'Quisque nisl duis, facilisis viverra.',
              'Justo purus, semper eget et.',
            ],
          },
          {
            a: [
              'Est amet, vestibulum pellentesque.',
              'Erat ligula.',
              'Justo eros.',
              'Fringilla quisque.',
            ],
          },
          {
            ab: [
              'Arcu eget, rhoncus amet cursus, ipsum elementum.',
              'Eros suspendisse.',
            ],
          },
          {
            a: [
              'Rhoncus tempor, ultricies aliquam ipsum.',
            ],
            b: [
              'Rhoncus tempor, ultricies praesent ipsum.',
            ],
            edit_a: [
              [
                26,
                7,
              ],
            ],
            edit_b: [
              [
                26,
                8,
              ],
            ],
          },
          {
            ab: [
              'Sollicitudin duis.',
              'Blandit blandit, ante nisl fusce.',
              'Felis ac at, tellus consectetuer.',
              'Sociis ligula sapien, egestas leo.',
              'Cum pulvinar, sed mauris, cursus neque velit.',
              'Augue porta lobortis.',
              'Nibh lorem, amet fermentum turpis, vel pulvinar diam.',
              'Id quam ipsum, id urna et, massa suspendisse.',
              'Ac nec, nibh praesent.',
              'Rutrum vestibulum.',
              'Est tellus, bibendum habitasse.',
              'Justo facilisis, vel nulla.',
              'Donec eu, vulputate neque aliquam, nulla dui.',
              'Risus adipiscing in.',
              'Lacus arcu arcu.',
              'Urna velit.',
              'Urna a dolor.',
              'Lectus magna augue, convallis mattis tortor, sed tellus ' +
                'consequat.',
              'Etiam dui, blandit wisi.',
              'Mi nec.',
              'Vitae eget vestibulum.',
              'Ullamcorper nunc ante, nec imperdiet felis, consectetur in.',
              'Ac eget.',
              'Vel fringilla, interdum pellentesque placerat, proin ante.',
            ],
          },
          {
            b: [
              'Eu congue risus.',
              'Enim ac, quis elementum.',
              'Non et elit.',
              'Etiam aliquam, diam vel nunc.',
            ],
          },
          {
            ab: [
              'Nec at.',
              'Arcu mauris, venenatis lacus fermentum, praesent duis.',
              'Pellentesque amet et, tellus duis.',
              'Ipsum arcu vitae, justo elit, sed libero tellus.',
              'Metus rutrum euismod, vivamus sodales, vel arcu nisl.',
            ],
          },
        ],
      };

      Polymer({
        is: 'mock-diff-response',
        properties: {
          diffResponse: {
            type: Object,
            value() {
              return RESPONSE;
            },
          },
        },
      });
    })();
  </script>
</dom-module>
