| Index: LayoutTests/fast/svg/svglength.html | 
| diff --git a/LayoutTests/fast/svg/svglength.html b/LayoutTests/fast/svg/svglength.html | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..9eaf1d76db4d25a3a91279cf599ef42482c6020f | 
| --- /dev/null | 
| +++ b/LayoutTests/fast/svg/svglength.html | 
| @@ -0,0 +1,189 @@ | 
| +<!doctype html> | 
| +<title>SVGlength tests</title> | 
| +<script src=../../resources/testharness.js></script> | 
| +<script src=../../resources/testharnessreport.js></script> | 
| +<div id="testcontainer"> | 
| +<svg width="1" height="1" visibility="hidden"> | 
| +</svg> | 
| +</div> | 
| +<div id=log></div> | 
| +<script> | 
| +var svg = document.querySelector("svg"); | 
| +var EPSILON = Math.pow(2, -8); | 
| +var lengths = [ 10, 0, 360, 500, 90, 180, 45, 25.9]; | 
| + | 
| +var units = { | 
| +    "" : 1, | 
| +    "%": 2, | 
| +    "em": 3, | 
| +    "ex": 4, | 
| +    "px": 5, | 
| +    "cm": 6, | 
| +    "mm": 7, | 
| +    "in": 8, | 
| +    "pt": 9, | 
| +    "pc": 10, | 
| +    "rem": 11 | 
| +}; | 
| +var highestExposedUnit = 10; // SVG_LENGTHTYPE_PC | 
| +var unitconstants = { | 
| +    "UNKNOWN" : 0, | 
| +    "NUMBER": 1, | 
| +    "PERCENTAGE": 2, | 
| +    "EMS": 3, | 
| +    "EXS": 4, | 
| +    "PX": 5, | 
| +    "CM": 6, | 
| +    "MM": 7, | 
| +    "IN": 8, | 
| +    "PT": 9, | 
| +    "PC": 10, | 
| +}; | 
| +var nonexposedunitconstants = { | 
| +    "REMS": 11 | 
| +}; | 
| + | 
| +function convertTo(value, unit, outunit) { | 
| +    var userUnits; | 
| +    var cssPixelsPerInch = 96; | 
| +    var cssPixelsPerCentimeter = cssPixelsPerInch / 2.54; //2.54 cm/in | 
| +    var cssPixelsPerMillimeter = cssPixelsPerCentimeter / 10; | 
| +    var cssPixelsPerPoint = cssPixelsPerInch / 72; | 
| +    var cssPixelsPerPica = cssPixelsPerInch / 6; | 
| + | 
| +    switch(unit) { | 
| +        case "": | 
| +        case "px": | 
| +            userUnits = value; | 
| +            break; | 
| +        case "%": | 
| +        case "em": | 
| +        case "ex": | 
| +        case "rem": | 
| +            return value; | 
| +        case "cm": | 
| +            userUnits = value * cssPixelsPerCentimeter; | 
| +            break; | 
| +        case "mm": | 
| +            userUnits = value * cssPixelsPerMillimeter; | 
| +            break; | 
| +        case "in": | 
| +            userUnits = value * cssPixelsPerInch; | 
| +            break; | 
| +        case "pt": | 
| +            userUnits = value * cssPixelsPerPoint; | 
| +            break; | 
| +        case "pc": | 
| +            userUnits = value * cssPixelsPerPica; | 
| +            break; | 
| +    } | 
| + | 
| +    switch(outunit) { | 
| +        case "": | 
| +        case "px": | 
| +            return userUnits; | 
| +        case "%": | 
| +        case "em": | 
| +        case "ex": | 
| +        case "rem": | 
| +            return value; | 
| +        case "cm": | 
| +            return userUnits / cssPixelsPerCentimeter; | 
| +        case "mm": | 
| +            return userUnits / cssPixelsPerMillimeter; | 
| +        case "in": | 
| +            return userUnits / cssPixelsPerInch; | 
| +        case "pt": | 
| +            return userUnits / cssPixelsPerPoint; | 
| +        case "pc": | 
| +            return userUnits / cssPixelsPerPica; | 
| +    } | 
| +} | 
| + | 
| +function createLength(valuestr) { | 
| +    var length = svg.createSVGLength(); | 
| +    length.valueAsString = valuestr; | 
| +    return length; | 
| +} | 
| + | 
| +for(var unit in units) { | 
| +    test(function() { | 
| +        var result = undefined; | 
| +        try { | 
| +            var a = createLength(10 + unit); | 
| +            result = a.unitType; | 
| +        } | 
| +        catch(e) {} | 
| +            if (units[unit] > highestExposedUnit) | 
| +                assert_equals(result, undefined); | 
| +            else | 
| +                assert_equals(result, units[unit]); | 
| +    }, "SVGLength(10" + unit + ").unitType"); | 
| +} | 
| + | 
| +for(var constant in unitconstants) { | 
| +    var str = "SVG_LENGTHTYPE_" + constant; | 
| +    test(function() { | 
| +        assert_exists(SVGLength, str, ""); | 
| +    }, "SVGLength." + str); | 
| +} | 
| +for(var constant in nonexposedunitconstants) { | 
| +    var str = "SVG_LENGTHTYPE_" + constant; | 
| +    test(function() { | 
| +        assert_not_exists(SVGLength, str, ""); | 
| +    }, "SVGLength." + str); | 
| +} | 
| + | 
| +lengths.forEach(function(length) { | 
| +    for(var unit in units) { | 
| +        var lengthstr = length + unit; | 
| +        var ref; | 
| +        try { | 
| +            ref = createLength(lengthstr); | 
| +        } | 
| +        catch(e) { | 
| +            continue; | 
| +        } | 
| + | 
| +        test(function() { | 
| +            assert_approx_equals(length, ref.valueInSpecifiedUnits, EPSILON); | 
| +        }, "SVGLength(" + lengthstr + ").valueInSpecifiedUnits"); | 
| + | 
| +        for (var otherunit in units) { | 
| +            test(function() { | 
| +                var a = createLength(lengthstr); | 
| +                try { | 
| +                    a.convertToSpecifiedUnits(units[otherunit]); | 
| +                } | 
| +                catch(e) {} | 
| + | 
| +                // unknown unit | 
| +                if (units[otherunit] > highestExposedUnit) | 
| +                    assert_approx_equals(a.valueInSpecifiedUnits, length, EPSILON); | 
| +                else | 
| +                    assert_approx_equals(a.valueInSpecifiedUnits, convertTo(length, unit, otherunit), EPSILON); | 
| +            }, "SVGLength(" + lengthstr + ").convertToSpecifiedUnits(" + units[otherunit] + " /*" + (otherunit ? otherunit : "unspecified") + "*/)"); | 
| + | 
| +            test(function() { | 
| +                var result = ""; | 
| +                try { | 
| +                    var a = createLength(47 + otherunit); | 
| +                    a.newValueSpecifiedUnits(units[unit], length); | 
| +                    result = a.valueAsString; | 
| +                } | 
| +                catch(e) { | 
| +                } | 
| + | 
| +                // unknown unit | 
| +                if (units[unit] > highestExposedUnit || units[otherunit] > highestExposedUnit) | 
| +                    assert_equals(result, ""); | 
| +                else | 
| +                    assert_equals(result, ref.valueAsString); | 
| +            }, "newValueSpecifiedUnits(" + units[unit] + ", " + length + ")" ); | 
| +        }; | 
| + | 
| +    } | 
| +}); | 
| + | 
| + | 
| +</script> | 
|  |