Merge pull request #3448 from NativeScript/nnikolov/SegmentedBarTestsFix

SegmentedBar tests fixed.
This commit is contained in:
Nedyalko Nikolov
2017-01-09 18:24:57 +02:00
committed by GitHub
7 changed files with 59 additions and 58 deletions

View File

@ -208,8 +208,8 @@ export function test_findFileMatch_with_multiple_matches_loads_by_priority() {
} }
function testTemplate(candidates: Array<string>, context: resolver.PlatformContext, expected: string) { function testTemplate(candidates: Array<string>, context: resolver.PlatformContext, expected: string) {
//var result = resolver._findFileMatch("test", ".xml", candidates, context); var result = resolver._findFileMatch("test", ".xml", candidates, context);
//TKUnit.assertEqual(result, expected, "File path"); TKUnit.assertEqual(result, expected, "File path");
} }
var testFilePath = "~/file-name-resolver-tests/files/test".replace("~", fs.knownFolders.currentApp().path); var testFilePath = "~/file-name-resolver-tests/files/test".replace("~", fs.knownFolders.currentApp().path);

View File

@ -93,7 +93,7 @@ allTests["TIME-PICKER"] = require("./ui/time-picker/time-picker-tests");
// allTests["HTML-VIEW"] = require("./ui/html-view/html-view-tests"); // allTests["HTML-VIEW"] = require("./ui/html-view/html-view-tests");
// allTests["REPEATER"] = require("./ui/repeater/repeater-tests"); // allTests["REPEATER"] = require("./ui/repeater/repeater-tests");
// allTests["SEARCH-BAR"] = require('./ui/search-bar/search-bar-tests'); // allTests["SEARCH-BAR"] = require('./ui/search-bar/search-bar-tests');
// allTests["SEGMENTED-BAR"] = require("./ui/segmented-bar/segmented-bar-tests"); allTests["SEGMENTED-BAR"] = require("./ui/segmented-bar/segmented-bar-tests");
// allTests["ANIMATION"] = require("./ui/animation/animation-tests"); // allTests["ANIMATION"] = require("./ui/animation/animation-tests");
// allTests["CSS-ANIMATION"] = require("./ui/animation/css-animation-tests"); // allTests["CSS-ANIMATION"] = require("./ui/animation/css-animation-tests");

View File

