mirror of
https://github.com/mapillary/mapillary-js.git
synced 2026-01-18 13:56:53 +00:00
Make it possible to register camera constructors. Register default cameras. Use camera factory when creating cameras.
235 lines
6.6 KiB
TypeScript
235 lines
6.6 KiB
TypeScript
import { ImageHelper } from "../helper/ImageHelper";
|
|
import { Image as MImage } from "../../src/graph/Image";
|
|
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
|
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
|
import { MeshContract } from "../../src/api/contracts/MeshContract";
|
|
import { ImageCache } from "../../src/graph/ImageCache";
|
|
import { PerspectiveCamera } from "../../src/geometry/camera/PerspectiveCamera";
|
|
import { ICamera } from "../../src/geometry/interfaces/ICamera";
|
|
|
|
describe("Image", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should create a image", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
expect(image).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("Image.complete", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should make image complete", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
expect(image.complete).toBe(false);
|
|
|
|
let fillImage: SpatialImageEnt = helper.createSpatialImageEnt();
|
|
|
|
image.makeComplete(fillImage);
|
|
|
|
expect(image.complete).toBe(true);
|
|
});
|
|
|
|
it("should throw when fill is null", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
expect(() => { image.makeComplete(null); }).toThrowError(Error);
|
|
});
|
|
});
|
|
|
|
describe("Image.dispose", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should clear core and fill properties", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let fillImage: SpatialImageEnt = helper.createSpatialImageEnt();
|
|
image.makeComplete(fillImage);
|
|
|
|
image.dispose();
|
|
|
|
expect(image.complete).toBe(false);
|
|
|
|
expect(() => { return image.id; }).toThrowError(Error);
|
|
});
|
|
|
|
it("should dipose cache", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let imageCache: ImageCache = new ImageCache(undefined);
|
|
|
|
let disposeSpy: jasmine.Spy = spyOn(imageCache, "dispose");
|
|
disposeSpy.and.stub();
|
|
|
|
image.initializeCache(imageCache);
|
|
|
|
image.dispose();
|
|
|
|
expect(disposeSpy.calls.count()).toBe(1);
|
|
});
|
|
});
|
|
|
|
describe("Image.uncache", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should handle when cache is not initilized", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
image.uncache();
|
|
});
|
|
|
|
it("should dispose image cache", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let imageCache: ImageCache = new ImageCache(undefined);
|
|
|
|
let disposeSpy: jasmine.Spy = spyOn(imageCache, "dispose");
|
|
disposeSpy.and.stub();
|
|
|
|
image.initializeCache(imageCache);
|
|
|
|
image.uncache();
|
|
|
|
expect(disposeSpy.calls.count()).toBe(1);
|
|
});
|
|
|
|
it("should be able to initialize cache again after uncache", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let imageCache: ImageCache = new ImageCache(undefined);
|
|
|
|
let disposeSpy: jasmine.Spy = spyOn(imageCache, "dispose");
|
|
disposeSpy.and.stub();
|
|
|
|
image.initializeCache(imageCache);
|
|
|
|
image.uncache();
|
|
|
|
image.initializeCache(imageCache);
|
|
});
|
|
});
|
|
|
|
describe("Image.merged", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should not be merged when not complete", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
expect(image.merged).toBe(false);
|
|
});
|
|
|
|
it("should not be merged because merge cc is null", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let fillImage: SpatialImageEnt = helper.createSpatialImageEnt();
|
|
|
|
fillImage.merge_id = null;
|
|
|
|
image.makeComplete(fillImage);
|
|
|
|
expect(image.merged).toBe(false);
|
|
});
|
|
|
|
it("should be merged because merge cc present", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let fillImage: SpatialImageEnt = helper.createSpatialImageEnt();
|
|
|
|
fillImage.merge_id = "7";
|
|
|
|
image.makeComplete(fillImage);
|
|
|
|
expect(image.merged).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("Image.assetsCached", () => {
|
|
let helper: ImageHelper;
|
|
|
|
beforeEach(() => {
|
|
helper = new ImageHelper();
|
|
});
|
|
|
|
it("should not be cached when core", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
|
|
expect(image.assetsCached).toBe(false);
|
|
});
|
|
|
|
class ImageCacheMock extends ImageCache {
|
|
protected _overridingImage: HTMLImageElement;
|
|
protected _overridingMesh: MeshContract;
|
|
protected _overridingCamera: ICamera;
|
|
|
|
constructor() { super(undefined); }
|
|
|
|
public get image(): HTMLImageElement {
|
|
return this._overridingImage;
|
|
}
|
|
|
|
public set image(value: HTMLImageElement) {
|
|
this._overridingImage = value;
|
|
}
|
|
|
|
public get mesh(): MeshContract {
|
|
return this._overridingMesh;
|
|
}
|
|
|
|
public set mesh(value: MeshContract) {
|
|
this._overridingMesh = value;
|
|
}
|
|
|
|
public get camera(): ICamera {
|
|
return this._overridingCamera;
|
|
}
|
|
|
|
public set camera(value: ICamera) {
|
|
this._overridingCamera = value;
|
|
}
|
|
}
|
|
|
|
it("should be cached when assets set", () => {
|
|
let coreImage: CoreImageEnt = helper.createCoreImageEnt();
|
|
let image = new MImage(coreImage);
|
|
let fillImage: SpatialImageEnt = helper.createSpatialImageEnt();
|
|
image.makeComplete(fillImage);
|
|
|
|
let imageCache: ImageCacheMock = new ImageCacheMock();
|
|
imageCache.image = new Image();
|
|
imageCache.mesh = { faces: [], vertices: [] };
|
|
imageCache.camera = new PerspectiveCamera([1, 0, 0]);
|
|
|
|
image.initializeCache(imageCache);
|
|
|
|
expect(image.assetsCached).toBe(true);
|
|
});
|
|
});
|