mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Call native setters once when a page is instantiated. Fix background not being reset, Label's background is now set to background, not layer Make the nativeView field instead of property for performance reasons
343 lines
13 KiB
TypeScript
343 lines
13 KiB
TypeScript
import testModule = require("../../ui-test");
|
|
import TKUnit = require("../../TKUnit");
|
|
import helper = require("../helper");
|
|
import labelModule = require("tns-core-modules/ui/label");
|
|
import stackLayoutModule = require("tns-core-modules/ui/layouts/stack-layout");
|
|
import tabViewTestsNative = require("./tab-view-tests-native");
|
|
import { unsetValue } from "tns-core-modules/ui/core/view";
|
|
|
|
// Using a TabView requires the "ui/tab-view" module.
|
|
// >> article-require-tabview-module
|
|
import * as tabViewModule from "tns-core-modules/ui/tab-view";
|
|
// << article-require-tabview-module
|
|
|
|
export class TabViewTest extends testModule.UITest<tabViewModule.TabView> {
|
|
|
|
public create(): tabViewModule.TabView {
|
|
// >> article-create-tabview
|
|
var tabView = new tabViewModule.TabView();
|
|
// << article-create-tabview
|
|
tabView.id = "TabView";
|
|
return tabView;
|
|
}
|
|
|
|
_createItems(count: number): Array<tabViewModule.TabViewItem> {
|
|
var items = new Array<tabViewModule.TabViewItem>();
|
|
for (var i = 0; i < count; i++) {
|
|
var label = new labelModule.Label();
|
|
label.text = "Tab " + i;
|
|
var tabEntry = new tabViewModule.TabViewItem();
|
|
tabEntry.title = "Tab " + i;
|
|
tabEntry.view = label;
|
|
items.push(tabEntry);
|
|
}
|
|
return items;
|
|
}
|
|
|
|
public tearDown() {
|
|
if (this.testView && this.testView.items) {
|
|
this.testView.items.length = 0;
|
|
}
|
|
super.tearDown();
|
|
}
|
|
|
|
public testWhenTabViewIsCreatedItemsAreUndefined = function () {
|
|
TKUnit.assertEqual(this.testView.items, undefined, "Items should be undefined initally.");
|
|
}
|
|
|
|
public testWhenTabViewIsCreatedSelectedIndexIsUndefined = function () {
|
|
TKUnit.assertEqual(this.testView.selectedIndex, -1, "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.assertEqual(actualValue, expectedValue, "Should have 0 native tabs.");
|
|
}
|
|
|
|
public testSelectedIndexBecomesZeroWhenItemsBoundToNonEmptyArray = function () {
|
|
var tabView = this.testView;
|
|
// >> article-binding-tabview-items
|
|
var items = [];
|
|
var StackLayout0 = new stackLayoutModule.StackLayout();
|
|
var label0 = new labelModule.Label();
|
|
label0.text = "Tab 0";
|
|
StackLayout0.addChild(label0);
|
|
var tabEntry0 = new tabViewModule.TabViewItem();
|
|
tabEntry0.title = "Tab 0";
|
|
tabEntry0.view = StackLayout0;
|
|
items.push(tabEntry0);
|
|
var StackLayout1 = new stackLayoutModule.StackLayout();
|
|
var label1 = new labelModule.Label();
|
|
label1.text = "Tab 1";
|
|
StackLayout1.addChild(label1);
|
|
var tabEntry1 = new tabViewModule.TabViewItem();
|
|
tabEntry1.title = "Tab 1";
|
|
tabEntry1.view = StackLayout1;
|
|
items.push(tabEntry1);
|
|
tabView.items = items;
|
|
// << article-binding-tabview-items
|
|
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
var expectedValue = 0;
|
|
var actualValue = tabView.selectedIndex;
|
|
TKUnit.assertEqual(actualValue, expectedValue, "When bound selectedIndex should be 0.");
|
|
}
|
|
|
|
public testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = function () {
|
|
|
|
var tabView = this.testView;
|
|
tabView.items = this._createItems(10);
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
// >> article-select-tab
|
|
tabView.selectedIndex = 9;
|
|
// << article-select-tab
|
|
tabView.items = [];
|
|
|
|
var expectedValue = -1;
|
|
var actualValue = tabView.selectedIndex;
|
|
TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex should be undefined.");
|
|
}
|
|
|
|
public testSelectedIndexBecomesUndefinedWhenItemsSetToUndefined = function () {
|
|
var tabView = this.testView;
|
|
tabView.items = this._createItems(10);
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
tabView.selectedIndex = 9;
|
|
tabView.items = undefined;
|
|
var expectedValue = -1;
|
|
var actualValue = tabView.selectedIndex;
|
|
TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex should be undefined.");
|
|
}
|
|
|
|
public testSelectedIndexBecomesUndefinedWhenItemsSetToNull = function () {
|
|
var tabView = this.testView;
|
|
tabView.items = this._createItems(10);
|
|
tabView.selectedIndex = 9;
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
tabView.items = null;
|
|
var expectedValue = -1;
|
|
var actualValue = tabView.selectedIndex;
|
|
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();
|
|
|
|
var actualValue = tabView.items.length;
|
|
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();
|
|
|
|
var actualValue = tabView.selectedIndex;
|
|
TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex");
|
|
}
|
|
|
|
// 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.");
|
|
// }
|
|
|
|
// public testSettingSelectedIndexLargerThanCountShouldThrow = function () {
|
|
// var tabView = this.testView;
|
|
// this.waitUntilTestElementIsLoaded();
|
|
// tabView.items = this._createItems(10);
|
|
// TKUnit.assertThrows(function () {
|
|
// tabView.selectedIndex = 10;
|
|
// }, "Setting selectedIndex to a number bigger than items count should throw.");
|
|
// }
|
|
|
|
public testBindingToTabEntryWithUndefinedViewShouldThrow = function () {
|
|
var tabView = this.testView;
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
TKUnit.assertThrows(() => {
|
|
let item = new tabViewModule.TabViewItem();
|
|
item.title = "Tab 0";
|
|
item.view = undefined;
|
|
tabView.items = [item];
|
|
|
|
}, "Binding TabView to a TabViewItem with undefined view should throw.");
|
|
}
|
|
|
|
public testBindingToTabEntryWithNullViewShouldThrow = function () {
|
|
var tabView = this.testView;
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
TKUnit.assertThrows(() => {
|
|
let item = new tabViewModule.TabViewItem();
|
|
item.title = "Tab 0";
|
|
item.view = null;
|
|
tabView.items = [item];
|
|
|
|
}, "Binding TabView to a TabViewItem with null view should throw.");
|
|
}
|
|
|
|
public testWhenSelectingATabNativelySelectedIndexIsUpdatedProperly = function () {
|
|
var tabView = this.testView;
|
|
tabView.items = this._createItems(2);
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
var expectedValue = 1;
|
|
tabViewTestsNative.selectNativeTab(tabView, expectedValue);
|
|
TKUnit.waitUntilReady(function () {
|
|
return tabView.selectedIndex === expectedValue;
|
|
}, helper.ASYNC);
|
|
|
|
var actualValue = tabView.selectedIndex;
|
|
TKUnit.assertEqual(actualValue, expectedValue, "selectedIndex");
|
|
}
|
|
|
|
public testWhenSelectingATabNativelySelectedIndexChangedEventIsRaised = function () {
|
|
var tabView = this.testView;
|
|
tabView.items = this._createItems(10);
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
var expectedOldIndex = 3;
|
|
var expectedNewIndex = 5;
|
|
var actualOldIndex;
|
|
var actualNewIndex;
|
|
|
|
tabViewTestsNative.selectNativeTab(tabView, expectedOldIndex);
|
|
TKUnit.waitUntilReady(function () {
|
|
return tabView.selectedIndex === expectedOldIndex;
|
|
}, helper.ASYNC);
|
|
|
|
// >> article-tabview-selectedIndexChanged
|
|
tabView.on(tabViewModule.TabView.selectedIndexChangedEvent, (args: tabViewModule.SelectedIndexChangedEventData) => {
|
|
actualOldIndex = args.oldIndex;
|
|
actualNewIndex = args.newIndex;
|
|
});
|
|
// << article-tabview-selectedIndexChanged
|
|
|
|
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;
|
|
TKUnit.assertEqual(args.object, tabView, "args.object should be TabView")
|
|
});
|
|
|
|
tabView.selectedIndex = expectedNewIndex;
|
|
TKUnit.waitUntilReady(function () {
|
|
return tabViewTestsNative.getNativeSelectedIndex(tabView) === expectedNewIndex;
|
|
}, helper.ASYNC);
|
|
|
|
TKUnit.assertEqual(actualOldIndex, expectedOldIndex, "expectedOldIndex");
|
|
TKUnit.assertEqual(actualNewIndex, expectedNewIndex, "expectedNewIndex");
|
|
}
|
|
|
|
public test_FontIsReappliedWhenTabItemsChange = function () {
|
|
// let fontToString = (font: any): string => {
|
|
// if (this.testView.ios){
|
|
// return font.toString();
|
|
// }
|
|
// else {
|
|
// return `${font.typeface} ${font.size}`;
|
|
// }
|
|
// }
|
|
|
|
let assertFontsAreEqual = (actual: any, expected: any, message?: string) => {
|
|
if (this.testView.ios){
|
|
TKUnit.assertEqual(actual, expected, message);
|
|
}
|
|
else {
|
|
TKUnit.assertEqual(actual.typeface, expected.typeface, `${message} [typeface]`);
|
|
TKUnit.assertEqual(actual.size, expected.size, `${message} [size]`);
|
|
}
|
|
}
|
|
|
|
//console.log(`>>>>>>>>>>>>> CREATE 3 ITEMS`);
|
|
this.testView.items = this._createItems(1);
|
|
this.waitUntilTestElementIsLoaded();
|
|
|
|
let originalFont = tabViewTestsNative.getNativeFont(this.testView);
|
|
//console.log(`>>>>>>>>>>>>> originalFont: ${fontToString(originalFont)}`);
|
|
let nativeFont: any;
|
|
|
|
//console.log(`>>>>>>>>>>>>> PACIFICO`);
|
|
this.testView.style.font = "20 Pacifico";
|
|
nativeFont = tabViewTestsNative.getNativeFont(this.testView);
|
|
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
|
|
|
|
//console.log(`>>>>>>>>>>>>> CREATE 3 ITEMS`);
|
|
this.testView.items = this._createItems(2);
|
|
assertFontsAreEqual(tabViewTestsNative.getNativeFont(this.testView), nativeFont, "Font must be 20 Pacifico after rebinding items.");
|
|
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
|
|
|
|
//console.log(`>>>>>>>>>>>>> MONOSPACE;`);
|
|
this.testView.style.font = "bold 12 monospace";
|
|
nativeFont = tabViewTestsNative.getNativeFont(this.testView);
|
|
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
|
|
|
|
//console.log(`>>>>>>>>>>>>> CREATE 3 ITEMS`);
|
|
this.testView.items = this._createItems(3);
|
|
assertFontsAreEqual(tabViewTestsNative.getNativeFont(this.testView), nativeFont, "Font must be bold 12 monospace after rebinding items.");
|
|
//console.log(`>>>>>>>>>>>>> nativeFont: ${fontToString(nativeFont)}`);
|
|
|
|
//console.log(`>>>>>>>>>>>>> RESET`);
|
|
this.testView.style.font = unsetValue;
|
|
assertFontsAreEqual(tabViewTestsNative.getNativeFont(this.testView), originalFont, "Font must be the original one after resetting the style.");
|
|
}
|
|
}
|
|
|
|
export function createTestCase(): TabViewTest {
|
|
return new TabViewTest();
|
|
}
|