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 width = actualValue.right - actualValue.left;
var height = actualValue.bottom - actualValue.top;
TKUnit.assertEqual(actualValue.left, 10 * density, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 10 * density, "ActualTop");
TKUnit.assertEqual(width, 100 * density, "ActualWidth");
TKUnit.assertEqual(height, 100 * density, "Actualheight");
TKUnit.assertEqual(actualValue.left, layoutHelper.dip(10), "ActualLeft");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(10), "ActualTop");
TKUnit.assertEqual(width, layoutHelper.dip(100), "ActualWidth");
TKUnit.assertEqual(height, layoutHelper.dip(100), "Actualheight");
});
}

View File

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

View File

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

View File

@ -62,22 +62,20 @@ export function testHorizontalOrientation() {
wrapLayout.orientation = enums.Orientation.horizontal;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
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.right, 200 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(200), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
});
}
@ -91,22 +89,20 @@ export function testVerticalOrientation() {
// </snippet>
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 100 * density, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 200 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom");
});
}
@ -117,22 +113,20 @@ export function testChangeOrientation() {
wrapLayout.orientation = enums.Orientation.vertical;
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
var density = utils.layout.getDisplayDensity();
var actualValue = viewModule.getViewById(wrapLayout, "0")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 0, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 100 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(100), "ActualBottom");
actualValue = viewModule.getViewById(wrapLayout, "1")._getCurrentLayoutBounds();
TKUnit.assertEqual(actualValue.left, 0, "ActualLeft");
TKUnit.assertEqual(actualValue.top, 100 * density, "ActualTop");
TKUnit.assertEqual(actualValue.right, 100 * density, "ActualRight");
TKUnit.assertEqual(actualValue.bottom, 200 * density, "ActualBottom");
TKUnit.assertEqual(actualValue.top, layoutHelper.dip(100), "ActualTop");
TKUnit.assertEqual(actualValue.right, layoutHelper.dip(100), "ActualRight");
TKUnit.assertEqual(actualValue.bottom, layoutHelper.dip(200), "ActualBottom");
});
}
@ -141,12 +135,11 @@ export function testItemWidth() {
wrapLayout.itemWidth = 50;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
var density = utils.layout.getDisplayDensity();
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);
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
wrapLayout.itemWidth = 50;
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;
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;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(function isReady() {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
}, 1);
var density = utils.layout.getDisplayDensity();
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;
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
wrapLayout.itemHeight = 50;
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;
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>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
layoutHelper.assertLayout(btn, 20, 30, 50, 50);
@ -240,7 +230,7 @@ export function testPaddingRight() {
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
layoutHelper.assertMeasure(btn1, 100, 50);
@ -271,14 +261,14 @@ export function testPaddingBottom() {
helper.buildUIAndRunTest(wrapLayout, function (views: Array<viewModule.View>) {
TKUnit.waitUntilReady(() => {
return wrapLayout.isLayoutValid;
return wrapLayout.getChildAt(wrapLayout.getChildrenCount() - 1).isLayoutValid;
});
layoutHelper.assertMeasure(btn1, 50, 100);
layoutHelper.assertMeasure(btn2, 50, 80);
// 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(btn2, 50, 0, 50, 80, "button2");
});

View File

@ -71,6 +71,12 @@ if (!isRunningOnEmulator()) {
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 = {
testLocation: 10000,
testLocationOnce: 10000,

View File

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

View File

@ -8,6 +8,8 @@ import utils = require("utils/utils");
import types = require("utils/types");
import styling = require("ui/styling");
var DELTA = 0.1;
export var ASYNC = 0.2;
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(!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) {
actualTextSize = testLabel.android.getTextSize();
//expSize = helper.convertSizeToDeviceIndependentPixels(testLabel.android.getContext(), fontSize);
var density = utils.layout.getDisplayDensity();
expSize = fontSize * density;
TKUnit.assert(actualTextSize === expSize, "Expected: " + expSize + ", Actual: " + actualTextSize);
expSize = android.util.TypedValue.applyDimension(android.util.TypedValue.COMPLEX_UNIT_DIP, fontSize, testLabel.android.getContext().getResources().getDisplayMetrics());
TKUnit.assertEqual(actualTextSize, expSize, "Wrong native FontSize");
actualColors = testLabel.android.getTextColors();
expColor = android.graphics.Color.parseColor(color);
@ -251,7 +249,7 @@ export var test_SetStyleProperties_via_css_class_Native = function () {
else {
// iOS
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);
expColor = new colorModule.Color(color);

View File

@ -296,7 +296,7 @@ export var testNativeFontSizeFromCss = function () {
page.css = "textfield { font-size: " + expectedFontSize + "; }";
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;
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 actualValue = textViewTestsNative.getNativeText(textView);
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
});
});
}
export var testBindTextDirectlyToModel = function () {
@ -225,7 +225,7 @@ export var testNativeFontSizeFromCss = function () {
page.css = "textview { font-size: " + expectedFontSize + "; }";
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;
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 margins = horizontal ? view.marginLeft + view.marginRight : view.marginTop + view.marginBottom;
margins = Math.round(margins * density);
margins = Math.floor(margins * density);
var resultSize = 0;
var resultMode = 0;
@ -608,7 +608,7 @@ export class View extends proxy.ProxyObject implements definition.View {
var measureLength = Math.max(0, parentLength - margins);
// 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.
if (!isNaN(childLength)) {

View File

@ -236,6 +236,27 @@ export class View extends viewCommon.View {
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 {