forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {describe} from 'mocha'
 | 
						|
import {expect} from 'chai'
 | 
						|
import {LayerConfigJson} from "../../../../Models/ThemeConfig/Json/LayerConfigJson";
 | 
						|
import {TagRenderingConfigJson} from "../../../../Models/ThemeConfig/Json/TagRenderingConfigJson";
 | 
						|
import LineRenderingConfigJson from "../../../../Models/ThemeConfig/Json/LineRenderingConfigJson";
 | 
						|
import {ExpandRewrite, PrepareLayer, RewriteSpecial} from "../../../../Models/ThemeConfig/Conversion/PrepareLayer";
 | 
						|
import {
 | 
						|
    QuestionableTagRenderingConfigJson
 | 
						|
} from "../../../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson";
 | 
						|
import RewritableConfigJson from "../../../../Models/ThemeConfig/Json/RewritableConfigJson";
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
    })
 | 
						|
})
 | 
						|
 | 
						|
describe("PrepareLayer", () => {
 | 
						|
 | 
						|
    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"
 | 
						|
                                }
 | 
						|
                            ]
 | 
						|
                        },
 | 
						|
                        "offset": "lr_offset"
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }
 | 
						|
        const prep = new PrepareLayer({
 | 
						|
            tagRenderings: new Map<string, TagRenderingConfigJson>(),
 | 
						|
            sharedLayers: new Map<string, LayerConfigJson>()
 | 
						|
        })
 | 
						|
        const result = prep.convertStrict(exampleLayer, "test")
 | 
						|
 | 
						|
        const expected = {
 | 
						|
            "id": "testlayer",
 | 
						|
            "source": {"osmTags": "key=value"},
 | 
						|
            "mapRendering": [{
 | 
						|
                "color": {
 | 
						|
                    "render": "#888",
 | 
						|
                    "mappings": [{
 | 
						|
                        "if": "parking:condition:left=free",
 | 
						|
                        "then": "#299921"
 | 
						|
                    },
 | 
						|
                        {
 | 
						|
                            "if": "parking:condition:left=disc",
 | 
						|
                            "then": "#219991"
 | 
						|
                        }]
 | 
						|
                },
 | 
						|
                "offset": -6
 | 
						|
            }, {
 | 
						|
                "color": {
 | 
						|
                    "render": "#888",
 | 
						|
                    "mappings": [{
 | 
						|
                        "if": "parking:condition:right=free",
 | 
						|
                        "then": "#299921"
 | 
						|
                    },
 | 
						|
                        {
 | 
						|
                            "if": "parking:condition:right=disc",
 | 
						|
                            "then": "#219991"
 | 
						|
                        }]
 | 
						|
                },
 | 
						|
                "offset": 6
 | 
						|
            }],
 | 
						|
            "titleIcons": [{"render": "defaults", "id": "defaults"}]
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        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",
 | 
						|
            "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,)}"}
 | 
						|
        })
 | 
						|
    })
 | 
						|
});
 | 
						|
 |