@keymanapp/developer-utils 18.0.120-alpha → 18.0.122-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/index.d.ts +1 -1
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +3 -3
- package/build/src/index.js.map +1 -1
- package/build/src/types/kpj/kpj-file-reader.d.ts.map +1 -1
- package/build/src/types/kpj/kpj-file-reader.js +5 -16
- package/build/src/types/kpj/kpj-file-reader.js.map +1 -1
- package/build/src/types/kvks/kvks-file-reader.d.ts.map +1 -1
- package/build/src/types/kvks/kvks-file-reader.js +12 -27
- package/build/src/types/kvks/kvks-file-reader.js.map +1 -1
- package/build/src/types/kvks/kvks-file-writer.d.ts.map +1 -1
- package/build/src/types/kvks/kvks-file-writer.js +4 -14
- package/build/src/types/kvks/kvks-file-writer.js.map +1 -1
- package/build/src/types/ldml-keyboard/ldml-keyboard-xml-reader.d.ts.map +1 -1
- package/build/src/types/ldml-keyboard/ldml-keyboard-xml-reader.js +8 -45
- package/build/src/types/ldml-keyboard/ldml-keyboard-xml-reader.js.map +1 -1
- package/build/src/xml-utils.d.ts +16 -0
- package/build/src/xml-utils.d.ts.map +1 -0
- package/build/src/xml-utils.js +115 -0
- package/build/src/xml-utils.js.map +1 -0
- package/build/test/test-xml-utils.d.ts +2 -0
- package/build/test/test-xml-utils.d.ts.map +1 -0
- package/build/test/test-xml-utils.js +152 -0
- package/build/test/test-xml-utils.js.map +1 -0
- package/build/test/tsconfig.tsbuildinfo +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Keyman is copyright (C) SIL Global. MIT License.
|
|
3
|
+
*
|
|
4
|
+
* Created by srl on 2024-09-27
|
|
5
|
+
*
|
|
6
|
+
* Test for abstraction for XML reading and writing
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ad4ac8a8-5fd2-5481-9dfa-3c2c423a995f")}catch(e){}}();
|
|
10
|
+
import { assert } from 'chai';
|
|
11
|
+
import 'mocha';
|
|
12
|
+
import { env } from 'node:process';
|
|
13
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import { KeymanXMLReader, KeymanXMLWriter } from '../src/xml-utils.js';
|
|
15
|
+
import { makePathToFixture } from './helpers/index.js';
|
|
16
|
+
// if true, attempt to WRITE the fixtures
|
|
17
|
+
const { GEN_XML_FIXTURES } = env;
|
|
18
|
+
class Case {
|
|
19
|
+
type;
|
|
20
|
+
paths;
|
|
21
|
+
}
|
|
22
|
+
;
|
|
23
|
+
const read_cases = [
|
|
24
|
+
{
|
|
25
|
+
type: 'keyboard3',
|
|
26
|
+
paths: [
|
|
27
|
+
// keyboards
|
|
28
|
+
'disp_maximal.xml',
|
|
29
|
+
'k_020_fr.xml',
|
|
30
|
+
'strs_invalid-illegal.xml',
|
|
31
|
+
'tran_fail-empty.xml',
|
|
32
|
+
],
|
|
33
|
+
}, {
|
|
34
|
+
type: 'keyboardTest3',
|
|
35
|
+
paths: [
|
|
36
|
+
// keyboard test
|
|
37
|
+
'k_020_fr-test.xml',
|
|
38
|
+
],
|
|
39
|
+
}, {
|
|
40
|
+
type: 'kvks',
|
|
41
|
+
paths: [
|
|
42
|
+
// kvks
|
|
43
|
+
'khmer_angkor.kvks',
|
|
44
|
+
],
|
|
45
|
+
}, {
|
|
46
|
+
type: 'kps',
|
|
47
|
+
paths: [
|
|
48
|
+
// kps
|
|
49
|
+
'test_valid.kps',
|
|
50
|
+
// 'error_invalid_package_file.kps',
|
|
51
|
+
],
|
|
52
|
+
}, {
|
|
53
|
+
type: 'kpj',
|
|
54
|
+
paths: [
|
|
55
|
+
// kpj
|
|
56
|
+
'khmer_angkor.kpj',
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
const write_cases = [
|
|
61
|
+
{
|
|
62
|
+
type: 'kvks',
|
|
63
|
+
paths: [
|
|
64
|
+
// kvks
|
|
65
|
+
'khmer_angkor2.kvks', // similar to the 'read case' with the similar name, except for whitespace differences and the prologue
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
/** read data, or null */
|
|
70
|
+
function readData(path) {
|
|
71
|
+
try {
|
|
72
|
+
return readFileSync(path, 'utf-8');
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
if (e?.code !== 'ENOENT')
|
|
76
|
+
console.error(`reading ${path}`, e);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function readJson(path) {
|
|
81
|
+
const data = readData(path);
|
|
82
|
+
if (data === null)
|
|
83
|
+
return null;
|
|
84
|
+
return JSON.parse(data);
|
|
85
|
+
}
|
|
86
|
+
function writeJson(path, data) {
|
|
87
|
+
writeFileSync(path, JSON.stringify(data, null, ' '));
|
|
88
|
+
}
|
|
89
|
+
describe(`XML Reader Test ${GEN_XML_FIXTURES && '(update mode!)' || ''}`, () => {
|
|
90
|
+
for (const c of read_cases) {
|
|
91
|
+
const { type, paths } = c;
|
|
92
|
+
describe(`test reading ${type}`, () => {
|
|
93
|
+
for (const path of paths) {
|
|
94
|
+
const xmlPath = makePathToFixture('xml', `${path}`);
|
|
95
|
+
const jsonPath = makePathToFixture('xml', `${path}.json`);
|
|
96
|
+
it(`read: xml/${path}`, () => {
|
|
97
|
+
// get the string data
|
|
98
|
+
const xml = readData(xmlPath);
|
|
99
|
+
assert.ok(xml, `Could not read ${xmlPath}`);
|
|
100
|
+
const reader = new KeymanXMLReader(type);
|
|
101
|
+
assert.ok(reader);
|
|
102
|
+
// now, parse. subsitute endings for Win
|
|
103
|
+
const actual = reader.parse(xml.replace(/\r\n/g, '\n'));
|
|
104
|
+
assert.ok(actual, `Parser failed on ${xmlPath}`);
|
|
105
|
+
// get the expected
|
|
106
|
+
const expect = readJson(jsonPath);
|
|
107
|
+
if (GEN_XML_FIXTURES) {
|
|
108
|
+
console.log(`GEN_XML_FIXTURES: writing ${jsonPath} from actual`);
|
|
109
|
+
writeJson(jsonPath, actual);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
assert.ok(expect, `Could not read ${jsonPath} - run with env GEN_XML_FIXTURES=1 to update.`);
|
|
113
|
+
assert.deepEqual(actual, expect, `Mismatch of ${xmlPath} vs ${jsonPath}`);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
describe(`XML Writer Test ${GEN_XML_FIXTURES && '(update mode!)' || ''}`, () => {
|
|
121
|
+
for (const c of write_cases) {
|
|
122
|
+
const { type, paths } = c;
|
|
123
|
+
describe(`test writing ${type}`, () => {
|
|
124
|
+
const writer = new KeymanXMLWriter(type);
|
|
125
|
+
assert.ok(writer);
|
|
126
|
+
for (const path of paths) {
|
|
127
|
+
const jsonPath = makePathToFixture('xml', `${path}.json`);
|
|
128
|
+
const xmlPath = makePathToFixture('xml', `${path}`);
|
|
129
|
+
it(`write: xml/${path}`, () => {
|
|
130
|
+
// get the object data
|
|
131
|
+
const data = readJson(jsonPath);
|
|
132
|
+
assert.ok(data, `Could not read input ${jsonPath}`);
|
|
133
|
+
// now, write.
|
|
134
|
+
const actual = writer.write(data);
|
|
135
|
+
assert.ok(actual, `Writer failed on ${jsonPath}`);
|
|
136
|
+
if (GEN_XML_FIXTURES) {
|
|
137
|
+
console.log(`GEN_XML_FIXTURES: writing ${xmlPath} from actual`);
|
|
138
|
+
writeFileSync(xmlPath, actual);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// get the expected data
|
|
142
|
+
const expect = readData(xmlPath).replace(/\r\n/g, '\n');
|
|
143
|
+
assert.ok(expect, `Could not read expected output ${xmlPath} - run with env=GEN_XML_FIXTURES=1 to update`);
|
|
144
|
+
assert.deepEqual(actual.trim(), expect.trim(), `Mismatch of ${xmlPath} vs ${jsonPath}`);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=test-xml-utils.js.map
|
|
152
|
+
//# debugId=ad4ac8a8-5fd2-5481-9dfa-3c2c423a995f
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-xml-utils.js","sources":["../../test/test-xml-utils.ts"],"sourceRoot":"","names":[],"mappings":"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","debug_id":"ad4ac8a8-5fd2-5481-9dfa-3c2c423a995f"}
|