Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
giswqs
GitHub Repository: giswqs/geemap
Path: blob/master/tests/legend.spec.ts
2313 views
1
import { AnyModel } from "@anywidget/types";
2
import { default as legendRender, Legend, LegendModel } from "../js/legend";
3
import { FakeAnyModel } from "./fake_anywidget";
4
5
import "../js/legend";
6
import { Container } from "../js/container";
7
8
describe("<legend>", () => {
9
let legend: Legend;
10
11
async function makeLegend(model: AnyModel<LegendModel>) {
12
const container = document.createElement("div");
13
legendRender.render({
14
model, el: container, experimental: {
15
invoke: () => new Promise(() => [model, []]),
16
}
17
});
18
const element = container.firstElementChild as Legend;
19
document.body.appendChild(element);
20
await element.updateComplete;
21
return element;
22
}
23
24
beforeEach(async () => {
25
legend = await makeLegend(new FakeAnyModel<LegendModel>({
26
title: "My Legend",
27
legend_keys: ["fire", "grass", "water"],
28
legend_colors: ["#ff0000", "#00ff00", "#0000ff"],
29
add_header: true,
30
show_close_button: true,
31
}));
32
});
33
34
afterEach(() => {
35
Array.from(document.querySelectorAll("legend-widget")).forEach((el) => {
36
el.remove();
37
})
38
});
39
40
it("can be instantiated.", () => {
41
expect(legend.shadowRoot?.querySelector("widget-container")).toBeDefined();
42
});
43
44
it("renders a header with title and close button", () => {
45
const header = legend.shadowRoot?.querySelector("widget-container")!! as Container
46
expect(header.title).toBe("My Legend");
47
expect(header.hideCloseButton).toBeFalse();
48
});
49
50
51
it("does not render a header when add_header is false", async () => {
52
legend.addHeader = false
53
await legend.updateComplete;
54
expect(legend.shadowRoot?.querySelector("widget-container")).toBeNull();
55
expect(legend.shadowRoot?.textContent).toContain("My Legend");
56
});
57
58
it("renders the legend", async () => {
59
const legendItems = legend.shadowRoot?.querySelectorAll('li')!;
60
expect(Array.from(legendItems)
61
.map((el) => el.textContent?.trim()))
62
.toEqual(["fire", "grass", "water"]);
63
expect(Array.from(legendItems)
64
.map((el) => el.querySelector('span')?.style.background))
65
.toEqual(["rgb(255, 0, 0)", "rgb(0, 255, 0)", "rgb(0, 0, 255)"]);
66
});
67
68
it("handles mismatched key/color size", async () => {
69
legend.legendKeys = ["fire", "grass", "water", "electricity"]
70
const legendItems = legend.shadowRoot?.querySelectorAll('li')!;
71
expect(Array.from(legendItems)
72
.map((el) => el.textContent?.trim()))
73
.toEqual(["fire", "grass", "water"]);
74
});
75
});
76