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

Side by Side Diff: tests/html/mutationobserver_test.dart

Issue 11647044: Adding annotation for partial browser support and example implementation for MutationObservers. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Added experimental annotation to MutationObserver. Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/html/html.status ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library mutationobserver_test; 5 library mutationobserver_test;
6 import '../../pkg/unittest/lib/unittest.dart'; 6 import '../../pkg/unittest/lib/unittest.dart';
7 import '../../pkg/unittest/lib/html_config.dart'; 7 import '../../pkg/unittest/lib/html_individual_config.dart';
8 import 'dart:html'; 8 import 'dart:html';
9 9
10 /** 10 /**
11 * Test suite for Mutation Observers. This is just a small set of sanity 11 * Test suite for Mutation Observers. This is just a small set of sanity
12 * checks, not a complete test suite. 12 * checks, not a complete test suite.
13 */ 13 */
14 main() { 14 main() {
15 useHtmlConfiguration(); 15 useHtmlIndividualConfiguration();
16
17 group('supported', () {
18 test('supported', () {
19 expect(MutationObserver.supported, true);
20 });
21 });
22
23 var expectation = MutationObserver.supported ? returnsNormally : throws;
16 24
17 group('childList', () { 25 group('childList', () {
18
19 mutationCallback(count, expectation) { 26 mutationCallback(count, expectation) {
20 var done = false; 27 var done = false;
21 var nodes = []; 28 var nodes = [];
22 29
23 callback(mutations, observer) { 30 callback(mutations, observer) {
24 for (MutationRecord mutation in mutations) { 31 for (MutationRecord mutation in mutations) {
25 for (Node node in mutation.addedNodes) { 32 for (Node node in mutation.addedNodes) {
26 nodes.add(node); 33 nodes.add(node);
27 } 34 }
28 } 35 }
29 if (nodes.length >= count) { 36 if (nodes.length >= count) {
30 done = true; 37 done = true;
31 expect(nodes.length, count); 38 expect(nodes.length, count);
32 expect(nodes, expectation); 39 expect(nodes, expectation);
33 } 40 }
34 } 41 }
35 42
43 // If it's not supported, don't block waiting for it.
44 if (!MutationObserver.supported) {
45 return () => done;
46 }
47
36 return expectAsyncUntil2(callback, () => done); 48 return expectAsyncUntil2(callback, () => done);
37 } 49 }
38 50
39 test('empty options is syntax error', () { 51 test('empty options is syntax error', () {
52 expect(() {
40 var mutationObserver = new MutationObserver( 53 var mutationObserver = new MutationObserver(
41 (mutations, observer) { expect(false, isTrue, 54 (mutations, observer) { expect(false, isTrue,
42 reason: 'Should not be reached'); }); 55 reason: 'Should not be reached'); });
43 expect(() { mutationObserver.observe(document, {}); }, 56 expect(() { mutationObserver.observe(document, {}); },
44 throws); 57 throws);
45 }); 58 }, expectation);
59 });
46 60
47 test('direct-parallel options-map', () { 61 test('direct-parallel options-map', () {
62 expect(() {
48 var container = new DivElement(); 63 var container = new DivElement();
49 var div1 = new DivElement(); 64 var div1 = new DivElement();
50 var div2 = new DivElement(); 65 var div2 = new DivElement();
51 var mutationObserver = new MutationObserver( 66 var mutationObserver = new MutationObserver(
52 mutationCallback(2, orderedEquals([div1, div2]))); 67 mutationCallback(2, orderedEquals([div1, div2])));
53 mutationObserver.observe(container, options: {'childList': true}); 68 mutationObserver.observe(container, options: {'childList': true});
54 69
55 container.nodes.add(div1); 70 container.nodes.add(div1);
56 container.nodes.add(div2); 71 container.nodes.add(div2);
57 }); 72 }, expectation);
73 });
58 74
59 test('direct-parallel options-named', () { 75 test('direct-parallel options-named', () {
76 expect(() {
60 var container = new DivElement(); 77 var container = new DivElement();
61 var div1 = new DivElement(); 78 var div1 = new DivElement();
62 var div2 = new DivElement(); 79 var div2 = new DivElement();
63 var mutationObserver = new MutationObserver( 80 var mutationObserver = new MutationObserver(
64 mutationCallback(2, orderedEquals([div1, div2]))); 81 mutationCallback(2, orderedEquals([div1, div2])));
65 mutationObserver.observe(container, childList: true); 82 mutationObserver.observe(container, childList: true);
66 83
67 container.nodes.add(div1); 84 container.nodes.add(div1);
68 container.nodes.add(div2); 85 container.nodes.add(div2);
69 }); 86 }, expectation);
87 });
70 88
71 test('direct-nested options-named', () { 89 test('direct-nested options-named', () {
90 expect(() {
72 var container = new DivElement(); 91 var container = new DivElement();
73 var div1 = new DivElement(); 92 var div1 = new DivElement();
74 var div2 = new DivElement(); 93 var div2 = new DivElement();
75 var mutationObserver = 94 var mutationObserver =
76 new MutationObserver(mutationCallback(1, orderedEquals([div1]))); 95 new MutationObserver(mutationCallback(1, orderedEquals([div1])));
77 mutationObserver.observe(container, childList: true); 96 mutationObserver.observe(container, childList: true);
78 97
79 container.nodes.add(div1); 98 container.nodes.add(div1);
80 div1.nodes.add(div2); 99 div1.nodes.add(div2);
81 }); 100 }, expectation);
101 });
82 102
83 103
84 test('subtree options-map', () { 104 test('subtree options-map', () {
105 expect(() {
85 var container = new DivElement(); 106 var container = new DivElement();
86 var div1 = new DivElement(); 107 var div1 = new DivElement();
87 var div2 = new DivElement(); 108 var div2 = new DivElement();
88 var mutationObserver = new MutationObserver( 109 var mutationObserver = new MutationObserver(
89 mutationCallback(2, orderedEquals([div1, div2]))); 110 mutationCallback(2, orderedEquals([div1, div2])));
90 mutationObserver.observe(container, 111 mutationObserver.observe(container,
91 options: {'childList': true, 'subtree': true}); 112 options: {'childList': true, 'subtree': true});
92 113
93 container.nodes.add(div1); 114 container.nodes.add(div1);
94 div1.nodes.add(div2); 115 div1.nodes.add(div2);
95 }); 116 }, expectation);
117 });
96 118
97 test('subtree options-named', () { 119 test('subtree options-named', () {
120 expect(() {
98 var container = new DivElement(); 121 var container = new DivElement();
99 var div1 = new DivElement(); 122 var div1 = new DivElement();
100 var div2 = new DivElement(); 123 var div2 = new DivElement();
101 var mutationObserver = new MutationObserver( 124 var mutationObserver = new MutationObserver(
102 mutationCallback(2, orderedEquals([div1, div2]))); 125 mutationCallback(2, orderedEquals([div1, div2])));
103 mutationObserver.observe(container, childList: true, subtree: true); 126 mutationObserver.observe(container, childList: true, subtree: true);
104 127
105 container.nodes.add(div1); 128 container.nodes.add(div1);
106 div1.nodes.add(div2); 129 div1.nodes.add(div2);
107 }); 130 }, expectation);
131 });
108 }); 132 });
109 } 133 }
OLDNEW
« no previous file with comments | « tests/html/html.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698