123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /// <reference path="../../../src/tools/babylon.observable.ts" />
- var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- var JasmineTest;
- (function (JasmineTest) {
- var ObservableArray = BABYLON.ObservableArray;
- var ArrayChanged = BABYLON.ArrayChanged;
- var PropertyChangedBase = BABYLON.PropertyChangedBase;
- var Customer = (function (_super) {
- __extends(Customer, _super);
- function Customer(firstName, lastName) {
- _super.call(this);
- this._firstName = firstName;
- this._lastName = lastName;
- }
- Object.defineProperty(Customer.prototype, "firstName", {
- get: function () {
- return this._firstName;
- },
- set: function (value) {
- if (this._firstName === value) {
- return;
- }
- var old = this._firstName;
- var oldDN = this.displayName;
- this._firstName = value;
- this.onPropertyChanged("firstName", old, value);
- this.onPropertyChanged("displayName", oldDN, this.displayName);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Customer.prototype, "lastName", {
- get: function () {
- return this._lastName;
- },
- set: function (value) {
- if (this._lastName === value) {
- return;
- }
- var old = this._lastName;
- var oldDN = this.displayName;
- this._lastName = value;
- this.onPropertyChanged("lastName", old, value);
- this.onPropertyChanged("displayName", oldDN, this.displayName);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Customer.prototype, "displayName", {
- get: function () {
- return this.firstName + " " + this.lastName;
- },
- enumerable: true,
- configurable: true
- });
- return Customer;
- }(PropertyChangedBase));
- describe("Tools - ObservableArray", function () {
- it("Push", function () {
- var oa = new ObservableArray(true);
- oa.push(new Customer("loic", "baumann"));
- oa.propertyChanged.add(function (e, c) {
- expect(e.oldValue).toBe(1, "PropChanged length is bad");
- expect(e.newValue).toBe(2, "PropChanged length is bad");
- });
- oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe(ArrayChanged.newItemsAction, "Wrong ArrayChanged action");
- expect(e.newItems.length).toBe(1);
- var item = e.newItems[0];
- expect(item.index).toEqual(1);
- expect(item.value.firstName).toBe("david");
- expect(e.newStartingIndex).toBe(1);
- });
- oa.push(new Customer("david", "catuhe"));
- expect(oa.length).toBe(2);
- var item = oa.getAt(1);
- expect(item).toBeDefined();
- expect(item.firstName).toBe("david");
- var triggerCounter = 0;
- oa.watchedObjectChanged.add(function (e, c) {
- if (triggerCounter === 0) {
- expect(e.propertyChanged.propertyName).toBe("firstName");
- expect(e.propertyChanged.oldValue).toBe("david");
- expect(e.propertyChanged.newValue).toBe("delta");
- ++triggerCounter;
- }
- else {
- expect(e.propertyChanged.propertyName).toBe("displayName");
- expect(e.propertyChanged.oldValue).toBe("david catuhe");
- expect(e.propertyChanged.newValue).toBe("delta catuhe");
- ++triggerCounter;
- }
- });
- });
- it("SetAt/GetAt", function () {
- var oa = new ObservableArray(true);
- var propChangedCount = 0;
- var co = oa.propertyChanged.add(function (e, c) {
- if (e.propertyName !== "length") {
- return;
- }
- expect(e.oldValue).toBe(e.newValue - ((e.oldValue === 3) ? 2 : 1), "bad length value reported in PropChanged");
- ++propChangedCount;
- expect(propChangedCount).toBeLessThan(5, "PropChanged notif sent during illegal item insertion");
- });
- var triggerCount = 0;
- var aco = oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe(ArrayChanged.newItemsAction, "Wrong ArrayChanged action");
- switch (triggerCount) {
- case 0:
- expect(e.newItems.length).toBe(1);
- expect(e.newItems[0].index).toEqual(0);
- expect(e.newItems[0].value.firstName).toEqual("Mike");
- expect(e.newStartingIndex).toBe(0);
- break;
- case 1:
- expect(e.newItems.length).toBe(1);
- expect(e.newItems[0].index).toEqual(1);
- expect(e.newItems[0].value.firstName).toEqual("Steven");
- expect(e.newStartingIndex).toBe(1);
- break;
- case 2:
- expect(e.newItems.length).toBe(1);
- expect(e.newItems[0].index).toEqual(2);
- expect(e.newItems[0].value.firstName).toEqual("John");
- expect(e.newStartingIndex).toBe(2);
- break;
- case 3:
- expect(e.newItems.length).toBe(1);
- expect(e.newItems[0].index).toEqual(4);
- expect(e.newItems[0].value.firstName).toEqual("Matthew");
- expect(e.newStartingIndex).toBe(4);
- break;
- default:
- fail("arrayChanged called abnormally");
- }
- ++triggerCount;
- });
- oa.setAt(0, new Customer("Mike", "Portnoy"));
- oa.setAt(1, new Customer("Steven", "Wilson"));
- oa.setAt(2, new Customer("John", "Petrucci"));
- oa.setAt(4, new Customer("Matthew", "Bellamy"));
- oa.setAt(-10, new Customer("Hilary", "Hahn"));
- oa.propertyChanged.remove(co);
- oa.arrayChanged.remove(aco);
- expect(oa.length).toBe(5);
- expect(oa.getAt(0).firstName).toBe("Mike");
- expect(oa.getAt(1).firstName).toBe("Steven");
- expect(oa.getAt(2).firstName).toBe("John");
- expect(oa.getAt(4).firstName).toBe("Matthew");
- triggerCount = 0;
- oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe((triggerCount < 2) ? ArrayChanged.changedItemAction : ArrayChanged.newItemsAction, "Wrong ArrayChanged action");
- switch (triggerCount) {
- case 0:
- expect(e.changedItems.length).toBe(1);
- expect(e.changedItems[0].index).toEqual(0);
- expect(e.changedItems[0].value.firstName).toEqual("MP");
- expect(e.changedStartingIndex).toBe(0);
- break;
- case 1:
- expect(e.changedItems.length).toBe(1);
- expect(e.changedItems[0].index).toEqual(1);
- expect(e.changedItems[0].value.firstName).toEqual("SW");
- expect(e.changedStartingIndex).toBe(1);
- break;
- case 2:
- expect(e.newItems.length).toBe(1);
- expect(e.newItems[0].index).toEqual(3);
- expect(e.newItems[0].value.firstName).toEqual("JP");
- expect(e.newStartingIndex).toBe(3);
- break;
- }
- ++triggerCount;
- });
- var cust0 = new Customer("MP", "Portnoy");
- var cust1 = new Customer("SW", "Wilson");
- var cust3 = new Customer("JP", "Petrucci");
- oa.setAt(0, cust0);
- oa.setAt(1, cust1);
- oa.setAt(3, cust3);
- var triggerCounter = 0;
- var propTriggered = false;
- oa.watchedObjectChanged.add(function (e, c) {
- propTriggered = true;
- if (e.propertyChanged.propertyName === "firstName") {
- expect(e.propertyChanged.newValue).not.toBe("MP");
- expect(e.propertyChanged.newValue).not.toBe("SW");
- expect(e.propertyChanged.newValue).not.toBe("JP");
- }
- if (triggerCounter === 0) {
- expect(e.propertyChanged.propertyName).toBe("firstName");
- expect(e.propertyChanged.oldValue).toBe("MP");
- expect(e.propertyChanged.newValue).toBe("BestDrummerInDaWorld");
- ++triggerCounter;
- }
- else {
- expect(e.propertyChanged.propertyName).toBe("displayName");
- expect(e.propertyChanged.oldValue).toBe("MP Portnoy");
- expect(e.propertyChanged.newValue).toBe("BestDrummerInDaWorld Portnoy");
- ++triggerCounter;
- }
- });
- cust0.firstName = "BestDrummerInDaWorld";
- expect(propTriggered).toBe(true, "no WatchedObjectChanged was called, not ok!");
- });
- it("Pop", function () {
- var oa = new ObservableArray(true);
- oa.push(new Customer("Myles", "Kennedy"));
- oa.propertyChanged.add(function (e, c) {
- expect(e.oldValue).toBe(1);
- expect(e.newValue).toBe(0);
- });
- oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe(ArrayChanged.removedItemsAction);
- expect(e.removedItems.length).toBe(1);
- expect(e.removedItems[0].index).toEqual(0);
- expect(e.removedItems[0].value.firstName).toEqual("Myles");
- expect(e.removedStartingIndex).toBe(0);
- });
- var pop = oa.pop();
- expect(pop.firstName).toBe("Myles");
- oa.watchedObjectChanged.add(function (e, c) {
- fail("watchedObject shouldn't be called as only a removed object had a property changed");
- });
- pop.firstName = "MK";
- });
- it("Concat", function () {
- var oa = new ObservableArray(false);
- oa.push("item0", "item1", "item2");
- oa.setAt(4, "item4");
- var noa = oa.concat("pipo0", "pipo1", "pipo2");
- var res = ["item0", "item1", "item2", "item4", "pipo0", "pipo1", "pipo2"];
- var i = 0;
- noa.forEach(function (v) {
- expect(v).toBe(res[i++]);
- });
- expect(noa.length).toBe(8);
- });
- it("Shift", function () {
- var oa = new ObservableArray(false);
- oa.push("item0", "item1", "item2");
- oa.propertyChanged.add(function (e, c) {
- expect(e.oldValue).toBe(3);
- expect(e.newValue).toBe(2);
- });
- oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe(ArrayChanged.replacedArrayAction);
- expect(e.removedItems.length).toBe(1);
- expect(e.removedItems[0]).toEqual({ index: 0, value: "item0" });
- expect(oa.getAt(0)).toEqual("item1");
- expect(oa.getAt(1)).toEqual("item2");
- expect(e.removedStartingIndex).toBe(0);
- });
- oa.shift();
- });
- it("Sort", function () {
- var oa = new ObservableArray(false);
- oa.push(3, 2, 4, 1);
- oa.propertyChanged.add(function (e, c) {
- fail("no propertyChanged should be fired");
- });
- oa.arrayChanged.add(function (e, c) {
- expect(e.action).toBe(ArrayChanged.replacedArrayAction);
- expect(oa.getAt(0)).toEqual(1);
- expect(oa.getAt(1)).toEqual(2);
- expect(oa.getAt(2)).toEqual(3);
- expect(oa.getAt(3)).toEqual(4);
- });
- oa.sort(function (a, b) { return a - b; });
- });
- });
- })(JasmineTest || (JasmineTest = {}));
- //# sourceMappingURL=ObservableArrayTest.js.map
|