keycode.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. "use strict"
  2. // check if is component
  3. if (require.modules) {
  4. var keycode = require('keycode')
  5. var assert = require('timoxley-assert')
  6. } else {
  7. var keycode = require('../')
  8. var assert = require('assert')
  9. }
  10. it('can return a charcode from a letter', function() {
  11. assert.strictEqual(keycode('0'), 48);
  12. assert.strictEqual(keycode('B'), 66);
  13. assert.strictEqual(keycode('f1'), 112);
  14. assert.strictEqual(keycode('9'), 57);
  15. assert.strictEqual(keycode('numpad 0'), 96);
  16. })
  17. it('can use aliases from a letter', function() {
  18. assert.strictEqual(keycode('ctl'), keycode('ctrl'));
  19. })
  20. it('does not use alias name when mapping back from a number', function() {
  21. for (var key in keycode.aliases) {
  22. assert.notStrictEqual(keycode(keycode(key)), key);
  23. }
  24. })
  25. it('is case insensitive', function() {
  26. assert.strictEqual(keycode('a'), 65);
  27. assert.strictEqual(keycode('A'), 65);
  28. assert.strictEqual(keycode('enter'), 13);
  29. assert.strictEqual(keycode('ENTER'), 13);
  30. assert.strictEqual(keycode('enTeR'), 13);
  31. assert.strictEqual(keycode('Spacebar'), 32);
  32. })
  33. it('returns char code for strange chars', function() {
  34. // TODO: not sure if this is sensible behaviour
  35. assert.strictEqual(keycode('∆'), 8710);
  36. assert.strictEqual(keycode('漢'), 28450);
  37. })
  38. it('returns undefined for unknown strings', function() {
  39. assert.strictEqual(keycode('ants'), undefined);
  40. assert.strictEqual(keycode('Bagels'), undefined);
  41. assert.strictEqual(keycode(''), undefined);
  42. assert.strictEqual(keycode('JKHG KJG LSDF'), undefined);
  43. })
  44. it('returns undefined for unknown numbers', function() {
  45. assert.strictEqual(keycode(-1), undefined);
  46. assert.strictEqual(keycode(Infinity), undefined);
  47. assert.strictEqual(keycode(0.3), undefined);
  48. assert.strictEqual(keycode(9999999), undefined);
  49. })
  50. it('returns code for objects implementing toString function', function() {
  51. var obj = {}
  52. obj.toString = function() {
  53. return 'a'
  54. }
  55. assert.strictEqual(keycode(obj), 65);
  56. })
  57. it('returns char for objects with a keyCode property', function() {
  58. var obj = { keyCode: 65 }
  59. assert.strictEqual(keycode(obj), 'a');
  60. })
  61. it('returns undefined for any other passed in type', function() {
  62. assert.strictEqual(keycode({}), undefined);
  63. assert.strictEqual(keycode([]), undefined);
  64. assert.strictEqual(keycode([1,2]), undefined);
  65. assert.strictEqual(keycode(null), undefined);
  66. assert.strictEqual(keycode(undefined), undefined);
  67. assert.strictEqual(keycode(/.*/), undefined);
  68. assert.strictEqual(keycode(), undefined);
  69. })
  70. it('is commutative', function() {
  71. for (var key in keycode.code) {
  72. assert.strictEqual(keycode(key), keycode(keycode(keycode(key))))
  73. }
  74. })
  75. it('exposes keycode/name maps', function() {
  76. for (var code in keycode.codes) {
  77. assert.strictEqual(keycode(code), keycode(keycode.names[keycode.codes[code]]))
  78. }
  79. })
  80. it('should return shift, ctrl, and alt for 16, 17, and 18', function() {
  81. assert.strictEqual(keycode(16), 'shift')
  82. assert.strictEqual(keycode(17), 'ctrl')
  83. assert.strictEqual(keycode(18), 'alt')
  84. })
  85. describe('isEventKey', function() {
  86. it('should allow to compare events to their names', function() {
  87. var event = { which: 13, keyCode: 13, charCode: 13 };
  88. assert.strictEqual(keycode.isEventKey(event, 'enter'), true);
  89. assert.strictEqual(keycode.isEventKey(event, 'down'), false);
  90. });
  91. it('should allow to compare events to their names (case insensitive)', function() {
  92. var event = { which: 13, keyCode: 13, charCode: 13 };
  93. assert.strictEqual(keycode.isEventKey(event, 'eNtER'), true);
  94. assert.strictEqual(keycode.isEventKey(event, 'dOWN'), false);
  95. });
  96. it('should return false if a ', function() {
  97. var event = { which: 13, keyCode: 13, charCode: 13 };
  98. assert.strictEqual(keycode.isEventKey(event, 'eNtER'), true);
  99. assert.strictEqual(keycode.isEventKey(event, 'dOWN'), false);
  100. });
  101. it('should allow to compare events to their keyCodes)', function() {
  102. var event = { which: 13, keyCode: 13, charCode: 13 };
  103. assert.strictEqual(keycode.isEventKey(event, 13), true);
  104. assert.strictEqual(keycode.isEventKey(event, 14), false);
  105. });
  106. it('should not break when invalid key codes are entered, instead false should be returned', function() {
  107. var event = { which: -1, keyCode: -1, charCode: -1 };
  108. assert.strictEqual(keycode.isEventKey(event, 'enter'), false);
  109. assert.strictEqual(keycode.isEventKey(event, 'down'), false);
  110. });
  111. });