Skip to content

Commit 0ef1e7a

Browse files
author
Nedyalko Nikolov
committed
Added test for binding context reload (when navigating) issue.
1 parent a6d2fc6 commit 0ef1e7a

8 files changed

+1641
-5
lines changed

CrossPlatformModules.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@
140140
<TypeScriptCompile Include="apps\tests\ui\bindingContext_testPage.ts">
141141
<DependentUpon>bindingContext_testPage.xml</DependentUpon>
142142
</TypeScriptCompile>
143+
<TypeScriptCompile Include="apps\tests\ui\bindingContext_testPage1.ts" />
144+
<TypeScriptCompile Include="apps\tests\ui\bindingContext_testPage2.ts" />
143145
<TypeScriptCompile Include="apps\tests\ui\time-picker\time-picker-tests-native.android.ts">
144146
<DependentUpon>time-picker-tests-native.d.ts</DependentUpon>
145147
</TypeScriptCompile>
@@ -597,6 +599,8 @@
597599
<Content Include="apps\tests\app\location-example.xml" />
598600
<Content Include="apps\tests\pages\page18.xml" />
599601
<Content Include="apps\tests\ui\bindingContext_testPage.xml" />
602+
<Content Include="apps\tests\ui\bindingContext_testPage1.xml" />
603+
<Content Include="apps\tests\ui\bindingContext_testPage2.xml" />
600604
<Content Include="apps\tests\ui\label\label-tests-wrong.css" />
601605
<Content Include="apps\tests\pages\files\other.xml" />
602606
<Content Include="apps\tests\pages\files\test.android.phone.xml" />

CrossPlatformModules.csproj.bak

Lines changed: 1581 additions & 0 deletions
Large diffs are not rendered by default.

apps/tests/ui/bindable-tests.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import pageModule = require("ui/page");
1111
import stackLayoutModule = require("ui/layouts/stack-layout");
1212
import bindingBuilder = require("ui/builder/binding-builder");
1313
import labelModule = require("ui/label");
14+
import textFieldModule = require("ui/text-field");
1415

1516
// <snippet module="ui/core/bindable" title="bindable">
1617
// For information and examples how to use bindings please refer to special [**Data binding**](../../../../bindings.md) topic.
@@ -472,5 +473,21 @@ export var test_TwoElementsBindingToSameBindingContext = function () {
472473
TKUnit.assertEqual(upperStackLabel.text, label2.text);
473474
}
474475

475-
helper.navigateToModuleAndRunTest("./tests/ui/bindingContext_testPage", testFunc);
476+
helper.navigateToModuleAndRunTest("./tests/ui/bindingContext_testPage", null, testFunc);
477+
}
478+
479+
export var test_BindingContext_NavigatingForwardAndBack = function () {
480+
var expectedValue = "Tralala";
481+
var testFunc = function (page: pageModule.Page) {
482+
var innerTestFunc = function (childPage: pageModule.Page) {
483+
var testTextField: textFieldModule.TextField = <textFieldModule.TextField>(childPage.getViewById("testTextField"));
484+
testTextField.text = expectedValue;
485+
};
486+
487+
helper.navigateToModuleAndRunTest("./tests/ui/bindingContext_testPage2", page.bindingContext, innerTestFunc);
488+
var testLabel: labelModule.Label = <labelModule.Label>(page.getViewById("testLabel"));
489+
TKUnit.assertEqual(testLabel.text, expectedValue);
490+
}
491+
492+
helper.navigateToModuleAndRunTest("./tests/ui/bindingContext_testPage1", null, testFunc);
476493
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import frame = require("ui/frame");
2+
import observable = require("data/observable");
3+
import pageModule = require("ui/page");
4+
5+
function loadViewModel() {
6+
viewModel.set("testProperty", "Alabala");
7+
}
8+
9+
var viewModel = new observable.Observable();
10+
11+
loadViewModel();
12+
13+
export function pageLoaded(args: observable.EventData) {
14+
var page = <pageModule.Page>args.object;
15+
page.bindingContext = viewModel;
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
2+
<StackLayout>
3+
<StackLayout>
4+
<Label id="testLabel" text="{{ testProperty }}" />
5+
</StackLayout>
6+
</StackLayout>
7+
</Page>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import pageModule = require("ui/page");
2+
3+
export function pageNavigatedTo(args: pageModule.NavigatedData) {
4+
var page = <pageModule.Page>args.object;
5+
page.bindingContext = args.context;
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<Page navigatedTo="pageNavigatedTo">
2+
<StackLayout>
3+
<TextField id="testTextField" text="{{ testProperty }}" />
4+
</StackLayout>
5+
</Page>

apps/tests/ui/helper.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ export function buildUIAndRunTest(controlToTest, testFunction, pageCss?) {
143143
}
144144
}
145145

146-
export function navigateToModuleAndRunTest(moduleName, testFunction) {
147-
navigateToModule(moduleName);
146+
export function navigateToModuleAndRunTest(moduleName, context, testFunction) {
147+
navigateToModule(moduleName, context);
148148
try {
149149
testFunction(frame.topmost().currentPage);
150150
}
@@ -201,9 +201,9 @@ export function navigate(pageFactory: () => page.Page) {
201201
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage; });
202202
}
203203

204-
export function navigateToModule(moduleName: string) {
204+
export function navigateToModule(moduleName: string, context?: any) {
205205
var currentPage = frame.topmost().currentPage;
206-
frame.topmost().navigate({ moduleName: moduleName, animated: false });
206+
frame.topmost().navigate({ moduleName: moduleName, context: context, animated: false });
207207
TKUnit.waitUntilReady(() => { return frame.topmost().currentPage !== currentPage; });
208208
TKUnit.assert(frame.topmost().currentPage.isLoaded, "Current page should be loaded!");
209209
}

0 commit comments

Comments
 (0)