feat(developer): move failure conditions; use inputfilename as parameter (instead of outputfilename

This commit is contained in:
Sabine 2026-02-18 13:15:20 +01:00
parent 0a07164ef1
commit d654c2a98c
2 changed files with 34 additions and 32 deletions

View file

@ -103,11 +103,6 @@ export class KeylayoutToKmnConverter {
return null;
}
if (outputFilename === null) {
this.callbacks.reportMessage(ConverterMessages.Error_OutputFilenameIsRequired());
return null;
}
const KeylayoutReader = new KeylayoutFileReader(this.callbacks/*, this.options*/);
const jsonO: Keylayout.KeylayoutXMLSourceFile = KeylayoutReader.read(inputFilename);
@ -120,9 +115,7 @@ export class KeylayoutToKmnConverter {
return null;
}
outputFilename = outputFilename ?? inputFilename.replace(/\.keylayout$/, '.kmn');
const outArray: ProcessedData = await this.convert(jsonO, outputFilename);
const outArray: ProcessedData = await this.convert(jsonO, inputFilename);
const kmnFileWriter = new KmnFileWriter(this.callbacks, this.options);
@ -130,7 +123,7 @@ export class KeylayoutToKmnConverter {
const outUint8: Uint8Array = kmnFileWriter.write(outArray);
const result: ConverterToKmnResult = {
artifacts: {
kmn: { data: outUint8, filename: outputFilename }
kmn: { data: outUint8, filename: outArray.kmnFilename }
}
};
return result;
@ -141,10 +134,14 @@ export class KeylayoutToKmnConverter {
* @param jsonObj containing filename, behaviour and rules of a json object
* @return an ProcessedData containing all data ready to print out
*/
private convert(jsonObj: any, outputfilename: string): ProcessedData {
const modifierBehavior: string[][] = []; // modifier for each behaviour
const rules: Rule[] = []; // an array of data for a kmn rule
private convert(jsonObj: any, inputfilename: string): ProcessedData {
// modifiers for each behaviour
const modifierBehavior: string[][] = [];
// an array of data for a kmn rule
const rules: Rule[] = [];
// dataObject for all relevant data
const dataObject: ProcessedData = {
keylayoutFilename: "",
kmnFilename: "",
@ -152,11 +149,10 @@ export class KeylayoutToKmnConverter {
arrayOfRules: []
};
if ((jsonObj !== null) && (jsonObj.hasOwnProperty("keyboard"))) {
dataObject.keylayoutFilename = outputfilename.replace(/\.kmn$/, '.keylayout');
dataObject.kmnFilename = outputfilename;
dataObject.arrayOfModifiers = modifierBehavior; // ukelele uses behaviours e.g. 18 modifiersCombinations in 8 KeyMapSelect(behaviors)
dataObject.arrayOfRules = rules;
if ((jsonObj === null) || (!jsonObj.hasOwnProperty("keyboard"))) {
this.callbacks.reportMessage(ConverterMessages.Error_UnableToRead({ inputFilename: inputfilename }));
return dataObject;
} else {
// create an array of modifier combinations and store in dataObject
for (let j = 0; j < jsonObj.keyboard.modifierMap.keyMapSelect.length; j++) {
@ -166,17 +162,19 @@ export class KeylayoutToKmnConverter {
}
modifierBehavior.push(singleModifierSet);
}
// fill dataObject with filenames, behaviours and (initialized) rules
dataObject.keylayoutFilename = inputfilename;
dataObject.kmnFilename = inputfilename.replace(/\.kkeylayoutn$/, '.kmn');;
dataObject.arrayOfModifiers = modifierBehavior; // ukelele uses behaviours e.g. 18 modifiersCombinations in 8 KeyMapSelect(behaviors)
dataObject.arrayOfRules = rules;
// fix the amount of processable keys to the maximun nr of keys of a keyMap to avoid processing more keys than defined
KeylayoutToKmnConverter.USE_KEY_COUNT = findUsedKeysCount(jsonObj);
// fill rules into arrayOfRules of dataObject
return this.createRuleData(dataObject, jsonObj);
}
else {
const inputFilename = dataObject.keylayoutFilename;
this.callbacks.reportMessage(ConverterMessages.Error_UnableToConvert({ inputFilename }));
return dataObject;
}
}
/**

View file

@ -107,7 +107,6 @@ describe('KeylayoutToKmnConverter', function () {
assert.deepEqual(compilerTestCallbacks.messages[0], ConverterMessages.Error_FileNotFound({ inputFilename: null }));
});
it('run() should throw on null input file name and unknown output file name', async function () {
const result = sut.run(null, 'X');
assert.isNotNull(result);
@ -119,38 +118,43 @@ describe('KeylayoutToKmnConverter', function () {
const inputFilename = makePathToFixture('../data/Unavailable.keylayout');
const result = sut.run(inputFilename, null);
assert.isNotNull(result);
assert.equal(compilerTestCallbacks.messages.length, 1);
assert.deepEqual(compilerTestCallbacks.messages[0], ConverterMessages.Error_OutputFilenameIsRequired());
assert.equal(compilerTestCallbacks.messages.length, 2);
assert.deepEqual(compilerTestCallbacks.messages[0], ConverterMessages.Error_UnableToRead({ inputFilename }));
assert.equal(compilerTestCallbacks.messages[1].code, 5246984);
});
it('run() should throw on and null output file name', async function () {
it('run() should return on available input file name and null output file name', async function () {
const inputFilename = makePathToFixture('../data/Test.keylayout');
const result = sut.run(inputFilename, null);
assert.isNotNull(result);
assert.equal(compilerTestCallbacks.messages.length, 1);
assert.deepEqual(compilerTestCallbacks.messages[0], ConverterMessages.Error_OutputFilenameIsRequired());
await NodeAssert.doesNotReject(async () => sut.run(inputFilename, null));
assert.equal(compilerTestCallbacks.messages.length, 0);
});
it('run() should return on correct input file name and empty output file name ', async function () {
const inputFilename = makePathToFixture('../data/Test.keylayout');
await NodeAssert.doesNotReject(async () => sut.run(inputFilename, ''));
assert.equal(compilerTestCallbacks.messages.length, 0);
});
it('run() should return on correct input file name and null output file name', async function () {
const inputFilename = makePathToFixture('../data/Test.keylayout');
await NodeAssert.doesNotReject(async () => sut.run(inputFilename, null));
assert.equal(compilerTestCallbacks.messages.length, 0);
});
it('run() should return on correct input file name and given output file name ', async function () {
const inputFilename = makePathToFixture('../data/Test.keylayout');
const outputFilename = makePathToFixture('../data/OutputName.kmn');
await NodeAssert.doesNotReject(async () => sut.run(inputFilename, outputFilename));
assert.equal(compilerTestCallbacks.messages.length, 0);
});
it('run() return on correct input file extention and unsupperted output file extention', async function () {
const inputFilename = makePathToFixture('../data/Test.keylayout');
const outputFilename = makePathToFixture('../data/OutputXName.B');
await NodeAssert.doesNotReject(async () => sut.run(inputFilename, outputFilename));
assert.equal(compilerTestCallbacks.messages.length, 0);
});
});
@ -206,14 +210,14 @@ describe('KeylayoutToKmnConverter', function () {
arrayOfModifiers: [],
arrayOfRules: [['C0', '', '', 0, 0, '', '', 0, 0, 'CAPS', 'K_A', 'A']]
}, '');
assert.isTrue((convertedRule .keylayoutFilename === ''
&& convertedRule .arrayOfModifiers.length === 0
&& convertedRule .arrayOfRules.length === 0));
assert.isTrue((convertedRule.keylayoutFilename === ''
&& convertedRule.arrayOfModifiers.length === 0
&& convertedRule.arrayOfRules.length === 0));
});
it('should return empty array of rules on null input', async function () {
const convertedRule = sut.convertBound.convert(null, 'ABC.kmn');
assert.isTrue(convertedRule .arrayOfRules.length === 0);
assert.isTrue(convertedRule.arrayOfRules.length === 0);
});
});