Include an empty file - this will be filled with Polymer 2 specific code later, and it's useful to have the empty file now because the Polymer 2 change will likely be pending very long, and we would like to avoid conflicts keeping so many files in a pending change for long. Also include a harmless polyfill that we need for Polymer 2. Change-Id: I504e52ae937edff1d35b29700882b522ef4dbc64
		
			
				
	
	
		
			385 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<!--
 | 
						|
@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.
 | 
						|
-->
 | 
						|
 | 
						|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
 | 
						|
<title>gr-editable-label</title>
 | 
						|
<script src="/test/common-test-setup.js"></script>
 | 
						|
<script src="/bower_components/webcomponentsjs/custom-elements-es5-adapter.js"></script>
 | 
						|
 | 
						|
<script src="/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
 | 
						|
<script src="/bower_components/web-component-tester/browser.js"></script>
 | 
						|
<link rel="import" href="../../../test/common-test-setup.html"/>
 | 
						|
<link rel="import" href="gr-formatted-text.html">
 | 
						|
 | 
						|
<script>void(0);</script>
 | 
						|
 | 
						|
<test-fixture id="basic">
 | 
						|
  <template>
 | 
						|
    <gr-formatted-text></gr-formatted-text>
 | 
						|
  </template>
 | 
						|
</test-fixture>
 | 
						|
 | 
						|
