Added application resources (used for binding converters), also some bug

fixes (binding related).
This commit is contained in:
Nedyalko Nikolov
2015-03-30 13:44:37 +03:00
parent dfcc820f2f
commit d952faa3c2
8 changed files with 151 additions and 37 deletions

View File

@@ -429,6 +429,38 @@ export function test_loadMoreItems_not_raised_when_showing_many_items() {
helper.buildUIAndRunTest(listView, testAction);
}
export function test_usingAppLevelConvertersInListViewItems() {
var listView = new listViewModule.ListView();
var dateConverter = function (value, format) {
var result = format;
var day = value.getDate();
result = result.replace("DD", month < 10 ? "0" + day : day);
var month = value.getMonth() + 1;
result = result.replace("MM", month < 10 ? "0" + month : month);
result = result.replace("YYYY", value.getFullYear());
return result;
};
app.resources["dateConverter"] = dateConverter;
var data = new observableArray.ObservableArray();
data.push({date: new Date()});
function testAction(views: Array<viewModule.View>) {
listView.itemTemplate = "<Label id=\"testLabel\" text=\"{{ date, date | dateConverter('DD.MM.YYYY') }}\" />";
listView.items = data;
TKUnit.wait(ASYNC);
var nativeElementText = getTextFromNativeElementAt(listView, 0);
TKUnit.assertEqual(nativeElementText, dateConverter(new Date(), "DD.MM.YYYY"), "native element");
};
helper.buildUIAndRunTest(listView, testAction);
}
function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
if (!args.view) {
args.view = new labelModule.Label();
@@ -436,6 +468,19 @@ function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
(<labelModule.Label>args.view).text = "item " + args.index;
}
function getTextFromNativeElementAt(listView: listViewModule.ListView, index: number): any {
if (listView.android) {
var nativeElement = listView.android.getChildAt(index);
if (nativeElement instanceof android.view.ViewGroup) {
return (<android.widget.TextView>(<any>nativeElement.getChildAt(0))).getText();
}
return (<android.widget.TextView>nativeElement).getText();
}
else if (listView.ios) {
return listView.ios.visibleCells()[index].contentView.subviews[0].text;
}
}
function getNativeViewCount(listView: listViewModule.ListView): number {
if (listView.android) {
return listView.android.getChildCount();

View File

@@ -8,6 +8,7 @@ import frameModule = require("ui/frame");
import pageModule = require("ui/page");
import listViewModule = require("ui/list-view");
import buttonModule = require("ui/button");
import observable = require("data/observable");
// <snippet module="ui/tab-view" title="TabView">
// # TabView
@@ -38,6 +39,8 @@ import tabViewModule = require("ui/tab-view");
// ```
// </snippet>
var ASYNC = 0.3;
function _createTabView(): tabViewModule.TabView {
// <snippet module="ui/tab-view" title="TabView">
// ## Creating a TabView
@@ -367,6 +370,44 @@ export var testWhenNavigatingBackToANonCachedPageContainingATabViewWithAListView
TKUnit.assert(listView !== undefined, "ListView should be created when navigating back to the main page.");
}
export function testBindingIsRefreshedWhenTabViewItemIsUnselectedAndThenSelectedAgain() {
helper.buildUIAndRunTest(_createTabView(), function (views: Array<viewModule.View>) {
var viewModel = new observable.Observable();
viewModel.set("counter", 0);
frameModule.topmost().currentPage.bindingContext = viewModel;
var tabView = <tabViewModule.TabView>views[0];
var items = _createItems(10);
var StackLayout0 = new stackLayoutModule.StackLayout();
var label0 = new labelModule.Label();
label0.text = "Tab 0";
label0.id = "testLabel";
label0.bind({ sourceProperty: "counter", targetProperty: "text", twoWay: true });
StackLayout0.addChild(label0);
var tabEntry0 = {
title: "Tab 0",
view: StackLayout0
};
items.push(tabEntry0);
tabView.items = items;
tabView.selectedIndex = 10;
TKUnit.wait(ASYNC);
tabView.selectedIndex = 0;
TKUnit.wait(ASYNC);
tabView.selectedIndex = 10;
TKUnit.wait(ASYNC);
var expectedValue = 5;
viewModel.set("counter", expectedValue);
var testLabel = <labelModule.Label>(tabView.items[10].view.getViewById("testLabel"))
TKUnit.assertEqual(testLabel.text, expectedValue, "binding is not working!");
});
}
function _clickTheFirstButtonInTheListViewNatively(tabView: tabViewModule.TabView) {
if (tabView.android) {
var androidListView = <android.widget.ListView>tabView.android.getChildAt(0);