feat(developer): kmc-convert undo use of unitTestEndpoints for 3 non-tested functions
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run

This commit is contained in:
Sabine 2026-10-09 16:18:31 +02:00
parent 49f610fc70
commit 79e2bde115
5 changed files with 24 additions and 29 deletions

View file

@ -83,7 +83,7 @@ export class KeylayoutFileReader {
/**
* @returns true if valid, false if invalid
*/
private validate(source: Keylayout.KeylayoutXMLSourceFile, inputFilename: string): boolean {
public validate(source: Keylayout.KeylayoutXMLSourceFile, inputFilename: string): boolean {
if (!source) {
this.callbacks.reportMessage(ConverterMessages.Error_UnableToReadFile({ inputFilename: inputFilename }));
return false;
@ -178,7 +178,6 @@ export class KeylayoutFileReader {
findMapIndexinKeymap: this.findMapIndexinKeymap.bind(this),
findIndexinKeymapSelect: this.findIndexinKeymapSelect.bind(this),
checkForCorrespondingElements: this.checkForCorrespondingElements.bind(this),
validate: this.validate.bind(this),
boxArray: this.boxArray.bind(this),
};
};

View file

@ -108,7 +108,7 @@ export class KeylayoutToKmnConverter {
return null;
}
try {
if (!KeylayoutReader.unitTestEndpoints.validate(jsonO, inputFilename)) {
if (!KeylayoutReader.validate(jsonO, inputFilename)) {
return null;
}
} catch (e: any) {
@ -720,7 +720,7 @@ export class KeylayoutToKmnConverter {
* @param keylayoutModifier the modifier string used in the .keylayout-file
* @return true if the modifier can be used in keyman; false if not
*/
private isAcceptableKeymanModifier(keylayoutModifier: string): boolean {
public isAcceptableKeymanModifier(keylayoutModifier: string): boolean {
if (keylayoutModifier === null)
return false;
const modifierSingle = keylayoutModifier.toUpperCase().split(" ");
@ -737,7 +737,7 @@ export class KeylayoutToKmnConverter {
* @param pos Ukelele (=mac) keycodes
* @return VK
*/
private mapUkeleleKeycodeToVK(pos: number): string {
public mapUkeleleKeycodeToVK(pos: number): string {
const vk = [
"K_A" /* A */,
"K_S" /* S */,
@ -1056,13 +1056,9 @@ export class KeylayoutToKmnConverter {
/** @internal */
public unitTestEndpoints = {
convert: this.convert.bind(this),
reviewRuleInputData: this.reviewRuleInputData.bind(this),
createKmnModifier: this.createKmnModifier.bind(this),
checkIfCapsIsUsed: this.checkIfCapsIsUsed.bind(this),
isAcceptableKeymanModifier: this.isAcceptableKeymanModifier.bind(this),
mapUkeleleKeycodeToVK: this.mapUkeleleKeycodeToVK.bind(this),
getActionIndexFromActionId: this.getActionIndexFromActionId.bind(this),
getActionIdFromActionNext: this.getActionIdFromActionNext.bind(this),
getModifierArrayFromKeyModifierArray: this.getModifierArrayFromKeyModifierArray.bind(this),

View file

@ -325,7 +325,7 @@ export class KmnFileWriter {
// lookup key nr of the key which is being processed
let keyNr: number = 0;
for (let j = 0; j <= KeylayoutToKmnConverter.MAX_KEY_IDENTIFIER; j++) {
if (keylayoutKmnConverter.unitTestEndpoints.mapUkeleleKeycodeToVK(j) === uniqueDataRules[k].key) {
if (keylayoutKmnConverter.mapUkeleleKeycodeToVK(j) === uniqueDataRules[k].key) {
keyNr = j;
break;
}
@ -653,7 +653,7 @@ export class KmnFileWriter {
// if the dk is unavailable, the modifiers of the dependant C0 rule will get a warning 'unavailable superior rule '
if (inObj.Dk_modifier) {
const mod_OK = new KeylayoutToKmnConverter(this.callbacks, this.options).unitTestEndpoints.isAcceptableKeymanModifier(inObj.Dk_modifier);
const mod_OK = new KeylayoutToKmnConverter(this.callbacks, this.options).isAcceptableKeymanModifier(inObj.Dk_modifier);
if ((outMsg[1].lastIndexOf('unavailable modifier') < 0))
outMsg[1] += (!mod_OK) ? 'unavailable modifier ' : '';
@ -803,7 +803,7 @@ export class KmnFileWriter {
// ------------------------- check unavailable modifiers -------------------------
if ((rule[index].ruleType === "C0") || (rule[index].ruleType === "C1")) {
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierKey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierKey)) {
unavailableModiWarnings.compare_type = 'unav_C0_C1';
unavailableModiWarnings.warningMessages = this.createWarningText(unavailableModiWarnings);
}
@ -811,7 +811,7 @@ export class KmnFileWriter {
else if (rule[index].ruleType === "C2") {
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierDeadkey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierDeadkey)) {
unavailableSuperiWarnings.compare_type = 'unav_C2';
unavailableSuperiWarnings.dk_prefix = ['C', 'A'];
unavailableSuperiWarnings.dk_id = [rule[index].idPrevDeadkey, rule[index].idDeadkey];
@ -820,7 +820,7 @@ export class KmnFileWriter {
unavailableSuperiWarnings.warningMessages = this.createWarningText(unavailableSuperiWarnings);
}
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierKey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierKey)) {
unavailableModiWarnings.compare_type = 'unav_C2';
unavailableModiWarnings.modifier = rule[index].modifierKey;
unavailableModiWarnings.key = rule[index].key;
@ -830,7 +830,7 @@ export class KmnFileWriter {
else if (rule[index].ruleType === "C3") {
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierPrevDeadkey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierPrevDeadkey)) {
unavailableSuperiWarnings.compare_type = 'unav_C3';
unavailableSuperiWarnings.dk_prefix = ['A', 'B'];
unavailableSuperiWarnings.dk_id = [rule[index].idPrevDeadkey, rule[index].idDeadkey];
@ -841,7 +841,7 @@ export class KmnFileWriter {
unavailableSuperiWarnings.warningMessages = this.createWarningText(unavailableSuperiWarnings, 2);
}
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierDeadkey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierDeadkey)) {
unavailableSuperiWarnings.compare_type = 'unav_C3';
unavailableSuperiWarnings.prevDk_modifier = rule[index].modifierPrevDeadkey;
unavailableSuperiWarnings.prevDk_key = rule[index].prevDeadkey;
@ -852,7 +852,7 @@ export class KmnFileWriter {
unavailableSuperiWarnings.warningMessages = this.createWarningText(unavailableSuperiWarnings, 2);
}
if (!keylayoutKmnConverter.unitTestEndpoints.isAcceptableKeymanModifier(rule[index].modifierKey)) {
if (!keylayoutKmnConverter.isAcceptableKeymanModifier(rule[index].modifierKey)) {
unavailableModiWarnings.compare_type = 'unav_C3';
unavailableModiWarnings.modifier = rule[index].modifierKey;
unavailableModiWarnings.key = rule[index].key;

View file

@ -25,7 +25,7 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isTrue(validated);
});
@ -33,7 +33,7 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_unknownTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
@ -41,33 +41,33 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_additionalTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
it('validate() should return false on inputfile with missing tags', async function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_missingTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
it('validate() should return false on no entries in action-when', async function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_noActionWhen.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
it('validate() should return false on null as input', async function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_noActionWhen.keylayout');
const validated = sutR.unitTestEndpoints.validate(null, inputFilename);
const validated = sutR.validate(null, inputFilename);
assert.isFalse(validated);
});
it('validate() should return false on undefined as input', async function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_noActionWhen.keylayout');
const validated = sutR.unitTestEndpoints.validate(undefined, inputFilename);
const validated = sutR.validate(undefined, inputFilename);
assert.isFalse(validated);
});
});
@ -76,7 +76,7 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_unknownTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
@ -84,7 +84,7 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_additionalTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
@ -92,7 +92,7 @@ describe('KeylayoutFileReader', function () {
const sutR = new KeylayoutFileReader(compilerTestCallbacks);
const inputFilename = makePathToFixture('../data/Test_missingTags.keylayout');
const result: Keylayout.KeylayoutXMLSourceFile | null = sutR.read(compilerTestCallbacks.loadFile(inputFilename));
const validated = sutR.unitTestEndpoints.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
const validated = sutR.validate(result as Keylayout.KeylayoutXMLSourceFile, inputFilename);
assert.isFalse(validated);
});
});

View file

@ -281,7 +281,7 @@ describe('KeylayoutToKmnConverter', function () {
[null, false],
].forEach(function (values) {
it(("isAcceptableKeymanModifier(" + values[0] + ")").padEnd(38, " ") + ' should return ' + values[1], async function () {
const result = sut.unitTestEndpoints.isAcceptableKeymanModifier(values[0] as string);
const result = sut.isAcceptableKeymanModifier(values[0] as string);
assert.equal(result, values[1]);
});
});
@ -303,7 +303,7 @@ describe('KeylayoutToKmnConverter', function () {
[, ''],
].forEach(function (values) {
it(("mapUkeleleKeycodeToVK(" + values[0] + ")").padEnd(26, " ") + "should return " + "'" + values[1] + "'", async function () {
const result = sut.unitTestEndpoints.mapUkeleleKeycodeToVK(values[0] as number);
const result = sut.mapUkeleleKeycodeToVK(values[0] as number);
assert.equal(result, values[1]);
});
});