A lot of re-factoring + bug fix for navigation events

This commit is contained in:
Rossen Hristov
2016-04-21 16:38:34 +03:00
parent b3f36644c1
commit 65bb2d4531
3 changed files with 169 additions and 94 deletions

View File

@@ -1,6 +1,6 @@
import definition = require("controls-page");
import {View} from "ui/core/view";
import {Page} from "ui/page";
import {Page, NavigatedData} from "ui/page";
import {topmost as topmostFrame, NavigationTransition, Frame} from "ui/frame";
import {Orientation, AnimationCurve} from "ui/enums";
import {StackLayout} from "ui/layouts/stack-layout";
@@ -39,25 +39,25 @@ export class NavPage extends Page implements definition.ControlsPage {
var that = this;
that.on(View.loadedEvent, (args) => {
console.log(`${args.object}.loadedEvent`);
//if (topmostFrame().android) {
// topmostFrame().android.cachePagesOnNavigate = true;
//}
console.log(`Loaded ${args.object}`);
if (topmostFrame().android) {
topmostFrame().android.cachePagesOnNavigate = true;
}
});
that.on(View.unloadedEvent, (args) => {
console.log(`${args.object}.unloadedEvent`);
console.log(`Unloaded ${args.object}`);
});
that.on(Page.navigatingFromEvent, (args) => {
console.log(`${args.object}.navigatingFromEvent`);
that.on(Page.navigatingFromEvent, (args: NavigatedData) => {
console.log(`NavigatING FROM ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
});
that.on(Page.navigatedFromEvent, (args) => {
console.log(`${args.object}.navigatedFromEvent`);
that.on(Page.navigatedFromEvent, (args: NavigatedData) => {
console.log(`NaviagatED FROM ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
});
that.on(Page.navigatingToEvent, (args) => {
console.log(`${args.object}.navigatingToEvent`);
that.on(Page.navigatingToEvent, (args: NavigatedData) => {
console.log(`NavigatING TO ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
});
that.on(Page.navigatedToEvent, (args) => {
console.log(`${args.object}.navigatedToEvent`);
that.on(Page.navigatedToEvent, (args: NavigatedData) => {
console.log(`NavigatED TO ${args.object}, isBackNavigation: ${args.isBackNavigation}`);
(<any>topmostFrame())._printFrameBackStack();
if (topmostFrame().android) {
(<any>topmostFrame())._printNativeBackStack();

View File

@@ -1,5 +1,5 @@
import * as TKUnit from "../TKUnit";
import {Page} from "ui/page";
import {Page, NavigatedData} from "ui/page";
import {topmost as topmostFrame, NavigationTransition} from "ui/frame";
import {Color} from "color";
@@ -174,3 +174,65 @@ export var test_ClearHistoryWithTransitionDoesNotBreakNavigation = function () {
// Clean up
topmost.transition = undefined;
}
function _test_NavigationEvents(transition?: NavigationTransition) {
let argsToString = (args: NavigatedData) => {
return `${(<Page>args.object).id} ${args.eventName} ${(args.isBackNavigation ? "back" : "forward") }`
};
let topmost = topmostFrame();
let mainTestPage = topmost.currentPage;
let originalMainPageId = mainTestPage.id;
mainTestPage.id = "main-page";
let actualMainPageEvents = new Array<string>();
mainTestPage.on(Page.navigatingFromEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
mainTestPage.on(Page.navigatedFromEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
mainTestPage.on(Page.navigatingToEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
mainTestPage.on(Page.navigatedToEvent, (args: NavigatedData) => { actualMainPageEvents.push(argsToString(args)); });
let actualSecondPageEvents = new Array<string>();
let secondPageFactory = function (): Page {
var secondPage = new Page();
secondPage.id = "second-page"
secondPage.on(Page.navigatingFromEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
secondPage.on(Page.navigatedFromEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
secondPage.on(Page.navigatingToEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
secondPage.on(Page.navigatedToEvent, (args: NavigatedData) => { actualSecondPageEvents.push(argsToString(args)); });
secondPage.style.backgroundColor = new Color(255, Math.round(Math.random() * 255), Math.round(Math.random() * 255), Math.round(Math.random() * 255));
return secondPage;
};
// Go to other page
topmost.navigate({ create: secondPageFactory, transition: transition });
TKUnit.waitUntilReady(() => { return topmost.currentPage !== mainTestPage; });
// Go back to main
topmost.goBack();
TKUnit.waitUntilReady(() => { return topmost.currentPage === mainTestPage; });
mainTestPage.id = originalMainPageId;
let expectedMainPageEvents = [
"main-page navigatingFrom forward",
"main-page navigatedFrom forward",
"main-page navigatingTo back",
"main-page navigatedTo back"
];
TKUnit.arrayAssert(actualMainPageEvents, expectedMainPageEvents, "Actual main-page events are different from expected.");
let expectedSecondPageEvents = [
"second-page navigatingTo forward",
"second-page navigatedTo forward",
"second-page navigatingFrom back",
"second-page navigatedFrom back"
];
TKUnit.arrayAssert(actualSecondPageEvents, expectedSecondPageEvents, "Actual second-page events are different from expected.");
}
export var test_NavigationEvents = function () {
_test_NavigationEvents();
}
export var test_NavigationEvents_WithTransition = function () {
_test_NavigationEvents({ name: "slide" });
}