it("should dispatch range change on shift then pop", function () { var set = Set.from([1, 3]); set.addRangeChangeListener(function (plus, minus, index) { spy(plus, minus, index); // ignore all others }); var spy = jasmine.createSpy(); expect(set.add(2)).toEqual(true); expect(set.toArray()).toEqual([1, 3, 2]); expect(spy).toHaveBeenCalledWith([2], [], 2); var spy = jasmine.createSpy(); expect(set.shift()).toEqual(1); expect(set.toArray()).toEqual([3, 2]); expect(spy).toHaveBeenCalledWith([], [1], 0); var spy = jasmine.createSpy(); expect(set.pop()).toEqual(2); expect(set.toArray()).toEqual([3]); expect(spy).toHaveBeenCalledWith([], [2], 1); var spy = jasmine.createSpy(); expect(set.delete(3)).toEqual(true); expect(set.toArray()).toEqual([]); expect(spy).toHaveBeenCalledWith([], [3], 0); });
it("should dispatch range change on clear", function () { var set = Set.from([1, 2, 3]); var spy = jasmine.createSpy(); set.addRangeChangeListener(spy); set.clear(); expect(spy).toHaveBeenCalledWith([], [1, 2, 3], 0, set, undefined); });
it("should dispatch range change on shift", function () { var set = Set.from([1, 3, 2]); var spy = jasmine.createSpy(); set.addRangeChangeListener(spy); expect(set.shift()).toEqual(1); expect(set.toArray()).toEqual([3, 2]); expect(spy).toHaveBeenCalledWith([], [1], 0, set, undefined); });
it("should dispatch range change on delete", function () { var set = Set.from([1, 2, 3]); var spy = jasmine.createSpy(); set.addRangeChangeListener(spy); set["delete"](2); expect(set.toArray()).toEqual([1, 3]); expect(spy).toHaveBeenCalledWith([], [2], 1, set, undefined); });
it("should pop and shift", function () { var a = {i: 2}; var b = {i: 1}; var c = {i: 0}; var set = Set.from([a, b, c]); expect(set.pop()).toBe(c); expect(set.shift()).toBe(a); });
it("should dispatch size property change on clear", function () { // var set = new Set([1, 2, 3]); var set = Set.from([1, 2, 3]); var spy = jasmine.createSpy(); set.addBeforeOwnPropertyChangeListener("size", function (size) { spy("size change from", size); }); set.addOwnPropertyChangeListener("size", function (size) { spy("size change to", size); }); expect(set).toEqual(new Set([1, 2, 3])); set.clear(); expect(set).toEqual(new Set()); var argsForCall = spy.calls.all().map(function (call) { return call.args }); expect(argsForCall).toEqual([ ["size change from", 3], ["size change to", 0] ]); });