@ -7,11 +7,16 @@ export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): numbe
export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean { export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean {
var isValid = true; var isValid = true;
for (var tabIndex = 0; tabIndex < bar.android.getTabWidget().getTabCount(); tabIndex++) { // for (var tabIndex = 0; tabIndex < bar.android.getTabWidget().getTabCount(); tabIndex++) {
var tabChild = <android.view.ViewGroup>bar.android.getTabWidget().getChildTabViewAt(tabIndex); // var tabChild = <android.view.ViewGroup>bar.android.getTabWidget().getChildTabViewAt(tabIndex);
var t = <android.widget.TextView>tabChild.getChildAt(1); // var t = <android.widget.TextView>tabChild.getChildAt(1);
isValid = bar.color && bar.color.android === t.getCurrentTextColor(); // isValid = bar.color && bar.color.android === t.getCurrentTextColor();
// }
for(let i = 0, itemsLength = bar.items.length; i < itemsLength; i++) {
let textView = <android.widget.TextView>bar.items[0].nativeView;
isValid = bar.color && bar.color.android === textView.getCurrentTextColor();
} }
return isValid; return isValid;

View File

@ -40,7 +40,7 @@ export var testWhenSegmentedBarIsCreatedItemsAreUndefined = function () {
export var testWhenSegmentedBarIsCreatedSelectedIndexIsUndefined = function () { export var testWhenSegmentedBarIsCreatedSelectedIndexIsUndefined = function () {
buildUIAndRunTest(_createSegmentedBar(), function (views: Array<View>) { buildUIAndRunTest(_createSegmentedBar(), function (views: Array<View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0]; var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];
var expectedValue = undefined; var expectedValue = -1;
var actualValue = segmentedBar.selectedIndex; var actualValue = segmentedBar.selectedIndex;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
}); });
@ -57,19 +57,27 @@ export var testWhenSettingItemsToNonEmptyArrayTheSameAmountOfNativeItemsIsCreate
} }
export var testWhenItemsAreBoundTheTextColorIsPreserved = function () { export var testWhenItemsAreBoundTheTextColorIsPreserved = function () {
buildUIAndRunTest(_createSegmentedBar(), function (views: Array<View>) { var segmentedBar = _createSegmentedBar();
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0]; segmentedBar.color = new Color("red");
buildUIAndRunTest(segmentedBar, function (views: Array<View>) {
segmentedBar.color = new Color("red"); segmentedBar.color = new Color("red");
var model = new Observable(); var model = new Observable();
model.set("items", [{ title: "One" }, { title: "Two" }, { title: "Three" }]); let firstSegmentedBarItem = new segmentedBarModule.SegmentedBarItem();
firstSegmentedBarItem.title = "One";
let secondSegmentedBarItem = new segmentedBarModule.SegmentedBarItem();
secondSegmentedBarItem.title = "Two";
let thirdSegmentedBarItem = new segmentedBarModule.SegmentedBarItem();
thirdSegmentedBarItem.title = "Three";
model.set("items", [firstSegmentedBarItem, secondSegmentedBarItem, thirdSegmentedBarItem]);
var options: BindingOptions = { var options: BindingOptions = {
sourceProperty: "items", sourceProperty: "items",
targetProperty: "items" targetProperty: "items"
} }
segmentedBar.bind(options, model); segmentedBar.bind(options, model);
TKUnit.assert(segmentedBarTestsNative.checkNativeItemsTextColor(segmentedBar), "Items text color not preserved" + "; Expected: " + segmentedBar.color); TKUnit.assert(segmentedBarTestsNative.checkNativeItemsTextColor(segmentedBar), "Items text color not preserved" + "; Expected: " + segmentedBar.color);
}); });
} }
@ -114,7 +122,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = functio
segmentedBar.selectedIndex = 9; segmentedBar.selectedIndex = 9;
// << artcile-selecting-item // << artcile-selecting-item
segmentedBar.items = []; segmentedBar.items = [];
var expectedValue = undefined; var expectedValue = -1;
var actualValue = segmentedBar.selectedIndex; var actualValue = segmentedBar.selectedIndex;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
}); });
@ -126,7 +134,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToUndefined = function
segmentedBar.items = _createItems(10); segmentedBar.items = _createItems(10);
segmentedBar.selectedIndex = 9; segmentedBar.selectedIndex = 9;
segmentedBar.items = undefined; segmentedBar.items = undefined;
var expectedValue = undefined; var expectedValue = -1;
var actualValue = segmentedBar.selectedIndex; var actualValue = segmentedBar.selectedIndex;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
}); });
@ -138,7 +146,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToNull = function () {
segmentedBar.items = _createItems(10); segmentedBar.items = _createItems(10);
segmentedBar.selectedIndex = 9; segmentedBar.selectedIndex = 9;
segmentedBar.items = null; segmentedBar.items = null;
var expectedValue = undefined; var expectedValue = -1;
var actualValue = segmentedBar.selectedIndex; var actualValue = segmentedBar.selectedIndex;
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
}); });
@ -168,29 +176,6 @@ export var testSelectedIndexIsResolvedCorrectlyIfSetBeforeViewIsLoaded = functio
}); });
} }
export var testSettingNegativeSelectedIndexShouldThrow = function () {
var segmentedBar = _createSegmentedBar();
buildUIAndRunTest(segmentedBar, function (views: Array<View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];
segmentedBar.items = _createItems(10);
TKUnit.assertThrows(function () {
segmentedBar.selectedIndex = -1;
}, "Setting selectedIndex to a negative number should throw.");
});
}
export var testSettingSelectedIndexLargerThanCountShouldThrow = function () {
var segmentedBar = _createSegmentedBar();
buildUIAndRunTest(segmentedBar, function (views: Array<View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];
segmentedBar.items = _createItems(10);
TKUnit.assertThrows(function () {
segmentedBar.selectedIndex = 10;
}, "Setting selectedIndex to a larger number should throw.");
});
}
export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSet = function () { export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSet = function () {
var oldIndex; var oldIndex;
var newIndex; var newIndex;
@ -252,18 +237,19 @@ export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSetNative =
export var testSelectedIndexChangedIsRaisedCorrectlyIfItemsNotBound = function () { export var testSelectedIndexChangedIsRaisedCorrectlyIfItemsNotBound = function () {
const segmentedBar = _createSegmentedBar(); const segmentedBar = _createSegmentedBar();
let newSelectedIndex = 0; let newSelectedIndex = 0;
segmentedBar.on("selectedIndexChange", () => { segmentedBar.on(segmentedBarModule.SegmentedBar.selectedIndexChangedEvent, () => {
newSelectedIndex = segmentedBar.selectedIndex; newSelectedIndex = segmentedBar.selectedIndex;
}); });
buildUIAndRunTest(segmentedBar, function (views: Array<View>) { const item0 = new segmentedBarModule.SegmentedBarItem();
const item0 = new segmentedBarModule.SegmentedBarItem(); item0.title = "item 0";
item0.title = "item 0"; segmentedBar._addChildFromBuilder("SegmentedBarItem", item0);
segmentedBar._addChildFromBuilder("SegmentedBarItem", item0);
const item1 = new segmentedBarModule.SegmentedBarItem(); const item1 = new segmentedBarModule.SegmentedBarItem();
item1.title = "item 1"; item1.title = "item 1";
segmentedBar._addChildFromBuilder("SegmentedBarItem", item1); segmentedBar._addChildFromBuilder("SegmentedBarItem", item1);
buildUIAndRunTest(segmentedBar, function (views: Array<View>) {
TKUnit.assertEqual(segmentedBar.items.length, 2); TKUnit.assertEqual(segmentedBar.items.length, 2);
segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 1); segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 1);

View File

@ -923,7 +923,6 @@ export function propagateInheritedProperties(view: ViewBase): void {
if (currentValueSource <= ValueSource.Inherited) { if (currentValueSource <= ValueSource.Inherited) {
prop.setInheritedValue.call(child, pair.value); prop.setInheritedValue.call(child, pair.value);
} }
return true;
} }
for (let pair of inheritableCssPropertyValues) { for (let pair of inheritableCssPropertyValues) {
@ -934,8 +933,8 @@ export function propagateInheritedProperties(view: ViewBase): void {
if (currentValueSource <= ValueSource.Inherited) { if (currentValueSource <= ValueSource.Inherited) {
prop.setInheritedValue.call(style, pair.value, ValueSource.Inherited); prop.setInheritedValue.call(style, pair.value, ValueSource.Inherited);
} }
return true;
} }
return true;
}); });
} }

