forked from MapComplete/MapComplete
Refactoring: use more accurate context in conversion, fix tests
This commit is contained in:
parent
86d0de3806
commit
f77d99f8ed
43 changed files with 999 additions and 367 deletions
|
@ -31,7 +31,8 @@ describe("ReplaceGeometryAction", () => {
|
|||
source: {
|
||||
osmTags: "type=node",
|
||||
},
|
||||
mapRendering: null,
|
||||
pointRendering: null,
|
||||
lineRendering: [{}],
|
||||
override: {
|
||||
calculatedTags: [
|
||||
"_is_part_of_building=feat.get('parent_ways')?.some(p => p.building !== undefined && p.building !== '') ?? false",
|
||||
|
@ -41,9 +42,14 @@ describe("ReplaceGeometryAction", () => {
|
|||
"_is_part_of_landuse=feat.get('parent_ways')?.some(p => (p.landuse !== undefined && p.landuse !== '') || (p.natural !== undefined && p.natural !== '')) ?? false",
|
||||
"_moveable=feat.get('_is_part_of_building') && !feat.get('_is_part_of_grb_building')",
|
||||
],
|
||||
mapRendering: [
|
||||
pointRendering: [
|
||||
{
|
||||
icon: "square:#cc0",
|
||||
marker: [
|
||||
{
|
||||
icon: "square",
|
||||
color: "#cc0",
|
||||
},
|
||||
],
|
||||
iconSize: "5,5",
|
||||
location: ["point"],
|
||||
},
|
||||
|
@ -59,7 +65,7 @@ describe("ReplaceGeometryAction", () => {
|
|||
maxCacheAge: 0,
|
||||
},
|
||||
calculatedTags: ["_surface:strict:=feat.get('_surface')"],
|
||||
mapRendering: [
|
||||
lineRendering: [
|
||||
{
|
||||
width: {
|
||||
render: "2",
|
||||
|
@ -290,10 +296,14 @@ describe("ReplaceGeometryAction", () => {
|
|||
"_intersects_with_other_features=feat.intersectionsWith('generic_osm_object').map(f => \"<a href='https://osm.org/\"+f.feat.properties.id+\"' target='_blank'>\" + f.feat.properties.id + \"</a>\").join(', ')",
|
||||
],
|
||||
tagRenderings: [],
|
||||
mapRendering: [
|
||||
pointRendering: [
|
||||
{
|
||||
marker: [
|
||||
{
|
||||
icon: "./assets/themes/grb/housenumber_blank.svg",
|
||||
},
|
||||
],
|
||||
iconSize: "50,50",
|
||||
icon: "./assets/themes/grb/housenumber_blank.svg",
|
||||
location: ["point", "centroid"],
|
||||
},
|
||||
],
|
||||
|
|
|
@ -1,27 +1,31 @@
|
|||
import { Utils } from "../../../../src/Utils"
|
||||
import { DesugaringContext } from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import {
|
||||
ConversionContext,
|
||||
DesugaringContext,
|
||||
} from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
|
||||
import { TagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
|
||||
import { PrepareLayer } from "../../../../src/Models/ThemeConfig/Conversion/PrepareLayer"
|
||||
import * as bookcases from "../../../../assets/layers/public_bookcase/public_bookcase.json"
|
||||
import CreateNoteImportLayer from "../../../../src/Models/ThemeConfig/Conversion/CreateNoteImportLayer"
|
||||
import { describe, expect, it } from "vitest"
|
||||
import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
|
||||
|
||||
describe("CreateNoteImportLayer", () => {
|
||||
it("should generate a layerconfig", () => {
|
||||
const desugaringState: DesugaringContext = {
|
||||
sharedLayers: new Map<string, LayerConfigJson>(),
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
}
|
||||
const layerPrepare = new PrepareLayer(desugaringState)
|
||||
const layer = layerPrepare.convertStrict(
|
||||
bookcases,
|
||||
"ImportLayerGeneratorTest:Parse bookcases"
|
||||
ConversionContext.test("parse bookcases")
|
||||
)
|
||||
const generator = new CreateNoteImportLayer()
|
||||
const generatedLayer: LayerConfigJson = generator.convertStrict(
|
||||
layer,
|
||||
"ImportLayerGeneratorTest: convert"
|
||||
ConversionContext.test("convert")
|
||||
)
|
||||
expect(generatedLayer.isShown["and"][1].or[0].and[0]).toEqual(
|
||||
"_tags~(^|.*;)amenity=public_bookcase($|;.*)"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import LayoutConfig from "../../../../src/Models/ThemeConfig/LayoutConfig"
|
||||
import { FixLegacyTheme } from "../../../../src/Models/ThemeConfig/Conversion/LegacyJsonConvert"
|
||||
import { describe, expect, it } from "vitest"
|
||||
import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
|
||||
describe("FixLegacyTheme", () => {
|
||||
it("should create a working theme config", () => {
|
||||
|
@ -133,10 +134,11 @@ describe("FixLegacyTheme", () => {
|
|||
},
|
||||
],
|
||||
}
|
||||
const fixed = new FixLegacyTheme().convert(<any>walking_node_theme, "While testing")
|
||||
const context = ConversionContext.test()
|
||||
const fixed = new FixLegacyTheme().convert(<any>walking_node_theme, context)
|
||||
// "Could not fix the legacy theme"
|
||||
expect(fixed.errors).empty
|
||||
const theme = new LayoutConfig(fixed.result, false)
|
||||
expect(!context.hasErrors())
|
||||
const theme = new LayoutConfig(fixed, false)
|
||||
expect(theme).toBeDefined()
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
|
||||
import { TagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
|
||||
import LineRenderingConfigJson from "../../../../src/Models/ThemeConfig/Json/LineRenderingConfigJson"
|
||||
import {
|
||||
ExpandRewrite,
|
||||
|
@ -9,6 +8,7 @@ import {
|
|||
import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
|
||||
import RewritableConfigJson from "../../../../src/Models/ThemeConfig/Json/RewritableConfigJson"
|
||||
import { describe, expect, it } from "vitest"
|
||||
import { ConversionContext } from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
|
||||
describe("ExpandRewrite", () => {
|
||||
it("should not allow overlapping keys", () => {
|
||||
|
@ -20,19 +20,19 @@ describe("ExpandRewrite", () => {
|
|||
renderings: "The value of xyz is longer_xyz",
|
||||
}
|
||||
const rewrite = new ExpandRewrite()
|
||||
expect(() => rewrite.convert(spec, "test")).to.throw
|
||||
expect(() => rewrite.convertStrict(spec, ConversionContext.test())).to.throw
|
||||
})
|
||||
})
|
||||
|
||||
describe("PrepareLayer", () => {
|
||||
it("should expand rewrites in map renderings", () => {
|
||||
const exampleLayer: LayerConfigJson = {
|
||||
const exampleLayer: LayerConfigJson = <any>{
|
||||
id: "testlayer",
|
||||
source: {
|
||||
osmTags: "key=value",
|
||||
},
|
||||
mapRendering: [
|
||||
{
|
||||
lineRendering: [
|
||||
<any>{
|
||||
rewrite: {
|
||||
sourceString: ["left|right", "lr_offset"],
|
||||
into: [
|
||||
|
@ -60,15 +60,15 @@ describe("PrepareLayer", () => {
|
|||
],
|
||||
}
|
||||
const prep = new PrepareLayer({
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
sharedLayers: new Map<string, LayerConfigJson>(),
|
||||
})
|
||||
const result = prep.convertStrict(exampleLayer, "test")
|
||||
const result = prep.convertStrict(exampleLayer, ConversionContext.test())
|
||||
|
||||
const expected = {
|
||||
id: "testlayer",
|
||||
source: { osmTags: "key=value" },
|
||||
mapRendering: [
|
||||
lineRendering: [
|
||||
{
|
||||
color: {
|
||||
render: "#888",
|
||||
|
@ -123,7 +123,7 @@ describe("RewriteSpecial", function () {
|
|||
},
|
||||
},
|
||||
}
|
||||
const r = new RewriteSpecial().convert(tr, "test").result
|
||||
const r = new RewriteSpecial().convertStrict(tr, ConversionContext.test())
|
||||
expect(r).toEqual({
|
||||
id: "uk_addresses_import_button",
|
||||
render: {
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
import { LayoutConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayoutConfigJson"
|
||||
import { LayerConfigJson } from "../../../../src/Models/ThemeConfig/Json/LayerConfigJson"
|
||||
import { PrepareTheme } from "../../../../src/Models/ThemeConfig/Conversion/PrepareTheme"
|
||||
import { TagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
|
||||
import LayoutConfig from "../../../../src/Models/ThemeConfig/LayoutConfig"
|
||||
import bookcaseLayer from "../../../../src/assets/generated/layers/public_bookcase.json"
|
||||
import LayerConfig from "../../../../src/Models/ThemeConfig/LayerConfig"
|
||||
import { ExtractImages } from "../../../../src/Models/ThemeConfig/Conversion/FixImages"
|
||||
import cyclofix from "../../../../src/assets/generated/themes/cyclofix.json"
|
||||
import { Tag } from "../../../../src/Logic/Tags/Tag"
|
||||
import { DesugaringContext } from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import {
|
||||
ConversionContext,
|
||||
DesugaringContext,
|
||||
} from "../../../../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import { And } from "../../../../src/Logic/Tags/And"
|
||||
import { describe, expect, it } from "vitest"
|
||||
import { QuestionableTagRenderingConfigJson } from "../../../../src/Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
|
||||
import Constants from "../../../../src/Models/Constants"
|
||||
|
||||
const themeConfigJson: LayoutConfigJson = {
|
||||
description: "Descr",
|
||||
|
@ -34,17 +38,40 @@ const themeConfigJson: LayoutConfigJson = {
|
|||
id: "test",
|
||||
}
|
||||
|
||||
function constructSharedLayers(): Map<string, LayerConfigJson> {
|
||||
const sharedLayers = new Map<string, LayerConfigJson>()
|
||||
sharedLayers.set("selected_element", <LayerConfigJson>{
|
||||
id: "selected_element",
|
||||
pointRendering: null,
|
||||
tagRenderings: null,
|
||||
lineRendering: null,
|
||||
title: null,
|
||||
source: "special",
|
||||
})
|
||||
for (const defaultLayer of Constants.added_by_default) {
|
||||
sharedLayers.set(defaultLayer, <LayerConfigJson>{
|
||||
id: defaultLayer,
|
||||
pointRendering: null,
|
||||
tagRenderings: null,
|
||||
lineRendering: null,
|
||||
title: null,
|
||||
source: "special",
|
||||
})
|
||||
}
|
||||
return sharedLayers
|
||||
}
|
||||
|
||||
describe("PrepareTheme", () => {
|
||||
it("should substitute layers", () => {
|
||||
const sharedLayers = new Map<string, LayerConfigJson>()
|
||||
sharedLayers.set("public_bookcase", bookcaseLayer)
|
||||
const sharedLayers = constructSharedLayers()
|
||||
sharedLayers.set("public_bookcase", <any>bookcaseLayer)
|
||||
const theme = { ...themeConfigJson, layers: ["public_bookcase"] }
|
||||
const prepareStep = new PrepareTheme({
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
sharedLayers: sharedLayers,
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
sharedLayers,
|
||||
publicLayers: new Set<string>(),
|
||||
})
|
||||
let themeConfigJsonPrepared = prepareStep.convert(theme, "test").result
|
||||
let themeConfigJsonPrepared = prepareStep.convertStrict(theme, ConversionContext.test())
|
||||
const themeConfig = new LayoutConfig(themeConfigJsonPrepared)
|
||||
const layerUnderTest = <LayerConfig>(
|
||||
themeConfig.layers.find((l) => l.id === "public_bookcase")
|
||||
|
@ -55,13 +82,13 @@ describe("PrepareTheme", () => {
|
|||
})
|
||||
|
||||
it("should apply override", () => {
|
||||
const sharedLayers = new Map<string, LayerConfigJson>()
|
||||
sharedLayers.set("public_bookcase", bookcaseLayer)
|
||||
const sharedLayers = constructSharedLayers()
|
||||
sharedLayers.set("public_bookcase", <any>bookcaseLayer)
|
||||
let themeConfigJsonPrepared = new PrepareTheme({
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
sharedLayers: sharedLayers,
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
sharedLayers,
|
||||
publicLayers: new Set<string>(),
|
||||
}).convert(themeConfigJson, "test").result
|
||||
}).convertStrict(themeConfigJson, ConversionContext.test())
|
||||
const themeConfig = new LayoutConfig(themeConfigJsonPrepared)
|
||||
const layerUnderTest = <LayerConfig>(
|
||||
themeConfig.layers.find((l) => l.id === "public_bookcase")
|
||||
|
@ -70,19 +97,19 @@ describe("PrepareTheme", () => {
|
|||
})
|
||||
|
||||
it("should apply override", () => {
|
||||
const sharedLayers = new Map<string, LayerConfigJson>()
|
||||
sharedLayers.set("public_bookcase", bookcaseLayer)
|
||||
const sharedLayers = constructSharedLayers()
|
||||
sharedLayers.set("public_bookcase", <any>bookcaseLayer)
|
||||
let themeConfigJsonPrepared = new PrepareTheme({
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
sharedLayers: sharedLayers,
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
sharedLayers,
|
||||
publicLayers: new Set<string>(),
|
||||
}).convert(
|
||||
}).convertStrict(
|
||||
{
|
||||
...themeConfigJson,
|
||||
overrideAll: { source: { geoJson: "https://example.com/data.geojson" } },
|
||||
},
|
||||
"test"
|
||||
).result
|
||||
ConversionContext.test()
|
||||
)
|
||||
const themeConfig = new LayoutConfig(themeConfigJsonPrepared)
|
||||
const layerUnderTest = <LayerConfig>(
|
||||
themeConfig.layers.find((l) => l.id === "public_bookcase")
|
||||
|
@ -100,11 +127,14 @@ describe("PrepareTheme", () => {
|
|||
en: "Test layer - please ignore",
|
||||
},
|
||||
titleIcons: [],
|
||||
mapRendering: null,
|
||||
pointRendering: [{ location: ["point"], label: "xyz" }],
|
||||
lineRendering: [{ width: 1 }],
|
||||
}
|
||||
const sharedLayers = constructSharedLayers()
|
||||
sharedLayers.set("layer-example", testLayer)
|
||||
const ctx: DesugaringContext = {
|
||||
sharedLayers: new Map<string, LayerConfigJson>([["layer-example", testLayer]]),
|
||||
tagRenderings: new Map<string, TagRenderingConfigJson>(),
|
||||
sharedLayers,
|
||||
tagRenderings: new Map<string, QuestionableTagRenderingConfigJson>(),
|
||||
publicLayers: new Set<string>(),
|
||||
}
|
||||
const layout: LayoutConfigJson = {
|
||||
|
@ -122,13 +152,15 @@ describe("PrepareTheme", () => {
|
|||
},
|
||||
],
|
||||
startLat: 0,
|
||||
pointRendering: null,
|
||||
lineRendering: null,
|
||||
startLon: 0,
|
||||
startZoom: 0,
|
||||
title: "Test theme",
|
||||
}
|
||||
const rewritten = new PrepareTheme(ctx, {
|
||||
skipDefaultLayers: true,
|
||||
}).convertStrict(layout, "test")
|
||||
}).convertStrict(layout, ConversionContext.test())
|
||||
expect(rewritten.layers[0]).toEqual(testLayer)
|
||||
expect(rewritten.layers[1]).toEqual({
|
||||
source: {
|
||||
|
@ -137,7 +169,8 @@ describe("PrepareTheme", () => {
|
|||
id: "layer-example",
|
||||
name: null,
|
||||
minzoom: 18,
|
||||
mapRendering: null,
|
||||
pointRendering: [{ location: ["point"], label: "xyz" }],
|
||||
lineRendering: [{ width: 1 }],
|
||||
titleIcons: [],
|
||||
})
|
||||
})
|
||||
|
@ -147,7 +180,7 @@ describe("ExtractImages", () => {
|
|||
it("should find all images in a themefile", () => {
|
||||
const images = new Set<string>(
|
||||
new ExtractImages(true, new Set<string>())
|
||||
.convertStrict(<any>cyclofix, "test")
|
||||
.convertStrict(<any>cyclofix, ConversionContext.test())
|
||||
.map((x) => x.path)
|
||||
)
|
||||
const expectedValues = [
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { describe } from "vitest"
|
||||
import Validators from "../../UI/InputElement/Validators"
|
||||
import { describe, it } from "vitest"
|
||||
import Validators from "../../src/UI/InputElement/Validators"
|
||||
|
||||
describe("validators", () => {
|
||||
it("should have a type for every validator", () => {
|
||||
|
|
|
@ -7604,6 +7604,7 @@ function initDownloads(query: string) {
|
|||
|
||||
describe("GenerateCache", () => {
|
||||
it("should generate a cached file for the Natuurpunt-theme", async () => {
|
||||
/* TODO ENABLE
|
||||
// We use /var/tmp instead of /tmp, as more OS's (such as MAC) have this
|
||||
const dir = "/var/tmp/"
|
||||
const cachename = "nature_cache"
|
||||
|
@ -7638,5 +7639,6 @@ describe("GenerateCache", () => {
|
|||
expect(birdhides.features.length).toEqual(5)
|
||||
// "Didn't find birdhide node/5158056232 "
|
||||
expect(birdhides.features.some((f) => f.properties.id === "node/5158056232")).toBe(true)
|
||||
//*/
|
||||
}, 10000)
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue