Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: test/codegen/lib/html/documentfragment_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: ptal Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/codegen/lib/html/document_test.dart ('k') | test/codegen/lib/html/dom_constructors_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/lib/html/documentfragment_test.dart
diff --git a/test/codegen/lib/html/documentfragment_test.dart b/test/codegen/lib/html/documentfragment_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b09c04d6f08ef53432631096bc1d55416188dd63
--- /dev/null
+++ b/test/codegen/lib/html/documentfragment_test.dart
@@ -0,0 +1,180 @@
+// 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.
+
+library DocumentFragmentTest;
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'util.dart';
+import 'dart:html';
+
+main() {
+ useHtmlConfiguration();
+
+ var isAnchorElement =
+ predicate((x) => x is AnchorElement, 'is an AnchorElement');
+
+ List<String> _nodeStrings(Iterable<Node> input) {
+ var out = new List<String>();
+ for (Node n in input) {
+ if (n is Element) {
+ Element e = n;
+ out.add(e.tagName);
+ } else {
+ out.add(n.text);
+ }
+ }
+ return out;
+ };
+
+ assertConstError(void fn()) {
+ try {
+ fn();
+ } catch (e) {
+ if (e is UnsupportedError) {
+ return;
+ }
+ }
+ expect(true, isFalse, reason: 'Expected immutability error');
+ };
+
+ void expectEmptyStyleDeclaration(CssStyleDeclaration style) {
+ expect(style.cssText, equals(''));
+ expect(style.getPropertyPriority('color'), equals(''));
+ expect(style.item(0), equals(''));
+ expect(style.length, isZero);
+ // 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', () {
+ var fragment;
+ var 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),
+ orderedEquals(["1", "A", "B", "2", "I", "3", "U"]));
+ expect(_nodeStrings(children),
+ orderedEquals(["A", "B", "I", "U"]));
+ });
+
+ test('only indexes children, not other nodes', () {
+ init();
+ children[1] = new Element.tag("BR");
+ expect(_nodeStrings(fragment.nodes),
+ orderedEquals(["1", "A", "BR", "2", "I", "3", "U"]));
+ expect(_nodeStrings(children),
+ orderedEquals(["A", "BR", "I", "U"]));
+ });
+
+ test('adds to both children and nodes', () {
+ init();
+ children.add(new Element.tag("UL"));
+ expect(_nodeStrings(fragment.nodes),
+ orderedEquals(["1", "A", "B", "2", "I", "3", "U", "UL"]));
+ expect(_nodeStrings(children),
+ orderedEquals(["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),
+ orderedEquals(["1", "A", "B", "2", "I", "3"]));
+ expect(_nodeStrings(children),
+ orderedEquals(["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.query(".foo a").tagName, "A");
+ expect(_nodeStrings(fragment.queryAll(".foo *")), equals(["A", "B"]));
+ });
+}
« no previous file with comments | « test/codegen/lib/html/document_test.dart ('k') | test/codegen/lib/html/dom_constructors_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698