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

Unified Diff: test/codegen/lib/html/svgelement_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: ptal Created 4 years, 8 months 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
« no previous file with comments | « test/codegen/lib/html/svg_test.dart ('k') | test/codegen/lib/html/table_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/codegen/lib/html/svgelement_test.dart
diff --git a/test/codegen/lib/html/svgelement_test.dart b/test/codegen/lib/html/svgelement_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..1fa725996ad1ed9f94e2484e4ba5739678b83a8f
--- /dev/null
+++ b/test/codegen/lib/html/svgelement_test.dart
@@ -0,0 +1,474 @@
+// 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.
+
+library SvgElementTest;
+import 'dart:html';
+import 'dart:svg' as svg;
+import 'package:expect/expect.dart';
+import 'package:unittest/html_individual_config.dart';
+import 'package:unittest/unittest.dart';
+
+main() {
+ useHtmlIndividualConfiguration();
+
+ var isSvgSvgElement =
+ predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement');
+
+ List<String> _nodeStrings(Iterable<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,
+ [bool expectation = true, allowsInnerHtml = true]) {
+ test(tagName, () {
+ expect(isExpectedClass(new svg.SvgElement.tag(tagName)), expectation);
+ if (allowsInnerHtml) {
+ expect(isExpectedClass(new svg.SvgElement.svg('<$tagName></$tagName>')),
+ expectation && allowsInnerHtml);
+ }
+ });
+ }
+ group('additionalConstructors', () {
+ test('valid', () {
+ final svgContent =
+ "<svg version=\"1.1\">\n"
+ " <circle></circle>\n"
+ " <path></path>\n"
+ "</svg>";
+ final el = new svg.SvgElement.svg(svgContent);
+ expect(el, isSvgSvgElement);
+ expect(el.innerHtml, anyOf("<circle></circle><path></path>", '<circle '
+ 'xmlns="http://www.w3.org/2000/svg" /><path '
+ 'xmlns="http://www.w3.org/2000/svg" />'));
+ expect(el.outerHtml, anyOf(svgContent,
+ '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">\n '
+ '<circle />\n <path />\n</svg>'));
+ });
+
+ test('has no parent', () =>
+ expect(new svg.SvgElement.svg('<circle/>').parent, isNull)
+ );
+
+ test('empty', () {
+ expect(() => new svg.SvgElement.svg(""), throwsStateError);
+ });
+
+ test('too many elements', () {
+ expect(() => new svg.SvgElement.svg("<circle></circle><path></path>"),
+ throwsStateError);
+ });
+ });
+
+ // Unfortunately, because the filtering mechanism in unitttest is a regex done
+ group('supported_animate', () {
+ test('supported', () {
+ expect(svg.AnimateElement.supported, true);
+ });
+ });
+
+ group('supported_animateMotion', () {
+ test('supported', () {
+ expect(svg.AnimateMotionElement.supported, true);
+ });
+ });
+
+ group('supported_animateTransform', () {
+ test('supported', () {
+ expect(svg.AnimateTransformElement.supported, true);
+ });
+ });
+
+ group('supported_feBlend', () {
+ test('supported', () {
+ expect(svg.FEBlendElement.supported, true);
+ });
+ });
+
+ group('supported_feColorMatrix', () {
+ test('supported', () {
+ expect(svg.FEColorMatrixElement.supported, true);
+ });
+ });
+
+ group('supported_feComponentTransfer', () {
+ test('supported', () {
+ expect(svg.FEComponentTransferElement.supported, true);
+ });
+ });
+
+ group('supported_feConvolveMatrix', () {
+ test('supported', () {
+ expect(svg.FEConvolveMatrixElement.supported, true);
+ });
+ });
+
+ group('supported_feDiffuseLighting', () {
+ test('supported', () {
+ expect(svg.FEDiffuseLightingElement.supported, true);
+ });
+ });
+
+ group('supported_feDisplacementMap', () {
+ test('supported', () {
+ expect(svg.FEDisplacementMapElement.supported, true);
+ });
+ });
+
+ group('supported_feDistantLight', () {
+ test('supported', () {
+ expect(svg.FEDistantLightElement.supported, true);
+ });
+ });
+
+ group('supported_feFlood', () {
+ test('supported', () {
+ expect(svg.FEFloodElement.supported, true);
+ });
+ });
+
+ group('supported_feFuncA', () {
+ test('supported', () {
+ expect(svg.FEFuncAElement.supported, true);
+ });
+ });
+
+ group('supported_feFuncB', () {
+ test('supported', () {
+ expect(svg.FEFuncBElement.supported, true);
+ });
+ });
+
+ group('supported_feFuncG', () {
+ test('supported', () {
+ expect(svg.FEFuncGElement.supported, true);
+ });
+ });
+
+ group('supported_feFuncR', () {
+ test('supported', () {
+ expect(svg.FEFuncRElement.supported, true);
+ });
+ });
+
+ group('supported_feGaussianBlur', () {
+ test('supported', () {
+ expect(svg.FEGaussianBlurElement.supported, true);
+ });
+ });
+
+ group('supported_feImage', () {
+ test('supported', () {
+ expect(svg.FEImageElement.supported, true);
+ });
+ });
+
+ group('supported_feMerge', () {
+ test('supported', () {
+ expect(svg.FEMergeElement.supported, true);
+ });
+ });
+
+ group('supported_feMergeNode', () {
+ test('supported', () {
+ expect(svg.FEMergeNodeElement.supported, true);
+ });
+ });
+
+ group('supported_feOffset', () {
+ test('supported', () {
+ expect(svg.FEOffsetElement.supported, true);
+ });
+ });
+
+ group('supported_feComponentTransfer', () {
+ test('supported', () {
+ expect(svg.FEPointLightElement.supported, true);
+ });
+ });
+
+ group('supported_feSpecularLighting', () {
+ test('supported', () {
+ expect(svg.FESpecularLightingElement.supported, true);
+ });
+ });
+
+ group('supported_feComponentTransfer', () {
+ test('supported', () {
+ expect(svg.FESpotLightElement.supported, true);
+ });
+ });
+
+ group('supported_feTile', () {
+ test('supported', () {
+ expect(svg.FETileElement.supported, true);
+ });
+ });
+
+ group('supported_feTurbulence', () {
+ test('supported', () {
+ expect(svg.FETurbulenceElement.supported, true);
+ });
+ });
+
+ group('supported_filter', () {
+ test('supported', () {
+ expect(svg.FilterElement.supported, true);
+ });
+ });
+
+ group('supported_foreignObject', () {
+ test('supported', () {
+ expect(svg.ForeignObjectElement.supported, true);
+ });
+ });
+
+ group('supported_set', () {
+ test('supported', () {
+ expect(svg.SetElement.supported, true);
+ });
+ });
+
+ group('constructors', () {
+ testConstructor('a', (e) => e is svg.AElement);
+ testConstructor('circle', (e) => e is svg.CircleElement);
+ testConstructor('clipPath', (e) => e is svg.ClipPathElement);
+ testConstructor('defs', (e) => e is svg.DefsElement);
+ testConstructor('desc', (e) => e is svg.DescElement);
+ testConstructor('ellipse', (e) => e is svg.EllipseElement);
+ testConstructor('g', (e) => e is svg.GElement);
+ testConstructor('image', (e) => e is svg.ImageElement);
+ testConstructor('line', (e) => e is svg.LineElement);
+ testConstructor('linearGradient', (e) => e is svg.LinearGradientElement);
+ testConstructor('marker', (e) => e is svg.MarkerElement);
+ testConstructor('mask', (e) => e is svg.MaskElement);
+ testConstructor('path', (e) => e is svg.PathElement);
+ testConstructor('pattern', (e) => e is svg.PatternElement);
+ testConstructor('polygon', (e) => e is svg.PolygonElement);
+ testConstructor('polyline', (e) => e is svg.PolylineElement);
+ testConstructor('radialGradient', (e) => e is svg.RadialGradientElement);
+ testConstructor('rect', (e) => e is svg.RectElement);
+ test('script', () {
+ expect(new svg.SvgElement.tag('script') is svg.ScriptElement, isTrue);
+ });
+ testConstructor('stop', (e) => e is svg.StopElement);
+ testConstructor('style', (e) => e is svg.StyleElement);
+ testConstructor('switch', (e) => e is svg.SwitchElement);
+ testConstructor('symbol', (e) => e is svg.SymbolElement);
+ testConstructor('tspan', (e) => e is svg.TSpanElement);
+ testConstructor('text', (e) => e is svg.TextElement);
+ testConstructor('textPath', (e) => e is svg.TextPathElement);
+ testConstructor('title', (e) => e is svg.TitleElement);
+ testConstructor('use', (e) => e is svg.UseElement);
+ testConstructor('view', (e) => e is svg.ViewElement);
+ // TODO(alanknight): Issue 23144
+ testConstructor('animate', (e) => e is svg.AnimateElement,
+ svg.AnimateElement.supported);
+ testConstructor('animateMotion', (e) => e is svg.AnimateMotionElement,
+ svg.AnimateMotionElement.supported);
+ testConstructor('animateTransform', (e) => e is svg.AnimateTransformElement,
+ svg.AnimateTransformElement.supported);
+ testConstructor('feBlend', (e) => e is svg.FEBlendElement,
+ svg.FEBlendElement.supported);
+ testConstructor('feColorMatrix', (e) => e is svg.FEColorMatrixElement,
+ svg.FEColorMatrixElement.supported);
+ testConstructor('feComponentTransfer',
+ (e) => e is svg.FEComponentTransferElement,
+ svg.FEComponentTransferElement.supported);
+ testConstructor('feConvolveMatrix',
+ (e) => e is svg.FEConvolveMatrixElement,
+ svg.FEConvolveMatrixElement.supported);
+ testConstructor('feDiffuseLighting',
+ (e) => e is svg.FEDiffuseLightingElement,
+ svg.FEDiffuseLightingElement.supported);
+ testConstructor('feDisplacementMap',
+ (e) => e is svg.FEDisplacementMapElement,
+ svg.FEDisplacementMapElement.supported);
+ testConstructor('feDistantLight', (e) => e is svg.FEDistantLightElement,
+ svg.FEDistantLightElement.supported);
+ testConstructor('feFlood', (e) => e is svg.FEFloodElement,
+ svg.FEFloodElement.supported);
+ testConstructor('feFuncA', (e) => e is svg.FEFuncAElement,
+ svg.FEFuncAElement.supported);
+ testConstructor('feFuncB', (e) => e is svg.FEFuncBElement,
+ svg.FEFuncBElement.supported);
+ testConstructor('feFuncG', (e) => e is svg.FEFuncGElement,
+ svg.FEFuncGElement.supported);
+ testConstructor('feFuncR', (e) => e is svg.FEFuncRElement,
+ svg.FEFuncRElement.supported);
+ testConstructor('feGaussianBlur', (e) => e is svg.FEGaussianBlurElement,
+ svg.FEGaussianBlurElement.supported);
+ testConstructor('feImage', (e) => e is svg.FEImageElement,
+ svg.FEImageElement.supported);
+ testConstructor('feMerge', (e) => e is svg.FEMergeElement,
+ svg.FEMergeElement.supported);
+ testConstructor('feMergeNode', (e) => e is svg.FEMergeNodeElement,
+ svg.FEMergeNodeElement.supported);
+ testConstructor('feOffset', (e) => e is svg.FEOffsetElement,
+ svg.FEOffsetElement.supported);
+ testConstructor('fePointLight', (e) => e is svg.FEPointLightElement,
+ svg.FEPointLightElement.supported);
+ testConstructor('feSpecularLighting',
+ (e) => e is svg.FESpecularLightingElement,
+ svg.FESpecularLightingElement.supported);
+ testConstructor('feSpotLight', (e) => e is svg.FESpotLightElement,
+ svg.FESpotLightElement.supported);
+ testConstructor('feTile', (e) => e is svg.FETileElement,
+ svg.FETileElement.supported);
+ testConstructor('feTurbulence', (e) => e is svg.FETurbulenceElement,
+ svg.FETurbulenceElement.supported);
+ testConstructor('filter', (e) => e is svg.FilterElement,
+ svg.FilterElement.supported);
+ testConstructor('foreignObject', (e) => e is svg.ForeignObjectElement,
+ svg.ForeignObjectElement.supported, false);
+ testConstructor('metadata', (e) => e is svg.MetadataElement);
+ testConstructor('set', (e) => e is svg.SetElement,
+ svg.SetElement.supported);
+ });
+
+ group('outerHtml', () {
+ test('outerHtml', () {
+ final el = new svg.SvgSvgElement();
+ el.children.add(new svg.CircleElement());
+ el.children.add(new svg.PathElement());
+ expect([
+ '<svg version="1.1"><circle></circle><path></path></svg>',
+ '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">'
+ '<circle /><path /></svg>',
+ ].contains(el.outerHtml), true);
+ });
+ });
+
+ group('innerHtml', () {
+ test('get', () {
+ final el = new svg.SvgSvgElement();
+ el.children.add(new svg.CircleElement());
+ el.children.add(new svg.PathElement());
+ // Allow for odd IE serialization.
+ expect([
+ '<circle></circle><path></path>',
+ '<circle xmlns="http://www.w3.org/2000/svg" />'
+ '<path xmlns="http://www.w3.org/2000/svg" />'
+ ].contains(el.innerHtml), true);
+ });
+
+ test('set', () {
+ final el = new svg.SvgSvgElement();
+ el.children.add(new svg.CircleElement());
+ el.children.add(new svg.PathElement());
+ el.innerHtml = '<rect></rect><a></a>';
+ expect(_nodeStrings(el.children), ["rect", "a"]);
+ });
+ });
+
+ group('elementget', () {
+ test('get', () {
+ final el = new svg.SvgElement.svg("""
+<svg version="1.1">
+ <circle></circle>
+ <path></path>
+ text
+</svg>""");
+ expect(_nodeStrings(el.children), ["circle", "path"]);
+ });
+
+ test('resize', () {
+ var el = new svg.SvgSvgElement();
+ var items = [new svg.CircleElement(), new svg.RectElement()];
+ el.children = items;
+ expect(el.children.length, 2);
+ el.children.length = 1;
+ expect(el.children.length, 1);
+ expect(el.children.contains(items[0]), true);
+ expect(el.children.contains(items[1]), false);
+
+ el.children.length = 0;
+ expect(el.children.contains(items[0]), false);
+ });
+ });
+
+ group('elementset', () {
+ test('set', () {
+ final el = new svg.SvgSvgElement();
+ el.children = [new svg.SvgElement.tag("circle"), new svg.SvgElement.tag("path")];
+ expect(el.nodes.length, 2);
+ expect(el.nodes[0] is svg.CircleElement, true);
+ expect(el.nodes[1] is svg.PathElement, true);
+ });
+ });
+
+ group('css', () {
+ test('classes', () {
+ var el = new svg.CircleElement();
+ var classes = el.classes;
+ expect(el.classes.length, 0);
+ classes.toggle('foo');
+ expect(el.classes.length, 1);
+ classes.toggle('foo');
+ expect(el.classes.length, 0);
+ });
+
+ test('classes-add-bad', () {
+ var el = new svg.CircleElement();
+ expect(() => el.classes.add(''), throws);
+ expect(() => el.classes.add('foo bar'), throws);
+ });
+ test('classes-remove-bad', () {
+ var el = new svg.CircleElement();
+ expect(() => el.classes.remove(''), throws);
+ expect(() => el.classes.remove('foo bar'), throws);
+ });
+ test('classes-toggle-token', () {
+ var el = new svg.CircleElement();
+ expect(() => el.classes.toggle(''), throws);
+ expect(() => el.classes.toggle('', true), throws);
+ expect(() => el.classes.toggle('', false), throws);
+ expect(() => el.classes.toggle('foo bar'), throws);
+ expect(() => el.classes.toggle('foo bar', true), throws);
+ expect(() => el.classes.toggle('foo bar', false), throws);
+ });
+ test('classes-contains-bad', () {
+ var el = new svg.CircleElement();
+ // Non-strings => false, strings must be valid tokens.
+ expect(el.classes.contains(1), isFalse);
+ expect(() => el.classes.contains(''), throws);
+ expect(() => el.classes.contains('foo bar'), throws);
+ });
+ });
+
+ group('getBoundingClientRect', () {
+ test('is a Rectangle', () {
+ var element = new svg.RectElement();
+ element.attributes['width'] = '100';
+ element.attributes['height'] = '100';
+ var root = new svg.SvgSvgElement();
+ root.append(element);
+
+ document.body.append(root);
+
+ var rect = element.getBoundingClientRect();
+ expect(rect is Rectangle, isTrue);
+ expect(rect.width, closeTo(100, 1));
+ expect(rect.height, closeTo(100, 1));
+ });
+ });
+
+ group('PathElement', () {
+ test('pathSegList', () {
+ svg.PathElement path =
+ new svg.SvgElement.svg('<path d="M 100 100 L 300 100 L 200 300 z"/>');
+ for (var seg in path.pathSegList) {
+ expect(seg is svg.PathSeg, isTrue);
+ }
+ });
+ });
+}
« no previous file with comments | « test/codegen/lib/html/svg_test.dart ('k') | test/codegen/lib/html/table_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698