diff --git a/tests/app/file-name-resolver-tests/file-name-resolver-tests.ts b/tests/app/file-name-resolver-tests/file-name-resolver-tests.ts index 82f81d4ce..2a6981126 100644 --- a/tests/app/file-name-resolver-tests/file-name-resolver-tests.ts +++ b/tests/app/file-name-resolver-tests/file-name-resolver-tests.ts @@ -208,8 +208,8 @@ export function test_findFileMatch_with_multiple_matches_loads_by_priority() { } function testTemplate(candidates: Array, context: resolver.PlatformContext, expected: string) { - //var result = resolver._findFileMatch("test", ".xml", candidates, context); - //TKUnit.assertEqual(result, expected, "File path"); + var result = resolver._findFileMatch("test", ".xml", candidates, context); + TKUnit.assertEqual(result, expected, "File path"); } var testFilePath = "~/file-name-resolver-tests/files/test".replace("~", fs.knownFolders.currentApp().path); diff --git a/tests/app/testRunner.ts b/tests/app/testRunner.ts index 9fcced381..cb3ef302d 100644 --- a/tests/app/testRunner.ts +++ b/tests/app/testRunner.ts @@ -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["REPEATER"] = require("./ui/repeater/repeater-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["CSS-ANIMATION"] = require("./ui/animation/css-animation-tests"); diff --git a/tests/app/ui/segmented-bar/segmented-bar-tests-native.android.ts b/tests/app/ui/segmented-bar/segmented-bar-tests-native.android.ts index d5be781c1..d9055d5b0 100644 --- a/tests/app/ui/segmented-bar/segmented-bar-tests-native.android.ts +++ b/tests/app/ui/segmented-bar/segmented-bar-tests-native.android.ts @@ -7,11 +7,16 @@ export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): numbe export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean { var isValid = true; - for (var tabIndex = 0; tabIndex < bar.android.getTabWidget().getTabCount(); tabIndex++) { - var tabChild = bar.android.getTabWidget().getChildTabViewAt(tabIndex); - var t = tabChild.getChildAt(1); + // for (var tabIndex = 0; tabIndex < bar.android.getTabWidget().getTabCount(); tabIndex++) { + // var tabChild = bar.android.getTabWidget().getChildTabViewAt(tabIndex); + // var t = 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 = bar.items[0].nativeView; + isValid = bar.color && bar.color.android === textView.getCurrentTextColor(); } return isValid; diff --git a/tests/app/ui/segmented-bar/segmented-bar-tests.ts b/tests/app/ui/segmented-bar/segmented-bar-tests.ts index e81f6b14f..ba5d73559 100644 --- a/tests/app/ui/segmented-bar/segmented-bar-tests.ts +++ b/tests/app/ui/segmented-bar/segmented-bar-tests.ts @@ -40,7 +40,7 @@ export var testWhenSegmentedBarIsCreatedItemsAreUndefined = function () { export var testWhenSegmentedBarIsCreatedSelectedIndexIsUndefined = function () { buildUIAndRunTest(_createSegmentedBar(), function (views: Array) { var segmentedBar = views[0]; - var expectedValue = undefined; + var expectedValue = -1; var actualValue = segmentedBar.selectedIndex; TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); }); @@ -57,19 +57,27 @@ export var testWhenSettingItemsToNonEmptyArrayTheSameAmountOfNativeItemsIsCreate } export var testWhenItemsAreBoundTheTextColorIsPreserved = function () { - buildUIAndRunTest(_createSegmentedBar(), function (views: Array) { - var segmentedBar = views[0]; + var segmentedBar = _createSegmentedBar(); + segmentedBar.color = new Color("red"); + + buildUIAndRunTest(segmentedBar, function (views: Array) { segmentedBar.color = new Color("red"); 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 = { sourceProperty: "items", targetProperty: "items" } segmentedBar.bind(options, model); - + TKUnit.assert(segmentedBarTestsNative.checkNativeItemsTextColor(segmentedBar), "Items text color not preserved" + "; Expected: " + segmentedBar.color); }); } @@ -114,7 +122,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToEmptyArray = functio segmentedBar.selectedIndex = 9; // << artcile-selecting-item segmentedBar.items = []; - var expectedValue = undefined; + var expectedValue = -1; var actualValue = segmentedBar.selectedIndex; TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); }); @@ -126,7 +134,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToUndefined = function segmentedBar.items = _createItems(10); segmentedBar.selectedIndex = 9; segmentedBar.items = undefined; - var expectedValue = undefined; + var expectedValue = -1; var actualValue = segmentedBar.selectedIndex; TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue); }); @@ -138,7 +146,7 @@ export var testSelectedIndexBecomesUndefinedWhenItemsBoundToNull = function () { segmentedBar.items = _createItems(10); segmentedBar.selectedIndex = 9; segmentedBar.items = null; - var expectedValue = undefined; + var expectedValue = -1; var actualValue = segmentedBar.selectedIndex; 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) { - var 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) { - var 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 () { var oldIndex; var newIndex; @@ -252,18 +237,19 @@ export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSetNative = export var testSelectedIndexChangedIsRaisedCorrectlyIfItemsNotBound = function () { const segmentedBar = _createSegmentedBar(); let newSelectedIndex = 0; - segmentedBar.on("selectedIndexChange", () => { + segmentedBar.on(segmentedBarModule.SegmentedBar.selectedIndexChangedEvent, () => { newSelectedIndex = segmentedBar.selectedIndex; }); - buildUIAndRunTest(segmentedBar, function (views: Array) { - const item0 = new segmentedBarModule.SegmentedBarItem(); - item0.title = "item 0"; - segmentedBar._addChildFromBuilder("SegmentedBarItem", item0); + const item0 = new segmentedBarModule.SegmentedBarItem(); + item0.title = "item 0"; + segmentedBar._addChildFromBuilder("SegmentedBarItem", item0); - const item1 = new segmentedBarModule.SegmentedBarItem(); - item1.title = "item 1"; - segmentedBar._addChildFromBuilder("SegmentedBarItem", item1); + const item1 = new segmentedBarModule.SegmentedBarItem(); + item1.title = "item 1"; + segmentedBar._addChildFromBuilder("SegmentedBarItem", item1); + + buildUIAndRunTest(segmentedBar, function (views: Array) { TKUnit.assertEqual(segmentedBar.items.length, 2); segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 1); diff --git a/tns-core-modules/ui/core/properties.ts b/tns-core-modules/ui/core/properties.ts index f877bb71d..7c9c79169 100644 --- a/tns-core-modules/ui/core/properties.ts +++ b/tns-core-modules/ui/core/properties.ts @@ -923,7 +923,6 @@ export function propagateInheritedProperties(view: ViewBase): void { if (currentValueSource <= ValueSource.Inherited) { prop.setInheritedValue.call(child, pair.value); } - return true; } for (let pair of inheritableCssPropertyValues) { @@ -934,8 +933,8 @@ export function propagateInheritedProperties(view: ViewBase): void { if (currentValueSource <= ValueSource.Inherited) { prop.setInheritedValue.call(style, pair.value, ValueSource.Inherited); } - return true; } + return true; }); } diff --git a/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts b/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts index 9452b2b91..904aafbe6 100644 --- a/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts +++ b/tns-core-modules/ui/segmented-bar/segmented-bar-common.ts @@ -86,6 +86,9 @@ export const selectedIndexProperty = new CoercibleProperty max) { value = max; } diff --git a/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts b/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts index 7d525d057..8fc8d2750 100644 --- a/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts +++ b/tns-core-modules/ui/segmented-bar/segmented-bar.android.ts @@ -48,6 +48,14 @@ function setBackground(view: android.view.View, background: android.graphics.dra export class SegmentedBarItem extends SegmentedBarItemBase { 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 { this._textView = textView; if (textView) { @@ -84,7 +92,7 @@ export class SegmentedBarItem extends SegmentedBarItemBase { return this._textView.getCurrentTextColor(); } 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); } @@ -148,7 +156,7 @@ class TabChangeListener extends java.lang.Object implements android.widget.TabHo onTabChanged(id: string): void { let owner = this.owner.get(); - if (owner) { + if (owner && owner.shouldChangeSelectedIndex()) { owner.selectedIndex = parseInt(id); } } @@ -185,6 +193,11 @@ export class SegmentedBar extends SegmentedBarBase { private _android: android.widget.TabHost; private listener: android.widget.TabHost.OnTabChangeListener; private tabContentFactory: android.widget.TabHost.TabContentFactory; + private _addingTab: boolean; + + public shouldChangeSelectedIndex(): boolean { + return !this._addingTab; + } public _createNativeView() { ensureTabHostClass(); @@ -210,6 +223,7 @@ export class SegmentedBar extends SegmentedBarBase { this._android.addView(tabHostLayout); this._android.setup(); + this._android.setOnTabChangedListener(this.listener); } get android(): android.widget.TabHost { @@ -222,17 +236,11 @@ export class SegmentedBar extends SegmentedBarBase { tab.setContent(this.tabContentFactory); let tabHost = this.android; + this._addingTab = true; tabHost.addTab(tab); - - // TODO: Why do we need to call this for every added tab? - // this.resetNativeListener(); + this._addingTab = false; } - // private resetNativeListener() { - // this.android.setOnTabChangedListener(null); - // this.android.setOnTabChangedListener(this.listener); - // } - get [selectedIndexProperty.native](): number { return -1; }