import { DataSourceCollection } from "../../Source/Cesium.js"; import MockDataSource from "../MockDataSource.js"; import { when } from "../../Source/Cesium.js"; describe("DataSources/DataSourceCollection", function () { it("contains, get, getLength, and indexOf work", function () { var collection = new DataSourceCollection(); var source = new MockDataSource(); expect(collection.length).toEqual(0); expect(collection.contains(source)).toEqual(false); collection.add(new MockDataSource()); collection.add(source); collection.add(new MockDataSource()); expect(collection.length).toEqual(3); expect(collection.get(1)).toBe(source); expect(collection.indexOf(source)).toEqual(1); expect(collection.contains(source)).toEqual(true); collection.remove(collection.get(0)); expect(collection.indexOf(source)).toEqual(0); expect(collection.remove(source)).toEqual(true); expect(collection.contains(source)).toEqual(false); }); it("getByName works", function () { var collection = new DataSourceCollection(); var source1 = new MockDataSource(); source1.name = "Name1"; collection.add(source1); var source2 = new MockDataSource(); source2.name = "Name1"; collection.add(source2); var source3 = new MockDataSource(); source3.name = "Name2"; collection.add(source3); var res = collection.getByName("Name1"); expect(res.length).toEqual(2); expect(res[0].name).toEqual("Name1"); expect(res[1].name).toEqual("Name1"); }); it("add and remove events work", function () { var source = new MockDataSource(); var collection = new DataSourceCollection(); var addSpy = jasmine.createSpy("dataSourceAdded"); collection.dataSourceAdded.addEventListener(addSpy); var removeSpy = jasmine.createSpy("dataSourceRemoved"); collection.dataSourceRemoved.addEventListener(removeSpy); collection.add(source); expect(addSpy).toHaveBeenCalledWith(collection, source); expect(removeSpy).not.toHaveBeenCalled(); addSpy.calls.reset(); removeSpy.calls.reset(); expect(collection.remove(source)).toEqual(true); expect(addSpy).not.toHaveBeenCalled(); expect(removeSpy).toHaveBeenCalledWith(collection, source); }); it("move event works", function () { var source = new MockDataSource(); var collection = new DataSourceCollection(); collection.add(source); var moveSpy = jasmine.createSpy("dataSourceMoved"); collection.dataSourceMoved.addEventListener(moveSpy); collection.raise(source); collection.lower(source); collection.raiseToTop(source); collection.lowerToBottom(source); expect(moveSpy).not.toHaveBeenCalled(); collection.add(new MockDataSource()); collection.add(new MockDataSource()); collection.raise(source); expect(moveSpy).toHaveBeenCalledWith(source, 1, 0); collection.lower(source); expect(moveSpy).toHaveBeenCalledWith(source, 0, 1); collection.raiseToTop(source); expect(moveSpy).toHaveBeenCalledWith(source, 2, 0); collection.lowerToBottom(source); expect(moveSpy).toHaveBeenCalledWith(source, 0, 2); }); it("add works with promise", function () { var promise = when.defer(); var source = new MockDataSource(); var collection = new DataSourceCollection(); var addSpy = jasmine.createSpy("dataSourceAdded"); collection.dataSourceAdded.addEventListener(addSpy); collection.add(promise); expect(collection.length).toEqual(0); expect(addSpy).not.toHaveBeenCalled(); promise.resolve(source); expect(addSpy).toHaveBeenCalledWith(collection, source); expect(collection.length).toEqual(1); }); it("promise does not get added if not resolved before removeAll", function () { var promise = when.defer(); var source = new MockDataSource(); var collection = new DataSourceCollection(); var addSpy = jasmine.createSpy("dataSourceAdded"); collection.dataSourceAdded.addEventListener(addSpy); collection.add(promise); expect(collection.length).toEqual(0); expect(addSpy).not.toHaveBeenCalled(); collection.removeAll(); promise.resolve(source); expect(addSpy).not.toHaveBeenCalled(); expect(collection.length).toEqual(0); }); it("removeAll triggers events", function () { var sources = [ new MockDataSource(), new MockDataSource(), new MockDataSource(), ]; var collection = new DataSourceCollection(); var removeCalled = 0; collection.dataSourceRemoved.addEventListener(function ( sender, dataSource ) { expect(sender).toBe(collection); expect(sources.indexOf(dataSource)).not.toEqual(-1); removeCalled++; }); collection.add(sources[0]); collection.add(sources[1]); collection.add(sources[2]); collection.removeAll(); expect(collection.length).toEqual(0); expect(removeCalled).toEqual(sources.length); }); it("destroy triggers remove events and calls destroy", function () { var sources = [ new MockDataSource(), new MockDataSource(), new MockDataSource(), ]; var collection = new DataSourceCollection(); var removeCalled = 0; collection.dataSourceRemoved.addEventListener(function ( sender, dataSource ) { expect(sender).toBe(collection); expect(sources.indexOf(dataSource)).not.toEqual(-1); removeCalled++; }); collection.add(sources[0]); collection.add(sources[1]); collection.add(sources[2]); expect(collection.isDestroyed()).toEqual(false); collection.destroy(); expect(collection.isDestroyed()).toEqual(true); expect(removeCalled).toEqual(sources.length); expect(sources[0].destroyed).toEqual(true); expect(sources[1].destroyed).toEqual(true); expect(sources[2].destroyed).toEqual(true); }); it("remove returns fals for non-member", function () { var collection = new DataSourceCollection(); expect(collection.remove(new MockDataSource())).toEqual(false); }); it("get throws if passed undefined", function () { var collection = new DataSourceCollection(); expect(function () { collection.get(undefined); }).toThrowDeveloperError(); }); it("add throws if passed undefined", function () { var collection = new DataSourceCollection(); expect(function () { collection.add(undefined); }).toThrowDeveloperError(); }); });