keyboard-genetics/test/layout_test.js

120 lines
2.8 KiB
JavaScript

const Layout = require('../src/layout');
const { DISTANCES, EFFORTS, FINGERS, ROWS } = require('../src/config');
const JCUKEN = `
\` 1 2 3 4 5 6 7 8 9 0 - =
~ ! @ # $ % ^ & * ( ) _ +
q w e r t y u i o p [ ] \\
Q W E R T Y U I O P { } |
a s d f g h j k l ; ' \\n
A S D F G H J K L : " \\n
z x c v b n m , . /
Z X C V B N M < > ?
`;
describe('Layout', () => {
const layout = new Layout('JCUKEN', JCUKEN);
it('has a name', () => {
expect(layout).to.have.property('name', 'JCUKEN');
});
it('can export itself in a pretty string', () => {
expect(layout.toString()).to.eql(
'` 1 2 3 4 5 6 7 8 9 0 - =\n'+
' q w e r t y u i o p [ ] \\\n'+
' a s d f g h j k l ; \' \\n\n'+
' z x c v b n m , . /'
);
});
it('can export itself into a sequence', () => {
expect(layout.toSequence()).to.eql(
'`1234567890-=jcukenuiop[]\\asdfghjkl;\'\nzxcvbnm,./'
);
});
it('can expose the layouts metrics map', () => {
const metrics = layout.toMetrics();
expect(metrics['q']).to.eql({
effort: EFFORTS['q'],
distance: DISTANCES['q'],
finger: FINGERS['q'],
shift: false,
hand: 'l',
row: 3
});
expect(metrics['Q']).to.eql({
effort: EFFORTS['q'],
distance: DISTANCES['q'],
finger: FINGERS['q'],
shift: true,
hand: 'l',
row: 3
});
expect(metrics[';']).to.eql({
effort: EFFORTS[';'],
distance: DISTANCES[';'],
finger: FINGERS[';'],
hand: 'r',
shift: false,
row: 2
});
expect(metrics[':']).to.eql({
effort: EFFORTS[';'],
distance: DISTANCES[';'],
finger: FINGERS[';'],
hand: 'r',
shift: true,
row: 2
});
expect(metrics[' ']).to.eql({
effort: 0,
distance: 0,
finger: 'thumb',
shift: false,
hand: false,
row: 0
});
expect(metrics['l-shift']).to.eql({
effort: EFFORTS['l-shift'],
distance: DISTANCES['l-shift'],
finger: FINGERS['l-shift'],
shift: false,
hand: 'l',
row: 0
});
expect(metrics['r-shift']).to.eql({
effort: EFFORTS['r-shift'],
distance: DISTANCES['r-shift'],
finger: FINGERS['r-shift'],
shift: false,
hand: 'r',
row: 0
});
expect(metrics['~']).to.eql({
effort: EFFORTS['~'],
distance: DISTANCES['~'],
finger: FINGERS['~'],
hand: 'l',
shift: true,
row: 4
});
expect(metrics['0']).to.eql({
effort: EFFORTS['0'],
distance: DISTANCES['0'],
finger: FINGERS['0'],
hand: 'r',
shift: false,
row: 4
});
expect(metrics['\n']).to.eql({
effort: EFFORTS['\n'],
distance: DISTANCES['\n'],
finger: FINGERS['\n'],
hand: 'r',
shift: false,
row: 2
});
});
});