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

Unified Diff: client/tests/client/html/DocumentFragmentTests.dart

Issue 8355019: Make DocumentFragment implement Element. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 9 years, 2 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 | « client/tests/client/client.status ('k') | client/tests/client/html/html_tests.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/tests/client/html/DocumentFragmentTests.dart
diff --git a/client/tests/client/html/DocumentFragmentTests.dart b/client/tests/client/html/DocumentFragmentTests.dart
new file mode 100644
index 0000000000000000000000000000000000000000..f5832dd53bae25479401790ed62d1d2ca800a1e0
--- /dev/null
+++ b/client/tests/client/html/DocumentFragmentTests.dart
@@ -0,0 +1,280 @@
+// 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.
+
+class DocumentFragmentTests extends UnitTestSuite {
+ DocumentFragmentTests(): super();
+
+ static void main() {
+ new DocumentFragmentTests().run();
+ }
+
+ void setUpTestSuite() {
+ addTest(testUnsupportedOperations);
+ addTest(testElements);
+ addTest(testSetInnerHtml);
+ addTest(testGetInnerHtml);
+ addTest(testInsertAdjacentElement);
+ addTest(testInsertAdjacentText);
+ addTest(testInsertAdjacentHtml);
+ addTest(testNoOps);
+ addTest(testDefaultValues);
+ addTest(testStyle);
+ addTest(testBoundingClientRect);
+ addTest(testConstFields);
+ addTest(testQuery);
+ }
+
+ void testUnsupportedOperations() {
+ var emptyFragment = new DocumentFragment();
+ assertUnsupported(() => emptyFragment.attributes = {});
+ assertUnsupported(() => emptyFragment.classes = []);
+ assertUnsupported(() => emptyFragment.dataAttributes = {});
+ assertUnsupported(() => emptyFragment.contentEditable = "true");
+ assertUnsupported(() => emptyFragment.dir);
+ assertUnsupported(() => emptyFragment.dir = "ltr");
+ assertUnsupported(() => emptyFragment.draggable = true);
+ assertUnsupported(() => emptyFragment.hidden = true);
+ assertUnsupported(() => emptyFragment.id = "foo");
+ assertUnsupported(() => emptyFragment.lang);
+ assertUnsupported(() => emptyFragment.lang = "en");
+ assertUnsupported(() => emptyFragment.scrollLeft = 10);
+ assertUnsupported(() => emptyFragment.scrollTop = 10);
+ assertUnsupported(() => emptyFragment.spellcheck = true);
+ assertUnsupported(() => emptyFragment.tabIndex = 5);
+ assertUnsupported(() => emptyFragment.title = "foo");
+ assertUnsupported(() => emptyFragment.webkitdropzone = "foo");
+ }
+
+ void testElements() {
+ var fragment = new DocumentFragment();
+ var elements = fragment.elements;
+ Expect.listEquals([], elements);
+ Expect.isTrue(elements.isEmpty());
+
+ 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")]);
+ Expect.listEquals(["1", "A", "B", "2", "I", "3", "U"],
+ _nodeStrings(fragment.nodes));
+ Expect.listEquals(["A", "B", "I", "U"], _nodeStrings(elements));
+
+ elements[1] = new Element.tag("BR");
+ Expect.listEquals(["1", "A", "BR", "2", "I", "3", "U"],
+ _nodeStrings(fragment.nodes));
+ Expect.listEquals(["A", "BR", "I", "U"], _nodeStrings(elements));
+
+ elements.add(new Element.tag("UL"));
+ Expect.listEquals(["1", "A", "BR", "2", "I", "3", "U", "UL"],
+ _nodeStrings(fragment.nodes));
+ Expect.listEquals(["A", "BR", "I", "U", "UL"], _nodeStrings(elements));
+
+ Expect.equals("UL", elements.removeLast().tagName);
+ Expect.listEquals(["1", "A", "BR", "2", "I", "3", "U"],
+ _nodeStrings(fragment.nodes));
+ Expect.listEquals(["A", "BR", "I", "U"], _nodeStrings(elements));
+
+ Expect.equals("A", elements.first.tagName);
+ Expect.listEquals(
+ ["I"], _nodeStrings(elements.filter((e) => e.tagName == "I")));
+ Expect.isTrue(elements.every((e) => e is Element));
+ Expect.isTrue(elements.some((e) => e.tagName == "U"));
+ Expect.isFalse(elements.isEmpty());
+ Expect.equals(4, elements.length);
+ Expect.equals("I", elements[2].tagName);
+ Expect.equals("U", elements.last().tagName);
+
+ fragment.elements = [new Element.tag("DIV"), new Element.tag("HEAD")];
+ Expect.listEquals(["DIV", "HEAD"], _nodeStrings(fragment.nodes));
+ }
+
+ void testSetInnerHtml() {
+ var fragment = new DocumentFragment();
+ fragment.nodes.add(new Text("foo"));
+ fragment.innerHTML = "<a>bar</a>baz";
+ Expect.listEquals(["A", "baz"], _nodeStrings(fragment.nodes));
+ }
+
+ void testGetInnerHtml() {
+ var fragment = new DocumentFragment();
+ fragment.nodes.addAll([new Text("foo"), new Element.html("<A>bar</A>")]);
+ Expect.equals("foo<a>bar</a>", fragment.innerHTML);
+ Expect.equals("foo<a>bar</a>", fragment.outerHTML);
+ }
+
+ void testInsertAdjacentElement() {
+ var fragment = new DocumentFragment.html("<a>foo</a>");
+
+ Expect.isNull(
+ fragment.insertAdjacentElement("beforeBegin", new Element.tag("b")));
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ Expect.isNull(
+ fragment.insertAdjacentElement("afterEnd", new Element.tag("b")));
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ var el = new Element.tag("b");
+ Expect.equals(el, fragment.insertAdjacentElement("afterBegin", el));
+ Expect.equals("<b></b><a>foo</a>", fragment.innerHTML);
+
+ el = new Element.tag("u");
+ Expect.equals(el, fragment.insertAdjacentElement("beforeEnd", el));
+ Expect.equals("<b></b><a>foo</a><u></u>", fragment.innerHTML);
+ }
+
+ void testInsertAdjacentText() {
+ var fragment = new DocumentFragment.html("<a>foo</a>");
+
+ fragment.insertAdjacentText("beforeBegin", "bar");
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentText("afterEnd", "bar");
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentText("afterBegin", "bar");
+ Expect.equals("bar<a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentText("beforeEnd", "baz");
+ Expect.equals("bar<a>foo</a>baz", fragment.innerHTML);
+ }
+
+ void testInsertAdjacentHtml() {
+ var fragment = new DocumentFragment.html("<a>foo</a>");
+
+ fragment.insertAdjacentHTML("beforeBegin", "bar<br>");
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentHTML("afterEnd", "bar<br>");
+ Expect.equals("<a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentHTML("afterBegin", "bar<br>");
+ Expect.equals("bar<br><a>foo</a>", fragment.innerHTML);
+
+ fragment.insertAdjacentHTML("beforeEnd", "<hr>baz");
+ Expect.equals("bar<br><a>foo</a><hr>baz", fragment.innerHTML);
+ }
+
+ // Just test that these methods don't throw errors
+ void testNoOps() {
+ var fragment = new DocumentFragment();
+ fragment.on.click.add((e) => null);
+ fragment.blur();
+ fragment.focus();
+ fragment.scrollByLines(2);
+ fragment.scrollByPages(2);
+ fragment.scrollIntoView();
+ }
+
+ void testDefaultValues() {
+ var fragment = new DocumentFragment();
+ Expect.equals(0, fragment.clientHeight);
+ Expect.equals(0, fragment.clientWidth);
+ Expect.equals(0, fragment.offsetHeight);
+ Expect.equals(0, fragment.offsetWidth);
+ Expect.equals(0, fragment.scrollHeight);
+ Expect.equals(0, fragment.scrollWidth);
+ Expect.equals(0, fragment.clientLeft);
+ Expect.equals(0, fragment.clientTop);
+ Expect.equals(0, fragment.offsetLeft);
+ Expect.equals(0, fragment.offsetTop);
+ Expect.equals(0, fragment.scrollLeft);
+ Expect.equals(0, fragment.scrollTop);
+ Expect.equals("false", fragment.contentEditable);
+ Expect.equals(-1, fragment.tabIndex);
+ Expect.equals("", fragment.id);
+ Expect.equals("", fragment.title);
+ Expect.equals("", fragment.tagName);
+ Expect.equals("", fragment.webkitdropzone);
+ Expect.isFalse(fragment.isContentEditable);
+ Expect.isFalse(fragment.draggable);
+ Expect.isFalse(fragment.hidden);
+ Expect.isFalse(fragment.spellcheck);
+ Expect.isNull(fragment.nextElementSibling);
+ Expect.isNull(fragment.previousElementSibling);
+ Expect.isNull(fragment.offsetParent);
+ Expect.isNull(fragment.parent);
+ Expect.isTrue(fragment.attributes.isEmpty());
+ Expect.isTrue(fragment.classes.isEmpty());
+ Expect.isTrue(fragment.dataAttributes.isEmpty());
+ Expect.isTrue(fragment.getClientRects().isEmpty());
+ Expect.isFalse(fragment.matchesSelector("foo"));
+ Expect.isFalse(fragment.matchesSelector("*"));
+ }
+
+ void testStyle() {
+ var fragment = new DocumentFragment();
+ var style = fragment.style;
+ Expect.equals("", style.cssText);
+ Expect.equals("", style.getPropertyPriority('color'));
+ Expect.equals("", style.item(0));
+ Expect.equals(0, style.length);
+ Expect.isNull(style.parentRule);
+ Expect.isNull(style.getPropertyCSSValue('color'));
+ Expect.isNull(style.getPropertyShorthand('color'));
+ Expect.isFalse(style.isPropertyImplicit('color'));
+ assertUnsupported(() => style.cssText = '* {color: blue}');
+ assertUnsupported(() => style.removeProperty('color'));
+ assertUnsupported(() => style.setProperty('color', 'blue'));
+ }
+
+ void testBoundingClientRect() {
+ var fragment = new DocumentFragment();
+ var rect = fragment.getBoundingClientRect();
+ Expect.equals(0, rect.bottom);
+ Expect.equals(0, rect.top);
+ Expect.equals(0, rect.left);
+ Expect.equals(0, rect.right);
+ Expect.equals(0, rect.height);
+ Expect.equals(0, rect.width);
+ }
+
+ void testConstFields() {
+ var fragment = new DocumentFragment();
+ assertConstError(() => fragment.attributes['title'] = 'foo');
+ assertConstError(() => fragment.dataAttributes['title'] = 'foo');
+ assertConstError(() => fragment.getClientRects().add(null));
+ // Issue 174: #classes is currently not const
+ // assertConstError(() => fragment.classes.add('foo'));
+ }
+
+ void testQuery() {
+ var fragment = new DocumentFragment.html(
+ "<div class='foo'><a>foo</a><b>bar</b></div>");
+ Expect.equals("A", fragment.query(".foo a").tagName);
+ Expect.listEquals(["A", "B"], _nodeStrings(fragment.queryAll(".foo *")));
+ }
+
+ Collection<String> _nodeStrings(Collection<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;
+ }
+
+ void assertUnsupported(void fn()) {
+ try {
+ fn();
+ } catch (UnsupportedOperationException e) {
+ return;
+ }
+ Expect.fail('Expected UnsupportedOperationException');
+ }
+
+ void assertConstError(void fn()) {
+ try {
+ fn();
+ } catch (var e) {
+ if (e is IllegalAccessException || e is UnsupportedOperationException) {
+ return;
+ }
+ }
+ Expect.fail('Expected immutability error');
+ }
+}
« no previous file with comments | « client/tests/client/client.status ('k') | client/tests/client/html/html_tests.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698