Fix tests
This commit is contained in:
parent
04040b68b9
commit
1ff03d9bd0
1 changed files with 25 additions and 18 deletions
|
@ -366,7 +366,7 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
* // should warn for unexpected keys
|
||||
* const errors = []
|
||||
* RewriteSpecial.convertIfNeeded({"special": {type: "image_carousel"}, "en": "xyz"}, errors, "test") // => {'*': "{image_carousel()}"}
|
||||
* errors // => ["At test: Unexpected key in a special block: en"]
|
||||
* errors // => ["The only keys allowed next to a 'special'-block are 'before' and 'after'. Perhaps you meant to put 'en' into the special block?"]
|
||||
*
|
||||
* // should give an error on unknown visualisations
|
||||
* const errors = []
|
||||
|
@ -378,24 +378,25 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
* const errors = []
|
||||
* RewriteSpecial.convertIfNeeded({"special": {}}, errors, "test") // => undefined
|
||||
* errors // => ["A 'special'-block should define 'type' to indicate which visualisation should be used"]
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
* // an actual test
|
||||
* const special = {"special": {
|
||||
* "type": "multi",
|
||||
* "before": {
|
||||
* const special = {
|
||||
* "before": {
|
||||
* "en": "<h3>Entrances</h3>This building has {_entrances_count} entrances:"
|
||||
* },
|
||||
* "after": {
|
||||
* "after": {
|
||||
* "en": "{_entrances_count_without_width_count} entrances don't have width information yet"
|
||||
* },
|
||||
* "special": {
|
||||
* "type": "multi",
|
||||
* "key": "_entrance_properties_with_width",
|
||||
* "tagrendering": {
|
||||
* "en": "An <a href='#{id}'>entrance</a> of {canonical(width)}"
|
||||
* }
|
||||
* }}
|
||||
* const errors = []
|
||||
* RewriteSpecial.convertIfNeeded(special, errors, "test") // => {"en": "<h3>Entrances</h3>This building has {_entrances_count} entrances: {multi(_entrance_properties_with_width,An <a href='#&LBRACEid&RBRACE'>entrance</a> of &LBRACEcanonical&LPARENSwidth&RPARENS&RBRACE)}An <a href='#{id}'>entrance</a> of {canonical(width)}"}
|
||||
* RewriteSpecial.convertIfNeeded(special, errors, "test") // => {"en": "<h3>Entrances</h3>This building has {_entrances_count} entrances:{multi(_entrance_properties_with_width,An <a href='#&LBRACEid&RBRACE'>entrance</a> of &LBRACEcanonical&LPARENSwidth&RPARENS&RBRACE)}{_entrances_count_without_width_count} entrances don't have width information yet"}
|
||||
* errors // => []
|
||||
*/
|
||||
private static convertIfNeeded(input: (object & { special: { type: string } }) | any, errors: string[], context: string): any {
|
||||
|
@ -409,12 +410,18 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
errors.push("A 'special'-block should define 'type' to indicate which visualisation should be used")
|
||||
return undefined
|
||||
}
|
||||
|
||||
const vis = SpecialVisualizations.specialVisualizations.find(sp => sp.funcName === type)
|
||||
if (vis === undefined) {
|
||||
const options = Utils.sortedByLevenshteinDistance(type, SpecialVisualizations.specialVisualizations, sp => sp.funcName)
|
||||
errors.push(`Special visualisation '${type}' not found. Did you perhaps mean ${options[0].funcName}, ${options[1].funcName} or ${options[2].funcName}?\n\tFor all known special visualisations, please see https://github.com/pietervdvn/MapComplete/blob/develop/Docs/SpecialRenderings.md`)
|
||||
return undefined
|
||||
}
|
||||
errors.push(...
|
||||
Array.from(Object.keys(input)).filter(k => k !== "special" && k !== "before" && k !== "after")
|
||||
.map(k => {
|
||||
return `The only keys allowed next to a 'special'-block are 'before' and 'after'. Perhaps you meant to put '${k}' into the special block?`;
|
||||
}))
|
||||
|
||||
const argNamesList = vis.args.map(a => a.name)
|
||||
const argNames = new Set<string>(argNamesList)
|
||||
|
@ -471,20 +478,20 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
for (const ln of languages) {
|
||||
const args = []
|
||||
for (const argName of argNamesList) {
|
||||
const v = special[argName] ?? ""
|
||||
let v = special[argName] ?? ""
|
||||
if (Translations.isProbablyATranslation(v)) {
|
||||
const txt = new Translation(v).textFor(ln)
|
||||
.replace(/,/g, "&COMMA")
|
||||
.replace(/\{/g, "&LBRACE")
|
||||
.replace(/}/g, "&RBRACE")
|
||||
;
|
||||
args.push(txt)
|
||||
} else if (typeof v === "string") {
|
||||
v = new Translation(v).textFor(ln)
|
||||
|
||||
}
|
||||
|
||||
if (typeof v === "string") {
|
||||
const txt = v.replace(/,/g, "&COMMA")
|
||||
.replace(/\{/g, "&LBRACE")
|
||||
.replace(/}/g, "&RBRACE")
|
||||
.replace(/\(/g, "&LPARENS")
|
||||
.replace(/\)/g, '&RPARENS')
|
||||
args.push(txt)
|
||||
} else if(typeof v === "object"){
|
||||
} else if (typeof v === "object") {
|
||||
args.push(JSON.stringify(v))
|
||||
} else {
|
||||
args.push(v)
|
||||
|
@ -518,7 +525,7 @@ export class RewriteSpecial extends DesugaringStep<TagRenderingConfigJson> {
|
|||
* const result = new RewriteSpecial().convert(tr,"test").result
|
||||
* const expected = {render: {'en': "Some introduction{image_carousel(image)}"}}
|
||||
* result // => expected
|
||||
*
|
||||
*
|
||||
* // Should put text after if specified
|
||||
* const tr = {
|
||||
* render: {special: {type: "image_carousel", image_key: "image"}, after: {en: "Some footer"} },
|
||||
|
|
Loading…
Reference in a new issue