<script>
 | 
						|
  suite('gr-formatted-text tests', () => {
 | 
						|
    let element;
 | 
						|
    let sandbox;
 | 
						|
 | 
						|
    function assertBlock(result, index, type, text) {
 | 
						|
      assert.equal(result[index].type, type);
 | 
						|
      assert.equal(result[index].text, text);
 | 
						|
    }
 | 
						|
 | 
						|
    function assertListBlock(result, resultIndex, itemIndex, text) {
 | 
						|
      assert.equal(result[resultIndex].type, 'list');
 | 
						|
      assert.equal(result[resultIndex].items[itemIndex], text);
 | 
						|
    }
 | 
						|
 | 
						|
    setup(() => {
 | 
						|
      element = fixture('basic');
 | 
						|
      sandbox = sinon.sandbox.create();
 | 
						|
    });
 | 
						|
 | 
						|
    teardown(() => {
 | 
						|
      sandbox.restore();
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse null undefined and empty', () => {
 | 
						|
      assert.lengthOf(element._computeBlocks(null), 0);
 | 
						|
      assert.lengthOf(element._computeBlocks(undefined), 0);
 | 
						|
      assert.lengthOf(element._computeBlocks(''), 0);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse simple', () => {
 | 
						|
      const comment = 'Para1';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'paragraph', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse multiline para', () => {
 | 
						|
      const comment = 'Para 1\nStill para 1';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'paragraph', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse para break', () => {
 | 
						|
      const comment = 'Para 1\n\nPara 2\n\nPara 3';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'Para 1');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'Para 2');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'Para 3');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse quote', () => {
 | 
						|
      const comment = '> Quote text';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assert.equal(result[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks, 1);
 | 
						|
      assertBlock(result[0].blocks, 0, 'paragraph', 'Quote text');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse quote lead space', () => {
 | 
						|
      const comment = ' > Quote text';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assert.equal(result[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks, 1);
 | 
						|
      assertBlock(result[0].blocks, 0, 'paragraph', 'Quote text');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse excludes empty', () => {
 | 
						|
      const comment = 'Para 1\n\n\n\nPara 2';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'Para 1');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'Para 2');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse multiline quote', () => {
 | 
						|
      const comment = '> Quote line 1\n> Quote line 2\n > Quote line 3\n';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assert.equal(result[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks, 1);
 | 
						|
      assertBlock(result[0].blocks, 0, 'paragraph',
 | 
						|
          'Quote line 1\nQuote line 2\nQuote line 3\n');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse pre', () => {
 | 
						|
      const comment = '    Four space indent.';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'pre', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse one space pre', () => {
 | 
						|
      const comment = ' One space indent.\n Another line.';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'pre', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse tab pre', () => {
 | 
						|
      const comment = '\tOne tab indent.\n\tAnother line.\n  Yet another!';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'pre', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse intermediate leading whitespace pre', () => {
 | 
						|
      const comment = 'No indent.\n\tNonzero indent.\nNo indent again.';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertBlock(result, 0, 'pre', comment);
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse star list', () => {
 | 
						|
      const comment = '* Item 1\n* Item 2\n* Item 3';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertListBlock(result, 0, 0, 'Item 1');
 | 
						|
      assertListBlock(result, 0, 1, 'Item 2');
 | 
						|
      assertListBlock(result, 0, 2, 'Item 3');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse dash list', () => {
 | 
						|
      const comment = '- Item 1\n- Item 2\n- Item 3';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertListBlock(result, 0, 0, 'Item 1');
 | 
						|
      assertListBlock(result, 0, 1, 'Item 2');
 | 
						|
      assertListBlock(result, 0, 2, 'Item 3');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse mixed list', () => {
 | 
						|
      const comment = '- Item 1\n* Item 2\n- Item 3\n* Item 4';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assertListBlock(result, 0, 0, 'Item 1');
 | 
						|
      assertListBlock(result, 0, 1, 'Item 2');
 | 
						|
      assertListBlock(result, 0, 2, 'Item 3');
 | 
						|
      assertListBlock(result, 0, 3, 'Item 4');
 | 
						|
    });
 | 
						|
 | 
						|
    test('parse mixed block types', () => {
 | 
						|
      const comment = 'Paragraph\nacross\na\nfew\nlines.' +
 | 
						|
          '\n\n' +
 | 
						|
          '> Quote\n> across\n> not many lines.' +
 | 
						|
          '\n\n' +
 | 
						|
          'Another paragraph' +
 | 
						|
          '\n\n' +
 | 
						|
          '* Series\n* of\n* list\n* items' +
 | 
						|
          '\n\n' +
 | 
						|
          'Yet another paragraph' +
 | 
						|
          '\n\n' +
 | 
						|
          '\tPreformatted text.' +
 | 
						|
          '\n\n' +
 | 
						|
          'Parting words.';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 7);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'Paragraph\nacross\na\nfew\nlines.');
 | 
						|
 | 
						|
      assert.equal(result[1].type, 'quote');
 | 
						|
      assert.lengthOf(result[1].blocks, 1);
 | 
						|
      assertBlock(result[1].blocks, 0, 'paragraph',
 | 
						|
          'Quote\nacross\nnot many lines.');
 | 
						|
 | 
						|
      assertBlock(result, 2, 'paragraph', 'Another paragraph');
 | 
						|
      assertListBlock(result, 3, 0, 'Series');
 | 
						|
      assertListBlock(result, 3, 1, 'of');
 | 
						|
      assertListBlock(result, 3, 2, 'list');
 | 
						|
      assertListBlock(result, 3, 3, 'items');
 | 
						|
      assertBlock(result, 4, 'paragraph', 'Yet another paragraph');
 | 
						|
      assertBlock(result, 5, 'pre', '\tPreformatted text.');
 | 
						|
      assertBlock(result, 6, 'paragraph', 'Parting words.');
 | 
						|
    });
 | 
						|
 | 
						|
    test('bullet list 1', () => {
 | 
						|
      const comment = 'A\n\n* line 1\n* 2nd line';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertListBlock(result, 1, 0, 'line 1');
 | 
						|
      assertListBlock(result, 1, 1, '2nd line');
 | 
						|
    });
 | 
						|
 | 
						|
    test('bullet list 2', () => {
 | 
						|
      const comment = 'A\n\n* line 1\n* 2nd line\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertListBlock(result, 1, 0, 'line 1');
 | 
						|
      assertListBlock(result, 1, 1, '2nd line');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('bullet list 3', () => {
 | 
						|
      const comment = '* line 1\n* 2nd line\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertListBlock(result, 0, 0, 'line 1');
 | 
						|
      assertListBlock(result, 0, 1, '2nd line');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('bullet list 4', () => {
 | 
						|
      const comment = 'To see this bug, you have to:\n' +
 | 
						|
          '* Be on IMAP or EAS (not on POP)\n' +
 | 
						|
          '* Be very unlucky\n';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'To see this bug, you have to:');
 | 
						|
      assertListBlock(result, 1, 0, 'Be on IMAP or EAS (not on POP)');
 | 
						|
      assertListBlock(result, 1, 1, 'Be very unlucky');
 | 
						|
    });
 | 
						|
 | 
						|
    test('bullet list 5', () => {
 | 
						|
      const comment = 'To see this bug,\n' +
 | 
						|
          'you have to:\n' +
 | 
						|
          '* Be on IMAP or EAS (not on POP)\n' +
 | 
						|
          '* Be very unlucky\n';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'To see this bug, you have to:');
 | 
						|
      assertListBlock(result, 1, 0, 'Be on IMAP or EAS (not on POP)');
 | 
						|
      assertListBlock(result, 1, 1, 'Be very unlucky');
 | 
						|
    });
 | 
						|
 | 
						|
    test('dash list 1', () => {
 | 
						|
      const comment = 'A\n\n- line 1\n- 2nd line';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertListBlock(result, 1, 0, 'line 1');
 | 
						|
      assertListBlock(result, 1, 1, '2nd line');
 | 
						|
    });
 | 
						|
 | 
						|
    test('dash list 2', () => {
 | 
						|
      const comment = 'A\n\n- line 1\n- 2nd line\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertListBlock(result, 1, 0, 'line 1');
 | 
						|
      assertListBlock(result, 1, 1, '2nd line');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('dash list 3', () => {
 | 
						|
      const comment = '- line 1\n- 2nd line\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertListBlock(result, 0, 0, 'line 1');
 | 
						|
      assertListBlock(result, 0, 1, '2nd line');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('pre format 1', () => {
 | 
						|
      const comment = 'A\n\n  This is pre\n  formatted';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertBlock(result, 1, 'pre', '  This is pre\n  formatted');
 | 
						|
    });
 | 
						|
 | 
						|
    test('pre format 2', () => {
 | 
						|
      const comment = 'A\n\n  This is pre\n  formatted\n\nbut this is not';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertBlock(result, 1, 'pre', '  This is pre\n  formatted');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'but this is not');
 | 
						|
    });
 | 
						|
 | 
						|
    test('pre format 3', () => {
 | 
						|
      const comment = 'A\n\n  Q\n    <R>\n  S\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'A');
 | 
						|
      assertBlock(result, 1, 'pre', '  Q\n    <R>\n  S');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('pre format 4', () => {
 | 
						|
      const comment = '  Q\n    <R>\n  S\n\nB';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assertBlock(result, 0, 'pre', '  Q\n    <R>\n  S');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'B');
 | 
						|
    });
 | 
						|
 | 
						|
    test('quote 1', () => {
 | 
						|
      const comment = '> I\'m happy\n > with quotes!\n\nSee above.';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 2);
 | 
						|
      assert.equal(result[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks, 1);
 | 
						|
      assertBlock(result[0].blocks, 0, 'paragraph', 'I\'m happy\nwith quotes!');
 | 
						|
      assertBlock(result, 1, 'paragraph', 'See above.');
 | 
						|
    });
 | 
						|
 | 
						|
    test('quote 2', () => {
 | 
						|
      const comment = 'See this said:\n\n > a quoted\n > string block\n\nOK?';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 3);
 | 
						|
      assertBlock(result, 0, 'paragraph', 'See this said:');
 | 
						|
      assert.equal(result[1].type, 'quote');
 | 
						|
      assert.lengthOf(result[1].blocks, 1);
 | 
						|
      assertBlock(result[1].blocks, 0, 'paragraph', 'a quoted\nstring block');
 | 
						|
      assertBlock(result, 2, 'paragraph', 'OK?');
 | 
						|
    });
 | 
						|
 | 
						|
    test('nested quotes', () => {
 | 
						|
      const comment = ' > > prior\n > \n > next\n';
 | 
						|
      const result = element._computeBlocks(comment);
 | 
						|
      assert.lengthOf(result, 1);
 | 
						|
      assert.equal(result[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks, 2);
 | 
						|
      assert.equal(result[0].blocks[0].type, 'quote');
 | 
						|
      assert.lengthOf(result[0].blocks[0].blocks, 1);
 | 
						|
      assertBlock(result[0].blocks[0].blocks, 0, 'paragraph', 'prior');
 | 
						|
      assertBlock(result[0].blocks, 1, 'paragraph', 'next\n');
 | 
						|
    });
 | 
						|
 | 
						|
    test('getTextContent', () => {
 | 
						|
      const comment = 'Paragraph\n\n  pre\n\n* List\n* Of\n* Items\n\n> Quote';
 | 
						|
      element.content = comment;
 | 
						|
      const result = element.getTextContent();
 | 
						|
      const expected = 'Paragraph\n\n  pre\n\nList\nOf\nItems\n\nQuote';
 | 
						|
      assert.equal(result, expected);
 | 
						|
    });
 | 
						|
 | 
						|
    test('_computeNodes called without config', () => {
 | 
						|
      const computeNodesSpy = sandbox.spy(element, '_computeNodes');
 | 
						|
      element.content = 'some text';
 | 
						|
      assert.isTrue(computeNodesSpy.called);
 | 
						|
    });
 | 
						|
 | 
						|
    test('_contentOrConfigChanged called with config', () => {
 | 
						|
      const contentStub = sandbox.stub(element, '_contentChanged');
 | 
						|
      const contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
 | 
						|
      element.content = 'some text';
 | 
						|
      element.config = {};
 | 
						|
      assert.isTrue(contentStub.called);
 | 
						|
      assert.isTrue(contentConfigStub.called);
 | 
						|
    });
 | 
						|
  });
 | 
						|
</script>
 |