
As of M80(chrome version >= 80), chrome removed the native htmlImports support, tho we have the polyfill from webcomponents, the loading of html changed from sync to async which cause a lot test to fail in M80. The fix is introducing a util method `readyToTest` which wait until htmlImports finished before running any tests. Updated some tests to have only one top suite per test so we only need one `readyToTest` and also multiple `readyToTest` actually affect tests' stub functionality. Tested locally with `npm run test` on all passed tests and also with manual failure to make sure the updated tests can still catch any errors if have. Bug: Issue 12294 Change-Id: Ib0c464f8ff9f36a401e6c3b249e6bb6d68ee6e2f
208 lines
7.4 KiB
HTML
208 lines
7.4 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>GrDiffBuilderUnified</title>
|
|
|
|
<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>
|
|
<script src="../../../test/test-pre-setup.js"></script>
|
|
<link rel="import" href="../../../test/common-test-setup.html"/>
|
|
<script src="../../../scripts/util.js"></script>
|
|
<script src="../gr-diff/gr-diff-line.js"></script>
|
|
<script src="../gr-diff/gr-diff-group.js"></script>
|
|
<script src="../gr-diff-highlight/gr-annotation.js"></script>
|
|
<script src="gr-diff-builder.js"></script>
|
|
<script src="gr-diff-builder-unified.js"></script>
|
|
|
|
<script>void(0);</script>
|
|
|
|
<script>
|
|
suite('GrDiffBuilderUnified tests', async () => {
|
|
await readyToTest();
|
|
let prefs;
|
|
let outputEl;
|
|
let diffBuilder;
|
|
|
|
setup(()=> {
|
|
prefs = {
|
|
line_length: 10,
|
|
show_tabs: true,
|
|
tab_size: 4,
|
|
};
|
|
outputEl = document.createElement('div');
|
|
diffBuilder = new GrDiffBuilderUnified({}, prefs, outputEl, []);
|
|
});
|
|
|
|
suite('buildSectionElement for BOTH group', () => {
|
|
let lines;
|
|
let group;
|
|
|
|
setup(() => {
|
|
lines = [
|
|
new GrDiffLine(GrDiffLine.Type.BOTH, 1, 2),
|
|
new GrDiffLine(GrDiffLine.Type.BOTH, 2, 3),
|
|
new GrDiffLine(GrDiffLine.Type.BOTH, 3, 4),
|
|
];
|
|
lines[0].text = 'def hello_world():';
|
|
lines[1].text = ' print "Hello World";';
|
|
lines[2].text = ' return True';
|
|
|
|
group = new GrDiffGroup(GrDiffGroup.Type.BOTH, lines);
|
|
});
|
|
|
|
test('creates the section', () => {
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
assert.isTrue(sectionEl.classList.contains('section'));
|
|
assert.isTrue(sectionEl.classList.contains('both'));
|
|
});
|
|
|
|
test('creates each unchanged row once', () => {
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
const rowEls = sectionEl.querySelectorAll('.diff-row');
|
|
|
|
assert.equal(rowEls.length, 3);
|
|
|
|
assert.equal(
|
|
rowEls[0].querySelector('.lineNum.left').textContent,
|
|
lines[0].beforeNumber);
|
|
assert.equal(
|
|
rowEls[0].querySelector('.lineNum.right').textContent,
|
|
lines[0].afterNumber);
|
|
assert.equal(
|
|
rowEls[0].querySelector('.content').textContent, lines[0].text);
|
|
|
|
assert.equal(
|
|
rowEls[1].querySelector('.lineNum.left').textContent,
|
|
lines[1].beforeNumber);
|
|
assert.equal(
|
|
rowEls[1].querySelector('.lineNum.right').textContent,
|
|
lines[1].afterNumber);
|
|
assert.equal(
|
|
rowEls[1].querySelector('.content').textContent, lines[1].text);
|
|
|
|
assert.equal(
|
|
rowEls[2].querySelector('.lineNum.left').textContent,
|
|
lines[2].beforeNumber);
|
|
assert.equal(
|
|
rowEls[2].querySelector('.lineNum.right').textContent,
|
|
lines[2].afterNumber);
|
|
assert.equal(
|
|
rowEls[2].querySelector('.content').textContent, lines[2].text);
|
|
});
|
|
});
|
|
|
|
suite('buildSectionElement for DELTA group', () => {
|
|
let lines;
|
|
let group;
|
|
|
|
setup(() => {
|
|
lines = [
|
|
new GrDiffLine(GrDiffLine.Type.REMOVE, 1),
|
|
new GrDiffLine(GrDiffLine.Type.REMOVE, 2),
|
|
new GrDiffLine(GrDiffLine.Type.ADD, 2),
|
|
new GrDiffLine(GrDiffLine.Type.ADD, 3),
|
|
];
|
|
lines[0].text = 'def hello_world():';
|
|
lines[1].text = ' print "Hello World"';
|
|
lines[2].text = 'def hello_universe()';
|
|
lines[3].text = ' print "Hello Universe"';
|
|
|
|
group = new GrDiffGroup(GrDiffGroup.Type.DELTA, lines);
|
|
});
|
|
|
|
test('creates the section', () => {
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
assert.isTrue(sectionEl.classList.contains('section'));
|
|
assert.isTrue(sectionEl.classList.contains('delta'));
|
|
});
|
|
|
|
test('creates the section with class if ignoredWhitespaceOnly', () => {
|
|
group.ignoredWhitespaceOnly = true;
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
assert.isTrue(sectionEl.classList.contains('ignoredWhitespaceOnly'));
|
|
});
|
|
|
|
test('creates the section with class if dueToRebase', () => {
|
|
group.dueToRebase = true;
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
assert.isTrue(sectionEl.classList.contains('dueToRebase'));
|
|
});
|
|
|
|
test('creates first the removed and then the added rows', () => {
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
const rowEls = sectionEl.querySelectorAll('.diff-row');
|
|
|
|
assert.equal(rowEls.length, 4);
|
|
|
|
assert.equal(
|
|
rowEls[0].querySelector('.lineNum.left').textContent,
|
|
lines[0].beforeNumber);
|
|
assert.isNotOk(rowEls[0].querySelector('.lineNum.right'));
|
|
assert.equal(
|
|
rowEls[0].querySelector('.content').textContent, lines[0].text);
|
|
|
|
assert.equal(
|
|
rowEls[1].querySelector('.lineNum.left').textContent,
|
|
lines[1].beforeNumber);
|
|
assert.isNotOk(rowEls[1].querySelector('.lineNum.right'));
|
|
assert.equal(
|
|
rowEls[1].querySelector('.content').textContent, lines[1].text);
|
|
|
|
assert.isNotOk(rowEls[2].querySelector('.lineNum.left'));
|
|
assert.equal(
|
|
rowEls[2].querySelector('.lineNum.right').textContent,
|
|
lines[2].afterNumber);
|
|
assert.equal(
|
|
rowEls[2].querySelector('.content').textContent, lines[2].text);
|
|
|
|
assert.isNotOk(rowEls[3].querySelector('.lineNum.left'));
|
|
assert.equal(
|
|
rowEls[3].querySelector('.lineNum.right').textContent,
|
|
lines[3].afterNumber);
|
|
assert.equal(
|
|
rowEls[3].querySelector('.content').textContent, lines[3].text);
|
|
});
|
|
|
|
test('creates only the added rows if only ignored whitespace', () => {
|
|
group.ignoredWhitespaceOnly = true;
|
|
const sectionEl = diffBuilder.buildSectionElement(group);
|
|
const rowEls = sectionEl.querySelectorAll('.diff-row');
|
|
|
|
assert.equal(rowEls.length, 2);
|
|
|
|
assert.isNotOk(rowEls[0].querySelector('.lineNum.left'));
|
|
assert.equal(
|
|
rowEls[0].querySelector('.lineNum.right').textContent,
|
|
lines[2].afterNumber);
|
|
assert.equal(
|
|
rowEls[0].querySelector('.content').textContent, lines[2].text);
|
|
|
|
assert.isNotOk(rowEls[1].querySelector('.lineNum.left'));
|
|
assert.equal(
|
|
rowEls[1].querySelector('.lineNum.right').textContent,
|
|
lines[3].afterNumber);
|
|
assert.equal(
|
|
rowEls[1].querySelector('.content').textContent, lines[3].text);
|
|
});
|
|
});
|
|
});
|
|
</script>
|