mapcomplete/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

137 lines
5 KiB
TypeScript
Raw Normal View History

import { describe } from "mocha"
import { expect } from "chai"
import { LayerConfigJson } from "../../../../Models/ThemeConfig/Json/LayerConfigJson"
import { TagRenderingConfigJson } from "../../../../Models/ThemeConfig/Json/TagRenderingConfigJson"
2022-03-24 03:11:52 +01:00
import LineRenderingConfigJson from "../../../../Models/ThemeConfig/Json/LineRenderingConfigJson"
import {
ExpandRewrite,
2022-04-03 03:26:26 +02:00
PrepareLayer,
RewriteSpecial,
} from "../../../../Models/ThemeConfig/Conversion/PrepareLayer"
import { QuestionableTagRenderingConfigJson } from "../../../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
2022-04-03 02:37:31 +02:00
import RewritableConfigJson from "../../../../Models/ThemeConfig/Json/RewritableConfigJson"
2022-04-03 03:26:26 +02:00
2022-04-03 02:37:31 +02:00
describe("ExpandRewrite", () => {
it("should not allow overlapping keys", () => {
const spec = <RewritableConfigJson<string>>{
rewrite: {
sourceString: ["xyz", "longer_xyz"],
into: [["a", "b"], ["A, B"]],
},
renderings: "The value of xyz is longer_xyz",
}
const rewrite = new ExpandRewrite()
expect(() => rewrite.convert(spec, "test")).to.throw
})
})
2022-03-24 03:11:52 +01:00
describe("PrepareLayer", () => {
2022-04-03 02:37:31 +02:00
it("should expand rewrites in map renderings", () => {
const exampleLayer: LayerConfigJson = {
id: "testlayer",
source: {
osmTags: "key=value",
},
mapRendering: [
{
rewrite: {
sourceString: ["left|right", "lr_offset"],
into: [
["left", -6],
["right", +6],
],
},
renderings: <LineRenderingConfigJson>{
color: {
render: "#888",
mappings: [
{
if: "parking:condition:left|right=free",
then: "#299921",
},
{
if: "parking:condition:left|right=disc",
then: "#219991",
},
2022-03-24 03:11:52 +01:00
],
},
2022-04-03 02:37:31 +02:00
offset: "lr_offset",
2022-03-24 03:11:52 +01:00
},
2022-04-03 02:37:31 +02:00
},
],
}
const prep = new PrepareLayer({
tagRenderings: new Map<string, TagRenderingConfigJson>(),
sharedLayers: new Map<string, LayerConfigJson>(),
})
const result = prep.convertStrict(exampleLayer, "test")
2022-04-03 02:37:31 +02:00
const expected = {
id: "testlayer",
source: { osmTags: "key=value" },
mapRendering: [
{
color: {
render: "#888",
mappings: [
{
if: "parking:condition:left=free",
then: "#299921",
2022-09-08 21:40:48 +02:00
},
{
2022-04-03 02:37:31 +02:00
if: "parking:condition:left=disc",
then: "#219991",
2022-09-08 21:40:48 +02:00
},
],
2022-03-24 03:11:52 +01:00
},
2022-04-03 02:37:31 +02:00
offset: -6,
},
{
color: {
render: "#888",
mappings: [
{
if: "parking:condition:right=free",
then: "#299921",
2022-09-08 21:40:48 +02:00
},
{
2022-04-03 02:37:31 +02:00
if: "parking:condition:right=disc",
then: "#219991",
2022-09-08 21:40:48 +02:00
},
],
2022-03-24 03:11:52 +01:00
},
2022-04-03 02:37:31 +02:00
offset: 6,
},
],
titleIcons: [{ render: "defaults", id: "defaults" }],
}
2022-04-03 02:37:31 +02:00
expect(result).deep.eq(expected)
})
})
describe("RewriteSpecial", function () {
it("should rewrite the UK import button", () => {
const tr = <QuestionableTagRenderingConfigJson>{
id: "uk_addresses_import_button",
render: {
special: {
type: "import_button",
targetLayer: "address",
tags: "urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$",
text: "Add this address",
icon: "./assets/themes/uk_addresses/housenumber_add.svg",
location_picker: "none",
},
},
}
const r = new RewriteSpecial().convert(tr, "test").result
expect(r).to.deep.eq({
id: "uk_addresses_import_button",
2022-07-14 15:45:57 +02:00
render: {
"*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,none,)}",
2022-09-08 21:40:48 +02:00
},
})
})
})