Fix tests to pass on devices with floating density

Floor measure sizes
This commit is contained in:
hshristov
2015-04-17 14:15:52 +03:00
parent cd34bea39d
commit 93fa862ae3
13 changed files with 124 additions and 85 deletions

View File

@ -56,10 +56,10 @@ export var testAll = function () {
var actualValue = viewModule.getViewById(absoluteLayout, "LT")._getCurrentLayoutBounds(); var actualValue = viewModule.getViewById(absoluteLayout, "LT")._getCurrentLayoutBounds();
var width = actualValue.right - actualValue.left; var width = actualValue.right - actualValue.left;
var height = actualValue.bottom - actualValue.top; var height = actualValue.bottom - actualValue.top;
TKUnit.assertEqual(actualValue.left, 10 * density, "ActualLeft"); TKUnit.assertEqual(actualValue.left, layoutHelper.dip(10), "ActualLeft");
TKUnit.assertEqual(actualValue.top, 10 * density, "ActualTop"); TKUnit.assertEqual(actualValue.top, layoutHelper.dip(10), "ActualTop");
TKUnit.assertEqual(width, 100 * density, "ActualWidth"); TKUnit.assertEqual(width, layoutHelper.dip(100), "ActualWidth");
TKUnit.assertEqual(height, 100 * density, "Actualheight"); TKUnit.assertEqual(height, layoutHelper.dip(100), "Actualheight");
}); });
} }

View File

