diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index aa4ce6d81..a34ebd6e5 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -84,6 +84,7 @@
modal-page.xml
+
diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts
index ebc64e184..10e40c628 100644
--- a/apps/tests/testRunner.ts
+++ b/apps/tests/testRunner.ts
@@ -58,6 +58,7 @@ allTests["BUTTON"] = require("./ui/button/button-tests");
allTests["BORDER"] = require("./ui/border/border-tests");
allTests["LABEL"] = require("./ui/label/label-tests");
allTests["TAB-VIEW"] = require("./ui/tab-view/tab-view-tests");
+allTests["TAB-VIEW-NAVIGATION"] = require("./ui/tab-view/tab-view-navigation-tests");
allTests["IMAGE"] = require("./ui/image/image-tests");
allTests["SLIDER"] = require("./ui/slider/slider-tests");
allTests["SWITCH"] = require("./ui/switch/switch-tests");
diff --git a/apps/tests/ui/tab-view/tab-view-tests-native.android.ts b/apps/tests/ui/tab-view/tab-view-tests-native.android.ts
index 8a9a5f88a..96fe02300 100644
--- a/apps/tests/ui/tab-view/tab-view-tests-native.android.ts
+++ b/apps/tests/ui/tab-view/tab-view-tests-native.android.ts
@@ -8,4 +8,9 @@ export function getNativeTabCount(tabView: tabViewModule.TabView): number {
export function selectNativeTab(tabView: tabViewModule.TabView, index: number): void {
var viewPager: android.support.v4.view.ViewPager = (tabView)._viewPager;
return viewPager.setCurrentItem(index);
+}
+
+export function getNativeSelectedIndex(tabView: tabViewModule.TabView): number {
+ var viewPager: android.support.v4.view.ViewPager = (tabView)._viewPager;
+ return viewPager.getCurrentItem();
}
\ No newline at end of file
diff --git a/apps/tests/ui/tab-view/tab-view-tests-native.d.ts b/apps/tests/ui/tab-view/tab-view-tests-native.d.ts
index cca48bcb7..26877b112 100644
--- a/apps/tests/ui/tab-view/tab-view-tests-native.d.ts
+++ b/apps/tests/ui/tab-view/tab-view-tests-native.d.ts
@@ -2,4 +2,5 @@
import tabViewModule = require("ui/tab-view");
export declare function getNativeTabCount(tabView: tabViewModule.TabView): number;
-export declare function selectNativeTab(tabView: tabViewModule.TabView, index: number): void;
\ No newline at end of file
+export declare function selectNativeTab(tabView: tabViewModule.TabView, index: number): void;
+export declare function getNativeSelectedIndex(tabView: tabViewModule.TabView): number;
\ No newline at end of file
diff --git a/apps/tests/ui/tab-view/tab-view-tests-native.ios.ts b/apps/tests/ui/tab-view/tab-view-tests-native.ios.ts
index 0516a14b6..7c57c84b8 100644
--- a/apps/tests/ui/tab-view/tab-view-tests-native.ios.ts
+++ b/apps/tests/ui/tab-view/tab-view-tests-native.ios.ts
@@ -11,4 +11,8 @@ export function getNativeTabCount(tabView: tabViewModule.TabView): number {
export function selectNativeTab(tabView: tabViewModule.TabView, index: number): void {
tabView.ios.selectedIndex = index;
tabView.ios.delegate.tabBarControllerDidSelectViewController(tabView.ios, tabView.ios.selectedViewController);
+}
+
+export function getNativeSelectedIndex(tabView: tabViewModule.TabView): number {
+ return tabView.ios.selectedIndex;
}
\ No newline at end of file
diff --git a/apps/tests/ui/tab-view/tab-view-tests.ts b/apps/tests/ui/tab-view/tab-view-tests.ts
index a60927522..6b366d2ab 100644
--- a/apps/tests/ui/tab-view/tab-view-tests.ts
+++ b/apps/tests/ui/tab-view/tab-view-tests.ts
@@ -1,4 +1,5 @@
-import TKUnit = require("../../TKUnit");
+import testModule = require("../../ui-test");
+import TKUnit = require("../../TKUnit");
import helper = require("../helper");
import viewModule = require("ui/core/view");
import labelModule = require("ui/label");
@@ -41,108 +42,100 @@ import tabViewModule = require("ui/tab-view");
var ASYNC = 2;
-function _createTabView(): tabViewModule.TabView {
- //
- // ## Creating a TabView
- // ``` JavaScript
- var tabView = new tabViewModule.TabView();
- // ```
- //
- tabView.id = "TabView";
- return tabView;
-}
+export class TabViewTest extends testModule.UITest {
-function _createItems(count: number): Array {
- var items = new Array();
- for (var i = 0; i < count; i++) {
- var label = new labelModule.Label();
- label.text = "Tab " + i;
- var tabEntry = new tabViewModule.TabViewItem({
- title: "Tab " + i,
- view: label
- });
- items.push(tabEntry);
+ public create(): tabViewModule.TabView {
+ //
+ // ## Creating a TabView
+ // ``` JavaScript
+ var tabView = new tabViewModule.TabView();
+ // ```
+ //
+ tabView.id = "TabView";
+ return tabView;
}
- return items;
-}
-function _createListView(): listViewModule.ListView {
- var listView = new listViewModule.ListView();
- listView.id = "ListView";
- var items = Array.apply(null, Array(10)).map(function (_, i) { return i; });
-
- listView.on(listViewModule.ListView.itemLoadingEvent, function (args: listViewModule.ItemEventData) {
- var button = args.view;
- if (!button) {
- button = new buttonModule.Button();
- args.view = button;
+ private _createItems(count: number): Array {
+ var items = new Array();
+ for (var i = 0; i < count; i++) {
+ var label = new labelModule.Label();
+ label.text = "Tab " + i;
+ var tabEntry = new tabViewModule.TabViewItem({
+ title: "Tab " + i,
+ view: label
+ });
+ items.push(tabEntry);
}
-
- button.text = "Button" + args.index;
- button.id = button.text;
- button.on(buttonModule.Button.tapEvent, _clickHandlerFactory(args.index));
- });
-
- listView.items = items;
-
- return listView;
-}
-
-var _clickHandlerFactory = function (index: number) {
- return function () {
- var pageFactory = function (): pageModule.Page {
- var detailsLabel = new labelModule.Label();
- detailsLabel.text = "Details Page " + index;
- var detailsPage = new pageModule.Page();
- detailsPage.content = detailsLabel;
- return detailsPage;
- };
-
- helper.navigate(pageFactory);
+ return items;
}
-}
-export var testWhenTabViewIsCreatedItemsAreUndefined = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- var expectedValue = undefined;
- var actualValue = tabView.items;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ private _createListView(): listViewModule.ListView {
+ var listView = new listViewModule.ListView();
+ listView.id = "ListView";
+ var items = Array.apply(null, Array(10)).map(function (_, i) { return i; });
-export var testWhenTabViewIsCreatedSelectedIndexIsUndefined = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- var expectedValue = undefined;
- var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ listView.on(listViewModule.ListView.itemLoadingEvent, function (args: listViewModule.ItemEventData) {
+ var button = args.view;
+ if (!button) {
+ button = new buttonModule.Button();
+ args.view = button;
+ }
-export var testWhenSettingItemsToNonEmptyArrayTheSameAmountOfNativeTabsIsCreated = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
- var expectedValue = tabView.items.length;
- var actualValue = tabViewTestsNative.getNativeTabCount(tabView);
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ button.text = "Button" + args.index;
+ button.id = button.text;
+ button.on(buttonModule.Button.tapEvent, this._clickHandlerFactory(args.index));
+ });
-export var testWhenSettingItemsToEmptyArrayZeroNativeTabsAreCreated = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
+ listView.items = items;
+
+ return listView;
+ }
+
+ private _clickHandlerFactory = function (index: number) {
+ return function () {
+ var pageFactory = function (): pageModule.Page {
+ var detailsLabel = new labelModule.Label();
+ detailsLabel.text = "Details Page " + index;
+ var detailsPage = new pageModule.Page();
+ detailsPage.content = detailsLabel;
+ return detailsPage;
+ };
+
+ helper.navigate(pageFactory);
+ }
+ }
+
+ public testWhenTabViewIsCreatedItemsAreUndefined = function () {
+ TKUnit.assertEqual(this.testView.items, undefined, "Items should be undefined initally.");
+ }
+
+ public testWhenTabViewIsCreatedSelectedIndexIsUndefined = function () {
+ TKUnit.assertEqual(this.testView.selectedIndex, undefined, "selectedIndex should be undefined initally.");
+ }
+
+ public testWhenSettingItemsToNonEmptyArrayTheSameAmountOfNativeTabsIsCreated = function () {
+ this.testView.items = this._createItems(10);
+ this.waitUntilTestElementIsLoaded();
+
+ let expectedValue = this.testView.items.length;
+ let actualValue = tabViewTestsNative.getNativeTabCount(this.testView);
+
+ TKUnit.assertEqual(actualValue, expectedValue, "NativeItems not equal to JS items.");
+ }
+
+ public testWhenSettingItemsToEmptyArrayZeroNativeTabsAreCreated = function () {
+ var tabView = this.testView;
tabView.items = [];
+ this.waitUntilTestElementIsLoaded();
+
var expectedValue = tabView.items.length;
var actualValue = tabViewTestsNative.getNativeTabCount(tabView);
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
-export var testSelectedIndexBecomesZeroWhenItemsBoundToNonEmptyArray = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
+ TKUnit.assertEqual(actualValue, expectedValue, "Should have 0 native tabs.");
+ }
+
+ public testSelectedIndexBecomesZeroWhenItemsBoundToNonEmptyArray = function () {
+ var tabView = this.testView;
//
// ### Binding TabView.items
// ``` JavaScript
@@ -168,16 +161,20 @@ export var testSelectedIndexBecomesZeroWhenItemsBoundToNonEmptyArray = function
tabView.items = items;
// ```
//
+
+ this.waitUntilTestElementIsLoaded();
+
var expectedValue = 0;
var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "When bound selectedIndex should be 0.");
+ }
+
+ public testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = function () {
+
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
+ this.waitUntilTestElementIsLoaded();
-export var testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
//
// ### Selecting a tab programmatically
// ``` JavaScript
@@ -185,276 +182,176 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = functio
// ```
//
tabView.items = [];
+
var expectedValue = undefined;
var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex should be undefined.");
+ }
+
+ public testSelectedIndexBecomesUndefinedWhenItemsSetToUndefined = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
+ this.waitUntilTestElementIsLoaded();
-export var testSelectedIndexBecomesUndefinedWhenItemsBoundToUndefined = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
tabView.selectedIndex = 9;
tabView.items = undefined;
var expectedValue = undefined;
var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex should be undefined.");
+ }
-export var testSelectedIndexBecomesUndefinedWhenItemsBoundToNull = function () {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
+ public testSelectedIndexBecomesUndefinedWhenItemsSetToNull = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
tabView.selectedIndex = 9;
+ this.waitUntilTestElementIsLoaded();
+
tabView.items = null;
var expectedValue = undefined;
var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex should be undefined.");
+ }
+
+ public testItemsIsResolvedCorrectlyIfSetBeforeViewIsLoaded = function () {
+ var tabView = this.testView;
+ var expectedValue = 10;
+ tabView.items = this._createItems(expectedValue);
+ tabView.selectedIndex = 9;
+ this.waitUntilTestElementIsLoaded();
-export var testItemsIsResolvedCorrectlyIfSetBeforeViewIsLoaded = function () {
- var tabView = _createTabView();
- var expectedValue = 10;
- tabView.items = _createItems(expectedValue);
- tabView.selectedIndex = 9;
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
var actualValue = tabView.items.length;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "items.length should be 10");
+ }
+
+ public testSelectedIndexIsResolvedCorrectlyIfSetBeforeViewIsLoaded = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
+ var expectedValue = 9;
+ tabView.selectedIndex = expectedValue;
+ this.waitUntilTestElementIsLoaded();
-export var testSelectedIndexIsResolvedCorrectlyIfSetBeforeViewIsLoaded = function () {
- var tabView = _createTabView();
- tabView.items = _createItems(10);
- var expectedValue = 9;
- tabView.selectedIndex = expectedValue;
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
var actualValue = tabView.selectedIndex;
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- });
-}
+ TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex");
+ }
-export var testSettingNegativeSelectedIndexShouldThrow = function () {
- var tabView = _createTabView();
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
+ public testSettingNegativeSelectedIndexShouldThrow = function () {
+ var tabView = this.testView;
+ this.waitUntilTestElementIsLoaded();
+ tabView.items = this._createItems(10);
TKUnit.assertThrows(function () {
tabView.selectedIndex = -1;
}, "Setting selectedIndex to a negative number should throw.");
- });
-}
+ }
-export var testSettingSelectedIndexLargerThanCountShouldThrow = function () {
- var tabView = _createTabView();
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
- tabView.items = _createItems(10);
+ public testSettingSelectedIndexLargerThanCountShouldThrow = function () {
+ var tabView = this.testView;
+ this.waitUntilTestElementIsLoaded();
+ tabView.items = this._createItems(10);
TKUnit.assertThrows(function () {
tabView.selectedIndex = 10;
}, "Setting selectedIndex to a negative number should throw.");
- });
-}
+ }
+
+ public testBindingToTabEntryWithUndefinedViewShouldThrow = function () {
+ var tabView = this.testView;
+ this.waitUntilTestElementIsLoaded();
-export var testBindingToTabEntryWithUndefinedViewShouldThrow = function () {
- var tabView = _createTabView();
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
TKUnit.assertThrows(function () {
tabView.items = [new tabViewModule.TabViewItem({ title: "Tab 0", view: undefined })];
}, "Binding TabView to a TabViewItem with undefined view should throw.");
- });
-}
+ }
+
+ public testBindingToTabEntryWithNullViewShouldThrow = function () {
+ var tabView = this.testView;
+ this.waitUntilTestElementIsLoaded();
-export var testBindingToTabEntryWithNullViewShouldThrow = function () {
- var tabView = _createTabView();
- helper.buildUIAndRunTest(tabView, function (views: Array) {
- var tabView = views[0];
TKUnit.assertThrows(function () {
tabView.items = [new tabViewModule.TabViewItem({ title: "Tab 0", view: null })];
}, "Binding TabView to a TabViewItem with null view should throw.");
- });
-}
-
-export var testWhenSelectingATabNativelySelectedIndexIsUpdatedProperly = function () {
- var tabView: tabViewModule.TabView;
- var mainPage: pageModule.Page;
- var pageFactory = function (): pageModule.Page {
- tabView = _createTabView();
- tabView.items = _createItems(2);
- mainPage = new pageModule.Page();
- mainPage.content = tabView;
- return mainPage;
- };
-
- helper.navigate(pageFactory);
-
- var expectedValue = 1;
- tabViewTestsNative.selectNativeTab(tabView, expectedValue);
- TKUnit.wait(helper.ASYNC);
-
- var actualValue = tabView.selectedIndex;
- try {
- TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
- }
- finally {
- helper.goBack();
- }
-}
-
-export var testWhenSelectingATabNativelySelectedIndexChangedEventIsRaised = function () {
- var tabView: tabViewModule.TabView;
- var mainPage: pageModule.Page;
- var pageFactory = function (): pageModule.Page {
- tabView = _createTabView();
- tabView.items = _createItems(10);
- mainPage = new pageModule.Page();
- mainPage.content = tabView;
- return mainPage;
- };
-
- helper.navigate(pageFactory);
-
- var expectedOldIndex = 3;
- var expectedNewIndex = 5;
- var actualOldIndex;
- var actualNewIndex;
-
- tabViewTestsNative.selectNativeTab(tabView, expectedOldIndex);
- TKUnit.wait(helper.ASYNC);
-
- tabView.on(tabViewModule.TabView.selectedIndexChangedEvent,(args: tabViewModule.SelectedIndexChangedEventData) => {
- actualOldIndex = args.oldIndex;
- actualNewIndex = args.newIndex;
- });
-
- tabViewTestsNative.selectNativeTab(tabView, expectedNewIndex);
- TKUnit.wait(helper.ASYNC);
-
- try {
- TKUnit.assert(actualOldIndex === expectedOldIndex, "Actual: " + actualOldIndex + "; Expected: " + expectedOldIndex);
- TKUnit.assert(actualNewIndex === expectedNewIndex, "Actual: " + actualNewIndex + "; Expected: " + expectedNewIndex);
- }
- finally {
- helper.goBack();
- }
-}
-
-export var testWhenSettingSelectedIndexProgramaticallySelectedIndexChangedEventIsRaised = function () {
- var tabView: tabViewModule.TabView;
- var mainPage: pageModule.Page;
- var pageFactory = function (): pageModule.Page {
- tabView = _createTabView();
- tabView.items = _createItems(10);
- mainPage = new pageModule.Page();
- mainPage.content = tabView;
- return mainPage;
- };
-
- helper.navigate(pageFactory);
-
- var expectedOldIndex = 2;
- var expectedNewIndex = 6;
- var actualOldIndex;
- var actualNewIndex;
-
- tabView.selectedIndex = expectedOldIndex;
- TKUnit.wait(helper.ASYNC);
-
- tabView.on(tabViewModule.TabView.selectedIndexChangedEvent,(args: tabViewModule.SelectedIndexChangedEventData) => {
- actualOldIndex = args.oldIndex;
- actualNewIndex = args.newIndex;
- });
-
- tabView.selectedIndex = expectedNewIndex;
- TKUnit.wait(helper.ASYNC);
-
- try {
- TKUnit.assert(actualOldIndex === expectedOldIndex, "Actual: " + actualOldIndex + "; Expected: " + expectedOldIndex);
- TKUnit.assert(actualNewIndex === expectedNewIndex, "Actual: " + actualNewIndex + "; Expected: " + expectedNewIndex);
- }
- finally {
- helper.goBack();
- }
-}
-
-export var testWhenNavigatingBackToANonCachedPageContainingATabViewWithAListViewTheListViewIsThere = function () {
- return;
-
- var topFrame = frameModule.topmost();
- var oldChache;
-
- if (topFrame.android) {
- oldChache = topFrame.android.cachePagesOnNavigate;
- topFrame.android.cachePagesOnNavigate = true;
}
- try {
+ public testWhenSelectingATabNativelySelectedIndexIsUpdatedProperly = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(2);
+ this.waitUntilTestElementIsLoaded();
- var mainPage: pageModule.Page;
- var pageFactory = function (): pageModule.Page {
- var tabView = _createTabView();
- var items = [];
- items.push({
- title: "List",
- view: _createListView()
- });
- var label = new labelModule.Label();
- label.text = "About";
- var aboutLayout = new stackLayoutModule.StackLayout();
- aboutLayout.id = "AboutLayout";
- aboutLayout.addChild(label);
- items.push({
- title: "About",
- view: aboutLayout
- });
- tabView.items = items;
+ var expectedValue = 1;
+ tabViewTestsNative.selectNativeTab(tabView, expectedValue);
+ TKUnit.waitUntilReady(function () {
+ return tabView.selectedIndex === expectedValue;
+ }, helper.ASYNC);
- mainPage = new pageModule.Page();
- mainPage.content = tabView;
-
- return mainPage;
- }
-
- helper.navigate(pageFactory);
-
- var tabView = mainPage.getViewById("TabView");
-
- // This will navigate to a details page. The wait is inside the method.
- _clickTheFirstButtonInTheListViewNatively(tabView);
-
- // Go back to the main page containing the TabView.
- helper.goBack();
-
- // Go back to the root tests page.
- helper.goBack();
- }
- finally {
- if (topFrame.android) {
- topFrame.android.cachePagesOnNavigate = oldChache;
- }
+ var actualValue = tabView.selectedIndex;
+ TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex");
}
- var listView = mainPage.getViewById("ListView");
+ public testWhenSelectingATabNativelySelectedIndexChangedEventIsRaised = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
+ this.waitUntilTestElementIsLoaded();
- TKUnit.assert(listView !== undefined, "ListView should be created when navigating back to the main page.");
-}
+ var expectedOldIndex = 3;
+ var expectedNewIndex = 5;
+ var actualOldIndex;
+ var actualNewIndex;
+
+ tabViewTestsNative.selectNativeTab(tabView, expectedOldIndex);
+ TKUnit.waitUntilReady(function () {
+ return tabView.selectedIndex === expectedOldIndex;
+ }, helper.ASYNC);
+
+ tabView.on(tabViewModule.TabView.selectedIndexChangedEvent, (args: tabViewModule.SelectedIndexChangedEventData) => {
+ actualOldIndex = args.oldIndex;
+ actualNewIndex = args.newIndex;
+ });
+
+ tabViewTestsNative.selectNativeTab(tabView, expectedNewIndex);
+ TKUnit.waitUntilReady(function () {
+ return tabView.selectedIndex === expectedNewIndex;
+ }, helper.ASYNC);
+
+ TKUnit.assertEqual(actualOldIndex, expectedOldIndex, "expectedOldIndex");
+ TKUnit.assertEqual(actualNewIndex, expectedNewIndex, "expectedNewIndex");
+ }
+
+ public testWhenSettingSelectedIndexProgramaticallySelectedIndexChangedEventIsRaised = function () {
+ var tabView = this.testView;
+ tabView.items = this._createItems(10);
+ this.waitUntilTestElementIsLoaded();
+
+ var expectedOldIndex = 2;
+ var expectedNewIndex = 6;
+ var actualOldIndex;
+ var actualNewIndex;
+
+ tabView.selectedIndex = expectedOldIndex;
+ TKUnit.waitUntilReady(function () {
+ return tabViewTestsNative.getNativeSelectedIndex(tabView) === expectedOldIndex;
+ }, helper.ASYNC);
+
+ tabView.on(tabViewModule.TabView.selectedIndexChangedEvent, (args: tabViewModule.SelectedIndexChangedEventData) => {
+ actualOldIndex = args.oldIndex;
+ actualNewIndex = args.newIndex;
+ });
+
+ tabView.selectedIndex = expectedNewIndex;
+ TKUnit.waitUntilReady(function () {
+ return tabViewTestsNative.getNativeSelectedIndex(tabView) === expectedNewIndex;
+ }, helper.ASYNC);
+
+ TKUnit.assertEqual(actualOldIndex, expectedOldIndex, "expectedOldIndex");
+ TKUnit.assertEqual(actualNewIndex, expectedNewIndex, "expectedNewIndex");
+ }
+
+ public testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelectedAgain() {
-export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelectedAgain() {
- helper.buildUIAndRunTest(_createTabView(), function (views: Array) {
var viewModel = new observable.Observable();
viewModel.set("counter", 0);
- frameModule.topmost().currentPage.bindingContext = viewModel;
+ this.testPage.bindingContext = viewModel;
- var tabView = views[0];
-
- var items = _createItems(10);
+ var tabView = this.testView;
+ var items = this._createItems(10);
var StackLayout0 = new stackLayoutModule.StackLayout();
var label0 = new labelModule.Label();
@@ -467,116 +364,31 @@ export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelected
view: StackLayout0
});
items.push(tabEntry0);
- tabView.items = items;
+ tabView.items = items;
tabView.selectedIndex = 10;
- TKUnit.wait(ASYNC);
+ TKUnit.waitUntilReady(function () {
+ return tabViewTestsNative.getNativeSelectedIndex(tabView) === tabView.selectedIndex;
+ }, helper.ASYNC);
+
+ TKUnit.assertEqual(label0.text, 0, "binding is not working!");
tabView.selectedIndex = 0;
- TKUnit.wait(ASYNC);
+ TKUnit.waitUntilReady(function () {
+ return tabViewTestsNative.getNativeSelectedIndex(tabView) === tabView.selectedIndex;
+ }, helper.ASYNC);
tabView.selectedIndex = 10;
- TKUnit.wait(ASYNC);
+ TKUnit.waitUntilReady(function () {
+ return tabViewTestsNative.getNativeSelectedIndex(tabView) === tabView.selectedIndex;
+ }, helper.ASYNC);
+
var expectedValue = 5;
viewModel.set("counter", expectedValue);
- var testLabel = (tabView.items[10].view.getViewById("testLabel"))
- TKUnit.assertEqual(testLabel.text, expectedValue, "binding is not working!");
- });
-}
-
-export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack_NoPageCaching() {
- testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(false);
-}
-export function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack_WithPageCaching() {
- testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(true);
-}
-
-function testLoadedAndUnloadedAreFired_WhenNavigatingAwayAndBack(enablePageCache: boolean) {
- var i: number;
- var itemCount = 3;
- var loadedItems = [0, 0, 0];
- var unloadedItems = [0, 0, 0];
-
- var topFrame = frameModule.topmost();
- var oldChache;
-
- if (topFrame.android) {
- oldChache = topFrame.android.cachePagesOnNavigate;
- topFrame.android.cachePagesOnNavigate = enablePageCache;
- }
-
- try {
- var tabView = _createTabView();
- var items = _createItems(itemCount);
- tabView.items = items;
-
- function createLoadedFor(itemIndex: number) {
- return function () {
- loadedItems[itemIndex] = loadedItems[itemIndex] + 1;
- }
- }
-
- function createUnloadedFor(itemIndex: number) {
- return function () {
- unloadedItems[itemIndex] = unloadedItems[itemIndex] + 1;
- }
- }
-
- helper.buildUIAndRunTest(tabView, function () {
- try {
- TKUnit.waitUntilReady(() => { return items[0].view.isLoaded; }, ASYNC);
-
- // Attach to loaded/unloaded events
- for (i = 0; i < itemCount; i++) {
- items[i].view.on("loaded", createLoadedFor(i));
- items[i].view.on("unloaded", createUnloadedFor(i));
- }
-
- var detailsPageFactory = function (): pageModule.Page {
- var detailsPage = new pageModule.Page();
- detailsPage.content = new labelModule.Label();
- return detailsPage;
- };
-
- helper.navigate(detailsPageFactory);
- }
- finally {
- // Go back to the test page.
- helper.goBack();
- }
-
- TKUnit.waitUntilReady(() => { return items[0].view.isLoaded; }, ASYNC);
-
- //console.log(">>>>>>>>>>>>> loaded items: " + loadedItems.join(", "));
- //console.log(">>>>>>>>>>>>> unloadedItems items: " + unloadedItems.join(", "));
-
- // Check that at least the first item is loaded and unloaded
- TKUnit.assert(items[0].view.isLoaded, "The content of the first tab should be loaded.");
- TKUnit.assertEqual(loadedItems[0], 1, "loaded count for 1st item");
- TKUnit.assertEqual(unloadedItems[0], 1, "unloaded count for 1st item");
-
- // Check that loaded/unloaded coutns are equal for all tabs
- for (i = 0; i < itemCount; i++) {
- TKUnit.assert(loadedItems[i] === unloadedItems[i],
- "Loaded and unloaded calls are not equal for item " + i + " loaded: " + loadedItems[i] + " unloaded: " + unloadedItems[i]);
- }
- });
- }
- finally {
- // Return original page cache value
- if (topFrame.android) {
- topFrame.android.cachePagesOnNavigate = oldChache;
- }
+ TKUnit.assertEqual(label0.text, expectedValue, "binding is not working!");
}
}
-function _clickTheFirstButtonInTheListViewNatively(tabView: tabViewModule.TabView) {
- if (tabView.android) {
- var viewPager: android.support.v4.view.ViewPager = (tabView)._viewPager;
- var androidListView = viewPager.getChildAt(0);
- (androidListView.getChildAt(0)).performClick();
- }
- else {
- ((tabView.ios.viewControllers[0].view.subviews[0]).cellForRowAtIndexPath(NSIndexPath.indexPathForItemInSection(0, 0)).contentView.subviews[0]).sendActionsForControlEvents(UIControlEvents.UIControlEventTouchUpInside);
- }
-}
+export function createTestCase(): TabViewTest {
+ return new TabViewTest();
+}
\ No newline at end of file