diff options
author | Andrew Harvey <andrew@alantgeo.com.au> | 2021-06-15 13:43:23 +1000 |
---|---|---|
committer | Andrew Harvey <andrew@alantgeo.com.au> | 2021-06-15 13:43:23 +1000 |
commit | c8bb704e915710890b678f73c38bf148d9bcc5fa (patch) | |
tree | e5a485d616854de61b4fd889bf103608fbd5678a | |
parent | b41ba2d5e80b62f46fe3974278d562b091e2ea58 (diff) |
test xml entities encoding
-rwxr-xr-x | bin/mr2osc.mjs | 3 | ||||
-rwxr-xr-x | test/xmlEntities.js | 61 |
2 files changed, 62 insertions, 2 deletions
diff --git a/bin/mr2osc.mjs b/bin/mr2osc.mjs index 7256624..4c3401b 100755 --- a/bin/mr2osc.mjs +++ b/bin/mr2osc.mjs @@ -360,13 +360,12 @@ async function uploadChanges() { }, Object.assign({ compact: true, attributeValueFn: value => { - // TODO need to test this via the dev api + // these values were tested with test/xmlEntities.js return value.replace(/"/g, '"') // convert quote back before converting amp .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/"/g, '"') - .replace(/'/g, ''') } }, argv.dryRun ? { spaces: 2 } : {})) diff --git a/test/xmlEntities.js b/test/xmlEntities.js new file mode 100755 index 0000000..5a03520 --- /dev/null +++ b/test/xmlEntities.js @@ -0,0 +1,61 @@ +#!/usr/bin/env node + +const fetch = require('node-fetch') +const xml = require('xml-js') + +// RAW value is `"Testing & complex < characters > '.` +// JSON value is "name": "\"Testing & complex < characters > '." +fetch(`https://master.apis.dev.openstreetmap.org/api/0.6/node/4327735719`, { + headers: { + 'Accept': 'application/json' + } +}) + .then(res => res.json()) + .then(json => { + const element = json.elements[0] + const body = xml.json2xml({ + _declaration: { + _attributes: { + version: "1.0", + encoding: "UTF-8" + } + }, + osmChange: { + _attributes: { + version: '0.6' + }, + modify: { + node: [ + { + _attributes: { + id: element.id, + version: element.version + 1, + lat: element.lat, + lon: element.lon + }, + tag: [ + { + _attributes: { + k: 'name', + v: element.tags.name + } + } + ] + } + ] + } + } + }, Object.assign({ + compact: true, + attributeValueFn: value => { + return value.replace(/"/g, '"') // convert quote back before converting amp + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + } + }, { spaces: 2 })) + console.log(body) + // result should match view-source:https://master.apis.dev.openstreetmap.org/api/0.6/node/4327735719 + // <tag k="name" v=""Testing & complex < characters > '."/> + }) |