mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Fixed #779: frame.topmost().currentPage is not the same instance as the page being loaded in page.loaded event handler.
This commit is contained in:
6
apps/tests/ui/page/modal-page.ts
Normal file
6
apps/tests/ui/page/modal-page.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import {ShownModallyData} from "ui/page";
|
||||
|
||||
export function onShownModally(args: ShownModallyData) {
|
||||
args.context.shownModally = true;
|
||||
args.closeCallback("return value");
|
||||
}
|
||||
5
apps/tests/ui/page/modal-page.xml
Normal file
5
apps/tests/ui/page/modal-page.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<Page shownModally="onShownModally">
|
||||
<StackLayout>
|
||||
<Label text="Modal Page" />
|
||||
</StackLayout>
|
||||
</Page>
|
||||
@@ -27,6 +27,7 @@ import LabelModule = require("ui/label");
|
||||
import stackLayoutModule = require("ui/layouts/stack-layout");
|
||||
import helper = require("../helper");
|
||||
import view = require("ui/core/view");
|
||||
import platform = require("platform");
|
||||
|
||||
export function addLabelToPage(page: PageModule.Page, text?: string) {
|
||||
var label = new LabelModule.Label();
|
||||
@@ -368,6 +369,75 @@ export function test_page_backgroundColor_is_white() {
|
||||
});
|
||||
}
|
||||
|
||||
export function test_WhenPageIsLoadedFrameCurrentPageIsTheSameInstance() {
|
||||
var page;
|
||||
var loadedEventHandler = function (args) {
|
||||
console.log("loadedEventHandler");
|
||||
TKUnit.assert(FrameModule.topmost().currentPage === args.object, `frame.topmost().currentPage should be equal to args.object page instance in the page.loaded event handler. Expected: ${args.object.id}; Actual: ${FrameModule.topmost().currentPage.id};`);
|
||||
}
|
||||
|
||||
var pageFactory = function (): PageModule.Page {
|
||||
page = new PageModule.Page();
|
||||
page.id = "newPage";
|
||||
page.on(view.View.loadedEvent, loadedEventHandler);
|
||||
var label = new LabelModule.Label();
|
||||
label.text = "Text";
|
||||
page.content = label;
|
||||
return page;
|
||||
};
|
||||
|
||||
try {
|
||||
helper.navigate(pageFactory);
|
||||
page.off(view.View.loadedEvent, loadedEventHandler);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
export function test_WhenPageIsLoadedItCanShowAnotherPageAsModal_iOS() {
|
||||
if (platform.device.os === platform.platformNames.android) {
|
||||
// We can't show a modal from another modal on Android.
|
||||
return;
|
||||
}
|
||||
|
||||
var masterPage;
|
||||
var ctx = {
|
||||
shownModally: false
|
||||
};
|
||||
|
||||
var modalClosed = false;
|
||||
var modalCloseCallback = function (returnValue: any) {
|
||||
TKUnit.assert(ctx.shownModally, "Modal-page must be shown!");
|
||||
TKUnit.assert(returnValue === "return value", "Modal-page must return value!");
|
||||
modalClosed = true;
|
||||
}
|
||||
|
||||
var loadedEventHandler = function (args) {
|
||||
var basePath = "ui/page/";
|
||||
args.object.showModal(basePath + "modal-page", ctx, modalCloseCallback, false);
|
||||
};
|
||||
|
||||
var masterPageFactory = function(): PageModule.Page {
|
||||
masterPage = new PageModule.Page();
|
||||
masterPage.id = "newPage";
|
||||
masterPage.on(view.View.loadedEvent, loadedEventHandler);
|
||||
var label = new LabelModule.Label();
|
||||
label.text = "Text";
|
||||
masterPage.content = label;
|
||||
return masterPage;
|
||||
};
|
||||
|
||||
try {
|
||||
helper.navigate(masterPageFactory);
|
||||
TKUnit.waitUntilReady(() => { return modalClosed; });
|
||||
masterPage.off(view.View.loadedEvent, loadedEventHandler);
|
||||
}
|
||||
finally {
|
||||
helper.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
//export function test_ModalPage_Layout_is_Correct() {
|
||||
// var testPage: PageModule.Page;
|
||||
// var label: LabelModule.Label;
|
||||
|
||||
Reference in New Issue
Block a user