Fix tests, fix units

This commit is contained in:
pietervdvn 2021-07-04 20:36:19 +02:00
parent 8b1b843dbe
commit fb3e3a040b
7 changed files with 52 additions and 17 deletions

View file

@ -37,6 +37,7 @@ export class Unit {
const possiblePostFixes = new Set<string>() const possiblePostFixes = new Set<string>()
function addPostfixesOf(str){ function addPostfixesOf(str){
str = str.toLowerCase()
for (let i = 0; i < str.length + 1; i++) { for (let i = 0; i < str.length + 1; i++) {
const substr = str.substring(0,i) const substr = str.substring(0,i)
possiblePostFixes.add(substr) possiblePostFixes.add(substr)
@ -178,11 +179,11 @@ export class Denomination {
} }
} }
} else { } else {
if (value.endsWith(this.canonical) && this.canonical !== "") { if (value.endsWith(this.canonical.toLowerCase()) && this.canonical !== "") {
return value.substring(0, value.length - this.canonical.length).trim(); return value.substring(0, value.length - this.canonical.length).trim();
} }
for (const alternativeValue of this.alternativeDenominations) { for (const alternativeValue of this.alternativeDenominations) {
if (value.endsWith(alternativeValue)) { if (value.endsWith(alternativeValue.toLowerCase())) {
return value.substring(0, value.length - alternativeValue.length).trim(); return value.substring(0, value.length - alternativeValue.length).trim();
} }
} }

View file

@ -1,6 +1,7 @@
import TagRenderingConfig from "./JSON/TagRenderingConfig"; import TagRenderingConfig from "./JSON/TagRenderingConfig";
import * as questions from "../assets/tagRenderings/questions.json"; import * as questions from "../assets/tagRenderings/questions.json";
import * as icons from "../assets/tagRenderings/icons.json"; import * as icons from "../assets/tagRenderings/icons.json";
import {Utils} from "../Utils";
export default class SharedTagRenderings { export default class SharedTagRenderings {
@ -14,7 +15,10 @@ export default class SharedTagRenderings {
try { try {
dict.set(key, new TagRenderingConfig(store[key], undefined, `SharedTagRenderings.${key}`)) dict.set(key, new TagRenderingConfig(store[key], undefined, `SharedTagRenderings.${key}`))
} catch (e) { } catch (e) {
if(!Utils.runningFromConsole){
console.error("BUG: could not parse", key, " from questions.json or icons.json - this error happened during the build step of the SharedTagRenderings", e) console.error("BUG: could not parse", key, " from questions.json or icons.json - this error happened during the build step of the SharedTagRenderings", e)
}
} }
} }

View file

@ -94,7 +94,7 @@ export default class SimpleMetaTagger {
} }
const value = feature.properties[key] const value = feature.properties[key]
const [, denomination] = unit.findDenomination(value) const [, denomination] = unit.findDenomination(value)
let canonical = denomination.canonicalValue(value) ?? undefined; let canonical = denomination?.canonicalValue(value) ?? undefined;
console.log("Rewritten ", key, " from", value, "into", canonical) console.log("Rewritten ", key, " from", value, "into", canonical)
if(canonical === undefined && !unit.eraseInvalid) { if(canonical === undefined && !unit.eraseInvalid) {
break; break;

View file

@ -287,13 +287,21 @@ export default class ValidatedTextField {
input = new CombinedInputElement( input = new CombinedInputElement(
input, input,
unitDropDown, unitDropDown,
// combine the value from the textfield and the dropdown into the resulting value that should go into OSM
(text, denom) => denom?.canonicalValue(text, true) ?? undefined, (text, denom) => denom?.canonicalValue(text, true) ?? undefined,
(valueWithDenom: string) => { (valueWithDenom: string) => {
const [text, denom] = unit.findDenomination(valueWithDenom) ?? [valueWithDenom, undefined]; // Take the value from OSM and feed it into the textfield and the dropdown
if(text === undefined){ const withDenom = unit.findDenomination(valueWithDenom);
return [valueWithDenom, undefined] if(withDenom === undefined)
{
// Not a valid value at all - we give it undefined and leave the details up to the other elements
return [undefined, undefined]
} }
return [text, denom] const [strippedText, denom] = withDenom
if(strippedText === undefined){
return [undefined, undefined]
}
return [strippedText, denom]
} }
).SetClass("flex") ).SetClass("flex")
} }

View file

@ -19,7 +19,7 @@ export class SaveButton extends Toggle {
const text = Translations.t.general.save const text = Translations.t.general.save
const saveEnabled = text.Clone().SetClass(`btn`); const saveEnabled = text.Clone().SetClass(`btn`);
const saveDisabled = text.SetClass(`btn btn-disabled`); const saveDisabled = text.Clone().SetClass(`btn btn-disabled`);
const save = new Toggle( const save = new Toggle(
saveEnabled, saveEnabled,
saveDisabled, saveDisabled,

View file

@ -11,6 +11,7 @@ import {FixedUiElement} from "../UI/Base/FixedUiElement";
import Combine from "../UI/Base/Combine"; import Combine from "../UI/Base/Combine";
import OsmObjectSpec from "./OsmObject.spec"; import OsmObjectSpec from "./OsmObject.spec";
import ScriptUtils from "../scripts/ScriptUtils"; import ScriptUtils from "../scripts/ScriptUtils";
import UnitsSpec from "./Units.spec";
@ -37,7 +38,8 @@ const allTests = [
new GeoOperationsSpec(), new GeoOperationsSpec(),
new ImageSearcherSpec(), new ImageSearcherSpec(),
new ThemeSpec(), new ThemeSpec(),
new UtilsSpec() new UtilsSpec(),
new UnitsSpec()
] ]

View file

@ -1,5 +1,5 @@
import T from "./TestHelper"; import T from "./TestHelper";
import {Denomination} from "../Customizations/JSON/Denomination"; import {Denomination, Unit} from "../Customizations/JSON/Denomination";
import {equal} from "assert"; import {equal} from "assert";
export default class UnitsSpec extends T { export default class UnitsSpec extends T {
@ -17,13 +17,33 @@ export default class UnitsSpec extends T {
} }
}, "test") }, "test")
equal(unit.canonicalValue("42m"), "42m") equal(unit.canonicalValue("42m"), "42 m")
equal(unit.canonicalValue("42"), "42m") equal(unit.canonicalValue("42"), "42 m")
equal(unit.canonicalValue("42 m"), "42m") equal(unit.canonicalValue("42 m"), "42 m")
equal(unit.canonicalValue("42 meter"), "42m") equal(unit.canonicalValue("42 meter"), "42 m")
}] }],
["Advanced canonicalize and back", () => {
const unit = new Denomination({
"canonicalDenomination": "MW",
"alternativeDenomination": ["megawatts", "megawatt"],
"human": {
"en": " megawatts",
"nl": " megawatt"
},
"default": true
}, "test");
const canonical = unit.canonicalValue("5")
equal(canonical, "5 MW")
const units = new Unit(["key"], [unit], false)
const [detected, detectedDenom] = units.findDenomination("5 MW")
equal(detected, "5")
equal(detectedDenom, unit)
}
]
]); ]);