aboutsummaryrefslogtreecommitdiff
path: root/test/content/components/common/input.test.ts
blob: 2ba5507ec1405aa0317fea2d6331a63fdcbd5863 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import InputComponent from 'content/components/common/input';

describe('InputComponent', () => {
  it('register callbacks', () => {
    let component = new InputComponent(window.document);
    let key = { key: 'a', ctrlKey: true, shiftKey: false, altKey: false, metaKey: false };
    component.onKey((key) => {
      expect(key).to.deep.equal(key);
    });
    component.onKeyDown(key);
  });

  it('invoke callback once', () => {
    let component = new InputComponent(window.document);
    let a = 0, b = 0;
    component.onKey((key) => {
      if (key.key == 'a') {
        ++a;
      } else {
        key.key == 'b'
        ++b;
      }
    });
    component.onKeyDown({ key: 'a' });
    component.onKeyDown({ key: 'b' });
    component.onKeyPress({ key: 'a' });
    component.onKeyUp({ key: 'a' });
    component.onKeyPress({ key: 'b' });
    component.onKeyUp({ key: 'b' });

    expect(a).is.equals(1);
    expect(b).is.equals(1);
  })

  it('does not invoke only meta keys', () => {
    let component = new InputComponent(window.document);
    component.onKey((key) => {
      expect.fail();
    });
    component.onKeyDown({ key: 'Shift' });
    component.onKeyDown({ key: 'Control' });
    component.onKeyDown({ key: 'Alt' });
    component.onKeyDown({ key: 'OS' });
  })

  it('ignores events from input elements', () => {
    ['input', 'textarea', 'select'].forEach((name) => {
      let target = window.document.createElement(name);
      let component = new InputComponent(target);
      component.onKey((key) => {
        expect.fail();
      });
      component.onKeyDown({ key: 'x', target });
    });
  });

  it('ignores events from contenteditable  elements', () => {
    let target = window.document.createElement('div');
    let component = new InputComponent(target);
    component.onKey((key) => {
      expect.fail();
    });

    target.setAttribute('contenteditable', '');
    component.onKeyDown({ key: 'x', target });

    target.setAttribute('contenteditable', 'true');
    component.onKeyDown({ key: 'x', target });
  })
});