@ -9,6 +9,7 @@ import utils = require("utils/utils");
import builder = require("ui/builder"); import builder = require("ui/builder");
var ASYNC = 2; var ASYNC = 2;
var DELTA = 0.1;
export class MyGridLayout extends layout.GridLayout { export class MyGridLayout extends layout.GridLayout {
public measureCount: number = 0; public measureCount: number = 0;
@ -328,7 +329,7 @@ export function test_GridLayout_desiredSize_isCorrect() {
for (var c = 0; c < 4; c++) { for (var c = 0; c < 4; c++) {
var btn = <helper.MyButton>rootLayout.getChildAt(i++); var btn = <helper.MyButton>rootLayout.getChildAt(i++);
if (cols[c].isAbsolute) { if (cols[c].isAbsolute) {
width += cols[c].actualLength * utils.layout.getDisplayDensity(); width += helper.dip(cols[c].actualLength);
} }
else { else {
width += btn.getMeasuredWidth(); width += btn.getMeasuredWidth();
@ -340,15 +341,18 @@ export function test_GridLayout_desiredSize_isCorrect() {
maxWidth = Math.max(maxWidth, width); maxWidth = Math.max(maxWidth, width);
if (rows[r].isAbsolute) { if (rows[r].isAbsolute) {
maxHeight += rows[r].actualLength * utils.layout.getDisplayDensity(); maxHeight += helper.dip(rows[r].actualLength);
} }
else { else {
maxHeight += height; maxHeight += height;
} }
} }
TKUnit.assertEqual(rootLayout.getMeasuredWidth(), Math.round(maxWidth), "GridLayout incorrect measured width"); var density = utils.layout.getDisplayDensity();
TKUnit.assertEqual(rootLayout.getMeasuredHeight(), Math.round(maxHeight), "GridLayout incorrect measured height"); var delta = Math.floor(density) !== density ? 1.1 : DELTA;
TKUnit.assertAreClose(rootLayout.getMeasuredWidth(), Math.round(maxWidth), delta, "GridLayout incorrect measured width");
TKUnit.assertAreClose(rootLayout.getMeasuredHeight(), Math.round(maxHeight), delta, "GridLayout incorrect measured height");
} }
export function test_GridLayout_columnsActualWidth_isCorrect() { export function test_GridLayout_columnsActualWidth_isCorrect() {
@ -379,6 +383,7 @@ export function test_GridLayout_Measure_and_Layout_Children_withCorrect_size() {
var cols = rootLayout.getColumns(); var cols = rootLayout.getColumns();
var i = 0; var i = 0;
var density = utils.layout.getDisplayDensity(); var density = utils.layout.getDisplayDensity();
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
for (var r = 0; r < 4; r++) { for (var r = 0; r < 4; r++) {
@ -394,27 +399,27 @@ export function test_GridLayout_Measure_and_Layout_Children_withCorrect_size() {
w = Math.round(w * density); w = Math.round(w * density);
if (row.isAuto) { if (row.isAuto) {
TKUnit.assertEqual(btn.layoutHeight, btn.getMeasuredHeight(), "Auto rows should layout with measured height"); TKUnit.assertAreClose(btn.layoutHeight, btn.getMeasuredHeight(), delta, "Auto rows should layout with measured height");
} }
else if (row.isAbsolute) { else if (row.isAbsolute) {
TKUnit.assertEqual(btn.measureHeight, h, "Absolute rows should measure with specific height"); TKUnit.assertAreClose(btn.measureHeight, h, delta, "Absolute rows should measure with specific height");
TKUnit.assertEqual(btn.layoutHeight, h, "Absolute rows should layout with specific height"); TKUnit.assertAreClose(btn.layoutHeight, h, delta, "Absolute rows should layout with specific height");
} }
else { else {
TKUnit.assertEqual(btn.measureHeight, h, "Auto rows should measure with specific height"); TKUnit.assertAreClose(btn.measureHeight, h, delta, "Auto rows should measure with specific height");
TKUnit.assertEqual(btn.layoutHeight, h, "Star rows should layout with exact length"); TKUnit.assertAreClose(btn.layoutHeight, h, delta, "Star rows should layout with exact length");
} }
if (col.isAuto) { if (col.isAuto) {
TKUnit.assertEqual(btn.layoutWidth, btn.getMeasuredWidth(), "Auto columns should layout with measured width"); TKUnit.assertAreClose(btn.layoutWidth, btn.getMeasuredWidth(), delta, "Auto columns should layout with measured width");
} }
else if (col.isAbsolute) { else if (col.isAbsolute) {
TKUnit.assertEqual(btn.measureWidth, w, "Absolute columns should measure with specific width"); TKUnit.assertAreClose(btn.measureWidth, w, delta, "Absolute columns should measure with specific width");
TKUnit.assertEqual(btn.layoutWidth, w, "Absolute columns should layout with specific width"); TKUnit.assertAreClose(btn.layoutWidth, w, delta, "Absolute columns should layout with specific width");
} }
else { else {
TKUnit.assertEqual(btn.measureWidth, w, "Auto columns should should measure with specific width"); TKUnit.assertAreClose(btn.measureWidth, w, delta, "Auto columns should should measure with specific width");
TKUnit.assertEqual(btn.layoutWidth, w, "Star columns should layout with exact length"); TKUnit.assertAreClose(btn.layoutWidth, w, delta, "Star columns should layout with exact length");
} }
} }
} }
@ -434,10 +439,13 @@ export function test_GridLayout_ColumnWidth_when_4stars_and_width_110() {
var cols = rootLayout.getColumns(); var cols = rootLayout.getColumns();
TKUnit.assertEqual(cols[0].actualLength, 28, "Column actual length should be 28"); var density = utils.layout.getDisplayDensity();
TKUnit.assertEqual(cols[1].actualLength, 27, "Column actual length should be 27"); var delta = Math.floor(density) !== density ? 1.1 : DELTA;
TKUnit.assertEqual(cols[2].actualLength, 28, "Column actual length should be 28");
TKUnit.assertEqual(cols[3].actualLength, 27, "Column actual length should be 27"); TKUnit.assertAreClose(cols[0].actualLength, 28, delta, "Column[0] actual length should be 28");
TKUnit.assertAreClose(cols[1].actualLength, 27, delta, "Column[1] actual length should be 27");
TKUnit.assertAreClose(cols[2].actualLength, 28, delta, "Column[2] actual length should be 28");
TKUnit.assertAreClose(cols[3].actualLength, 27, delta, "Column[3] actual length should be 27");
} }
export function test_GridLayout_set_columns_in_XML() { export function test_GridLayout_set_columns_in_XML() {

View File

@ -69,19 +69,26 @@ export class MyButton extends button.Button {
export function assertMeasure(btn: MyButton, width: number, height: number, name?: string) { export function assertMeasure(btn: MyButton, width: number, height: number, name?: string) {
var density = utils.layout.getDisplayDensity(); var density = utils.layout.getDisplayDensity();
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
name = name ? "[" + name + "]" : ""; name = name ? "[" + name + "]" : "";
TKUnit.assertAreClose(btn.measureWidth / density, width, DELTA, name + "width"); TKUnit.assertAreClose(Math.round(btn.measureWidth / density), width, delta, name + "width");
TKUnit.assertAreClose(btn.measureHeight / density, height, DELTA, name + "height"); TKUnit.assertAreClose(Math.round(btn.measureHeight / density), height, delta, name + "height");
} }
export function assertLayout(btn: MyButton, left: number, top: number, width: number, height: number, name?: string): void { export function assertLayout(btn: MyButton, left: number, top: number, width: number, height: number, name?: string): void {
var density = utils.layout.getDisplayDensity(); var density = utils.layout.getDisplayDensity();
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
name = name ? "[" + name + "]" : ""; name = name ? "[" + name + "]" : "";
TKUnit.assertAreClose(btn.layoutLeft / density, left, DELTA, name + "left"); TKUnit.assertAreClose(Math.round(btn.layoutLeft / density), left, delta, name + "left");
TKUnit.assertAreClose(btn.layoutTop / density, top, DELTA, name + "top"); TKUnit.assertAreClose(Math.round(btn.layoutTop / density), top, delta, name + "top");
TKUnit.assertAreClose(btn.layoutWidth / density, width, DELTA, name + "width"); TKUnit.assertAreClose(Math.round(btn.layoutWidth / density), width, delta, name + "width");
TKUnit.assertAreClose(btn.layoutHeight / density, height, DELTA, name + "height"); TKUnit.assertAreClose(Math.round(btn.layoutHeight / density), height, delta, name + "height");
}
export function dip(value: number): number {
var density = utils.layout.getDisplayDensity();
return Math.round(value * density);
} }

View File

@ -240,4 +240,4 @@ export function test_codesnippets() {
// ``` // ```
// </snippet> // </snippet>
}; };

View File

@ -62,22 +62,20 @@ export function testHorizontalOrientation() {
wrapLayout.orientation = enums.Orientation.horizontal; wrapLayout.orientation = enums.Orientation.horizontal;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() { TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1); }, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds(); var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft"); TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop"); TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds(); actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 100 * density, "ActualLeft"); TKUnit.assertEqual(actualValue.left, layoutHelper.dip(100), "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop"); TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 200 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(200), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
}); });
} }
@ -91,22 +89,20 @@ export function testVerticalOrientation() {
// </snippet> // </snippet>
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() { TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1); }, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds(); var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft"); TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop"); TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds(); actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft"); TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 100 * density, "ActualTop"); TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 200 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom");
}); });
} }
@ -117,22 +113,20 @@ export function testChangeOrientation() {
wrapLayout.orientation = enums.Orientation.vertical; wrapLayout.orientation = enums.Orientation.vertical;
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds(); var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft"); TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop"); TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds(); actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft"); TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 100 * density, "ActualTop"); TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight"); TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 200 * density, "ActualBottom"); TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom");
}); });
} }
@ -141,12 +135,11 @@ export function testItemWidth() {
wrapLayout.itemWidth = 50; wrapLayout.itemWidth = 50;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() { TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1); }, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left; var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left;
TKUnit.assertEqual(actualValue, 50 * density, "ActualLeft"); TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualLeft");
}); });
} }
@ -154,18 +147,17 @@ export function testChangeItemWidth() {
var wrapLayout = _createWrapLayoutFunc(2); var wrapLayout = _createWrapLayoutFunc(2);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
wrapLayout.itemWidth = 50; wrapLayout.itemWidth = 50;
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left; var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().left;
TKUnit.assertEqual(actualValue, 50 * density, "ActualLeft"); TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualLeft");
}); });
} }
@ -175,12 +167,11 @@ export function testItemHeight() {
wrapLayout.orientation = enums.Orientation.vertical; wrapLayout.orientation = enums.Orientation.vertical;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() { TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1); }, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top; var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top;
TKUnit.assertEqual(actualValue, 50 * density, "ActualTop"); TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualTop");
}); });
} }
@ -189,18 +180,17 @@ export function testChangeItemHeight() {
wrapLayout.orientation = enums.Orientation.vertical; wrapLayout.orientation = enums.Orientation.vertical;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
wrapLayout.itemHeight = 50; wrapLayout.itemHeight = 50;
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top; var actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds().top;
TKUnit.assertEqual(actualValue, 50 * density, "ActualTop"); TKUnit.assertEqual(actualValue, layoutHelper.dip(50), "ActualTop");
}); });
} }
@ -216,7 +206,7 @@ export function testPaddingLeftAndTop() {
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
layoutHelper.assertLayout(btn, 20, 30, 50, 50); layoutHelper.assertLayout(btn, 20, 30, 50, 50);
@ -240,7 +230,7 @@ export function testPaddingRight() {
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
layoutHelper.assertMeasure(btn1, 100, 50); layoutHelper.assertMeasure(btn1, 100, 50);
@ -271,14 +261,14 @@ export function testPaddingBottom() {
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => { TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid; return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}); });
layoutHelper.assertMeasure(btn1, 50, 100); layoutHelper.assertMeasure(btn1, 50, 100);
layoutHelper.assertMeasure(btn2, 50, 80); layoutHelper.assertMeasure(btn2, 50, 80);
// There should be no space left for the button on the first row, // There should be no space left for the button on the first row,
// because fo the padding (200 - 100 - 30) = 70 button wants 80 // because of the padding (200 - 100 - 30) = 70 button wants 80
layoutHelper.assertLayout(btn1, 0, 0, 50, 100, "button1"); layoutHelper.assertLayout(btn1, 0, 0, 50, 100, "button1");
layoutHelper.assertLayout(btn2, 50, 0, 50, 80, "button2"); layoutHelper.assertLayout(btn2, 50, 0, 50, 80, "button2");
}); });

View File

@ -71,6 +71,12 @@ if (!isRunningOnEmulator()) {
allTests["LOCATION"] = require("./location-tests"); allTests["LOCATION"] = require("./location-tests");
} }
import utils = require("utils/utils");
var density = utils.layout.getDisplayDensity();
utils.layout.getDisplayDensity = function () {
return Math.round(density * 100) / 100;
}
var testsWithLongDelay = { var testsWithLongDelay = {
testLocation: 10000, testLocation: 10000,
testLocationOnce: 10000, testLocationOnce: 10000,

View File

@ -194,7 +194,7 @@ var _testNativeFontSizeFromCss = function (views: Array<viewModule.View>) {
page.css = "button { font-size: " + expectedFontSize + "; }"; page.css = "button { font-size: " + expectedFontSize + "; }";
var actualResult = buttonTestsNative.getNativeFontSize(button); var actualResult = buttonTestsNative.getNativeFontSize(button);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromCss");
} }
var _testNativeFontSizeFromLocal = function (views: Array<viewModule.View>) { var _testNativeFontSizeFromLocal = function (views: Array<viewModule.View>) {
@ -202,7 +202,7 @@ var _testNativeFontSizeFromLocal = function (views: Array<viewModule.View>) {
button.style.fontSize = expectedFontSize; button.style.fontSize = expectedFontSize;
var actualResult = buttonTestsNative.getNativeFontSize(button); var actualResult = buttonTestsNative.getNativeFontSize(button);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromLocal");
} }
var expectedColorHex = "#ffff0000"; var expectedColorHex = "#ffff0000";

View File

@ -8,6 +8,8 @@ import utils = require("utils/utils");
import types = require("utils/types"); import types = require("utils/types");
import styling = require("ui/styling"); import styling = require("ui/styling");
var DELTA = 0.1;
export var ASYNC = 0.2; export var ASYNC = 0.2;
export function do_PageTest(test: (views: Array<view.View>) => void, content: view.View, secondView: view.View, thirdView: view.View) { export function do_PageTest(test: (views: Array<view.View>) => void, content: view.View, secondView: view.View, thirdView: view.View) {
@ -203,3 +205,10 @@ export function goBack(): void {
TKUnit.assert(frame.topmost().currentPage.isLoaded, "Current page should be loaded!"); TKUnit.assert(frame.topmost().currentPage.isLoaded, "Current page should be loaded!");
TKUnit.assert(!currentPage.isLoaded, "Previous page should be unloaded!"); TKUnit.assert(!currentPage.isLoaded, "Previous page should be unloaded!");
} }
export function assertAreClose(actual: number, expected: number, message: string): void {
var density = utils.layout.getDisplayDensity();
var delta = Math.floor(density) !== density ? 1.1 : DELTA;
TKUnit.assertAreClose(actual, expected, delta, message);
}

View File

@ -234,10 +234,8 @@ export var test_SetStyleProperties_via_css_class_Native = function () {
if (testLabel.android) { if (testLabel.android) {
actualTextSize = testLabel.android.getTextSize(); actualTextSize = testLabel.android.getTextSize();
//expSize = helper.convertSizeToDeviceIndependentPixels(testLabel.android.getContext(), fontSize); expSize = android.util.TypedValue.applyDimension(android.util.TypedValue.COMPLEX_UNIT_DIP, fontSize, testLabel.android.getContext().getResources().getDisplayMetrics());
var density = utils.layout.getDisplayDensity(); TKUnit.assertEqual(actualTextSize, expSize, "Wrong native FontSize");
expSize = fontSize * density;
TKUnit.assert(actualTextSize === expSize, "Expected: " + expSize + ", Actual: " + actualTextSize);
actualColors = testLabel.android.getTextColors(); actualColors = testLabel.android.getTextColors();
expColor = android.graphics.Color.parseColor(color); expColor = android.graphics.Color.parseColor(color);
@ -251,7 +249,7 @@ export var test_SetStyleProperties_via_css_class_Native = function () {
else { else {
// iOS // iOS
actualTextSize = testLabel.ios.font.pointSize; actualTextSize = testLabel.ios.font.pointSize;
TKUnit.assert(actualTextSize === fontSize, "Expected: " + fontSize + ", Actual: " + actualTextSize); TKUnit.assertEqual(actualTextSize, fontSize, "Wrong native FontSize");
normalColor = utils.ios.getColor(testLabel.ios.textColor); normalColor = utils.ios.getColor(testLabel.ios.textColor);
expColor = new colorModule.Color(color); expColor = new colorModule.Color(color);

View File

@ -296,7 +296,7 @@ export var testNativeFontSizeFromCss = function () {
page.css = "textfield { font-size: " + expectedFontSize + "; }"; page.css = "textfield { font-size: " + expectedFontSize + "; }";
var actualResult = textFieldTestsNative.getNativeFontSize(textField); var actualResult = textFieldTestsNative.getNativeFontSize(textField);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromCss");
}); });
} }
@ -306,7 +306,7 @@ export var testNativeFontSizeFromLocal = function () {
textField.style.fontSize = expectedFontSize; textField.style.fontSize = expectedFontSize;
var actualResult = textFieldTestsNative.getNativeFontSize(textField); var actualResult = textFieldTestsNative.getNativeFontSize(textField);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromLocal");
}); });
} }

View File

@ -65,7 +65,7 @@ export var testSetText = function () {
var expectedValue = "Hello, world!"; var expectedValue = "Hello, world!";
var actualValue = textViewTestsNative.getNativeText(textView); var actualValue = textViewTestsNative.getNativeText(textView);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
}); });
} }
export var testBindTextDirectlyToModel = function () { export var testBindTextDirectlyToModel = function () {
@ -225,7 +225,7 @@ export var testNativeFontSizeFromCss = function () {
page.css = "textview { font-size: " + expectedFontSize + "; }"; page.css = "textview { font-size: " + expectedFontSize + "; }";
var actualResult = textViewTestsNative.getNativeFontSize(textView); var actualResult = textViewTestsNative.getNativeFontSize(textView);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromCss");
}); });
} }
@ -235,7 +235,7 @@ export var testNativeFontSizeFromLocal = function () {
textView.style.fontSize = expectedFontSize; textView.style.fontSize = expectedFontSize;
var actualResult = textViewTestsNative.getNativeFontSize(textView); var actualResult = textViewTestsNative.getNativeFontSize(textView);
TKUnit.assert(actualResult === expectedFontSize, "Actual: " + actualResult + "; Expected: " + expectedFontSize); helper.assertAreClose(actualResult, expectedFontSize, "FontSizeFromLocal");
}); });
} }

