diff --git a/apps/app/ui-tests-app/dialogs/dialogs.xml b/apps/app/ui-tests-app/dialogs/dialogs.xml
index b8a68129d..0ada85f9b 100644
--- a/apps/app/ui-tests-app/dialogs/dialogs.xml
+++ b/apps/app/ui-tests-app/dialogs/dialogs.xml
@@ -7,7 +7,9 @@
-
+
+
+
diff --git a/apps/app/ui-tests-app/dialogs/view-model.ts b/apps/app/ui-tests-app/dialogs/view-model.ts
index 2d5e81646..398275200 100644
--- a/apps/app/ui-tests-app/dialogs/view-model.ts
+++ b/apps/app/ui-tests-app/dialogs/view-model.ts
@@ -138,6 +138,46 @@ export class SettingsViewModel extends observable.Observable {
});
}
+ public promptNumber(args: observable.EventData) {
+ dialogs.prompt({
+ title: "Name",
+ message: "Enter a number:",
+ cancelButtonText: "Cancel",
+ neutralButtonText: "Ignore",
+ okButtonText: "OK",
+ defaultText: "1234",
+ inputType: dialogs.inputType.number
+ }).then((promptResult) => {
+ console.log("### Result: " + promptResult.result + ", Text: " + promptResult.text);
+ if (promptResult.result) {
+ this.set("name", promptResult.text);
+ }
+ else {
+ this.set("name", "1234");
+ }
+ });
+ }
+
+ public promptPhone(args: observable.EventData) {
+ dialogs.prompt({
+ title: "Name",
+ message: "Enter a phone:",
+ cancelButtonText: "Cancel",
+ neutralButtonText: "Ignore",
+ okButtonText: "OK",
+ defaultText: "1234",
+ inputType: dialogs.inputType.phone
+ }).then((promptResult) => {
+ console.log("### Result: " + promptResult.result + ", Text: " + promptResult.text);
+ if (promptResult.result) {
+ this.set("name", promptResult.text);
+ }
+ else {
+ this.set("name", "1234");
+ }
+ });
+ }
+
public promptCapitalizationNone(args: observable.EventData) {
dialogs.prompt({
title: "Name",
diff --git a/tests/app/ui/helper.ts b/tests/app/ui/helper.ts
index 5d3c4ff81..0f8509712 100644
--- a/tests/app/ui/helper.ts
+++ b/tests/app/ui/helper.ts
@@ -209,8 +209,8 @@ export function waitUntilNavigatedTo(page: Page, action: Function) {
TKUnit.waitUntilReady(() => completed, 5);
}
-export function waitUntilNavigatedFrom(action: Function) {
- const currentPage = frame.topmost().currentPage;
+export function waitUntilNavigatedFrom(action: Function, topFrame?: frame.Frame) {
+ const currentPage = topFrame ? topFrame.currentPage : frame.topmost().currentPage;
let completed = false;
function navigatedFrom(args) {
args.object.page.off("navigatedFrom", navigatedFrom);
@@ -226,19 +226,19 @@ export function waitUntilLayoutReady(view: View): void {
TKUnit.waitUntilReady(() => view.isLayoutValid);
}
-export function navigateWithEntry(entry: frame.NavigationEntry): Page {
+export function navigateWithEntry(entry: frame.NavigationEntry, topFrame?: frame.Frame): Page {
const page = createViewFromEntry(entry) as Page;
entry.moduleName = null;
entry.create = function () {
return page;
};
- waitUntilNavigatedFrom(() => frame.topmost().navigate(entry));
+ waitUntilNavigatedFrom(() => topFrame ? topFrame.navigate(entry) : frame.topmost().navigate(entry));
return page;
}
-export function goBack() {
- waitUntilNavigatedFrom(() => frame.topmost().goBack());
+export function goBack(topFrame?: frame.Frame) {
+ waitUntilNavigatedFrom(() => topFrame ? topFrame.goBack() : frame.topmost().goBack());
}
export function assertAreClose(actual: number, expected: number, message: string): void {
diff --git a/tests/app/ui/layouts/safe-area-tests.ts b/tests/app/ui/layouts/safe-area-tests.ts
index ec6e7aeca..befc69138 100644
--- a/tests/app/ui/layouts/safe-area-tests.ts
+++ b/tests/app/ui/layouts/safe-area-tests.ts
@@ -6,6 +6,8 @@ import * as platform from "tns-core-modules/platform";
import { ios as iosUtils } from "tns-core-modules/utils/utils";
import * as helper from "../helper";
import { parse } from "tns-core-modules/ui/builder";
+import { Page } from "tns-core-modules/ui/page";
+import { Label } from "tns-core-modules/ui/label";
import {
dipToDp, left, top, right, bottom, height, width,
equal, closeEnough, lessOrCloseEnough, greaterOrCloseEnough, check,
@@ -37,6 +39,30 @@ export class SafeAreaTests extends testModule.UITest {
// no operation
};
+ public test_layout_changed_event_count() {
+ const page = parse(`
+
+
+
+
+
+ `);
+ let gridLayoutChangedCounter = 0;
+ let labelLayoutChangedCounter = 0;
+ const grid = page.getViewById("grid");
+ grid.on(view.View.layoutChangedEvent, () => {
+ gridLayoutChangedCounter++;
+ });
+ const label =