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.

136 lines
5.1 KiB
TypeScript
Raw Normal View History

2023-07-15 18:55:03 +02:00
import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
import LineRenderingConfigJson from "../../../../src/Models/ThemeConfig/Json/LineRenderingConfigJson"
import {
PrepareLayer,
RewriteSpecial,
2023-07-15 18:55:03 +02:00
} from "../../../../src/Models/ThemeConfig/Conversion/PrepareLayer"
import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
import RewritableConfigJson from "../../../../src/Models/ThemeConfig/Json/RewritableConfigJson"
import { describe, expect, it } from "vitest"
2023-11-02 04:35:32 +01:00
import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/ConversionContext"
import { ExpandRewrite } from "../../../../src/Models/ThemeConfig/Conversion/ExpandRewrite"
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.convertStrict(spec, ConversionContext.test())).to.throw
2022-04-03 02:37:31 +02:00
})
})
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 = <any>{
2022-04-03 02:37:31 +02:00
id: "testlayer",
source: {
osmTags: "key=value",
},
lineRendering: [
<any>{
2022-04-03 02:37:31 +02:00
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, QuestionableTagRenderingConfigJson>(),
2022-04-03 02:37:31 +02:00
sharedLayers: new Map<string, LayerConfigJson>(),
})
const result = prep.convertStrict(exampleLayer, ConversionContext.test())
2022-04-03 02:37:31 +02:00
const expected = {
id: "testlayer",
source: { osmTags: "key=value" },
lineRendering: [
2022-04-03 02:37:31 +02:00
{
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: "icons.defaults", id: "iconsdefaults" }],
2022-04-03 02:37:31 +02:00
}
2023-02-03 04:48:32 +01:00
expect(result).toEqual(expected)
2022-04-03 02:37:31 +02:00
})
})
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",
},
},
}
const r = new RewriteSpecial().convertStrict(tr, ConversionContext.test())
2023-02-03 04:48:32 +01:00
expect(r).toEqual({
id: "uk_addresses_import_button",
2022-07-14 15:45:57 +02:00
render: {
2023-05-30 03:33:41 +02:00
"*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,)}",
2022-09-08 21:40:48 +02:00
},
})
})
})