View File

@ -600,7 +600,7 @@ export class View extends proxy.ProxyObject implements definition.View {
var density = utils.layout.getDisplayDensity(); var density = utils.layout.getDisplayDensity();
var margins = horizontal ? view.marginLeft + view.marginRight : view.marginTop + view.marginBottom; var margins = horizontal ? view.marginLeft + view.marginRight : view.marginTop + view.marginBottom;
margins = Math.round(margins * density); margins = Math.floor(margins * density);
var resultSize = 0; var resultSize = 0;
var resultMode = 0; var resultMode = 0;
@ -608,7 +608,7 @@ export class View extends proxy.ProxyObject implements definition.View {
var measureLength = Math.max(0, parentLength - margins); var measureLength = Math.max(0, parentLength - margins);
// Convert to pixels. // Convert to pixels.
var childLength = Math.round((horizontal ? view.width : view.height) * density); var childLength = Math.floor((horizontal ? view.width : view.height) * density);
// We want a specific size... let be it. // We want a specific size... let be it.
if (!isNaN(childLength)) { if (!isNaN(childLength)) {

View File

@ -236,6 +236,27 @@ export class View extends viewCommon.View {
return false; return false;
} }
public static resolveSizeAndState(size: number, specSize: number, specMode: number, childMeasuredState: number): number {
var result = size;
switch (specMode) {
case utils.layout.UNSPECIFIED:
result = size;
break;
case utils.layout.AT_MOST:
if (specSize < size) {
result = specSize | utils.layout.MEASURED_STATE_TOO_SMALL;
}
break;
case utils.layout.EXACTLY:
result = specSize;
break;
}
return result | (childMeasuredState & utils.layout.MEASURED_STATE_MASK);
}
} }
export class CustomLayoutView extends View implements viewDefinition.CustomLayoutView { export class CustomLayoutView extends View implements viewDefinition.CustomLayoutView {