| 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 ElementTest; | 5 library ElementTest; |
| 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_config.dart'; |
| 8 import 'dart:collection'; |
| 8 import 'dart:html'; | 9 import 'dart:html'; |
| 9 | 10 |
| 10 main() { | 11 main() { |
| 11 useHtmlConfiguration(); | 12 useHtmlConfiguration(); |
| 12 | 13 |
| 13 Element makeElement() => new Element.tag('div'); | 14 Element makeElement() => new Element.tag('div'); |
| 14 | 15 |
| 15 Element makeElementWithChildren() => | 16 Element makeElementWithChildren() => |
| 16 new Element.html("<div><br/><img/><input/></div>"); | 17 new Element.html("<div><br/><img/><input/></div>"); |
| 17 | 18 |
| 18 Element makeElementWithClasses() => | 19 Element makeElementWithClasses() => |
| 19 new Element.html('<div class="foo bar baz"></div>'); | 20 new Element.html('<div class="foo bar baz"></div>'); |
| 20 | 21 |
| 21 Set<String> makeClassSet() => makeElementWithClasses().classes; | 22 Set<String> makeClassSet() => makeElementWithClasses().classes; |
| 22 | 23 |
| 23 Set<String> extractClasses(Element el) { | 24 Set<String> extractClasses(Element el) { |
| 24 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); | 25 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); |
| 25 return new Set.from(match[1].split(' ')); | 26 return new LinkedHashSet.from(match[1].split(' ')); |
| 26 } | 27 } |
| 27 | 28 |
| 28 test('affects the "class" attribute', () { | 29 test('affects the "class" attribute', () { |
| 29 final el = makeElementWithClasses(); | 30 final el = makeElementWithClasses(); |
| 30 el.classes.add('qux'); | 31 el.classes.add('qux'); |
| 31 expect(extractClasses(el), unorderedEquals(['foo', 'bar', 'baz', 'qux'])); | 32 expect(extractClasses(el), orderedEquals(['foo', 'bar', 'baz', 'qux'])); |
| 32 }); | 33 }); |
| 33 | 34 |
| 34 test('is affected by the "class" attribute', () { | 35 test('is affected by the "class" attribute', () { |
| 35 final el = makeElementWithClasses(); | 36 final el = makeElementWithClasses(); |
| 36 el.attributes['class'] = 'foo qux'; | 37 el.attributes['class'] = 'foo qux'; |
| 37 expect(el.classes, unorderedEquals(['foo', 'qux'])); | 38 expect(el.classes, orderedEquals(['foo', 'qux'])); |
| 38 }); | 39 }); |
| 39 | 40 |
| 40 test('classes=', () { | 41 test('classes=', () { |
| 41 final el = makeElementWithClasses(); | 42 final el = makeElementWithClasses(); |
| 42 el.classes = ['foo', 'qux']; | 43 el.classes = ['foo', 'qux']; |
| 43 expect(el.classes, unorderedEquals(['foo', 'qux'])); | 44 expect(el.classes, orderedEquals(['foo', 'qux'])); |
| 44 expect(extractClasses(el), unorderedEquals(['foo', 'qux'])); | 45 expect(extractClasses(el), orderedEquals(['foo', 'qux'])); |
| 45 }); | 46 }); |
| 46 | 47 |
| 47 test('toString', () { | 48 test('toString', () { |
| 48 expect(makeClassSet().toString().split(' '), | 49 expect(makeClassSet().toString().split(' '), |
| 49 unorderedEquals(['foo', 'bar', 'baz'])); | 50 orderedEquals(['foo', 'bar', 'baz'])); |
| 50 expect(makeElement().classes.toString(), ''); | 51 expect(makeElement().classes.toString(), ''); |
| 51 }); | 52 }); |
| 52 | 53 |
| 53 test('forEach', () { | 54 test('forEach', () { |
| 54 final classes = <String>[]; | 55 final classes = <String>[]; |
| 55 // TODO: Change to this when Issue 3484 is fixed. | 56 // TODO: Change to this when Issue 3484 is fixed. |
| 56 // makeClassSet().forEach(classes.add); | 57 // makeClassSet().forEach(classes.add); |
| 57 makeClassSet().forEach((c) => classes.add(c)); | 58 makeClassSet().forEach((c) => classes.add(c)); |
| 58 expect(classes, unorderedEquals(['foo', 'bar', 'baz'])); | 59 expect(classes, orderedEquals(['foo', 'bar', 'baz'])); |
| 59 }); | 60 }); |
| 60 | 61 |
| 61 test('iterator', () { | 62 test('iterator', () { |
| 62 final classes = <String>[]; | 63 final classes = <String>[]; |
| 63 for (var el in makeClassSet()) { | 64 for (var el in makeClassSet()) { |
| 64 classes.add(el); | 65 classes.add(el); |
| 65 } | 66 } |
| 66 expect(classes, unorderedEquals(['foo', 'bar', 'baz'])); | 67 expect(classes, orderedEquals(['foo', 'bar', 'baz'])); |
| 67 }); | 68 }); |
| 68 | 69 |
| 69 test('map', () { | 70 test('map', () { |
| 70 expect(makeClassSet().map((c) => c.toUpperCase()).toList(), | 71 expect(makeClassSet().map((c) => c.toUpperCase()).toList(), |
| 71 unorderedEquals(['FOO', 'BAR', 'BAZ'])); | 72 orderedEquals(['FOO', 'BAR', 'BAZ'])); |
| 72 }); | 73 }); |
| 73 | 74 |
| 74 test('where', () { | 75 test('where', () { |
| 75 expect(makeClassSet().where((c) => c.contains('a')).toSet(), | 76 expect(makeClassSet().where((c) => c.contains('a')).toSet(), |
| 76 unorderedEquals(['bar', 'baz'])); | 77 orderedEquals(['bar', 'baz'])); |
| 77 }); | 78 }); |
| 78 | 79 |
| 79 test('every', () { | 80 test('every', () { |
| 80 expect(makeClassSet().every((c) => c is String), isTrue); | 81 expect(makeClassSet().every((c) => c is String), isTrue); |
| 81 expect(makeClassSet().every((c) => c.contains('a')), isFalse); | 82 expect(makeClassSet().every((c) => c.contains('a')), isFalse); |
| 82 }); | 83 }); |
| 83 | 84 |
| 84 test('any', () { | 85 test('any', () { |
| 85 expect(makeClassSet().any((c) => c.contains('a')), isTrue); | 86 expect(makeClassSet().any((c) => c.contains('a')), isTrue); |
| 86 expect(makeClassSet().any((c) => c is num), isFalse); | 87 expect(makeClassSet().any((c) => c is num), isFalse); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 97 }); | 98 }); |
| 98 | 99 |
| 99 test('contains', () { | 100 test('contains', () { |
| 100 expect(makeClassSet().contains('foo'), isTrue); | 101 expect(makeClassSet().contains('foo'), isTrue); |
| 101 expect(makeClassSet().contains('qux'), isFalse); | 102 expect(makeClassSet().contains('qux'), isFalse); |
| 102 }); | 103 }); |
| 103 | 104 |
| 104 test('add', () { | 105 test('add', () { |
| 105 final classes = makeClassSet(); | 106 final classes = makeClassSet(); |
| 106 classes.add('qux'); | 107 classes.add('qux'); |
| 107 expect(classes, unorderedEquals(['foo', 'bar', 'baz', 'qux'])); | 108 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux'])); |
| 108 | 109 |
| 109 classes.add('qux'); | 110 classes.add('qux'); |
| 110 final list = new List.from(classes); | 111 final list = new List.from(classes); |
| 111 list.sort((a, b) => a.compareTo(b)); | 112 list.sort((a, b) => a.compareTo(b)); |
| 112 expect(list, unorderedEquals(['bar', 'baz', 'foo', 'qux']), | 113 expect(list, orderedEquals(['bar', 'baz', 'foo', 'qux']), |
| 113 reason: "The class set shouldn't have duplicate elements."); | 114 reason: "The class set shouldn't have duplicate elements."); |
| 114 }); | 115 }); |
| 115 | 116 |
| 116 test('remove', () { | 117 test('remove', () { |
| 117 final classes = makeClassSet(); | 118 final classes = makeClassSet(); |
| 118 classes.remove('bar'); | 119 classes.remove('bar'); |
| 119 expect(classes, unorderedEquals(['foo', 'baz'])); | 120 expect(classes, orderedEquals(['foo', 'baz'])); |
| 120 classes.remove('qux'); | 121 classes.remove('qux'); |
| 121 expect(classes, unorderedEquals(['foo', 'baz'])); | 122 expect(classes, orderedEquals(['foo', 'baz'])); |
| 122 }); | 123 }); |
| 123 | 124 |
| 124 test('toggle', () { | 125 test('toggle', () { |
| 125 final classes = makeClassSet(); | 126 final classes = makeClassSet(); |
| 126 classes.toggle('bar'); | 127 classes.toggle('bar'); |
| 127 expect(classes, unorderedEquals(['foo', 'baz'])); | 128 expect(classes, orderedEquals(['foo', 'baz'])); |
| 128 classes.toggle('qux'); | 129 classes.toggle('qux'); |
| 129 expect(classes, unorderedEquals(['foo', 'baz', 'qux'])); | 130 expect(classes, orderedEquals(['foo', 'baz', 'qux'])); |
| 130 }); | 131 }); |
| 131 | 132 |
| 132 test('addAll', () { | 133 test('addAll', () { |
| 133 final classes = makeClassSet(); | 134 final classes = makeClassSet(); |
| 134 classes.addAll(['bar', 'qux', 'bip']); | 135 classes.addAll(['bar', 'qux', 'bip']); |
| 135 expect(classes, unorderedEquals(['foo', 'bar', 'baz', 'qux', 'bip'])); | 136 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux', 'bip'])); |
| 136 }); | 137 }); |
| 137 | 138 |
| 138 test('removeAll', () { | 139 test('removeAll', () { |
| 139 final classes = makeClassSet(); | 140 final classes = makeClassSet(); |
| 140 classes.removeAll(['bar', 'baz', 'qux']); | 141 classes.removeAll(['bar', 'baz', 'qux']); |
| 141 expect(classes, unorderedEquals(['foo'])); | 142 expect(classes, orderedEquals(['foo'])); |
| 142 }); | 143 }); |
| 143 | 144 |
| 144 test('isSubsetOf', () { | 145 test('isSubsetOf', () { |
| 145 final classes = makeClassSet(); | 146 final classes = makeClassSet(); |
| 146 expect(classes.isSubsetOf(['foo', 'bar', 'baz']), isTrue); | 147 expect(classes.isSubsetOf(['foo', 'bar', 'baz']), isTrue); |
| 147 expect(classes.isSubsetOf(['foo', 'bar', 'baz', 'qux']), isTrue); | 148 expect(classes.isSubsetOf(['foo', 'bar', 'baz', 'qux']), isTrue); |
| 148 expect(classes.isSubsetOf(['foo', 'bar', 'qux']), isFalse); | 149 expect(classes.isSubsetOf(['foo', 'bar', 'qux']), isFalse); |
| 149 }); | 150 }); |
| 150 | 151 |
| 151 test('containsAll', () { | 152 test('containsAll', () { |
| 152 final classes = makeClassSet(); | 153 final classes = makeClassSet(); |
| 153 expect(classes.containsAll(['foo', 'baz']), isTrue); | 154 expect(classes.containsAll(['foo', 'baz']), isTrue); |
| 154 expect(classes.containsAll(['foo', 'qux']), isFalse); | 155 expect(classes.containsAll(['foo', 'qux']), isFalse); |
| 155 }); | 156 }); |
| 156 | 157 |
| 157 test('intersection', () { | 158 test('intersection', () { |
| 158 final classes = makeClassSet(); | 159 final classes = makeClassSet(); |
| 159 expect(classes.intersection(['foo', 'qux', 'baz']), | 160 expect(classes.intersection(['foo', 'qux', 'baz']), |
| 160 unorderedEquals(['foo', 'baz'])); | 161 unorderedEquals(['foo', 'baz'])); |
| 161 }); | 162 }); |
| 162 | 163 |
| 163 test('clear', () { | 164 test('clear', () { |
| 164 final classes = makeClassSet(); | 165 final classes = makeClassSet(); |
| 165 classes.clear(); | 166 classes.clear(); |
| 166 expect(classes, equals([])); | 167 expect(classes, equals([])); |
| 167 }); | 168 }); |
| 169 |
| 170 test('order', () { |
| 171 var classes = makeClassSet(); |
| 172 classes.add('aardvark'); |
| 173 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark'])); |
| 174 classes.toggle('baz'); |
| 175 expect(classes, orderedEquals(['foo', 'bar', 'aardvark'])); |
| 176 classes.toggle('baz'); |
| 177 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz'])); |
| 178 }); |
| 168 } | 179 } |
| OLD | NEW |