diff --git a/tests/app/testRunner.ts b/tests/app/testRunner.ts index ab72eccbe..cd8b79395 100644 --- a/tests/app/testRunner.ts +++ b/tests/app/testRunner.ts @@ -141,6 +141,9 @@ allTests["FRAME"] = frameTests; import * as viewTests from "./ui/view/view-tests"; allTests["VIEW"] = viewTests; +import * as viewLayoutChangedEventTests from "./ui/view/view-tests-layout-event"; +allTests["VIEW-LAYOUT-EVENT"] = viewLayoutChangedEventTests; + import * as styleTests from "./ui/styling/style-tests"; allTests["STYLE"] = styleTests; diff --git a/tests/app/ui/helper.ts b/tests/app/ui/helper.ts index 8a8f4a11d..7a6d20f4c 100644 --- a/tests/app/ui/helper.ts +++ b/tests/app/ui/helper.ts @@ -37,7 +37,7 @@ export function getColor(uiColor: UIColor): Color { return new Color(alpha, red, green, blue); } -function clearPage(): void { +export function clearPage(): void { let newPage = getCurrentPage(); if (!newPage) { throw new Error("NO CURRENT PAGE!!!!"); diff --git a/tests/app/ui/view/view-tests-layout-event.ts b/tests/app/ui/view/view-tests-layout-event.ts new file mode 100644 index 000000000..5786ee6c5 --- /dev/null +++ b/tests/app/ui/view/view-tests-layout-event.ts @@ -0,0 +1,210 @@ +import * as commonTests from "./view-tests-common"; + +import { View } from "tns-core-modules/ui/core/view"; +import { Button } from "tns-core-modules/ui/button"; +import { StackLayout } from "tns-core-modules/ui/layouts/stack-layout/stack-layout"; +import * as helper from "../helper"; +import * as TKUnit from "../../TKUnit"; +import * as utils from "tns-core-modules/utils/utils"; + +export function test_event_LayoutChanged_GetActualSize() { + const test = function (views: Array) { + let buttonLayoutChanged = false; + + views[1].on(View.layoutChangedEvent, (data) => { + buttonLayoutChanged = true; + }); + + TKUnit.waitUntilReady(() => buttonLayoutChanged); + TKUnit.assert(views[1].getActualSize().height > 0); + TKUnit.assert(views[1].getActualSize().width > 0); + }; + + helper.do_PageTest_WithStackLayout_AndButton(test); +}; + +export function test_event_LayoutChanged_Listeners() { + const test = function (views: Array) { + let stackLayoutChanged = false; + let buttonLayoutChanged = false; + + views[1].on(View.layoutChangedEvent, (data) => { + buttonLayoutChanged = true; + }); + + TKUnit.waitUntilReady(() => buttonLayoutChanged); + TKUnit.assertFalse(views[0].hasListeners(View.layoutChangedEvent)); + TKUnit.assert(views[1].hasListeners(View.layoutChangedEvent)); + }; + + helper.do_PageTest_WithStackLayout_AndButton(test); +}; + +export function test_event_LayoutChanged_IsRaised() { + helper.clearPage(); + let newPage = helper.getCurrentPage(); + + let stackLayoutChanged = false; + let buttonLayoutChanged = false; + + let stackLayout = new StackLayout(); + let button = new Button(); + + stackLayout.on(View.layoutChangedEvent, (data) => { + stackLayoutChanged = true; + }); + + button.on(View.layoutChangedEvent, (data) => { + buttonLayoutChanged = true; + }); + + stackLayout.addChild(button); + newPage.content = stackLayout; + + TKUnit.waitUntilReady(() => stackLayoutChanged && buttonLayoutChanged); + TKUnit.assert(stackLayoutChanged); + TKUnit.assert(buttonLayoutChanged); + + newPage.content = null; +}; + +export function test_event_LayoutChanged_IsRaised_StackLayout_ChildAdded() { + helper.clearPage(); + let newPage = helper.getCurrentPage(); + + let stackLayoutChangedCount = 0; + let button1LayoutChangedCount = 0; + let button2LayoutChanged = false; + + let stackLayout = new StackLayout(); + + // StackLayout should not be stretched in order to layout again when new button added. + stackLayout.verticalAlignment = "top"; + let button1 = new Button(); + let button2 = new Button(); + + stackLayout.on(View.layoutChangedEvent, (data) => { + stackLayoutChangedCount++; + }); + + button1.on(View.layoutChangedEvent, (data) => { + button1LayoutChangedCount++; + }); + + button2.on(View.layoutChangedEvent, (data) => { + button2LayoutChanged = true; + }); + + stackLayout.addChild(button1); + newPage.content = stackLayout; + + TKUnit.waitUntilReady(() => stackLayout.isLoaded); + stackLayout.addChild(button2); + + TKUnit.waitUntilReady(() => button2LayoutChanged); + TKUnit.assertEqual(stackLayoutChangedCount, 2); + TKUnit.assertEqual(button1LayoutChangedCount, 1); + TKUnit.assert(button2LayoutChanged); + + newPage.content = null; +}; + +export function test_event_LayoutChanged_IsRaised_ChildMarginChanged() { + const test = function (views: Array) { + let stackLayoutChanged = false; + let buttonLayoutChanged = false; + + views[1].on(View.layoutChangedEvent, (data) => { + stackLayoutChanged = true; + }); + + views[2].on(View.layoutChangedEvent, (data) => { + buttonLayoutChanged = true; + }); + + (