forked from MapComplete/MapComplete
		
	Further refactoring of the tests
This commit is contained in:
		
							parent
							
								
									3ab373f6ec
								
							
						
					
					
						commit
						2dac893bb3
					
				
					 31 changed files with 2498 additions and 2992 deletions
				
			
		|  | @ -28,6 +28,9 @@ export class ExtractImages extends Conversion<LayoutConfigJson, string[]> { | |||
|             t["$ref"] == "#/definitions/TagRenderingConfigJson" ||  t["$ref"] == "#/definitions/QuestionableTagRenderingConfigJson") | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      *  | ||||
|      */ | ||||
|     convert(json: LayoutConfigJson, context: string): { result: string[], errors: string[], warnings: string[] } { | ||||
|         const allFoundImages : string[] = [] | ||||
|         const errors = [] | ||||
|  | @ -116,6 +119,40 @@ export class FixImages extends DesugaringStep<LayoutConfigJson> { | |||
|         this._knownImages = knownImages; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * If the id is an URL to a json file, replaces "./" in images with the path to the json file | ||||
|      *  | ||||
|      * const theme = { | ||||
|      *          "id": "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/verkeerdeborden.json" | ||||
|      *         "layers": [ | ||||
|      *             { | ||||
|      *                 "mapRendering": [ | ||||
|      *                     { | ||||
|      *                         "icon": "./TS_bolt.svg", | ||||
|      *                         iconBadges: [{ | ||||
|      *                             if: "id=yes", | ||||
|      *                             then: { | ||||
|      *                                 mappings: [ | ||||
|      *                                     { | ||||
|      *                                         if: "id=yes", | ||||
|      *                                         then: "./Something.svg" | ||||
|      *                                     } | ||||
|      *                                 ] | ||||
|      *                             } | ||||
|      *                         }], | ||||
|      *                         "location": [ | ||||
|      *                             "point", | ||||
|      *                             "centroid" | ||||
|      *                         ] | ||||
|      *                     } | ||||
|      *                 ] | ||||
|      *             } | ||||
|      *         ], | ||||
|      *     } | ||||
|      * const fixed = new FixImages(new Set<string>()).convert(<any> theme, "test").result | ||||
|      * fixed.layers[0]["mapRendering"][0].icon // => "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/TS_bolt.svg"
 | ||||
|      * fixed.layers[0]["mapRendering"][0].iconBadges[0].then.mappings[0].then // => "https://raw.githubusercontent.com/seppesantens/MapComplete-Themes/main/VerkeerdeBordenDatabank/Something.svg"
 | ||||
|      */ | ||||
|     convert(json: LayoutConfigJson, context: string): { result: LayoutConfigJson, warnings?: string[] } { | ||||
|         let url: URL; | ||||
|         try { | ||||
|  |  | |||
|  | @ -230,6 +230,16 @@ export class AddMiniMap extends DesugaringStep<LayerConfigJson> { | |||
|     /** | ||||
|      * Returns true if this tag rendering has a minimap in some language. | ||||
|      * Note: this minimap can be hidden by conditions | ||||
|      *  | ||||
|      * AddMiniMap.hasMinimap({render: "{minimap()}"}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: {en: "{minimap()}"}}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: {en: "{minimap()}", nl: "{minimap()}"}}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: {en: "{minimap()}", nl: "No map for the dutch!"}}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: "{minimap()}"}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: "{minimap(18,featurelist)}"}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({mappings: [{if: "xyz=abc",then: "{minimap(18,featurelist)}"}]}) // => true
 | ||||
|      * AddMiniMap.hasMinimap({render: "Some random value {key}"}) // => false
 | ||||
|      * AddMiniMap.hasMinimap({render: "Some random value {minimap}"}) // => false
 | ||||
|      */ | ||||
|     static hasMinimap(renderingConfig: TagRenderingConfigJson): boolean { | ||||
|         const translations: any[] = Utils.NoNull([renderingConfig.render, ...(renderingConfig.mappings ?? []).map(m => m.then)]); | ||||
|  |  | |||
|  | @ -250,7 +250,8 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender | |||
|      * DetectShadowedMappings.extractCalculatedTagNames({calculatedTags: ["_abc:=js()"]}) // => ["_abc"]
 | ||||
|      * DetectShadowedMappings.extractCalculatedTagNames({calculatedTags: ["_abc=js()"]}) // => ["_abc"]
 | ||||
|      */ | ||||
|     private static extractCalculatedTagNames(layerConfig?: LayerConfigJson){ | ||||
|     public static extractCalculatedTagNames(layerConfig?: LayerConfigJson | {calculatedTags : string []}){ | ||||
|         // TODO make private again when doctests support this
 | ||||
|         return layerConfig?.calculatedTags?.map(ct => { | ||||
|             if(ct.indexOf(':=') >= 0){ | ||||
|                 return ct.split(':=')[0] | ||||
|  | @ -260,6 +261,39 @@ export class DetectShadowedMappings extends DesugaringStep<QuestionableTagRender | |||
|          | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      *  | ||||
|      * // should detect a simple shadowed mapping
 | ||||
|      * const tr = {mappings: [ | ||||
|      *            { | ||||
|      *                if: {or: ["key=value", "x=y"]}, | ||||
|      *                then: "Case A" | ||||
|      *            }, | ||||
|      *            { | ||||
|      *                if: "key=value", | ||||
|      *                then: "Shadowed" | ||||
|      *            } | ||||
|      *        ] | ||||
|      *    } | ||||
|      * const r = new DetectShadowedMappings().convert(tr, "test"); | ||||
|      * r.errors.length // => 1
 | ||||
|      * r.errors[0].indexOf("The mapping key=value is fully matched by a previous mapping (namely 0)") >= 0 // => true
 | ||||
|      * | ||||
|      * const tr = {mappings: [ | ||||
|      *         { | ||||
|      *             if: {or: ["key=value", "x=y"]}, | ||||
|      *             then: "Case A" | ||||
|      *         }, | ||||
|      *         { | ||||
|      *             if: {and: ["key=value", "x=y"]}, | ||||
|      *             then: "Shadowed" | ||||
|      *         } | ||||
|      *     ] | ||||
|      * } | ||||
|      * const r = new DetectShadowedMappings().convert(tr, "test"); | ||||
|      * r.errors.length // => 1
 | ||||
|      * r.errors[0].indexOf("The mapping key=value&x=y is fully matched by a previous mapping (namely 0)") >= 0 // => true
 | ||||
|      */ | ||||
|     convert(json: QuestionableTagRenderingConfigJson, context: string): { result: QuestionableTagRenderingConfigJson; errors?: string[]; warnings?: string[] } { | ||||
|         const errors = [] | ||||
|         const warnings = [] | ||||
|  | @ -324,6 +358,26 @@ export class DetectMappingsWithImages extends DesugaringStep<TagRenderingConfigJ | |||
|         super("Checks that 'then'clauses in mappings don't have images, but use 'icon' instead", [], "DetectMappingsWithImages"); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * const r = new DetectMappingsWithImages().convert({ | ||||
|      *     "mappings": [ | ||||
|      *         { | ||||
|      *             "if": "bicycle_parking=stands", | ||||
|      *             "then": { | ||||
|      *                 "en": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "nl": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "fr": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "hu": "Korlát <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "it": "Archetti <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>", | ||||
|      *                 "zh_Hant": "單車架 <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>" | ||||
|      *             } | ||||
|      *         }] | ||||
|      * }, "test"); | ||||
|      * r.errors.length > 0 // => true
 | ||||
|      * r.errors.some(msg => msg.indexOf("./assets/layers/bike_parking/staple.svg") >= 0) // => true
 | ||||
|      */ | ||||
|     convert(json: TagRenderingConfigJson, context: string): { result: TagRenderingConfigJson; errors?: string[]; warnings?: string[], information?: string[] } { | ||||
|         const errors = [] | ||||
|         const warnings = [] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue