[src/Layout-test-utils.js]: Added testMeasurePrecision and inplaceRoundNumbersInObject which snap the numbers to pixels so that we don't have to re-adjust for each browser version (Chrome 42 changed their computation, it can output floating point values for dom elements) ;

This commit is contained in:
Pierre Renaux
2015-05-08 14:51:05 +08:00
parent 998fa1d6ba
commit f4226d3ff5

View File

@@ -10,6 +10,18 @@
var layoutTestUtils = (function() { var layoutTestUtils = (function() {
//
// Sets the test cases precision, by default set to 1.0, aka pixel precision
// (assuming the browser does pixel snapping - and that we're ok with being
// 'only' pixel perfect).
//
// Set it to '10' for .1 precision, etc... in theory the browser is doing
// 'pixel' snapping so 1.0 should do, the code is left for clarity...
//
// Set it to undefined to disable and use full precision.
//
var testMeasurePrecision = 1.0;
if (typeof jasmine !== 'undefined') { if (typeof jasmine !== 'undefined') {
jasmine.matchersUtil.buildFailureMessage = function () { jasmine.matchersUtil.buildFailureMessage = function () {
var args = Array.prototype.slice.call(arguments, 0), var args = Array.prototype.slice.call(arguments, 0),
@@ -227,11 +239,33 @@ var layoutTestUtils = (function() {
return layout; return layout;
} }
function inplaceRoundNumbersInObject(aObj) {
if (!testMeasurePrecision) // undefined/0, disables rounding
return;
for (var key in aObj) {
if (!aObj.hasOwnProperty(key))
continue;
var val = aObj[key];
switch (typeof(val)) {
case 'number': {
aObj[key] = Math.floor((val*testMeasurePrecision)+0.5)/testMeasurePrecision;
break;
}
case 'object': {
inplaceRoundNumbersInObject(val);
break;
}
}
}
}
function nameLayout(name, layout) { function nameLayout(name, layout) {
var namedLayout = {name: name}; var namedLayout = {name: name};
for (var key in layout) { for (var key in layout) {
namedLayout[key] = layout[key]; namedLayout[key] = layout[key];
} }
inplaceRoundNumbersInObject(namedLayout);
return namedLayout; return namedLayout;
} }
@@ -363,7 +397,7 @@ var layoutTestUtils = (function() {
smallWidth: 34.671875, smallWidth: 34.671875,
smallHeight: 18, smallHeight: 18,
bigWidth: 172.421875, bigWidth: 172.421875,
bigHeight: 36, bigHeight: 37,
bigMinWidth: 100.4375 bigMinWidth: 100.4375
}; };
@@ -380,6 +414,11 @@ var layoutTestUtils = (function() {
}; };
} }
// round the text sizes so that we dont have to update it for every browser
// update, assumes we're ok with pixel precision
inplaceRoundNumbersInObject(preDefinedTextSizes);
inplaceRoundNumbersInObject(textSizes);
return { return {
texts: texts, texts: texts,
textSizes: textSizes, textSizes: textSizes,