mirror of
https://github.com/mapillary/mapillary-js.git
synced 2025-12-08 17:35:55 +00:00
110 lines
4.4 KiB
TypeScript
110 lines
4.4 KiB
TypeScript
import { empty as observableEmpty } from "rxjs";
|
|
|
|
import { skip } from "rxjs/operators";
|
|
import * as vd from "virtual-dom";
|
|
import { DOMRenderer } from "../../src/render/DOMRenderer";
|
|
import { RenderMode } from "../../src/render/RenderMode";
|
|
import { RenderService } from "../../src/render/RenderService";
|
|
|
|
describe("DOMRenderer.ctor", () => {
|
|
it("should be contructed", () => {
|
|
let element: HTMLDivElement = document.createElement("div");
|
|
let renderService: RenderService = new RenderService(element, observableEmpty(), RenderMode.Letterbox);
|
|
let domRenderer: DOMRenderer = new DOMRenderer(element, renderService, observableEmpty());
|
|
|
|
expect(domRenderer).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("DOMRenderer.render$", () => {
|
|
it("should render one element", (done: Function) => {
|
|
let element: HTMLDivElement = document.createElement("div");
|
|
let renderService: RenderService = new RenderService(element, observableEmpty(), RenderMode.Letterbox);
|
|
let domRenderer: DOMRenderer = new DOMRenderer(element, renderService, observableEmpty());
|
|
|
|
domRenderer.element$
|
|
.subscribe(
|
|
(e: Element): void => {
|
|
let list: HTMLCollectionOf<Element> =
|
|
<HTMLCollectionOf<Element>>e.getElementsByClassName("testdiv");
|
|
|
|
expect(list.length).toBe(1);
|
|
|
|
let testDiv: HTMLDivElement = <HTMLDivElement>list[0];
|
|
|
|
expect(testDiv).toBeDefined();
|
|
expect(testDiv instanceof HTMLDivElement).toBeTruthy();
|
|
|
|
done();
|
|
});
|
|
|
|
let vNode: vd.VNode = vd.h("div.testdiv", []);
|
|
|
|
domRenderer.render$.next({ name: "test", vNode: vNode });
|
|
});
|
|
|
|
it("should render multiple elements with different hash names", (done: Function) => {
|
|
let element: HTMLDivElement = document.createElement("div");
|
|
let renderService: RenderService = new RenderService(element, observableEmpty(), RenderMode.Letterbox);
|
|
let domRenderer: DOMRenderer = new DOMRenderer(element, renderService, observableEmpty());
|
|
|
|
domRenderer.element$.pipe(
|
|
skip(1))
|
|
.subscribe(
|
|
(e: Element): void => {
|
|
for (let i of [1, 2]) {
|
|
let className: string = "testdiv" + i.toString();
|
|
|
|
let list: HTMLCollectionOf<Element> =
|
|
<HTMLCollectionOf<Element>>e.getElementsByClassName(className);
|
|
expect(list.length).toBe(1);
|
|
|
|
let testDiv: HTMLDivElement = <HTMLDivElement>list[0];
|
|
|
|
expect(testDiv).toBeDefined();
|
|
expect(testDiv instanceof HTMLDivElement).toBeTruthy();
|
|
}
|
|
|
|
done();
|
|
});
|
|
|
|
let vNode1: vd.VNode = vd.h("div.testdiv1", []);
|
|
let vNode2: vd.VNode = vd.h("div.testdiv2", []);
|
|
|
|
domRenderer.render$.next({ name: "test1", vNode: vNode1 });
|
|
domRenderer.render$.next({ name: "test2", vNode: vNode2 });
|
|
});
|
|
|
|
it("should apply patch", (done: Function) => {
|
|
let element: HTMLDivElement = document.createElement("div");
|
|
let renderService: RenderService = new RenderService(element, observableEmpty(), RenderMode.Letterbox);
|
|
let domRenderer: DOMRenderer = new DOMRenderer(element, renderService, observableEmpty());
|
|
|
|
domRenderer.element$.pipe(
|
|
skip(1))
|
|
.subscribe(
|
|
(e: Element): void => {
|
|
let list1: HTMLCollectionOf<Element> =
|
|
<HTMLCollectionOf<Element>>e.getElementsByClassName("testdiv1");
|
|
expect(list1.length).toBe(0);
|
|
|
|
let list2: HTMLCollectionOf<Element> =
|
|
<HTMLCollectionOf<Element>>e.getElementsByClassName("testdiv2");
|
|
expect(list2.length).toBe(1);
|
|
|
|
let testDiv: HTMLDivElement = <HTMLDivElement>list2[0];
|
|
|
|
expect(testDiv).toBeDefined();
|
|
expect(testDiv instanceof HTMLDivElement).toBeTruthy();
|
|
|
|
done();
|
|
});
|
|
|
|
let vNode1: vd.VNode = vd.h("div.testdiv1", []);
|
|
let vNode2: vd.VNode = vd.h("div.testdiv2", []);
|
|
|
|
domRenderer.render$.next({ name: "test", vNode: vNode1 });
|
|
domRenderer.render$.next({ name: "test", vNode: vNode2 });
|
|
});
|
|
});
|