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

Unified Diff: LayoutTests/fast/svg/svglength.html

Issue 1031223003: SVG doesn't recognize rem units (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixes builderror Created 5 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 | « no previous file | LayoutTests/svg/css/svg-length-rem-type.svg » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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>
« no previous file with comments | « no previous file | LayoutTests/svg/css/svg-length-rem-type.svg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698