Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(917)

Unified Diff: client/tests/client/html/SVGElementTests.dart

Issue 8965006: Support SVGElement#elements, #innerHTML, and #outerHTML. Also add a .svg constructor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: client/tests/client/html/SVGElementTests.dart
diff --git a/client/tests/client/html/SVGElementTests.dart b/client/tests/client/html/SVGElementTests.dart
new file mode 100644
index 0000000000000000000000000000000000000000..64adfea101029d590c86f4988e32e71038ad7489
--- /dev/null
+++ b/client/tests/client/html/SVGElementTests.dart
@@ -0,0 +1,181 @@
+// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+
+void testSVGElement() {
+ Collection<String> _nodeStrings(Collection<Node> input) {
+ final out = new List<String>();
+ for (Node n in input) {
+ if (n is Element) {
+ Element e = n;
+ out.add(e.tagName);
+ } else {
+ out.add(n.text);
+ }
+ }
+ return out;
+ };
+
+ testConstructor(String tagName, Function isExpectedClass) {
+ test(tagName, () {
+ Expect.isTrue(isExpectedClass(new SVGElement.tag(tagName)));
+ Expect.isTrue(isExpectedClass(
+ new SVGElement.svg('<$tagName></$tagName>')));
+ });
+ }
+
+ group('constructors', () {
+ group('svg', () {
+ test('valid', () {
+ final svg = """
+<svg version="1.1">
+ <circle></circle>
+ <path></path>
+</svg>""";
+ final el = new SVGElement.svg(svg);
+ Expect.isTrue(el is SVGSVGElement);
+ Expect.equals("<circle></circle><path></path>", el.innerHTML);
+ Expect.equals(svg, el.outerHTML);
+ });
+
+ test('empty', () {
+ Expect.throws(() => new SVGElement.svg(""),
+ (e) => e is IllegalArgumentException);
+ });
+
+ test('too many elements', () {
+ Expect.throws(
+ () => new SVGElement.svg("<circle></circle><path></path>"),
+ (e) => e is IllegalArgumentException);
+ });
+ });
+
+ testConstructor('a', (e) => e is SVGAElement);
+ testConstructor('altGlyphDef', (e) => e is SVGAltGlyphDefElement);
+ testConstructor('altGlyph', (e) => e is SVGAltGlyphElement);
+ testConstructor('animateColor', (e) => e is SVGAnimateColorElement);
+ testConstructor('animate', (e) => e is SVGAnimateElement);
+ // WebKit doesn't recognize animateMotion
+ // testConstructor('animateMotion', (e) => e is SVGAnimateMotionElement);
+ testConstructor('animateTransform', (e) => e is SVGAnimateTransformElement);
+ testConstructor('circle', (e) => e is SVGCircleElement);
+ testConstructor('clipPath', (e) => e is SVGClipPathElement);
+ testConstructor('cursor', (e) => e is SVGCursorElement);
+ testConstructor('defs', (e) => e is SVGDefsElement);
+ testConstructor('desc', (e) => e is SVGDescElement);
+ testConstructor('ellipse', (e) => e is SVGEllipseElement);
+ testConstructor('feBlend', (e) => e is SVGFEBlendElement);
+ testConstructor('feColorMatrix', (e) => e is SVGFEColorMatrixElement);
+ testConstructor('feComponentTransfer',
+ (e) => e is SVGFEComponentTransferElement);
+ testConstructor('feConvolveMatrix', (e) => e is SVGFEConvolveMatrixElement);
+ testConstructor('feDiffuseLighting',
+ (e) => e is SVGFEDiffuseLightingElement);
+ testConstructor('feDisplacementMap',
+ (e) => e is SVGFEDisplacementMapElement);
+ testConstructor('feDistantLight', (e) => e is SVGFEDistantLightElement);
+ testConstructor('feDropShadow', (e) => e is SVGFEDropShadowElement);
+ testConstructor('feFlood', (e) => e is SVGFEFloodElement);
+ testConstructor('feFuncA', (e) => e is SVGFEFuncAElement);
+ testConstructor('feFuncB', (e) => e is SVGFEFuncBElement);
+ testConstructor('feFuncG', (e) => e is SVGFEFuncGElement);
+ testConstructor('feFuncR', (e) => e is SVGFEFuncRElement);
+ testConstructor('feGaussianBlur', (e) => e is SVGFEGaussianBlurElement);
+ testConstructor('feImage', (e) => e is SVGFEImageElement);
+ testConstructor('feMerge', (e) => e is SVGFEMergeElement);
+ testConstructor('feMergeNode', (e) => e is SVGFEMergeNodeElement);
+ testConstructor('feOffset', (e) => e is SVGFEOffsetElement);
+ testConstructor('fePointLight', (e) => e is SVGFEPointLightElement);
+ testConstructor('feSpecularLighting',
+ (e) => e is SVGFESpecularLightingElement);
+ testConstructor('feSpotLight', (e) => e is SVGFESpotLightElement);
+ testConstructor('feTile', (e) => e is SVGFETileElement);
+ testConstructor('feTurbulence', (e) => e is SVGFETurbulenceElement);
+ testConstructor('filter', (e) => e is SVGFilterElement);
+ testConstructor('font', (e) => e is SVGFontElement);
+ testConstructor('font-face', (e) => e is SVGFontFaceElement);
+ testConstructor('font-face-format', (e) => e is SVGFontFaceFormatElement);
+ testConstructor('font-face-name', (e) => e is SVGFontFaceNameElement);
+ testConstructor('font-face-src', (e) => e is SVGFontFaceSrcElement);
+ testConstructor('font-face-uri', (e) => e is SVGFontFaceUriElement);
+ testConstructor('foreignObject', (e) => e is SVGForeignObjectElement);
+ testConstructor('g', (e) => e is SVGGElement);
+ testConstructor('glyph', (e) => e is SVGGlyphElement);
+ testConstructor('glyphRef', (e) => e is SVGGlyphRefElement);
+ // WebKit doesn't recognize hkern
+ // testConstructor('hkern', (e) => e is SVGHKernElement);
+ testConstructor('image', (e) => e is SVGImageElement);
+ testConstructor('line', (e) => e is SVGLineElement);
+ testConstructor('linearGradient', (e) => e is SVGLinearGradientElement);
+ // WebKit doesn't recognize mpath
+ // testConstructor('mpath', (e) => e is SVGMPathElement);
+ testConstructor('marker', (e) => e is SVGMarkerElement);
+ testConstructor('mask', (e) => e is SVGMaskElement);
+ testConstructor('metadata', (e) => e is SVGMetadataElement);
+ testConstructor('missing-glyph', (e) => e is SVGMissingGlyphElement);
+ testConstructor('path', (e) => e is SVGPathElement);
+ testConstructor('pattern', (e) => e is SVGPatternElement);
+ testConstructor('polygon', (e) => e is SVGPolygonElement);
+ testConstructor('polyline', (e) => e is SVGPolylineElement);
+ testConstructor('radialGradient', (e) => e is SVGRadialGradientElement);
+ testConstructor('rect', (e) => e is SVGRectElement);
+ testConstructor('script', (e) => e is SVGScriptElement);
+ testConstructor('set', (e) => e is SVGSetElement);
+ testConstructor('stop', (e) => e is SVGStopElement);
+ testConstructor('style', (e) => e is SVGStyleElement);
+ testConstructor('switch', (e) => e is SVGSwitchElement);
+ testConstructor('symbol', (e) => e is SVGSymbolElement);
+ testConstructor('tref', (e) => e is SVGTRefElement);
+ testConstructor('tspan', (e) => e is SVGTSpanElement);
+ testConstructor('text', (e) => e is SVGTextElement);
+ testConstructor('textPath', (e) => e is SVGTextPathElement);
+ testConstructor('title', (e) => e is SVGTitleElement);
+ testConstructor('use', (e) => e is SVGUseElement);
+ testConstructor('vkern', (e) => e is SVGVKernElement);
+ testConstructor('view', (e) => e is SVGViewElement);
+ });
+
+ test('outerHTML', () {
+ final el = new SVGSVGElement();
+ el.elements.add(new SVGElement.tag("circle"));
+ el.elements.add(new SVGElement.tag("path"));
+ Expect.equals('<svg version="1.1"><circle></circle><path></path></svg>',
+ el.outerHTML);
+ });
+
+ group('innerHTML', () {
+ test('get', () {
+ final el = new SVGSVGElement();
+ el.elements.add(new SVGElement.tag("circle"));
+ el.elements.add(new SVGElement.tag("path"));
+ Expect.equals('<circle></circle><path></path>', el.innerHTML);
+ });
+
+ test('set', () {
+ final el = new SVGSVGElement();
+ el.elements.add(new SVGElement.tag("circle"));
+ el.elements.add(new SVGElement.tag("path"));
+ el.innerHTML = '<rect></rect><a></a>';
+ Expect.listEquals(["rect", "a"], _nodeStrings(el.elements));
+ });
+ });
+
+ group('elements', () {
+ test('get', () {
+ final el = new SVGElement.svg("""
+<svg version="1.1">
+ <circle></circle>
+ <path></path>
+ text
+</svg>""");
+ Expect.listEquals(["circle", "path"], _nodeStrings(el.elements));
+ });
+
+ test('set', () {
+ final el = new SVGSVGElement();
+ el.elements = [new SVGElement.tag("circle"), new SVGElement.tag("path")];
+ Expect.equals('<circle></circle><path></path>', el.innerHTML);
+ });
+ });
+}

Powered by Google App Engine
This is Rietveld 408576698