| OLD | NEW |
| 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 } |
| OLD | NEW |