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

Unified Diff: test/codegen/lib/html/element_add_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/domparser_test.dart ('k') | test/codegen/lib/html/element_animate_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/lib/html/element_add_test.dart
diff --git a/test/codegen/lib/html/element_add_test.dart b/test/codegen/lib/html/element_add_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..2c2ea01890149b3d52fb73f1b08d71c81d1ab585
--- /dev/null
+++ b/test/codegen/lib/html/element_add_test.dart
@@ -0,0 +1,270 @@
+// 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);
+ });
+ });
+}
« no previous file with comments | « test/codegen/lib/html/domparser_test.dart ('k') | test/codegen/lib/html/element_animate_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698