From 36ae896933ee716f723065b908a610c060a2c2d6 Mon Sep 17 00:00:00 2001 From: Rossen Hristov Date: Mon, 18 Jul 2016 13:38:57 +0300 Subject: [PATCH 01/21] Fix: Set the binding context of a page automatically when navigated to. Resolves #731 --- tests/app/ui/layouts/grid-layout-tests.ts | 2 -- tests/app/ui/page/page-tests-common.ts | 25 +++++++++++++++++++++++ tests/package.json | 4 ++-- tns-core-modules/ui/page/page-common.ts | 13 ++++++++++++ 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/tests/app/ui/layouts/grid-layout-tests.ts b/tests/app/ui/layouts/grid-layout-tests.ts index dc85e7017e..9bc784f375 100644 --- a/tests/app/ui/layouts/grid-layout-tests.ts +++ b/tests/app/ui/layouts/grid-layout-tests.ts @@ -17,13 +17,11 @@ class RemovalTrackingGridLayout extends GridLayout { public removedCols = 0; public _onRowRemoved(itemSpec: ItemSpec, index: number) { - console.log("_onRowRemoved"); this.removedRows++; super._onRowRemoved(itemSpec, index); } public _onColumnRemoved(itemSpec: ItemSpec, index: number) { - console.log("_onColumnRemoved"); this.removedCols++; super._onColumnRemoved(itemSpec, index); } diff --git a/tests/app/ui/page/page-tests-common.ts b/tests/app/ui/page/page-tests-common.ts index d2988b5813..8bc07ebb0a 100644 --- a/tests/app/ui/page/page-tests-common.ts +++ b/tests/app/ui/page/page-tests-common.ts @@ -230,6 +230,31 @@ export function test_NavigateTo_WithContext() { TKUnit.assertNull(testPage.navigationContext, "Navigation context should be cleared on navigating back"); } +//https://github.com/NativeScript/NativeScript/issues/731 +export function test_BindingContext_Becomes_NavigationContext_When_NavigatingTo() { + let currentPage = frameModule.topmost().currentPage; + let testPage: Page; + let bindingContext; + let pageFactory = function (): Page { + testPage = new Page(); + testPage.on(pageModule.Page.navigatingToEvent, function (args: NavigatedData) { + bindingContext = (args.object).bindingContext; + }); + return testPage; + }; + let navEntry = { + create: pageFactory, + context: "This is the navigation context", + animated: false + }; + let topFrame = frameModule.topmost(); + topFrame.navigate(navEntry); + TKUnit.waitUntilReady(() => topFrame.currentPage !== null && topFrame.currentPage !== currentPage && testPage.isLayoutValid); + helper.goBack(); + + TKUnit.assertEqual(bindingContext, navEntry.context, "The Page's bindingContext should be set automatically to the navigation context when navigating to."); +} + export function test_FrameBackStack_WhenNavigatingForwardAndBack() { let testPage: Page; let pageFactory = function () { diff --git a/tests/package.json b/tests/package.json index 17ce53ae68..cca777fa5d 100644 --- a/tests/package.json +++ b/tests/package.json @@ -6,7 +6,7 @@ "nativescript": { "id": "org.nativescript.tests", "tns-ios": { - "version": "2.1.0" + "version": "2.1.1" }, "tns-android": { "version": "2.1.1" @@ -23,4 +23,4 @@ "lazy": "1.0.11", "typescript": "^1.8.10" } -} +} \ No newline at end of file diff --git a/tns-core-modules/ui/page/page-common.ts b/tns-core-modules/ui/page/page-common.ts index 0388a0c4be..be89f004ec 100644 --- a/tns-core-modules/ui/page/page-common.ts +++ b/tns-core-modules/ui/page/page-common.ts @@ -199,8 +199,15 @@ export class Page extends ContentView implements dts.Page { }; } + private _originalBindingContext: any; public onNavigatingTo(context: any, isBackNavigation: boolean) { this._navigationContext = context; + + //https://github.com/NativeScript/NativeScript/issues/731 + if (!isBackNavigation && context && this.bindingContext !== context){ + this._originalBindingContext = this.bindingContext; + this.bindingContext = context; + } this.notify(this.createNavigatedData(Page.navigatingToEvent, isBackNavigation)); } @@ -216,6 +223,12 @@ export class Page extends ContentView implements dts.Page { this.notify(this.createNavigatedData(Page.navigatedFromEvent, isBackNavigation)); this._navigationContext = undefined; + + //https://github.com/NativeScript/NativeScript/issues/731 + if (isBackNavigation && this._originalBindingContext && this.bindingContext !== this._originalBindingContext){ + this.bindingContext = this._originalBindingContext; + this._originalBindingContext = undefined; + } } public showModal(): Page { From e76517693f110e8b4fb32540dff911a6d869d5d6 Mon Sep 17 00:00:00 2001 From: SvetoslavTsenov Date: Sun, 17 Jul 2016 17:32:45 +0300 Subject: [PATCH 02/21] Implement new logic for loading ui tests --- .../action-bar/action-item-position.ts | 39 +++ .../action-bar/action-item-position.xml | 16 ++ apps/app/ui-tests-app/action-bar/main-page.ts | 28 ++ .../app/ui-tests-app/action-bar/main-page.xml | 6 + apps/app/ui-tests-app/bindings/main-page.ts | 24 ++ apps/app/ui-tests-app/bindings/main-page.xml | 6 + apps/app/ui-tests-app/css/main-page.ts | 36 +++ apps/app/ui-tests-app/css/main-page.xml | 6 + .../ui-tests-app/{padding => css}/padding.xml | 8 +- apps/app/ui-tests-app/font/main-page.ts | 28 ++ apps/app/ui-tests-app/font/main-page.xml | 6 + apps/app/ui-tests-app/image-view/main-page.ts | 25 ++ .../app/ui-tests-app/image-view/main-page.xml | 6 + apps/app/ui-tests-app/layouts/main-page.ts | 36 +++ apps/app/ui-tests-app/layouts/main-page.xml | 6 + apps/app/ui-tests-app/main-page-view-model.ts | 136 ---------- apps/app/ui-tests-app/mainPage.ts | 242 +++++++++++++++--- apps/app/ui-tests-app/mainPage.xml | 13 +- apps/app/ui-tests-app/padding/padding.css | 3 - apps/app/ui-tests-app/pages/main-page.ts | 31 +++ apps/app/ui-tests-app/pages/main-page.xml | 6 + apps/app/ui-tests-app/tab-view/main-page.ts | 31 +++ apps/app/ui-tests-app/tab-view/main-page.xml | 6 + 23 files changed, 565 insertions(+), 179 deletions(-) create mode 100644 apps/app/ui-tests-app/action-bar/action-item-position.ts create mode 100644 apps/app/ui-tests-app/action-bar/action-item-position.xml create mode 100644 apps/app/ui-tests-app/action-bar/main-page.ts create mode 100644 apps/app/ui-tests-app/action-bar/main-page.xml create mode 100644 apps/app/ui-tests-app/bindings/main-page.ts create mode 100644 apps/app/ui-tests-app/bindings/main-page.xml create mode 100644 apps/app/ui-tests-app/css/main-page.ts create mode 100644 apps/app/ui-tests-app/css/main-page.xml rename apps/app/ui-tests-app/{padding => css}/padding.xml (54%) create mode 100644 apps/app/ui-tests-app/font/main-page.ts create mode 100644 apps/app/ui-tests-app/font/main-page.xml create mode 100644 apps/app/ui-tests-app/image-view/main-page.ts create mode 100644 apps/app/ui-tests-app/image-view/main-page.xml create mode 100644 apps/app/ui-tests-app/layouts/main-page.ts create mode 100644 apps/app/ui-tests-app/layouts/main-page.xml delete mode 100644 apps/app/ui-tests-app/main-page-view-model.ts delete mode 100644 apps/app/ui-tests-app/padding/padding.css create mode 100644 apps/app/ui-tests-app/pages/main-page.ts create mode 100644 apps/app/ui-tests-app/pages/main-page.xml create mode 100644 apps/app/ui-tests-app/tab-view/main-page.ts create mode 100644 apps/app/ui-tests-app/tab-view/main-page.xml diff --git a/apps/app/ui-tests-app/action-bar/action-item-position.ts b/apps/app/ui-tests-app/action-bar/action-item-position.ts new file mode 100644 index 0000000000..ffbc52da27 --- /dev/null +++ b/apps/app/ui-tests-app/action-bar/action-item-position.ts @@ -0,0 +1,39 @@ +import { EventData } from "data/observable"; +import { Page } from "ui/page"; +import observable = require("data/observable"); + +export function navigatingTo(args: EventData) { + let page = args.object; + page.bindingContext = new ActionItemPostitionView(); +} + +export class ActionItemPostitionView extends observable.Observable { + private _values = ["-i---", "---i---", "---i-"]; + private _count: number; + private _text: string; + + constructor() { + super(); + this._count = 0; + } + + get text(): string { + return this._text; + } + + set text(value: string) { + if (this._text !== value) { + this._text = value; + this.notifyPropertyChange("text", value) + } + } + + public onTap() { + this.change(); + } + + public change() { + let index = this._count++ % 3; + this.text = this._values[index]; + } +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/action-bar/action-item-position.xml b/apps/app/ui-tests-app/action-bar/action-item-position.xml new file mode 100644 index 0000000000..b442c297f1 --- /dev/null +++ b/apps/app/ui-tests-app/action-bar/action-item-position.xml @@ -0,0 +1,16 @@ + + + + + +