Added support for property change with same object instance (via WrappedValue).

This commit is contained in:
Nedyalko Nikolov
2016-01-22 08:27:31 +02:00
parent 8159929ff7
commit 5c35f33441
4 changed files with 139 additions and 18 deletions

View File

@@ -490,4 +490,52 @@ export function test_ObservablesCreatedWithJSON_shouldNotEmitTwoTimesPropertyCha
testObservable.set("property1", 2);
TKUnit.assertEqual(propertyChangeCounter, 1, "PropertyChange event should be fired only once for a single change.");
}
export function test_ObservableShouldEmitPropertyChangeWithSameObjectUsingWrappedValue() {
var testArray = [1];
var testObservable = new observable.Observable({ "property1": testArray});
var propertyChangeCounter = 0;
var propertyChangeHandler = function (args) {
propertyChangeCounter++;
}
testObservable.on(observable.Observable.propertyChangeEvent, propertyChangeHandler);
testArray.push(2);
testObservable.set("property1", testArray);
TKUnit.assertEqual(propertyChangeCounter, 0, "PropertyChange event should not be fired when the same object instance is passed.");
testObservable.set("property1", observable.WrappedValue.wrap(testArray));
TKUnit.assertEqual(propertyChangeCounter, 1, "PropertyChange event should be fired only once for a single change.");
}
export function test_CorrectEventArgsWhenWrappedValueIsUsed() {
let testArray = [1];
let testObservable = new observable.Observable({ "property1": testArray});
let actualArgsValue = 0;
let propertyChangeHandler = function (args) {
actualArgsValue = args.value;
}
testObservable.on(observable.Observable.propertyChangeEvent, propertyChangeHandler);
testArray.push(2);
let wrappedArray = observable.WrappedValue.wrap(testArray);
testObservable.set("property1", wrappedArray);
TKUnit.assertEqual(actualArgsValue, wrappedArray, "PropertyChange event should be fired with correct value in arguments.");
}
export function test_CorrectPropertyValueAfterUsingWrappedValue() {
let testArray = [1];
let testObservable = new observable.Observable({ "property1": testArray});
let wrappedArray = observable.WrappedValue.wrap(testArray);
testObservable.set("property1", wrappedArray);
TKUnit.assertEqual(testObservable.get("property1"), testArray, "WrappedValue is used only to execute property change logic and unwrapped value should be used as proeprty value.");
}