| 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 import 'dart:html'; | 5 import 'dart:html'; |
| 6 import 'dart:svg' as svg; | 6 import 'dart:svg' as svg; |
| 7 | 7 |
| 8 import 'package:expect/minitest.dart'; | 8 import 'package:expect/minitest.dart'; |
| 9 | 9 |
| 10 main() { | 10 main() { |
| 11 var isSvgSvgElement = | 11 var isSvgSvgElement = |
| 12 predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement'); | 12 predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement'); |
| 13 | 13 |
| 14 List<String> _nodeStrings(Iterable<Node> input) { | 14 List<String> _nodeStrings(Iterable<Node> input) { |
| 15 final out = new List<String>(); | 15 final out = new List<String>(); |
| 16 for (Node n in input) { | 16 for (Node n in input) { |
| 17 if (n is Element) { | 17 if (n is Element) { |
| 18 Element e = n; | 18 Element e = n; |
| 19 out.add(e.tagName); | 19 out.add(e.tagName); |
| 20 } else { | 20 } else { |
| 21 out.add(n.text); | 21 out.add(n.text); |
| 22 } | 22 } |
| 23 } | 23 } |
| 24 return out; | 24 return out; |
| 25 }; | 25 } |
| 26 |
| 27 ; |
| 26 | 28 |
| 27 testConstructor(String tagName, Function isExpectedClass, | 29 testConstructor(String tagName, Function isExpectedClass, |
| 28 [bool expectation = true, allowsInnerHtml = true]) { | 30 [bool expectation = true, allowsInnerHtml = true]) { |
| 29 test(tagName, () { | 31 test(tagName, () { |
| 30 expect(isExpectedClass(new svg.SvgElement.tag(tagName)), expectation); | 32 expect(isExpectedClass(new svg.SvgElement.tag(tagName)), expectation); |
| 31 if (allowsInnerHtml) { | 33 if (allowsInnerHtml) { |
| 32 expect(isExpectedClass(new svg.SvgElement.svg('<$tagName></$tagName>')), | 34 expect(isExpectedClass(new svg.SvgElement.svg('<$tagName></$tagName>')), |
| 33 expectation && allowsInnerHtml); | 35 expectation && allowsInnerHtml); |
| 34 } | 36 } |
| 35 }); | 37 }); |
| 36 } | 38 } |
| 39 |
| 37 group('additionalConstructors', () { | 40 group('additionalConstructors', () { |
| 38 test('valid', () { | 41 test('valid', () { |
| 39 final svgContent = | 42 final svgContent = "<svg version=\"1.1\">\n" |
| 40 "<svg version=\"1.1\">\n" | |
| 41 " <circle></circle>\n" | 43 " <circle></circle>\n" |
| 42 " <path></path>\n" | 44 " <path></path>\n" |
| 43 "</svg>"; | 45 "</svg>"; |
| 44 final el = new svg.SvgElement.svg(svgContent); | 46 final el = new svg.SvgElement.svg(svgContent); |
| 45 expect(el, isSvgSvgElement); | 47 expect(el, isSvgSvgElement); |
| 46 expect(el.innerHtml, anyOf(["<circle></circle><path></path>", '<circle ' | 48 expect( |
| 47 'xmlns="http://www.w3.org/2000/svg" /><path ' | 49 el.innerHtml, |
| 48 'xmlns="http://www.w3.org/2000/svg" />'])); | 50 anyOf([ |
| 49 expect(el.outerHtml, anyOf([svgContent, | 51 "<circle></circle><path></path>", |
| 50 '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">\n ' | 52 '<circle ' |
| 51 '<circle />\n <path />\n</svg>'])); | 53 'xmlns="http://www.w3.org/2000/svg" /><path ' |
| 54 'xmlns="http://www.w3.org/2000/svg" />' |
| 55 ])); |
| 56 expect( |
| 57 el.outerHtml, |
| 58 anyOf([ |
| 59 svgContent, |
| 60 '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">\n ' |
| 61 '<circle />\n <path />\n</svg>' |
| 62 ])); |
| 52 }); | 63 }); |
| 53 | 64 |
| 54 test('has no parent', () => | 65 test('has no parent', |
| 55 expect(new svg.SvgElement.svg('<circle/>').parent, isNull) | 66 () => expect(new svg.SvgElement.svg('<circle/>').parent, isNull)); |
| 56 ); | |
| 57 | 67 |
| 58 test('empty', () { | 68 test('empty', () { |
| 59 expect(() => new svg.SvgElement.svg(""), throwsStateError); | 69 expect(() => new svg.SvgElement.svg(""), throwsStateError); |
| 60 }); | 70 }); |
| 61 | 71 |
| 62 test('too many elements', () { | 72 test('too many elements', () { |
| 63 expect(() => new svg.SvgElement.svg("<circle></circle><path></path>"), | 73 expect(() => new svg.SvgElement.svg("<circle></circle><path></path>"), |
| 64 throwsStateError); | 74 throwsStateError); |
| 65 }); | 75 }); |
| 66 }); | 76 }); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 }); | 238 }); |
| 229 }); | 239 }); |
| 230 | 240 |
| 231 group('supported_set', () { | 241 group('supported_set', () { |
| 232 test('supported', () { | 242 test('supported', () { |
| 233 expect(svg.SetElement.supported, true); | 243 expect(svg.SetElement.supported, true); |
| 234 }); | 244 }); |
| 235 }); | 245 }); |
| 236 | 246 |
| 237 group('constructors', () { | 247 group('constructors', () { |
| 238 testConstructor('a', (e) => e is svg.AElement); | 248 testConstructor('a', (e) => e is svg.AElement); |
| 239 testConstructor('circle', (e) => e is svg.CircleElement); | 249 testConstructor('circle', (e) => e is svg.CircleElement); |
| 240 testConstructor('clipPath', (e) => e is svg.ClipPathElement); | 250 testConstructor('clipPath', (e) => e is svg.ClipPathElement); |
| 241 testConstructor('defs', (e) => e is svg.DefsElement); | 251 testConstructor('defs', (e) => e is svg.DefsElement); |
| 242 testConstructor('desc', (e) => e is svg.DescElement); | 252 testConstructor('desc', (e) => e is svg.DescElement); |
| 243 testConstructor('ellipse', (e) => e is svg.EllipseElement); | 253 testConstructor('ellipse', (e) => e is svg.EllipseElement); |
| 244 testConstructor('g', (e) => e is svg.GElement); | 254 testConstructor('g', (e) => e is svg.GElement); |
| 245 testConstructor('image', (e) => e is svg.ImageElement); | 255 testConstructor('image', (e) => e is svg.ImageElement); |
| 246 testConstructor('line', (e) => e is svg.LineElement); | 256 testConstructor('line', (e) => e is svg.LineElement); |
| 247 testConstructor('linearGradient', (e) => e is svg.LinearGradientElement); | 257 testConstructor('linearGradient', (e) => e is svg.LinearGradientElement); |
| 248 testConstructor('marker', (e) => e is svg.MarkerElement); | 258 testConstructor('marker', (e) => e is svg.MarkerElement); |
| 249 testConstructor('mask', (e) => e is svg.MaskElement); | 259 testConstructor('mask', (e) => e is svg.MaskElement); |
| 250 testConstructor('path', (e) => e is svg.PathElement); | 260 testConstructor('path', (e) => e is svg.PathElement); |
| 251 testConstructor('pattern', (e) => e is svg.PatternElement); | 261 testConstructor('pattern', (e) => e is svg.PatternElement); |
| 252 testConstructor('polygon', (e) => e is svg.PolygonElement); | 262 testConstructor('polygon', (e) => e is svg.PolygonElement); |
| 253 testConstructor('polyline', (e) => e is svg.PolylineElement); | 263 testConstructor('polyline', (e) => e is svg.PolylineElement); |
| 254 testConstructor('radialGradient', (e) => e is svg.RadialGradientElement); | 264 testConstructor('radialGradient', (e) => e is svg.RadialGradientElement); |
| 255 testConstructor('rect', (e) => e is svg.RectElement); | 265 testConstructor('rect', (e) => e is svg.RectElement); |
| 256 test('script', () { | 266 test('script', () { |
| 257 expect(new svg.SvgElement.tag('script') is svg.ScriptElement, isTrue); | 267 expect(new svg.SvgElement.tag('script') is svg.ScriptElement, isTrue); |
| 258 }); | 268 }); |
| 259 testConstructor('stop', (e) => e is svg.StopElement); | 269 testConstructor('stop', (e) => e is svg.StopElement); |
| 260 testConstructor('style', (e) => e is svg.StyleElement); | 270 testConstructor('style', (e) => e is svg.StyleElement); |
| 261 testConstructor('switch', (e) => e is svg.SwitchElement); | 271 testConstructor('switch', (e) => e is svg.SwitchElement); |
| 262 testConstructor('symbol', (e) => e is svg.SymbolElement); | 272 testConstructor('symbol', (e) => e is svg.SymbolElement); |
| 263 testConstructor('tspan', (e) => e is svg.TSpanElement); | 273 testConstructor('tspan', (e) => e is svg.TSpanElement); |
| 264 testConstructor('text', (e) => e is svg.TextElement); | 274 testConstructor('text', (e) => e is svg.TextElement); |
| 265 testConstructor('textPath', (e) => e is svg.TextPathElement); | 275 testConstructor('textPath', (e) => e is svg.TextPathElement); |
| 266 testConstructor('title', (e) => e is svg.TitleElement); | 276 testConstructor('title', (e) => e is svg.TitleElement); |
| 267 testConstructor('use', (e) => e is svg.UseElement); | 277 testConstructor('use', (e) => e is svg.UseElement); |
| 268 testConstructor('view', (e) => e is svg.ViewElement); | 278 testConstructor('view', (e) => e is svg.ViewElement); |
| 269 // TODO(alanknight): Issue 23144 | 279 // TODO(alanknight): Issue 23144 |
| 270 testConstructor('animate', (e) => e is svg.AnimateElement, | 280 testConstructor('animate', (e) => e is svg.AnimateElement, |
| 271 svg.AnimateElement.supported); | 281 svg.AnimateElement.supported); |
| 272 testConstructor('animateMotion', (e) => e is svg.AnimateMotionElement, | 282 testConstructor('animateMotion', (e) => e is svg.AnimateMotionElement, |
| 273 svg.AnimateMotionElement.supported); | 283 svg.AnimateMotionElement.supported); |
| 274 testConstructor('animateTransform', (e) => e is svg.AnimateTransformElemen
t, | 284 testConstructor('animateTransform', (e) => e is svg.AnimateTransformElement, |
| 275 svg.AnimateTransformElement.supported); | 285 svg.AnimateTransformElement.supported); |
| 276 testConstructor('feBlend', (e) => e is svg.FEBlendElement, | 286 testConstructor('feBlend', (e) => e is svg.FEBlendElement, |
| 277 svg.FEBlendElement.supported); | 287 svg.FEBlendElement.supported); |
| 278 testConstructor('feColorMatrix', (e) => e is svg.FEColorMatrixElement, | 288 testConstructor('feColorMatrix', (e) => e is svg.FEColorMatrixElement, |
| 279 svg.FEColorMatrixElement.supported); | 289 svg.FEColorMatrixElement.supported); |
| 280 testConstructor('feComponentTransfer', | 290 testConstructor( |
| 281 (e) => e is svg.FEComponentTransferElement, | 291 'feComponentTransfer', |
| 282 svg.FEComponentTransferElement.supported); | 292 (e) => e is svg.FEComponentTransferElement, |
| 283 testConstructor('feConvolveMatrix', | 293 svg.FEComponentTransferElement.supported); |
| 284 (e) => e is svg.FEConvolveMatrixElement, | 294 testConstructor('feConvolveMatrix', (e) => e is svg.FEConvolveMatrixElement, |
| 285 svg.FEConvolveMatrixElement.supported); | 295 svg.FEConvolveMatrixElement.supported); |
| 286 testConstructor('feDiffuseLighting', | 296 testConstructor( |
| 287 (e) => e is svg.FEDiffuseLightingElement, | 297 'feDiffuseLighting', |
| 288 svg.FEDiffuseLightingElement.supported); | 298 (e) => e is svg.FEDiffuseLightingElement, |
| 289 testConstructor('feDisplacementMap', | 299 svg.FEDiffuseLightingElement.supported); |
| 290 (e) => e is svg.FEDisplacementMapElement, | 300 testConstructor( |
| 291 svg.FEDisplacementMapElement.supported); | 301 'feDisplacementMap', |
| 292 testConstructor('feDistantLight', (e) => e is svg.FEDistantLightElement, | 302 (e) => e is svg.FEDisplacementMapElement, |
| 293 svg.FEDistantLightElement.supported); | 303 svg.FEDisplacementMapElement.supported); |
| 294 testConstructor('feFlood', (e) => e is svg.FEFloodElement, | 304 testConstructor('feDistantLight', (e) => e is svg.FEDistantLightElement, |
| 295 svg.FEFloodElement.supported); | 305 svg.FEDistantLightElement.supported); |
| 296 testConstructor('feFuncA', (e) => e is svg.FEFuncAElement, | 306 testConstructor('feFlood', (e) => e is svg.FEFloodElement, |
| 297 svg.FEFuncAElement.supported); | 307 svg.FEFloodElement.supported); |
| 298 testConstructor('feFuncB', (e) => e is svg.FEFuncBElement, | 308 testConstructor('feFuncA', (e) => e is svg.FEFuncAElement, |
| 299 svg.FEFuncBElement.supported); | 309 svg.FEFuncAElement.supported); |
| 300 testConstructor('feFuncG', (e) => e is svg.FEFuncGElement, | 310 testConstructor('feFuncB', (e) => e is svg.FEFuncBElement, |
| 301 svg.FEFuncGElement.supported); | 311 svg.FEFuncBElement.supported); |
| 302 testConstructor('feFuncR', (e) => e is svg.FEFuncRElement, | 312 testConstructor('feFuncG', (e) => e is svg.FEFuncGElement, |
| 303 svg.FEFuncRElement.supported); | 313 svg.FEFuncGElement.supported); |
| 304 testConstructor('feGaussianBlur', (e) => e is svg.FEGaussianBlurElement, | 314 testConstructor('feFuncR', (e) => e is svg.FEFuncRElement, |
| 305 svg.FEGaussianBlurElement.supported); | 315 svg.FEFuncRElement.supported); |
| 306 testConstructor('feImage', (e) => e is svg.FEImageElement, | 316 testConstructor('feGaussianBlur', (e) => e is svg.FEGaussianBlurElement, |
| 307 svg.FEImageElement.supported); | 317 svg.FEGaussianBlurElement.supported); |
| 308 testConstructor('feMerge', (e) => e is svg.FEMergeElement, | 318 testConstructor('feImage', (e) => e is svg.FEImageElement, |
| 309 svg.FEMergeElement.supported); | 319 svg.FEImageElement.supported); |
| 310 testConstructor('feMergeNode', (e) => e is svg.FEMergeNodeElement, | 320 testConstructor('feMerge', (e) => e is svg.FEMergeElement, |
| 311 svg.FEMergeNodeElement.supported); | 321 svg.FEMergeElement.supported); |
| 312 testConstructor('feOffset', (e) => e is svg.FEOffsetElement, | 322 testConstructor('feMergeNode', (e) => e is svg.FEMergeNodeElement, |
| 313 svg.FEOffsetElement.supported); | 323 svg.FEMergeNodeElement.supported); |
| 314 testConstructor('fePointLight', (e) => e is svg.FEPointLightElement, | 324 testConstructor('feOffset', (e) => e is svg.FEOffsetElement, |
| 315 svg.FEPointLightElement.supported); | 325 svg.FEOffsetElement.supported); |
| 316 testConstructor('feSpecularLighting', | 326 testConstructor('fePointLight', (e) => e is svg.FEPointLightElement, |
| 317 (e) => e is svg.FESpecularLightingElement, | 327 svg.FEPointLightElement.supported); |
| 318 svg.FESpecularLightingElement.supported); | 328 testConstructor( |
| 319 testConstructor('feSpotLight', (e) => e is svg.FESpotLightElement, | 329 'feSpecularLighting', |
| 320 svg.FESpotLightElement.supported); | 330 (e) => e is svg.FESpecularLightingElement, |
| 321 testConstructor('feTile', (e) => e is svg.FETileElement, | 331 svg.FESpecularLightingElement.supported); |
| 322 svg.FETileElement.supported); | 332 testConstructor('feSpotLight', (e) => e is svg.FESpotLightElement, |
| 323 testConstructor('feTurbulence', (e) => e is svg.FETurbulenceElement, | 333 svg.FESpotLightElement.supported); |
| 324 svg.FETurbulenceElement.supported); | 334 testConstructor( |
| 325 testConstructor('filter', (e) => e is svg.FilterElement, | 335 'feTile', (e) => e is svg.FETileElement, svg.FETileElement.supported); |
| 326 svg.FilterElement.supported); | 336 testConstructor('feTurbulence', (e) => e is svg.FETurbulenceElement, |
| 327 testConstructor('foreignObject', (e) => e is svg.ForeignObjectElement, | 337 svg.FETurbulenceElement.supported); |
| 328 svg.ForeignObjectElement.supported, false); | 338 testConstructor( |
| 329 testConstructor('metadata', (e) => e is svg.MetadataElement); | 339 'filter', (e) => e is svg.FilterElement, svg.FilterElement.supported); |
| 330 testConstructor('set', (e) => e is svg.SetElement, | 340 testConstructor('foreignObject', (e) => e is svg.ForeignObjectElement, |
| 331 svg.SetElement.supported); | 341 svg.ForeignObjectElement.supported, false); |
| 342 testConstructor('metadata', (e) => e is svg.MetadataElement); |
| 343 testConstructor( |
| 344 'set', (e) => e is svg.SetElement, svg.SetElement.supported); |
| 332 }); | 345 }); |
| 333 | 346 |
| 334 group('outerHtml', () { | 347 group('outerHtml', () { |
| 335 test('outerHtml', () { | 348 test('outerHtml', () { |
| 336 final el = new svg.SvgSvgElement(); | 349 final el = new svg.SvgSvgElement(); |
| 337 el.children.add(new svg.CircleElement()); | 350 el.children.add(new svg.CircleElement()); |
| 338 el.children.add(new svg.PathElement()); | 351 el.children.add(new svg.PathElement()); |
| 339 expect([ | 352 expect( |
| 340 '<svg version="1.1"><circle></circle><path></path></svg>', | 353 [ |
| 341 '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">' | 354 '<svg version="1.1"><circle></circle><path></path></svg>', |
| 342 '<circle /><path /></svg>', | 355 '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">' |
| 343 ].contains(el.outerHtml), true); | 356 '<circle /><path /></svg>', |
| 357 ].contains(el.outerHtml), |
| 358 true); |
| 344 }); | 359 }); |
| 345 }); | 360 }); |
| 346 | 361 |
| 347 group('innerHtml', () { | 362 group('innerHtml', () { |
| 348 test('get', () { | 363 test('get', () { |
| 349 final el = new svg.SvgSvgElement(); | 364 final el = new svg.SvgSvgElement(); |
| 350 el.children.add(new svg.CircleElement()); | 365 el.children.add(new svg.CircleElement()); |
| 351 el.children.add(new svg.PathElement()); | 366 el.children.add(new svg.PathElement()); |
| 352 // Allow for odd IE serialization. | 367 // Allow for odd IE serialization. |
| 353 expect([ | 368 expect( |
| 354 '<circle></circle><path></path>', | 369 [ |
| 355 '<circle xmlns="http://www.w3.org/2000/svg" />' | 370 '<circle></circle><path></path>', |
| 356 '<path xmlns="http://www.w3.org/2000/svg" />' | 371 '<circle xmlns="http://www.w3.org/2000/svg" />' |
| 357 ].contains(el.innerHtml), true); | 372 '<path xmlns="http://www.w3.org/2000/svg" />' |
| 373 ].contains(el.innerHtml), |
| 374 true); |
| 358 }); | 375 }); |
| 359 | 376 |
| 360 test('set', () { | 377 test('set', () { |
| 361 final el = new svg.SvgSvgElement(); | 378 final el = new svg.SvgSvgElement(); |
| 362 el.children.add(new svg.CircleElement()); | 379 el.children.add(new svg.CircleElement()); |
| 363 el.children.add(new svg.PathElement()); | 380 el.children.add(new svg.PathElement()); |
| 364 el.innerHtml = '<rect></rect><a></a>'; | 381 el.innerHtml = '<rect></rect><a></a>'; |
| 365 expect(_nodeStrings(el.children), ["rect", "a"]); | 382 expect(_nodeStrings(el.children), ["rect", "a"]); |
| 366 }); | 383 }); |
| 367 }); | 384 }); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 388 expect(el.children.contains(items[1]), false); | 405 expect(el.children.contains(items[1]), false); |
| 389 | 406 |
| 390 el.children.length = 0; | 407 el.children.length = 0; |
| 391 expect(el.children.contains(items[0]), false); | 408 expect(el.children.contains(items[0]), false); |
| 392 }); | 409 }); |
| 393 }); | 410 }); |
| 394 | 411 |
| 395 group('elementset', () { | 412 group('elementset', () { |
| 396 test('set', () { | 413 test('set', () { |
| 397 final el = new svg.SvgSvgElement(); | 414 final el = new svg.SvgSvgElement(); |
| 398 el.children = [new svg.SvgElement.tag("circle"), new svg.SvgElement.tag("p
ath")]; | 415 el.children = [ |
| 416 new svg.SvgElement.tag("circle"), |
| 417 new svg.SvgElement.tag("path") |
| 418 ]; |
| 399 expect(el.nodes.length, 2); | 419 expect(el.nodes.length, 2); |
| 400 expect(el.nodes[0] is svg.CircleElement, true); | 420 expect(el.nodes[0] is svg.CircleElement, true); |
| 401 expect(el.nodes[1] is svg.PathElement, true); | 421 expect(el.nodes[1] is svg.PathElement, true); |
| 402 }); | 422 }); |
| 403 }); | 423 }); |
| 404 | 424 |
| 405 group('css', () { | 425 group('css', () { |
| 406 test('classes', () { | 426 test('classes', () { |
| 407 var el = new svg.CircleElement(); | 427 var el = new svg.CircleElement(); |
| 408 var classes = el.classes; | 428 var classes = el.classes; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 group('PathElement', () { | 481 group('PathElement', () { |
| 462 test('pathSegList', () { | 482 test('pathSegList', () { |
| 463 svg.PathElement path = | 483 svg.PathElement path = |
| 464 new svg.SvgElement.svg('<path d="M 100 100 L 300 100 L 200 300 z"/>'); | 484 new svg.SvgElement.svg('<path d="M 100 100 L 300 100 L 200 300 z"/>'); |
| 465 for (var seg in path.pathSegList) { | 485 for (var seg in path.pathSegList) { |
| 466 expect(seg is svg.PathSeg, isTrue); | 486 expect(seg is svg.PathSeg, isTrue); |
| 467 } | 487 } |
| 468 }); | 488 }); |
| 469 }); | 489 }); |
| 470 } | 490 } |
| OLD | NEW |