
This reverts commit 0895052c01
.
Reason for revert: issue 6387
Change-Id: I14e00addeab53606952aa3ea2d45a74eac7a9d8a
384 lines
14 KiB
HTML
384 lines
14 KiB
HTML
<!DOCTYPE html>
|
|
<!--
|
|
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="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
|
|
|
<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('_contentOrConfigChanged not called without config', () => {
|
|
const contentStub = sandbox.stub(element, '_contentChanged');
|
|
const contentConfigStub = sandbox.stub(element, '_contentOrConfigChanged');
|
|
element.content = 'some text';
|
|
assert.isTrue(contentStub.called);
|
|
assert.isFalse(contentConfigStub.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>
|