Merge pull request #854 from NativeScript/nnikolov/BindingContextSetBeforeAddingToVisualTree

BindingContext will be set before adding items to visual tree (ListView, Repeater).
This commit is contained in:
Nedyalko Nikolov
2015-09-30 13:36:25 +03:00
12 changed files with 64 additions and 9 deletions

View File

@@ -7,7 +7,7 @@ import uiTestModule = require("./ui-test");
frameModule.Frame.defaultAnimatedNavigation = false;
function isRunningOnEmulator(): boolean {
export function isRunningOnEmulator(): boolean {
// This checks are not good enough to be added to modules but keeps unittests green.
if (platform.device.os === platform.platformNames.android) {

View File

@@ -6,6 +6,7 @@ import observable = require("data/observable");
import types = require("utils/types");
import platform = require("platform");
import utils = require("utils/utils");
import testRunner = require("../../testRunner");
// <snippet module="ui/list-view" title="list-view">
// # ListView
@@ -633,6 +634,9 @@ export function test_ConverterIsCalledJustOnce_onAddingItemsToListView() {
}
export function test_no_memory_leak_when_items_is_regular_array() {
if (testRunner.isRunningOnEmulator()) {
return;
}
var createFunc = function (): listViewModule.ListView {
var listView = new listViewModule.ListView();
listView.items = FEW_ITEMS;
@@ -645,6 +649,9 @@ export function test_no_memory_leak_when_items_is_regular_array() {
}
export function test_no_memory_leak_when_items_is_observable_array() {
if (testRunner.isRunningOnEmulator()) {
return;
}
// Keep the reference to the observable array to test the weakEventListener
var colors = new observableArray.ObservableArray(["red", "green", "blue"]);

View File

@@ -378,3 +378,30 @@ export var test_Observable_WhenCreatedWithJSON_PropertyChangedWithBracketsNotati
TKUnit.assert(receivedCount === 1, "PropertyChanged event not raised properly.");
}
export function test_AddingTwoEventHandlersAndRemovingWithinHandlerShouldRaiseAllEvents() {
var observableInstance = new observable.Observable();
var firstHandlerCalled = false;
var secondHandlerCalled= false;
var firstHandler = function (args) {
observableInstance.off(observable.Observable.propertyChangeEvent, firstHandler, firstObserver);
firstHandlerCalled = true;
}
var secondHandler = function (args) {
observableInstance.off(observable.Observable.propertyChangeEvent, secondHandler, secondObserver);
secondHandlerCalled = true;
}
var firstObserver = new observable.Observable();
var secondObserver = new observable.Observable();
observableInstance.on(observable.Observable.propertyChangeEvent, firstHandler, firstObserver);
observableInstance.on(observable.Observable.propertyChangeEvent, secondHandler, secondObserver);
observableInstance.set("someProperty", "some value");
TKUnit.assertEqual(firstHandlerCalled, true);
TKUnit.assertEqual(secondHandlerCalled, true);
}

View File

@@ -2,7 +2,7 @@
<Repeater id="repeater" items="{{ items }}">
<Repeater.itemTemplate>
<GridLayout width="94" height="94" >
<Label text="{{ $parents['Page'].parentViewProperty }}" tap="{{ tapItem }}" />
<Label text="{{ sourceProperty = $parents['Page'].parentViewProperty }}" tap="{{ tapItem }}" />
</GridLayout>
</Repeater.itemTemplate>
</Repeater>

View File

@@ -1,4 +1,5 @@
import TKUnit = require("../../TKUnit");
import testRunner = require("../../testRunner");
import helper = require("../helper");
import viewModule = require("ui/core/view");
import pagesModule = require("ui/page");
@@ -427,6 +428,9 @@ export var testNativeTextAlignmentFromLocal = function () {
}
export var testMemoryLeak = function () {
if (testRunner.isRunningOnEmulator()) {
return;
}
helper.buildUIWithWeakRefAndInteract(_createTextFieldFunc, function (textField) {
textFieldTestsNative.typeTextNatively(textField, "Hello, world!");
});

View File

@@ -1,4 +1,5 @@
import TKUnit = require("../../TKUnit");
import testRunner = require("../../testRunner");
import helper = require("../helper");
import viewModule = require("ui/core/view");
import pagesModule = require("ui/page");
@@ -468,6 +469,9 @@ export var testNativeTextAlignmentFromLocal = function () {
}
export var testMemoryLeak = function () {
if (testRunner.isRunningOnEmulator()) {
return;
}
helper.buildUIWithWeakRefAndInteract(_createTextViewFunc, function (textView) {
textViewTestsNative.typeTextNatively(textView, "Hello, world!");
});

View File

@@ -603,7 +603,7 @@ export function test_parse_ShouldParseNestedListViewInListViewTemplate() {
}
export function test_parse_ShouldEvaluateEventBindingExpressionInListViewTemplate() {
var p = <Page>builder.parse('<Page xmlns="http://www.nativescript.org/tns.xsd"><ListView items="{{ items }}" itemLoading="{{ itemLoading }}"><ListView.itemTemplate><SegmentedBar items="{{ $parents[\'ListView\'].items }}" selectedIndexChanged="{{ $parents[\'ListView\'].changed }}" /></ListView.itemTemplate></ListView></Page>');
var p = <Page>builder.parse('<Page xmlns="http://www.nativescript.org/tns.xsd"><ListView items="{{ items }}" itemLoading="{{ itemLoading }}"><ListView.itemTemplate><SegmentedBar items="{{ sourceProperty = $parents[\'ListView\'].items }}" selectedIndexChanged="{{ sourceProperty = $parents[\'ListView\'].changed }}" /></ListView.itemTemplate></ListView></Page>');
function testAction(views: Array<viewModule.View>) {
var ctrl: segmentedBar.SegmentedBar;