<svg version="1.1" baseProfile="basic" onload="domTest(evt)" id="svg-root" | |
width="100%" height="100%" viewBox="0 0 480 360" | |
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |
<!--======================================================================--> | |
<!--= SVG 1.1 2nd Edition Test Case =--> | |
<!--======================================================================--> | |
<!--= Copyright 2009 World Wide Web Consortium, (Massachusetts =--> | |
<!--= Institute of Technology, European Research Consortium for =--> | |
<!--= Informatics and Mathematics (ERCIM), Keio University). =--> | |
<!--= All Rights Reserved. =--> | |
<!--= See http://www.w3.org/Consortium/Legal/. =--> | |
<!--======================================================================--> | |
<d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/" | |
template-version="1.4" reviewer="SVGWG" author="VH" status="accepted" | |
version="$Revision: 1.8 $" testname="$RCSfile: struct-dom-01-b.svg,v $"> | |
<d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/struct.html#DOMInterfaces"> | |
<p> | |
Verify the basic capability to handle the SVG DOM API. | |
</p> | |
<p> | |
The test is composed of a top | |
level svg element with an 'onload' event handler and a rect element. Both | |
the svg and the rect elements have an identifier. The 'onload' handler | |
invokes SVG-specific DOM API methods which use these identifiers. | |
</p> | |
<p> | |
First, the handler gets the SVG element owner of the rect element and checks it has | |
the expected identifier. Then, the handler accesses the coordinates of the rect element | |
and uses them to build a 'shadow' rectangle under the existing one. Finally, the 'shadow' | |
rectangle is created using the SVGSVGElement's createSVGRect method. | |
</p> | |
</d:testDescription> | |
<d:operatorScript xmlns="http://www.w3.org/1999/xhtml"> | |
<p> | |
Run the test. No interaction required. | |
</p> | |
</d:operatorScript> | |
<d:passCriteria xmlns="http://www.w3.org/1999/xhtml"> | |
<p>The test passes if:</p> | |
<ul> | |
<li>The text "This document's root identifier is: svg-root" is shown.</li> | |
<li>A green rectangle with a black shadow is shown.</li> | |
</ul> | |
</d:passCriteria> | |
</d:SVGTestCase> | |
<title id="test-title">$RCSfile: struct-dom-01-b.svg,v $</title> | |
<defs> | |
<font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F"> | |
<font-face-src> | |
<font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/> | |
</font-face-src> | |
</font-face> | |
</defs> | |
<g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18"> | |
<script type="text/ecmascript" xlink:href="../resources/testharness.js"></script> | |
<script type="text/ecmascript"><![CDATA[ | |
function domTest(evt) { | |
var svg_ns = "http://www.w3.org/2000/svg"; | |
// Get Document | |
var target = evt.target; | |
var doc = target.ownerDocument; | |
// | |
// Test that our rectangle is an SVGElement instance | |
// | |
var rect = doc.getElementById("rectId"); | |
var rootSVG = rect.ownerSVGElement; | |
var rootId = rootSVG.getAttribute( "id" ); | |
// Insert a new text element to the DOM tree using the id | |
var newText = doc.createElementNS(svg_ns, 'text'); | |
newText.setAttribute('x', '50'); | |
newText.setAttribute('y', '100'); | |
var message = "This document's root identifier is: " + rootId; | |
var textContent = doc.createTextNode(message); | |
newText.appendChild(textContent); | |
rect.parentNode.appendChild(newText); | |
// | |
// Now, check that our rectangle is an instance of SVGRect by accessing | |
// specific methods in order to get its x, y, width and height attributes. | |
// | |
var x = rect.x.baseVal.value; // SVGRect -> SVGAnimatedLenght -> SVGLength -> long | |
var y = rect.y.baseVal.value; | |
var width = rect.width.baseVal.value; | |
var height = rect.height.baseVal.value; | |
// | |
// Now, build a new SVGRect through the SVGSVGElement interface. | |
// | |
var newRect = doc.createElementNS(svg_ns, 'rect'); | |
// | |
// Set the x, y, width and height of this element | |
// | |
newRect.x.baseVal.value = x + 10; | |
newRect.y.baseVal.value = y + 10; | |
newRect.setAttribute("width", width); | |
newRect.setAttribute("height", height); | |
// | |
// Insert new element in DOM tree | |
// | |
rect.parentNode.insertBefore(newRect, rect); | |
// | |
// Check the pass criteria using the JS framework | |
// | |
test(function() {assert_equals(rootId, "svg-root")}, "Assert that the document's root identifier is 'svg-root'."); | |
test(function() { | |
assert_true(newRect instanceof SVGRectElement); | |
assert_equals(newRect.getAttribute('x'), String(x+10)); | |
assert_equals(newRect.getAttribute('y'), String(y+10)); | |
assert_equals(newRect.getAttribute('width'), String(width)); | |
assert_equals(newRect.getAttribute('height'), String(height)); | |
}, "Assert that 'newRect' is replica (ignoring fill) of 'rect' with different x and y."); | |
} | |
]]></script> | |
<!--======================================================================--> | |
<!-- Since this test is examining the SVG DOM, it could use any language --> | |
<!-- binding. Here is the equivalent code for the Java binding --> | |
<!-- | |
// | |
// Test that our rectangle is an SVGElement instance | |
// | |
SVGRectElement rect = (SVGRectElement) doc.getElementById("rectId"); | |
SVGElement rootSVG = rect.getOwnerSVGElement(); | |
String rootId = rootSVG.getId(); | |
// Insert a new text element to the DOM tree using the id | |
Element newText = doc.createElement("text"); | |
newText.setAttribute("x", "50"); | |
newText.setAttribute("y", "100"); | |
String message = "This document's root identifier is=" " + rootId" | |
Text textContent = doc.createTextNode(message); | |
newText.appendChild(textContent); | |
rect.getParentNode().appendChild(newText); | |
// | |
// Now, check that our rectangle is an instance of SVGRect by accessing | |
// specific methods in order to get its x, y, width and height attributes. | |
// | |
float x = rect.getX().getBaseVal().getValue(); | |
float y = rect.getY().getBaseVal().getValue(); | |
float width = rect.getWidth().getBaseVal().getValue(); | |
float height = rect.getHeight().getBaseVal().getValue(); | |
// | |
// Now, build a new SVGRect through the SVGSVGElement interface. | |
// | |
SVGRectElement newRect = (SVGRectElement) doc.createElement("rect"); | |
// | |
// Set the x, y, width and height of this element | |
// | |
newRect.getX().getBaseVal().setValue(x + 10); | |
newRect.getY().getBaseVal().setValue(y + 10); | |
newRect.getWidth().getBaseVal().setValue(width); | |
newRect.getHeight().getBaseVal().setValue(height); | |
// | |
// Insert new element in DOM tree | |
// | |
alert(newRect) | |
rect.getParentNode().insertBefore(newRect, rect); | |
--> | |
<!-- ===================================================================== --> | |
<!-- The following rectangle's is accessed in the 'domTest' ECMA Script --> | |
<!-- handler. --> | |
<!-- ===================================================================== --> | |
<rect id="rectId" x="40" y="150" width="50" height="50" fill="green"/> | |
</g> | |
<g font-family="SVGFreeSansASCII,sans-serif" font-size="32"> | |
<text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.8 $</text> | |
</g> | |
<rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000000"/> | |
<!-- comment out this watermark once the test is approved --> | |
<!--<g id="draft-watermark"> | |
<rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/> | |
<text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240" | |
text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text> | |
</g>--> | |
</svg> |