1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | Object.defineProperty(exports, "__esModule", { value: true });
|
18 | const tslib_1 = require("tslib");
|
19 | const inversify_1 = require("inversify");
|
20 | const event_1 = require("../../common/event");
|
21 | const keys_1 = require("./keys");
|
22 | const keyboard_layout_service_1 = require("./keyboard-layout-service");
|
23 | const keyboard_layout_provider_1 = require("../../common/keyboard/keyboard-layout-provider");
|
24 | const os = require("../../common/os");
|
25 | const chai = require("chai");
|
26 | const sinon = require("sinon");
|
27 | describe('keyboard layout service', function () {
|
28 | let stubOSX;
|
29 | let stubWindows;
|
30 | const setup = async (layout, system) => {
|
31 | switch (system) {
|
32 | case 'mac':
|
33 | stubOSX = sinon.stub(os, 'isOSX').value(true);
|
34 | stubWindows = sinon.stub(os, 'isWindows').value(false);
|
35 | break;
|
36 | case 'win':
|
37 | stubOSX = sinon.stub(os, 'isOSX').value(false);
|
38 | stubWindows = sinon.stub(os, 'isWindows').value(true);
|
39 | break;
|
40 | default:
|
41 | stubOSX = sinon.stub(os, 'isOSX').value(false);
|
42 | stubWindows = sinon.stub(os, 'isWindows').value(false);
|
43 | }
|
44 | const container = new inversify_1.Container();
|
45 | container.bind(keyboard_layout_service_1.KeyboardLayoutService).toSelf().inSingletonScope();
|
46 | let MockLayoutProvider = class MockLayoutProvider {
|
47 | constructor() {
|
48 | this.emitter = new event_1.Emitter();
|
49 | }
|
50 | get onDidChangeNativeLayout() {
|
51 | return this.emitter.event;
|
52 | }
|
53 | getNativeLayout() {
|
54 | return Promise.resolve(layout);
|
55 | }
|
56 | };
|
57 | MockLayoutProvider = (0, tslib_1.__decorate)([
|
58 | (0, inversify_1.injectable)()
|
59 | ], MockLayoutProvider);
|
60 | container.bind(keyboard_layout_provider_1.KeyboardLayoutProvider).to(MockLayoutProvider);
|
61 | container.bind(keyboard_layout_provider_1.KeyboardLayoutChangeNotifier).to(MockLayoutProvider);
|
62 | const service = container.get(keyboard_layout_service_1.KeyboardLayoutService);
|
63 | await service.initialize();
|
64 | return service;
|
65 | };
|
66 | afterEach(() => {
|
67 | stubOSX.restore();
|
68 | stubWindows.restore();
|
69 | });
|
70 | it('resolves correct key bindings with German Mac layout', async () => {
|
71 | const macGerman = require('../../../src/common/keyboard/layouts/de-German-mac.json');
|
72 | const service = await setup(macGerman, 'mac');
|
73 | const toggleComment = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('Slash+M1'));
|
74 | chai.expect(toggleComment.toString()).to.equal('meta+shift+7');
|
75 | chai.expect(service.getKeyboardCharacter(toggleComment.key)).to.equal('7');
|
76 | const indentLine = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('BracketRight+M1'));
|
77 | chai.expect(indentLine.toString()).to.equal('meta+alt+ctrl+6');
|
78 | chai.expect(service.getKeyboardCharacter(indentLine.key)).to.equal('6');
|
79 | });
|
80 | it('resolves correct key bindings with French Mac layout', async () => {
|
81 | const macFrench = require('../../../src/common/keyboard/layouts/fr-French-mac.json');
|
82 | const service = await setup(macFrench, 'mac');
|
83 | const toggleComment = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('Slash+M1'));
|
84 | chai.expect(toggleComment.toString()).to.equal('meta+shift+.');
|
85 | chai.expect(service.getKeyboardCharacter(toggleComment.key)).to.equal(':');
|
86 | const indentLine = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('BracketRight+M1'));
|
87 | chai.expect(indentLine.toString()).to.equal('meta+shift+alt+ctrl+-');
|
88 | chai.expect(service.getKeyboardCharacter(indentLine.key)).to.equal(')');
|
89 | });
|
90 | it('resolves correct key bindings with German Windows layout', async () => {
|
91 | const winGerman = require('../../../src/common/keyboard/layouts/de-German-pc.json');
|
92 | const service = await setup(winGerman, 'win');
|
93 | const toggleComment = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('Slash+M1'));
|
94 | chai.expect(toggleComment.toString()).to.equal('ctrl+\\');
|
95 | chai.expect(service.getKeyboardCharacter(toggleComment.key)).to.equal('#');
|
96 | const indentLine = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('BracketRight+M1'));
|
97 | chai.expect(indentLine.toString()).to.equal('ctrl+=');
|
98 | chai.expect(service.getKeyboardCharacter(indentLine.key)).to.equal('´');
|
99 | });
|
100 | it('resolves correct key bindings with French Windows layout', async () => {
|
101 | const winFrench = require('../../../src/common/keyboard/layouts/fr-French-pc.json');
|
102 | const service = await setup(winFrench, 'win');
|
103 | const toggleComment = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('Slash+M1'));
|
104 | chai.expect(toggleComment.toString()).to.equal('ctrl+.');
|
105 | chai.expect(service.getKeyboardCharacter(toggleComment.key)).to.equal(':');
|
106 | const indentLine = service.resolveKeyCode(keys_1.KeyCode.createKeyCode('BracketRight+M1'));
|
107 | chai.expect(indentLine.toString()).to.equal('ctrl+[');
|
108 | chai.expect(service.getKeyboardCharacter(indentLine.key)).to.equal('^');
|
109 | });
|
110 | });
|
111 |
|
\ | No newline at end of file |