4cc31f8f4f
There are no behavioral changes here, I just ran `dart format` on the `tests/lib/html/` directory. Change-Id: I221b2a370adc393e49621db1d37aa6eeb09b3015 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/425329 Reviewed-by: Srujan Gaddam <srujzs@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Commit-Queue: Bob Nystrom <rnystrom@google.com>
182 lines
5.7 KiB
Dart
182 lines
5.7 KiB
Dart
// Copyright (c) 2011, 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.
|
|
|
|
import 'dart:html';
|
|
|
|
import 'package:expect/legacy/minitest.dart'; // ignore: deprecated_member_use_from_same_package
|
|
|
|
import 'utils.dart';
|
|
|
|
main() {
|
|
var isAnchorElement = predicate(
|
|
(x) => x is AnchorElement,
|
|
'is an AnchorElement',
|
|
);
|
|
|
|
List<String> _nodeStrings(Iterable<Node> input) {
|
|
List<String> out = [];
|
|
for (Node n in input) {
|
|
if (n is Element) {
|
|
Element e = n;
|
|
out.add(e.tagName);
|
|
} else {
|
|
out.add(n.text!);
|
|
}
|
|
}
|
|
return out;
|
|
}
|
|
|
|
void expectEmptyStyleDeclaration(CssStyleDeclaration style) {
|
|
expect(style.cssText, equals(''));
|
|
expect(style.getPropertyPriority('color'), equals(''));
|
|
expect(style.item(0), equals(''));
|
|
expect(style.length, equals(0));
|
|
// TODO(jacobr): these checks throw UnimplementedErrors in dartium.
|
|
// expect(style.parentRule, isNull);
|
|
// expect(style.getPropertyCssValue('color'), isNull);
|
|
// expect(style.getPropertyShorthand('color'), isNull);
|
|
// expect(style.isPropertyImplicit('color'), isFalse);
|
|
|
|
// Ideally these would throw errors, but it's not possible to create a class
|
|
// that'll intercept these calls without implementing the entire
|
|
// CssStyleDeclaration interface, so we'll settle for them being no-ops.
|
|
style.cssText = '* {color: blue}';
|
|
style.removeProperty('color');
|
|
style.setProperty('color', 'blue');
|
|
}
|
|
|
|
group('constructors', () {
|
|
test('0-argument makes an empty fragment', () {
|
|
final fragment = new DocumentFragment();
|
|
expect(fragment.children, equals([]));
|
|
});
|
|
|
|
test('.html parses input as HTML', () {
|
|
final fragment = new DocumentFragment.html('<a>foo</a>');
|
|
expect(fragment.children[0], isAnchorElement);
|
|
});
|
|
|
|
// test('.svg parses input as SVG', () {
|
|
// final fragment = new DocumentFragment.svg('<a>foo</a>');
|
|
// expect(fragment.children[0] is SVGAElement, isTrue);
|
|
// });
|
|
|
|
// TODO(nweiz): enable this once XML is ported.
|
|
// test('.xml parses input as XML', () {
|
|
// final fragment = new DocumentFragment.xml('<a>foo</a>');
|
|
// expect(fragment.children[0] is XMLElement, isTrue);
|
|
// });
|
|
});
|
|
|
|
group('children', () {
|
|
late DocumentFragment fragment;
|
|
late List<Element> children;
|
|
|
|
init() {
|
|
fragment = new DocumentFragment();
|
|
children = fragment.children;
|
|
fragment.nodes.addAll([
|
|
new Text("1"),
|
|
new Element.tag("A"),
|
|
new Element.tag("B"),
|
|
new Text("2"),
|
|
new Element.tag("I"),
|
|
new Text("3"),
|
|
new Element.tag("U"),
|
|
]);
|
|
}
|
|
|
|
test('is initially empty', () {
|
|
children = new DocumentFragment().children;
|
|
expect(children, equals([]));
|
|
expect(children.isEmpty, isTrue);
|
|
});
|
|
|
|
test('filters out non-element nodes', () {
|
|
init();
|
|
expect(
|
|
_nodeStrings(fragment.nodes),
|
|
equals(["1", "A", "B", "2", "I", "3", "U"]),
|
|
);
|
|
expect(_nodeStrings(children), equals(["A", "B", "I", "U"]));
|
|
});
|
|
|
|
test('only indexes children, not other nodes', () {
|
|
init();
|
|
children[1] = new Element.tag("BR");
|
|
expect(
|
|
_nodeStrings(fragment.nodes),
|
|
equals(["1", "A", "BR", "2", "I", "3", "U"]),
|
|
);
|
|
expect(_nodeStrings(children), equals(["A", "BR", "I", "U"]));
|
|
});
|
|
|
|
test('adds to both children and nodes', () {
|
|
init();
|
|
children.add(new Element.tag("UL"));
|
|
expect(
|
|
_nodeStrings(fragment.nodes),
|
|
equals(["1", "A", "B", "2", "I", "3", "U", "UL"]),
|
|
);
|
|
expect(_nodeStrings(children), equals(["A", "B", "I", "U", "UL"]));
|
|
});
|
|
|
|
test('removes only children, from both children and nodes', () {
|
|
init();
|
|
expect(children.removeLast().tagName, equals('U'));
|
|
expect(
|
|
_nodeStrings(fragment.nodes),
|
|
equals(["1", "A", "B", "2", "I", "3"]),
|
|
);
|
|
expect(_nodeStrings(children), equals(["A", "B", "I"]));
|
|
|
|
expect(children.removeLast().tagName, "I");
|
|
expect(_nodeStrings(fragment.nodes), equals(["1", "A", "B", "2", "3"]));
|
|
expect(_nodeStrings(children), equals(["A", "B"]));
|
|
});
|
|
|
|
test('accessors are wrapped', () {
|
|
init();
|
|
expect(children[0].tagName, "A");
|
|
expect(_nodeStrings(children.where((e) => e.tagName == "I")), ["I"]);
|
|
expect(children.every((e) => e is Element), isTrue);
|
|
expect(children.any((e) => e.tagName == "U"), isTrue);
|
|
expect(children.isEmpty, isFalse);
|
|
expect(children.length, 4);
|
|
expect(children[2].tagName, "I");
|
|
expect(children.last.tagName, "U");
|
|
});
|
|
|
|
test('setting children overwrites nodes as well', () {
|
|
init();
|
|
fragment.children = [new Element.tag("DIV"), new Element.tag("HEAD")];
|
|
expect(_nodeStrings(fragment.nodes), equals(["DIV", "HEAD"]));
|
|
});
|
|
});
|
|
|
|
test('setting innerHtml works', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.append(new Text("foo"));
|
|
fragment.innerHtml = "<a>bar</a>baz";
|
|
expect(_nodeStrings(fragment.nodes), equals(["A", "baz"]));
|
|
});
|
|
|
|
test('getting innerHtml works', () {
|
|
var fragment = new DocumentFragment();
|
|
fragment.nodes.addAll([new Text("foo"), new Element.html("<A>bar</A>")]);
|
|
expect(fragment.innerHtml, "foo<a>bar</a>");
|
|
});
|
|
|
|
test('query searches the fragment', () {
|
|
var fragment = new DocumentFragment.html(
|
|
"<div class='foo'><a>foo</a><b>bar</b></div>",
|
|
);
|
|
expect(fragment.querySelector(".foo a")!.tagName, "A");
|
|
expect(
|
|
_nodeStrings(fragment.querySelectorAll<Element>(".foo *")),
|
|
equals(["A", "B"]),
|
|
);
|
|
});
|
|
}
|