emit mapped keys from input-component
This commit is contained in:
		
							parent
							
								
									c2a663a64d
								
							
						
					
					
						commit
						214a5103f3
					
				
					 6 changed files with 95 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -5,16 +5,10 @@ import * as inputActions from 'content/actions/input';
 | 
			
		|||
describe("input actions", () => {
 | 
			
		||||
  describe("keyPress", () => {
 | 
			
		||||
    it('create INPUT_KEY_PRESS action', () => {
 | 
			
		||||
      let action = inputActions.keyPress('a', false);
 | 
			
		||||
      let action = inputActions.keyPress('a');
 | 
			
		||||
      expect(action.type).to.equal(actions.INPUT_KEY_PRESS);
 | 
			
		||||
      expect(action.key).to.equal('a');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('create INPUT_KEY_PRESS action from key with ctrl', () => {
 | 
			
		||||
      let action = inputActions.keyPress('b', true);
 | 
			
		||||
      expect(action.type).to.equal(actions.INPUT_KEY_PRESS);
 | 
			
		||||
      expect(action.key).to.equal('<C-B>');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe("clearKeys", () => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										78
									
								
								test/content/components/common/input.test.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								test/content/components/common/input.test.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,78 @@
 | 
			
		|||
import InputComponent from 'content/components/common/input';
 | 
			
		||||
import { expect } from "chai";
 | 
			
		||||
 | 
			
		||||
describe('InputComponent', () => {
 | 
			
		||||
  it('register callbacks', () => {
 | 
			
		||||
    let component = new InputComponent(window.document);
 | 
			
		||||
    component.onKey((key) => {
 | 
			
		||||
      expect(key).is.equals('a');
 | 
			
		||||
    });
 | 
			
		||||
    component.onKeyDown({ key: 'a' });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('invoke callback once', () => {
 | 
			
		||||
    let component = new InputComponent(window.document);
 | 
			
		||||
    let a = 0, b = 0;
 | 
			
		||||
    component.onKey((key) => {
 | 
			
		||||
      if (key == 'a') {
 | 
			
		||||
        ++a;
 | 
			
		||||
      } else {
 | 
			
		||||
        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('add prefix when ctrl pressed', () => {
 | 
			
		||||
    let component = new InputComponent(window.document);
 | 
			
		||||
    component.onKey((key) => {
 | 
			
		||||
      expect(key).is.equals('<C-A>');
 | 
			
		||||
    });
 | 
			
		||||
    component.onKeyDown({ key: 'a', ctrlKey: true });
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  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 });
 | 
			
		||||
  })
 | 
			
		||||
});
 | 
			
		||||
		Reference in a new issue