// Copyright (c) 2013, 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. import 'dart:html'; import 'dart:svg' as svg; import 'package:expect/minitest.dart'; main() { group('svgPresence', () { var isSvgElement = predicate((x) => x is svg.SvgElement, 'is a SvgElement'); test('simpleRect', () { var div = new Element.tag('div'); document.body.append(div); div.setInnerHtml(r''' ''', validator: new NodeValidatorBuilder()..allowSvg()); var e = document.querySelector('#svg1'); expect(e, isNotNull); svg.RectElement r = document.querySelector('#rect1'); expect(r.x.baseVal.value, 10); expect(r.y.baseVal.value, 20); expect(r.height.baseVal.value, 40); expect(r.width.baseVal.value, 130); expect(r.rx.baseVal.value, 5); }); test('trailing newline', () { // Ensures that we handle SVG with trailing newlines. var logo = new svg.SvgElement.svg(""" """); expect(logo, isSvgElement); }); }); group('svgInterfaceMatch', () { // Test that SVG elements explicitly implement the IDL interfaces (is-checks // only, see SVGTest3 for behavioural tests). insertTestDiv() { var element = new Element.tag('div'); element.setInnerHtml(r''' ''', validator: new NodeValidatorBuilder()..allowSvg()); document.body.append(element); return element; } var isElement = predicate((x) => x is Element, 'is an Element'); var isSvgElement = predicate((x) => x is svg.SvgElement, 'is a SvgElement'); var isSvgSvgElement = predicate((x) => x is svg.SvgSvgElement, 'is a SvgSvgElement'); var isNotSvgSvgElement = predicate((x) => x is! svg.SvgSvgElement, 'is not a SvgSvgElement'); var isNode = predicate((x) => x is Node, 'is a Node'); var isSvgNumber = predicate((x) => x is svg.Number, 'is a svg.Number'); var isNotSvgNumber = predicate((x) => x is! svg.Number, 'is not a svg.Number'); var isSvgRect = predicate((x) => x is svg.Rect, 'is a svg.Rect'); var isNotSvgRect = predicate((x) => x is! svg.Rect, 'is not a svg.Rect'); test('rect_isChecks', () { var div = insertTestDiv(); var r = document.querySelector('#rect1'); // Direct inheritance chain expect(r, isSvgElement); expect(r, isElement); expect(r, isNode); // Interfaces not implemented. expect(r, isNotSvgNumber); expect(r, isNotSvgRect); expect(r, isNotSvgSvgElement); div.remove(); }); }); insertTestDiv() { var element = new Element.tag('div'); element.innerHtml = r''' '''; document.body.append(element); return element; } group('svgBehavioral', () { // Test that SVG elements have the operations advertised through all the IDL // interfaces. This is a 'duck typing' test, and does not explicitly use // 'is' checks on the expected interfaces (that is in the test group above). var isString = predicate((x) => x is String, 'is a String'); var isStringList = predicate((x) => x is List, 'is a List'); var isSvgMatrix = predicate((x) => x is svg.Matrix, 'is a svg.Matrix'); var isSvgAnimatedBoolean = predicate((x) => x is svg.AnimatedBoolean, 'is an svg.AnimatedBoolean'); var isSvgAnimatedString = predicate((x) => x is svg.AnimatedString, 'is an svg.AnimatedString'); var isSvgRect = predicate((x) => x is svg.Rect, 'is a svg.Rect'); var isSvgAnimatedTransformList = predicate( (x) => x is svg.AnimatedTransformList, 'is an svg.AnimatedTransformList'); var isCssStyleDeclaration = predicate((x) => x is CssStyleDeclaration, 'is a CssStyleDeclaration'); testRect(name, checker) { test(name, () { var div = insertTestDiv(); var r = document.querySelector('#rect1'); checker(r); div.remove(); }); } }); }