@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
47 lines • 6.57 kB
JavaScript
import { isNumber, isString, isObject } from '../types';
export const parseKeyOptions = (keyOrKeyCode) => {
if (isNumber(keyOrKeyCode) && keyOrKeyCode) {
return { key: false, keyCode: keyOrKeyCode, modifiers: {} };
}
if (isString(keyOrKeyCode) && keyOrKeyCode) {
return parseKey(keyOrKeyCode);
}
if (isObject(keyOrKeyCode)) {
const parsedKey = parseKey(keyOrKeyCode.key);
return {
...parsedKey,
keyCode: keyOrKeyCode.keyCode,
};
}
throw new Error('keyboard.pressKey() requires a valid key or keyCode');
};
const parseKey = (keyStr) => {
if (keyStr.indexOf('.') < 0 || '.' === keyStr) {
return { key: keyStr, keyCode: false, modifiers: {} };
}
const keyParts = keyStr.split('.');
const key = keyParts.pop();
const modifiers = keyParts.reduce((mods, part) => {
switch (part) {
case 'control':
case 'ctrl':
mods.control = true;
return mods;
case 'shift':
mods.shift = true;
return mods;
case 'alt':
mods.alt = true;
return mods;
case 'meta':
case 'cmd':
case 'win':
mods.meta = true;
return mods;
default:
throw new Error(`invalid key modifier: ${part ? part : 'undefined'}, keyStr: ${keyStr}`);
}
}, { alt: false, control: false, shift: false, meta: false });
return { key, keyCode: false, modifiers };
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWN0YXRvci9zcmMvbGliL2ludGVybmFscy9rZXktcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUF3QixRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFlOUUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBb0QsRUFBYyxFQUFFO0lBQ2xHLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQyxPQUFPLFFBQVEsQ0FBQyxZQUFzQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QyxPQUFPO1lBQ0wsR0FBRyxTQUFTO1lBQ1osT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQztBQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBYyxFQUFjLEVBQUU7SUFDOUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBWSxDQUFDO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQy9CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2IsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUVwQixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFFbEIsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBRWhCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFFakIsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxhQUFhLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUMsRUFDRCxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FDMUQsQ0FBQztJQUVGLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc051bWJlciwgaXNTdHJpbmcsIEtleWJvYXJkRXZlbnRPcHRpb25zLCBpc09iamVjdCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllcktleXMge1xuICBhbHQ/OiBib29sZWFuO1xuICBjb250cm9sPzogYm9vbGVhbjtcbiAgc2hpZnQ/OiBib29sZWFuO1xuICBtZXRhPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLZXlPcHRpb25zIHtcbiAga2V5OiBzdHJpbmcgfCBmYWxzZTtcbiAga2V5Q29kZTogbnVtYmVyIHwgZmFsc2U7XG4gIG1vZGlmaWVyczogTW9kaWZpZXJLZXlzO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VLZXlPcHRpb25zID0gKGtleU9yS2V5Q29kZTogc3RyaW5nIHwgbnVtYmVyIHwgS2V5Ym9hcmRFdmVudE9wdGlvbnMpOiBLZXlPcHRpb25zID0+IHtcbiAgaWYgKGlzTnVtYmVyKGtleU9yS2V5Q29kZSkgJiYga2V5T3JLZXlDb2RlKSB7XG4gICAgcmV0dXJuIHsga2V5OiBmYWxzZSwga2V5Q29kZToga2V5T3JLZXlDb2RlLCBtb2RpZmllcnM6IHt9IH07XG4gIH1cblxuICBpZiAoaXNTdHJpbmcoa2V5T3JLZXlDb2RlKSAmJiBrZXlPcktleUNvZGUpIHtcbiAgICByZXR1cm4gcGFyc2VLZXkoa2V5T3JLZXlDb2RlIGFzIHN0cmluZyk7XG4gIH1cblxuICBpZiAoaXNPYmplY3Qoa2V5T3JLZXlDb2RlKSkge1xuICAgIGNvbnN0IHBhcnNlZEtleSA9IHBhcnNlS2V5KGtleU9yS2V5Q29kZS5rZXkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcnNlZEtleSxcbiAgICAgIGtleUNvZGU6IGtleU9yS2V5Q29kZS5rZXlDb2RlLFxuICAgIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2tleWJvYXJkLnByZXNzS2V5KCkgcmVxdWlyZXMgYSB2YWxpZCBrZXkgb3Iga2V5Q29kZScpO1xufTtcblxuY29uc3QgcGFyc2VLZXkgPSAoa2V5U3RyOiBzdHJpbmcpOiBLZXlPcHRpb25zID0+IHtcbiAgaWYgKGtleVN0ci5pbmRleE9mKCcuJykgPCAwIHx8ICcuJyA9PT0ga2V5U3RyKSB7XG4gICAgcmV0dXJuIHsga2V5OiBrZXlTdHIsIGtleUNvZGU6IGZhbHNlLCBtb2RpZmllcnM6IHt9IH07XG4gIH1cblxuICBjb25zdCBrZXlQYXJ0cyA9IGtleVN0ci5zcGxpdCgnLicpO1xuICBjb25zdCBrZXkgPSBrZXlQYXJ0cy5wb3AoKSBhcyBzdHJpbmc7XG4gIGNvbnN0IG1vZGlmaWVycyA9IGtleVBhcnRzLnJlZHVjZShcbiAgICAobW9kcywgcGFydCkgPT4ge1xuICAgICAgc3dpdGNoIChwYXJ0KSB7XG4gICAgICAgIGNhc2UgJ2NvbnRyb2wnOlxuICAgICAgICBjYXNlICdjdHJsJzpcbiAgICAgICAgICBtb2RzLmNvbnRyb2wgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG1vZHM7XG4gICAgICAgIGNhc2UgJ3NoaWZ0JzpcbiAgICAgICAgICBtb2RzLnNoaWZ0ID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBtb2RzO1xuICAgICAgICBjYXNlICdhbHQnOlxuICAgICAgICAgIG1vZHMuYWx0ID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBtb2RzO1xuICAgICAgICBjYXNlICdtZXRhJzpcbiAgICAgICAgY2FzZSAnY21kJzpcbiAgICAgICAgY2FzZSAnd2luJzpcbiAgICAgICAgICBtb2RzLm1ldGEgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG1vZHM7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGtleSBtb2RpZmllcjogJHtwYXJ0ID8gcGFydCA6ICd1bmRlZmluZWQnfSwga2V5U3RyOiAke2tleVN0cn1gKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgYWx0OiBmYWxzZSwgY29udHJvbDogZmFsc2UsIHNoaWZ0OiBmYWxzZSwgbWV0YTogZmFsc2UgfSxcbiAgKTtcblxuICByZXR1cm4geyBrZXksIGtleUNvZGU6IGZhbHNlLCBtb2RpZmllcnMgfTtcbn07XG4iXX0=