2dcd56ef43
There are far too many files here to review everyone carefully. Spot checking most of the diffs look good as test code is generally written with less care than application code so lots of ugly formatting get through. If people notice files where the automated formatting bothers them feel free to comment indicating file names and I'll move spaces within comments to make the formatting cleaner and use comments to force block formatting as I have done for other case where formatting looked bad. BUG= R=efortuna@google.com Review-Url: https://codereview.chromium.org/2771453003 .
271 lines
8.1 KiB
Dart
271 lines
8.1 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file
|
|
|
|
library ElementAddTest;
|
|
|
|
import 'package:unittest/unittest.dart';
|
|
import 'package:unittest/html_config.dart';
|
|
import 'util.dart';
|
|
import 'dart:html';
|
|
|
|
main() {
|
|
useHtmlConfiguration();
|
|
|
|
var isSpanElement = predicate((x) => x is SpanElement, 'is a SpanElemt');
|
|
var isDivElement = predicate((x) => x is DivElement, 'is a DivElement');
|
|
var isText = predicate((x) => x is Text, 'is a Text');
|
|
|
|
void expectNoSuchMethod(void fn()) => expect(fn, throwsNoSuchMethodError);
|
|
|
|
group('append', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.append(new SpanElement());
|
|
expect(el.children.length, equals(1));
|
|
var span = el.children[0];
|
|
expect(span, isSpanElement);
|
|
|
|
el.append(new DivElement());
|
|
expect(el.children.length, equals(2));
|
|
// Validate that the first item is still first.
|
|
expect(el.children[0], equals(span));
|
|
expect(el.children[1], isDivElement);
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.append(new SpanElement());
|
|
expect(fragment.children.length, equals(1));
|
|
expect(fragment.children[0], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('appendHtml', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.appendHtml('<span></span>');
|
|
expect(el.children.length, equals(1));
|
|
var span = el.children[0];
|
|
expect(span, isSpanElement);
|
|
|
|
el.appendHtml('<div></div>');
|
|
expect(el.children.length, equals(2));
|
|
// Validate that the first item is still first.
|
|
expect(el.children[0], equals(span));
|
|
expect(el.children[1], isDivElement);
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.appendHtml('<span>something</span>');
|
|
expect(fragment.children.length, equals(1));
|
|
expect(fragment.children[0], isSpanElement);
|
|
});
|
|
|
|
test('html interpreted in correct context', () {
|
|
// appendHtml, in order to sanitize, needs to create a document fragment,
|
|
// but it needs to be created in the right context. If we try to append
|
|
// table components then the document fragment needs the table context
|
|
// or it will fail to create them.
|
|
var el = new TableElement();
|
|
el.appendHtml('<tr><td>foo</td></tr>');
|
|
expect(el.children.length, 1);
|
|
var section = el.children.first;
|
|
expect(section is TableSectionElement, isTrue);
|
|
var row = section.children.first;
|
|
expect(row is TableRowElement, isTrue);
|
|
var item = row.children.first;
|
|
expect(item is TableCellElement, isTrue);
|
|
expect(item.innerHtml, 'foo');
|
|
});
|
|
|
|
test("use body context for elements that are don't support it", () {
|
|
// Some elements can't be used as context for createContextualFragment,
|
|
// often because it doesn't make any sense. So adding children to a
|
|
// <br> has no real effect on the page, but we can do it. But the
|
|
// document fragment will have to be created in the body context. Verify
|
|
// that this doesn't throw and that the children show up.
|
|
var el = new BRElement();
|
|
el.appendHtml("<p>Stuff</p>");
|
|
expect(el.children.length, 1);
|
|
expect(el.children[0].outerHtml, "<p>Stuff</p>");
|
|
});
|
|
});
|
|
|
|
group('appendText', () {
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
el.appendText('foo');
|
|
// No children were created.
|
|
expect(el.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(el.nodes.length, equals(1));
|
|
});
|
|
|
|
test('htmlelement', () {
|
|
var el = new DivElement();
|
|
var twoNewLines = "\n\n";
|
|
el.appendText(twoNewLines);
|
|
// No children were created.
|
|
expect(el.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(el.nodes.length, equals(1));
|
|
expect(el.nodes[0], isText);
|
|
expect(el.nodes[0].text, equals(twoNewLines));
|
|
expect(el.text, equals(twoNewLines));
|
|
});
|
|
|
|
test('documentFragment', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.appendText('foo');
|
|
// No children were created.
|
|
expect(fragment.children.length, equals(0));
|
|
// One text node was added.
|
|
expect(fragment.nodes.length, equals(1));
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentElement', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentElement('beforebegin', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentElement('afterend', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentElement('afterbegin', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
var newChild = new SpanElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentElement('beforeend', newChild);
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentHtml', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentHtml('beforebegin', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentHtml('afterend', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentHtml('afterbegin', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[0], isSpanElement);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentHtml('beforeend', '<span></span>');
|
|
|
|
expect(parent.children.length, 2);
|
|
expect(parent.children[1], isSpanElement);
|
|
});
|
|
});
|
|
|
|
group('insertAdjacentText', () {
|
|
test('beforebegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentText('beforebegin', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[0], isText);
|
|
});
|
|
|
|
test('afterend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
child.insertAdjacentText('afterend', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[1], isText);
|
|
});
|
|
|
|
test('afterbegin', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentText('afterbegin', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[0], isText);
|
|
});
|
|
|
|
test('beforeend', () {
|
|
var parent = new DivElement();
|
|
var child = new DivElement();
|
|
parent.children.add(child);
|
|
|
|
parent.insertAdjacentText('beforeend', 'test');
|
|
|
|
expect(parent.nodes.length, 2);
|
|
expect(parent.nodes[1], isText);
|
|
});
|
|
});
|
|
}
|