| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 library mutation_observer_test; |
| 6 |
| 7 import 'dart:html'; |
| 8 import 'package:unittest/unittest.dart'; |
| 9 import 'package:unittest/html_individual_config.dart'; |
| 10 |
| 11 main() { |
| 12 useHtmlIndividualConfiguration(); |
| 13 |
| 14 // Load the MutationObserver polyfill. |
| 15 HttpRequest.getString('/root_dart/pkg/mutation_observer/lib/' |
| 16 'mutation_observer.min.js').then((code) { |
| 17 |
| 18 // Force MutationObserver polyfill to be used so we can test it, even in |
| 19 // browsers with native support. |
| 20 document.head.children.add(new ScriptElement() |
| 21 ..text = 'window.MutationObserver = void 0;' |
| 22 'window.WebKitMutationObserver = void 0;' |
| 23 '$code'); |
| 24 |
| 25 testMutationObserver(); |
| 26 }); |
| 27 } |
| 28 |
| 29 /** |
| 30 * Test suite for Mutation Observers. This is just a small set of sanity |
| 31 * checks, not a complete test suite. |
| 32 */ |
| 33 testMutationObserver() { |
| 34 group('supported', () { |
| 35 test('supported', () { |
| 36 expect(MutationObserver.supported, true, reason: 'polyfill loaded.'); |
| 37 }); |
| 38 }); |
| 39 |
| 40 group('childList', () { |
| 41 mutationCallback(count, expectation) { |
| 42 var done = false; |
| 43 var nodes = []; |
| 44 |
| 45 callback(mutations, observer) { |
| 46 for (MutationRecord mutation in mutations) { |
| 47 for (Node node in mutation.addedNodes) { |
| 48 nodes.add(node); |
| 49 } |
| 50 } |
| 51 if (nodes.length >= count) { |
| 52 done = true; |
| 53 expect(nodes.length, count); |
| 54 expect(nodes, expectation); |
| 55 } |
| 56 } |
| 57 |
| 58 return expectAsyncUntil2(callback, () => done); |
| 59 } |
| 60 |
| 61 test('empty options is syntax error', () { |
| 62 var mutationObserver = new MutationObserver( |
| 63 (mutations, observer) { expect(false, isTrue, |
| 64 reason: 'Should not be reached'); }); |
| 65 expect(() { mutationObserver.observe(document, {}); }, |
| 66 throws); |
| 67 }); |
| 68 |
| 69 test('direct-parallel options-named', () { |
| 70 var container = new DivElement(); |
| 71 var div1 = new DivElement(); |
| 72 var div2 = new DivElement(); |
| 73 var mutationObserver = new MutationObserver( |
| 74 mutationCallback(2, orderedEquals([div1, div2]))); |
| 75 mutationObserver.observe(container, childList: true); |
| 76 |
| 77 container.append(div1); |
| 78 container.append(div2); |
| 79 }); |
| 80 |
| 81 test('direct-nested options-named', () { |
| 82 var container = new DivElement(); |
| 83 var div1 = new DivElement(); |
| 84 var div2 = new DivElement(); |
| 85 var mutationObserver = |
| 86 new MutationObserver(mutationCallback(1, orderedEquals([div1]))); |
| 87 mutationObserver.observe(container, childList: true); |
| 88 |
| 89 container.append(div1); |
| 90 div1.append(div2); |
| 91 }); |
| 92 |
| 93 test('subtree options-named', () { |
| 94 var container = new DivElement(); |
| 95 var div1 = new DivElement(); |
| 96 var div2 = new DivElement(); |
| 97 var mutationObserver = new MutationObserver( |
| 98 mutationCallback(2, orderedEquals([div1, div2]))); |
| 99 mutationObserver.observe(container, childList: true, subtree: true); |
| 100 |
| 101 container.append(div1); |
| 102 div1.append(div2); |
| 103 }); |
| 104 |
| 105 test('mutation event', () { |
| 106 var event = new MutationEvent('something', prevValue: 'prev', |
| 107 newValue: 'new', attrName: 'attr'); |
| 108 expect(event is MutationEvent, isTrue); |
| 109 expect(event.prevValue, 'prev'); |
| 110 expect(event.newValue, 'new'); |
| 111 expect(event.attrName, 'attr'); |
| 112 }); |
| 113 }); |
| 114 } |
| OLD | NEW |