View File

@ -86,6 +86,9 @@ export const selectedIndexProperty = new CoercibleProperty<SegmentedBarBase, num
let items = target.items; let items = target.items;
if (items) { if (items) {
let max = items.length - 1; let max = items.length - 1;
if (value < 0) {
value = 0;
}
if (value > max) { if (value > max) {
value = max; value = max;
} }

View File

@ -48,6 +48,14 @@ function setBackground(view: android.view.View, background: android.graphics.dra
export class SegmentedBarItem extends SegmentedBarItemBase { export class SegmentedBarItem extends SegmentedBarItemBase {
private _textView: android.widget.TextView; private _textView: android.widget.TextView;
get nativeView(): android.widget.TextView {
return this._textView;
}
get android(): android.widget.TextView {
return this._textView;
}
public setNativeView(textView: android.widget.TextView): void { public setNativeView(textView: android.widget.TextView): void {
this._textView = textView; this._textView = textView;
if (textView) { if (textView) {
@ -84,7 +92,7 @@ export class SegmentedBarItem extends SegmentedBarItemBase {
return this._textView.getCurrentTextColor(); return this._textView.getCurrentTextColor();
} }
set [colorProperty.native](value: Color | number) { set [colorProperty.native](value: Color | number) {
let color = typeof value === "Color" ? value.android : value; let color = value instanceof Color ? value.android : value;
this._textView.setTextColor(color); this._textView.setTextColor(color);
} }
@ -148,7 +156,7 @@ class TabChangeListener extends java.lang.Object implements android.widget.TabHo
onTabChanged(id: string): void { onTabChanged(id: string): void {
let owner = this.owner.get(); let owner = this.owner.get();
if (owner) { if (owner && owner.shouldChangeSelectedIndex()) {
owner.selectedIndex = parseInt(id); owner.selectedIndex = parseInt(id);
} }
} }
@ -185,6 +193,11 @@ export class SegmentedBar extends SegmentedBarBase {
private _android: android.widget.TabHost; private _android: android.widget.TabHost;
private listener: android.widget.TabHost.OnTabChangeListener; private listener: android.widget.TabHost.OnTabChangeListener;
private tabContentFactory: android.widget.TabHost.TabContentFactory; private tabContentFactory: android.widget.TabHost.TabContentFactory;
private _addingTab: boolean;
public shouldChangeSelectedIndex(): boolean {
return !this._addingTab;
}
public _createNativeView() { public _createNativeView() {
ensureTabHostClass(); ensureTabHostClass();
@ -210,6 +223,7 @@ export class SegmentedBar extends SegmentedBarBase {
this._android.addView(tabHostLayout); this._android.addView(tabHostLayout);
this._android.setup(); this._android.setup();
this._android.setOnTabChangedListener(this.listener);
} }
get android(): android.widget.TabHost { get android(): android.widget.TabHost {
@ -222,17 +236,11 @@ export class SegmentedBar extends SegmentedBarBase {
tab.setContent(this.tabContentFactory); tab.setContent(this.tabContentFactory);
let tabHost = this.android; let tabHost = this.android;
this._addingTab = true;
tabHost.addTab(tab); tabHost.addTab(tab);
this._addingTab = false;
// TODO: Why do we need to call this for every added tab?
// this.resetNativeListener();
} }
// private resetNativeListener() {
// this.android.setOnTabChangedListener(null);
// this.android.setOnTabChangedListener(this.listener);
// }
get [selectedIndexProperty.native](): number { get [selectedIndexProperty.native](): number {
return -1; return -1;
} }