keycodes_spec.lua 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. local t = require('test.unit.testutil')
  2. local itp = t.gen_itp(it)
  3. local ffi = t.ffi
  4. local eq = t.eq
  5. local neq = t.neq
  6. local keycodes = t.cimport('./src/nvim/keycodes.h')
  7. local NULL = t.NULL
  8. describe('keycodes.c', function()
  9. describe('find_special_key()', function()
  10. local srcp = ffi.new('const unsigned char *[1]')
  11. local modp = ffi.new('int[1]')
  12. itp('no keycode', function()
  13. srcp[0] = 'abc'
  14. eq(0, keycodes.find_special_key(srcp, 3, modp, 0, NULL))
  15. end)
  16. itp('keycode with multiple modifiers', function()
  17. srcp[0] = '<C-M-S-A>'
  18. neq(0, keycodes.find_special_key(srcp, 9, modp, 0, NULL))
  19. neq(0, modp[0])
  20. end)
  21. itp('case-insensitive', function()
  22. -- Compare other capitalizations to this.
  23. srcp[0] = '<C-A>'
  24. local all_caps_key = keycodes.find_special_key(srcp, 5, modp, 0, NULL)
  25. local all_caps_mod = modp[0]
  26. srcp[0] = '<C-a>'
  27. eq(all_caps_key, keycodes.find_special_key(srcp, 5, modp, 0, NULL))
  28. eq(all_caps_mod, modp[0])
  29. srcp[0] = '<c-A>'
  30. eq(all_caps_key, keycodes.find_special_key(srcp, 5, modp, 0, NULL))
  31. eq(all_caps_mod, modp[0])
  32. srcp[0] = '<c-a>'
  33. eq(all_caps_key, keycodes.find_special_key(srcp, 5, modp, 0, NULL))
  34. eq(all_caps_mod, modp[0])
  35. end)
  36. itp('double-quote in keycode #7411', function()
  37. -- Unescaped with in_string=false
  38. srcp[0] = '<C-">'
  39. eq(string.byte('"'), keycodes.find_special_key(srcp, 5, modp, 0, NULL))
  40. -- Unescaped with in_string=true
  41. eq(0, keycodes.find_special_key(srcp, 5, modp, keycodes.FSK_IN_STRING, NULL))
  42. -- Escaped with in_string=false
  43. srcp[0] = '<C-\\">'
  44. -- Should fail because the key is invalid
  45. -- (more than 1 non-modifier character).
  46. eq(0, keycodes.find_special_key(srcp, 6, modp, 0, NULL))
  47. -- Escaped with in_string=true
  48. eq(string.byte('"'), keycodes.find_special_key(srcp, 6, modp, keycodes.FSK_IN_STRING, NULL))
  49. end)
  50. end)
  51. end)