mirror of
https://github.com/keymanapp/keyman.git
synced 2026-10-31 02:07:49 +00:00
feat(developer): move failure conditions; use inputfilename as parameter (instead of outputfilename
This commit is contained in:
parent
0a07164ef1
commit
d654c2a98c
2 changed files with 34 additions and 32 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue