| 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 DocumentFragmentTest; | 5 library DocumentFragmentTest; |
| 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 'util.dart'; | 8 import 'util.dart'; |
| 9 import 'dart:html'; | 9 import 'dart:html'; |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 // expect(fragment.children[0] is SVGAElement, isTrue); | 73 // expect(fragment.children[0] is SVGAElement, isTrue); |
| 74 // }); | 74 // }); |
| 75 | 75 |
| 76 // TODO(nweiz): enable this once XML is ported. | 76 // TODO(nweiz): enable this once XML is ported. |
| 77 // test('.xml parses input as XML', () { | 77 // test('.xml parses input as XML', () { |
| 78 // final fragment = new DocumentFragment.xml('<a>foo</a>'); | 78 // final fragment = new DocumentFragment.xml('<a>foo</a>'); |
| 79 // expect(fragment.children[0] is XMLElement, isTrue); | 79 // expect(fragment.children[0] is XMLElement, isTrue); |
| 80 // }); | 80 // }); |
| 81 }); | 81 }); |
| 82 | 82 |
| 83 test('Unsupported operations throw errors', () { | |
| 84 var emptyFragment = new DocumentFragment(); | |
| 85 expectUnsupported(() => emptyFragment.attributes = {}); | |
| 86 expectUnsupported(() => emptyFragment.classes = []); | |
| 87 expectUnsupported(() => emptyFragment.classes.add('foo')); | |
| 88 expectUnsupported(() => emptyFragment.dataAttributes = {}); | |
| 89 expectUnsupported(() => emptyFragment.contentEditable = "true"); | |
| 90 expectUnsupported(() => emptyFragment.dir); | |
| 91 expectUnsupported(() => emptyFragment.dir = "ltr"); | |
| 92 expectUnsupported(() => emptyFragment.draggable = true); | |
| 93 expectUnsupported(() => emptyFragment.hidden = true); | |
| 94 expectUnsupported(() => emptyFragment.id = "foo"); | |
| 95 expectUnsupported(() => emptyFragment.lang); | |
| 96 expectUnsupported(() => emptyFragment.lang = "en"); | |
| 97 expectUnsupported(() => emptyFragment.scrollLeft = 10); | |
| 98 expectUnsupported(() => emptyFragment.scrollTop = 10); | |
| 99 expectUnsupported(() => emptyFragment.spellcheck = true); | |
| 100 expectUnsupported(() => emptyFragment.translate = true); | |
| 101 expectUnsupported(() => emptyFragment.tabIndex = 5); | |
| 102 expectUnsupported(() => emptyFragment.title = "foo"); | |
| 103 expectUnsupported(() => emptyFragment.webkitdropzone = "foo"); | |
| 104 expectUnsupported(() => emptyFragment.webkitRegionOverflow = "foo"); | |
| 105 }); | |
| 106 | |
| 107 group('children', () { | 83 group('children', () { |
| 108 var fragment; | 84 var fragment; |
| 109 var children; | 85 var children; |
| 110 | 86 |
| 111 init() { | 87 init() { |
| 112 fragment = new DocumentFragment(); | 88 fragment = new DocumentFragment(); |
| 113 children = fragment.children; | 89 children = fragment.children; |
| 114 fragment.nodes.addAll( | 90 fragment.nodes.addAll( |
| 115 [new Text("1"), new Element.tag("A"), new Element.tag("B"), | 91 [new Text("1"), new Element.tag("A"), new Element.tag("B"), |
| 116 new Text("2"), new Element.tag("I"), new Text("3"), | 92 new Text("2"), new Element.tag("I"), new Text("3"), |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 var fragment = new DocumentFragment(); | 162 var fragment = new DocumentFragment(); |
| 187 fragment.nodes.add(new Text("foo")); | 163 fragment.nodes.add(new Text("foo")); |
| 188 fragment.innerHtml = "<a>bar</a>baz"; | 164 fragment.innerHtml = "<a>bar</a>baz"; |
| 189 expect(_nodeStrings(fragment.nodes), equals(["A", "baz"])); | 165 expect(_nodeStrings(fragment.nodes), equals(["A", "baz"])); |
| 190 }); | 166 }); |
| 191 | 167 |
| 192 test('getting innerHtml works', () { | 168 test('getting innerHtml works', () { |
| 193 var fragment = new DocumentFragment(); | 169 var fragment = new DocumentFragment(); |
| 194 fragment.nodes.addAll([new Text("foo"), new Element.html("<A>bar</A>")]); | 170 fragment.nodes.addAll([new Text("foo"), new Element.html("<A>bar</A>")]); |
| 195 expect(fragment.innerHtml, "foo<a>bar</a>"); | 171 expect(fragment.innerHtml, "foo<a>bar</a>"); |
| 196 expect(fragment.outerHtml, "foo<a>bar</a>"); | |
| 197 }); | 172 }); |
| 198 | 173 |
| 199 group('insertAdjacentElement', () { | |
| 200 getFragment() => new DocumentFragment.html("<a>foo</a>"); | |
| 201 | |
| 202 test('beforeBegin does nothing', () { | |
| 203 var fragment = getFragment(); | |
| 204 expect(fragment.insertAdjacentElement("beforeBegin", | |
| 205 new Element.tag("b")), isNull); | |
| 206 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 207 }); | |
| 208 | |
| 209 test('afterEnd does nothing', () { | |
| 210 var fragment = getFragment(); | |
| 211 expect(fragment.insertAdjacentElement("afterEnd", | |
| 212 new Element.tag("b")), isNull); | |
| 213 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 214 }); | |
| 215 | |
| 216 test('afterBegin inserts the element', () { | |
| 217 var fragment = getFragment(); | |
| 218 var el = new Element.tag("b"); | |
| 219 expect(fragment.insertAdjacentElement("afterBegin", el), equals(el)); | |
| 220 expect(fragment.innerHtml, "<b></b><a>foo</a>"); | |
| 221 }); | |
| 222 | |
| 223 test('beforeEnd inserts the element', () { | |
| 224 var fragment = getFragment(); | |
| 225 var el = new Element.tag("b"); | |
| 226 expect(fragment.insertAdjacentElement("beforeEnd", el), equals(el)); | |
| 227 expect(fragment.innerHtml, "<a>foo</a><b></b>"); | |
| 228 }); | |
| 229 }); | |
| 230 | |
| 231 group('insertAdjacentText', () { | |
| 232 getFragment() => new DocumentFragment.html("<a>foo</a>"); | |
| 233 | |
| 234 test('beforeBegin does nothing', () { | |
| 235 var fragment = getFragment(); | |
| 236 fragment.insertAdjacentText("beforeBegin", "foo"); | |
| 237 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 238 }); | |
| 239 | |
| 240 test('afterEnd does nothing', () { | |
| 241 var fragment = getFragment(); | |
| 242 fragment.insertAdjacentText("afterEnd", "foo"); | |
| 243 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 244 }); | |
| 245 | |
| 246 test('afterBegin inserts the text', () { | |
| 247 var fragment = getFragment(); | |
| 248 fragment.insertAdjacentText("afterBegin", "foo"); | |
| 249 expect(fragment.innerHtml, "foo<a>foo</a>"); | |
| 250 }); | |
| 251 | |
| 252 test('beforeEnd inserts the text', () { | |
| 253 var fragment = getFragment(); | |
| 254 fragment.insertAdjacentText("beforeEnd", "foo"); | |
| 255 expect(fragment.innerHtml, "<a>foo</a>foo"); | |
| 256 }); | |
| 257 }); | |
| 258 | |
| 259 group('insertAdjacentHtml', () { | |
| 260 getFragment() => new DocumentFragment.html("<a>foo</a>"); | |
| 261 | |
| 262 test('beforeBegin does nothing', () { | |
| 263 var fragment = getFragment(); | |
| 264 fragment.insertAdjacentHtml("beforeBegin", "foo<br>"); | |
| 265 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 266 }); | |
| 267 | |
| 268 test('afterEnd does nothing', () { | |
| 269 var fragment = getFragment(); | |
| 270 fragment.insertAdjacentHtml("afterEnd", "<br>foo"); | |
| 271 expect(fragment.innerHtml, "<a>foo</a>"); | |
| 272 }); | |
| 273 | |
| 274 test('afterBegin inserts the HTML', () { | |
| 275 var fragment = getFragment(); | |
| 276 fragment.insertAdjacentHtml("afterBegin", "foo<br>"); | |
| 277 expect(fragment.innerHtml, "foo<br><a>foo</a>"); | |
| 278 }); | |
| 279 | |
| 280 test('beforeEnd inserts the HTML', () { | |
| 281 var fragment = getFragment(); | |
| 282 fragment.insertAdjacentHtml("beforeEnd", "<br>foo"); | |
| 283 expect(fragment.innerHtml, "<a>foo</a><br>foo"); | |
| 284 }); | |
| 285 }); | |
| 286 | |
| 287 // Just test that these methods don't throw errors | |
| 288 test("no-op methods don't throw errors", () { | |
| 289 var fragment = new DocumentFragment(); | |
| 290 fragment.on.click.add((e) => null); | |
| 291 fragment.blur(); | |
| 292 fragment.focus(); | |
| 293 fragment.click(); | |
| 294 fragment.scrollByLines(2); | |
| 295 fragment.scrollByPages(2); | |
| 296 fragment.scrollIntoView(); | |
| 297 fragment.webkitRequestFullScreen(2); | |
| 298 }); | |
| 299 | |
| 300 test('default values', () { | |
| 301 var fragment = new DocumentFragment(); | |
| 302 expect(fragment.contentEditable, "false"); | |
| 303 expect(fragment.tabIndex, -1); | |
| 304 expect(fragment.id, ""); | |
| 305 expect(fragment.title, ""); | |
| 306 expect(fragment.tagName, ""); | |
| 307 expect(fragment.webkitdropzone, ""); | |
| 308 expect(fragment.webkitRegionOverflow, ""); | |
| 309 expect(fragment.isContentEditable, isFalse); | |
| 310 expect(fragment.draggable, isFalse); | |
| 311 expect(fragment.hidden, isFalse); | |
| 312 expect(fragment.spellcheck, isFalse); | |
| 313 expect(fragment.translate, isFalse); | |
| 314 expect(fragment.nextElementSibling, isNull); | |
| 315 expect(fragment.previousElementSibling, isNull); | |
| 316 expect(fragment.offsetParent, isNull); | |
| 317 expect(fragment.parent, isNull); | |
| 318 expect(fragment.attributes.isEmpty, isTrue); | |
| 319 expect(fragment.classes.isEmpty, isTrue); | |
| 320 expect(fragment.dataAttributes.isEmpty, isTrue); | |
| 321 }); | |
| 322 | |
| 323 test('style', () { | |
| 324 var fragment = new DocumentFragment(); | |
| 325 var style = fragment.style; | |
| 326 expectEmptyStyleDeclaration(style); | |
| 327 fragment.computedStyle.then(expectAsync1((computedStyle) { | |
| 328 expectEmptyStyleDeclaration(computedStyle); | |
| 329 })); | |
| 330 }); | |
| 331 | |
| 332 // TODO(nweiz): re-enable when const is better supported in dartc and/or frog | |
| 333 // test('const fields are immutable', () { | |
| 334 // var fragment = new DocumentFragment(); | |
| 335 // assertConstError(() => fragment.attributes['title'] = 'foo'); | |
| 336 // assertConstError(() => fragment.dataAttributes['title'] = 'foo'); | |
| 337 // fragment.rect.then((ElementRect rect) { | |
| 338 // assertConstError(() => rect.clientRects.add(null)); | |
| 339 // callbackDone(); | |
| 340 // }); | |
| 341 // // Issue 174: #classes is currently not const | |
| 342 // // assertConstError(() => fragment.classes.add('foo')); | |
| 343 // }); | |
| 344 | |
| 345 test('query searches the fragment', () { | 174 test('query searches the fragment', () { |
| 346 var fragment = new DocumentFragment.html( | 175 var fragment = new DocumentFragment.html( |
| 347 "<div class='foo'><a>foo</a><b>bar</b></div>"); | 176 "<div class='foo'><a>foo</a><b>bar</b></div>"); |
| 348 expect(fragment.query(".foo a").tagName, "A"); | 177 expect(fragment.query(".foo a").tagName, "A"); |
| 349 expect(_nodeStrings(fragment.queryAll(".foo *")), equals(["A", "B"])); | 178 expect(_nodeStrings(fragment.queryAll(".foo *")), equals(["A", "B"])); |
| 350 }); | 179 }); |
| 351 } | 180 } |
| OLD | NEW |