test_digraph.vim 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. " Tests for digraphs
  2. source check.vim
  3. CheckFeature digraphs
  4. source term_util.vim
  5. func Put_Dig(chars)
  6. exe "norm! o\<c-k>".a:chars
  7. endfu
  8. func Put_Dig_BS(char1, char2)
  9. exe "norm! o".a:char1."\<bs>".a:char2
  10. endfu
  11. func Test_digraphs()
  12. new
  13. call Put_Dig("00")
  14. call assert_equal("∞", getline('.'))
  15. " not a digraph
  16. call Put_Dig("el")
  17. call assert_equal("l", getline('.'))
  18. call Put_Dig("ht")
  19. call assert_equal("þ", getline('.'))
  20. " digraph "ab" is the same as "ba"
  21. call Put_Dig("ab")
  22. call Put_Dig("ba")
  23. call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
  24. " Euro sign
  25. call Put_Dig("e=")
  26. call Put_Dig("=e")
  27. call Put_Dig("Eu")
  28. call Put_Dig("uE")
  29. call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
  30. " Rouble sign
  31. call Put_Dig("R=")
  32. call Put_Dig("=R")
  33. call Put_Dig("=P")
  34. call Put_Dig("P=")
  35. call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
  36. " Quadruple prime
  37. call Put_Dig("'4")
  38. call assert_equal("⁗", getline('.'))
  39. " APPROACHES THE LIMIT
  40. call Put_Dig(".=")
  41. call assert_equal("≐", getline('.'))
  42. " Not a digraph
  43. call Put_Dig("a\<bs>")
  44. call Put_Dig("\<bs>a")
  45. call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
  46. " Grave
  47. call Put_Dig("a!")
  48. call Put_Dig("!e")
  49. call Put_Dig("b!") " not defined
  50. call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
  51. " Acute accent
  52. call Put_Dig("a'")
  53. call Put_Dig("'e")
  54. call Put_Dig("b'") " not defined
  55. call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
  56. " Circumflex
  57. call Put_Dig("a>")
  58. call Put_Dig(">e")
  59. call Put_Dig("b>") " not defined
  60. call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
  61. " Tilde
  62. call Put_Dig("o~")
  63. call Put_Dig("~u") " not defined
  64. call Put_Dig("z~") " not defined
  65. call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
  66. " Tilde
  67. call Put_Dig("o?")
  68. call Put_Dig("?u")
  69. call Put_Dig("z?") " not defined
  70. call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
  71. " Macron
  72. call Put_Dig("o-")
  73. call Put_Dig("-u")
  74. call Put_Dig("z-") " not defined
  75. call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
  76. " Breve
  77. call Put_Dig("o(")
  78. call Put_Dig("(u")
  79. call Put_Dig("z(") " not defined
  80. call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
  81. " Dot above
  82. call Put_Dig("b.")
  83. call Put_Dig(".e")
  84. call Put_Dig("a.") " not defined
  85. call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
  86. " Diaeresis
  87. call Put_Dig("a:")
  88. call Put_Dig(":u")
  89. call Put_Dig("b:") " not defined
  90. call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
  91. " Cedilla
  92. call Put_Dig("',")
  93. call Put_Dig(",C")
  94. call Put_Dig("b,") " not defined
  95. call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
  96. " Underline
  97. call Put_Dig("B_")
  98. call Put_Dig("_t")
  99. call Put_Dig("a_") " not defined
  100. call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
  101. " Stroke
  102. call Put_Dig("j/")
  103. call Put_Dig("/l")
  104. call Put_Dig("b/") " not defined
  105. call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
  106. " Double acute
  107. call Put_Dig('O"')
  108. call Put_Dig('"y')
  109. call Put_Dig('b"') " not defined
  110. call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
  111. " Ogonek
  112. call Put_Dig('u;')
  113. call Put_Dig(';E')
  114. call Put_Dig('b;') " not defined
  115. call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
  116. " Caron
  117. call Put_Dig('u<')
  118. call Put_Dig('<E')
  119. call Put_Dig('b<') " not defined
  120. call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
  121. " Ring above
  122. call Put_Dig('u0')
  123. call Put_Dig('0E') " not defined
  124. call Put_Dig('b0') " not defined
  125. call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
  126. " Hook
  127. call Put_Dig('u2')
  128. call Put_Dig('2E')
  129. call Put_Dig('b2') " not defined
  130. call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
  131. " Horn
  132. call Put_Dig('u9')
  133. call Put_Dig('9E') " not defined
  134. call Put_Dig('b9') " not defined
  135. call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
  136. " Cyrillic
  137. call Put_Dig('u=')
  138. call Put_Dig('=b')
  139. call Put_Dig('=_')
  140. call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
  141. " Greek
  142. call Put_Dig('u*')
  143. call Put_Dig('*b')
  144. call Put_Dig('*_')
  145. call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
  146. " Greek/Cyrillic special
  147. call Put_Dig('u%')
  148. call Put_Dig('%b') " not defined
  149. call Put_Dig('%_') " not defined
  150. call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
  151. " Arabic
  152. call Put_Dig('u+')
  153. call Put_Dig('+b')
  154. call Put_Dig('+_') " japanese industrial symbol
  155. call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
  156. " Hebrew
  157. call Put_Dig('Q+')
  158. call Put_Dig('+B')
  159. call Put_Dig('+X')
  160. call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
  161. " Latin
  162. call Put_Dig('a3')
  163. call Put_Dig('A3')
  164. call Put_Dig('3X')
  165. call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
  166. " Bopomofo
  167. call Put_Dig('a4')
  168. call Put_Dig('A4')
  169. call Put_Dig('4X')
  170. call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
  171. " Hiragana
  172. call Put_Dig('a5')
  173. call Put_Dig('A5')
  174. call Put_Dig('5X')
  175. call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
  176. " Katakana
  177. call Put_Dig('a6')
  178. call Put_Dig('A6')
  179. call Put_Dig('6X')
  180. call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
  181. " Superscripts
  182. call Put_Dig('1S')
  183. call Put_Dig('2S')
  184. call Put_Dig('3S')
  185. call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
  186. " Subscripts
  187. call Put_Dig('1s')
  188. call Put_Dig('2s')
  189. call Put_Dig('3s')
  190. call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
  191. " Eszet (only lowercase)
  192. call Put_Dig("ss")
  193. call Put_Dig("SS") " start of string
  194. call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
  195. " High bit set
  196. call Put_Dig("a ")
  197. call Put_Dig(" A")
  198. call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
  199. " Escape is not part of a digraph
  200. call Put_Dig("a\<esc>")
  201. call Put_Dig("\<esc>A")
  202. call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
  203. " define some custom digraphs
  204. " old: 00 ∞
  205. " old: el l
  206. digraph 00 9216
  207. digraph el 0252
  208. call Put_Dig("00")
  209. call Put_Dig("el")
  210. " Reset digraphs
  211. digraph 00 8734
  212. digraph el 108
  213. call Put_Dig("00")
  214. call Put_Dig("el")
  215. call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
  216. call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
  217. call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
  218. call assert_fails('digraph xy z', 'E39:')
  219. call assert_fails('digraph x', 'E1214:')
  220. bw!
  221. endfunc
  222. func Test_digraphs_option()
  223. " reset whichwrap option, so that testing <esc><bs>A works,
  224. " without moving up a line
  225. set digraph ww=
  226. new
  227. call Put_Dig_BS("0","0")
  228. call assert_equal("∞", getline('.'))
  229. " not a digraph
  230. call Put_Dig_BS("e","l")
  231. call assert_equal("l", getline('.'))
  232. call Put_Dig_BS("h","t")
  233. call assert_equal("þ", getline('.'))
  234. " digraph "ab" is the same as "ba"
  235. call Put_Dig_BS("a","b")
  236. call Put_Dig_BS("b","a")
  237. call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
  238. " Euro sign
  239. call Put_Dig_BS("e","=")
  240. call Put_Dig_BS("=","e")
  241. call Put_Dig_BS("E","u")
  242. call Put_Dig_BS("u","E")
  243. call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
  244. " Rouble sign
  245. call Put_Dig_BS("R","=")
  246. call Put_Dig_BS("=","R")
  247. call Put_Dig_BS("=","P")
  248. call Put_Dig_BS("P","=")
  249. call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
  250. " Not a digraph: this is different from <c-k>!
  251. let _bs = &bs
  252. set bs=
  253. call Put_Dig_BS("a","\<bs>")
  254. call Put_Dig_BS("\<bs>","a")
  255. call assert_equal(['','a'], getline(line('.')-1,line('.')))
  256. let &bs = _bs
  257. " Grave
  258. call Put_Dig_BS("a","!")
  259. call Put_Dig_BS("!","e")
  260. call Put_Dig_BS("b","!") " not defined
  261. call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
  262. " Acute accent
  263. call Put_Dig_BS("a","'")
  264. call Put_Dig_BS("'","e")
  265. call Put_Dig_BS("b","'") " not defined
  266. call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
  267. " Cicumflex
  268. call Put_Dig_BS("a",">")
  269. call Put_Dig_BS(">","e")
  270. call Put_Dig_BS("b",">") " not defined
  271. call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
  272. " Tilde
  273. call Put_Dig_BS("o","~")
  274. call Put_Dig_BS("~","u") " not defined
  275. call Put_Dig_BS("z","~") " not defined
  276. call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
  277. " Tilde
  278. call Put_Dig_BS("o","?")
  279. call Put_Dig_BS("?","u")
  280. call Put_Dig_BS("z","?") " not defined
  281. call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
  282. " Macron
  283. call Put_Dig_BS("o","-")
  284. call Put_Dig_BS("-","u")
  285. call Put_Dig_BS("z","-") " not defined
  286. call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
  287. " Breve
  288. call Put_Dig_BS("o","(")
  289. call Put_Dig_BS("(","u")
  290. call Put_Dig_BS("z","(") " not defined
  291. call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
  292. " Dot above
  293. call Put_Dig_BS("b",".")
  294. call Put_Dig_BS(".","e")
  295. call Put_Dig_BS("a",".") " not defined
  296. call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
  297. " Diaeresis
  298. call Put_Dig_BS("a",":")
  299. call Put_Dig_BS(":","u")
  300. call Put_Dig_BS("b",":") " not defined
  301. call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
  302. " Cedilla
  303. call Put_Dig_BS("'",",")
  304. call Put_Dig_BS(",","C")
  305. call Put_Dig_BS("b",",") " not defined
  306. call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
  307. " Underline
  308. call Put_Dig_BS("B","_")
  309. call Put_Dig_BS("_","t")
  310. call Put_Dig_BS("a","_") " not defined
  311. call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
  312. " Stroke
  313. call Put_Dig_BS("j","/")
  314. call Put_Dig_BS("/","l")
  315. call Put_Dig_BS("b","/") " not defined
  316. call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
  317. " Double acute
  318. call Put_Dig_BS('O','"')
  319. call Put_Dig_BS('"','y')
  320. call Put_Dig_BS('b','"') " not defined
  321. call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
  322. " Ogonek
  323. call Put_Dig_BS('u',';')
  324. call Put_Dig_BS(';','E')
  325. call Put_Dig_BS('b',';') " not defined
  326. call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
  327. " Caron
  328. call Put_Dig_BS('u','<')
  329. call Put_Dig_BS('<','E')
  330. call Put_Dig_BS('b','<') " not defined
  331. call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
  332. " Ring above
  333. call Put_Dig_BS('u','0')
  334. call Put_Dig_BS('0','E') " not defined
  335. call Put_Dig_BS('b','0') " not defined
  336. call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
  337. " Hook
  338. call Put_Dig_BS('u','2')
  339. call Put_Dig_BS('2','E')
  340. call Put_Dig_BS('b','2') " not defined
  341. call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
  342. " Horn
  343. call Put_Dig_BS('u','9')
  344. call Put_Dig_BS('9','E') " not defined
  345. call Put_Dig_BS('b','9') " not defined
  346. call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
  347. " Cyrillic
  348. call Put_Dig_BS('u','=')
  349. call Put_Dig_BS('=','b')
  350. call Put_Dig_BS('=','_')
  351. call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
  352. " Greek
  353. call Put_Dig_BS('u','*')
  354. call Put_Dig_BS('*','b')
  355. call Put_Dig_BS('*','_')
  356. call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
  357. " Greek/Cyrillic special
  358. call Put_Dig_BS('u','%')
  359. call Put_Dig_BS('%','b') " not defined
  360. call Put_Dig_BS('%','_') " not defined
  361. call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
  362. " Arabic
  363. call Put_Dig_BS('u','+')
  364. call Put_Dig_BS('+','b')
  365. call Put_Dig_BS('+','_') " japanese industrial symbol
  366. call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
  367. " Hebrew
  368. call Put_Dig_BS('Q','+')
  369. call Put_Dig_BS('+','B')
  370. call Put_Dig_BS('+','X')
  371. call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
  372. " Latin
  373. call Put_Dig_BS('a','3')
  374. call Put_Dig_BS('A','3')
  375. call Put_Dig_BS('3','X')
  376. call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
  377. " Bopomofo
  378. call Put_Dig_BS('a','4')
  379. call Put_Dig_BS('A','4')
  380. call Put_Dig_BS('4','X')
  381. call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
  382. " Hiragana
  383. call Put_Dig_BS('a','5')
  384. call Put_Dig_BS('A','5')
  385. call Put_Dig_BS('5','X')
  386. call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
  387. " Katakana
  388. call Put_Dig_BS('a','6')
  389. call Put_Dig_BS('A','6')
  390. call Put_Dig_BS('6','X')
  391. call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
  392. " Superscripts
  393. call Put_Dig_BS('1','S')
  394. call Put_Dig_BS('2','S')
  395. call Put_Dig_BS('3','S')
  396. call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
  397. " Subscripts
  398. call Put_Dig_BS('1','s')
  399. call Put_Dig_BS('2','s')
  400. call Put_Dig_BS('3','s')
  401. call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
  402. " Eszet (only lowercase)
  403. call Put_Dig_BS("s","s")
  404. call Put_Dig_BS("S","S") " start of string
  405. call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
  406. " High bit set (different from <c-k>)
  407. call Put_Dig_BS("a"," ")
  408. call Put_Dig_BS(" ","A")
  409. call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
  410. " Escape is not part of a digraph (different from <c-k>)
  411. call Put_Dig_BS("a","\<esc>")
  412. call Put_Dig_BS("\<esc>","A")
  413. call assert_equal(['', ''], getline(line('.')-1,line('.')))
  414. " define some custom digraphs
  415. " old: 00 ∞
  416. " old: el l
  417. digraph 00 9216
  418. digraph el 0252
  419. call Put_Dig_BS("0","0")
  420. call Put_Dig_BS("e","l")
  421. " Reset digraphs
  422. digraph 00 8734
  423. digraph el 108
  424. call Put_Dig_BS("0","0")
  425. call Put_Dig_BS("e","l")
  426. call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
  427. set nodigraph ww&vim
  428. bw!
  429. endfunc
  430. func Test_digraphs_output()
  431. new
  432. let out = execute(':digraph')
  433. call assert_equal('Eu € 8364', matchstr(out, '\C\<Eu\D*8364\>'))
  434. call assert_equal('=e € 8364', matchstr(out, '\C=e\D*8364\>'))
  435. call assert_equal('=R ₽ 8381', matchstr(out, '\C=R\D*8381\>'))
  436. call assert_equal('=P ₽ 8381', matchstr(out, '\C=P\D*8381\>'))
  437. call assert_equal('o: ö 246', matchstr(out, '\C\<o:\D*246\>'))
  438. call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
  439. call assert_equal("'0 ˚ 730", matchstr(out, '\C''0\D*730\>'))
  440. call assert_equal('Z% Ж 1046', matchstr(out, '\C\<Z%\D*1046\>'))
  441. call assert_equal('u- ū 363', matchstr(out, '\C\<u-\D*363\>'))
  442. call assert_equal('SH ^A 1', matchstr(out, '\C\<SH\D*1\>'))
  443. call assert_notmatch('Latin supplement', out)
  444. let out_bang_without_custom = execute(':digraph!')
  445. digraph lt 60
  446. let out_bang_with_custom = execute(':digraph!')
  447. call assert_notmatch('lt', out_bang_without_custom)
  448. call assert_match("^\n"
  449. \ .. "NU ^@ 10 .*\n"
  450. \ .. "Latin supplement\n"
  451. \ .. "!I ¡ 161 .*\n"
  452. \ .. ".*\n"
  453. \ .. 'Custom\n.*\<lt < 60\>', out_bang_with_custom)
  454. bw!
  455. endfunc
  456. func Test_loadkeymap()
  457. CheckFeature keymap
  458. new
  459. set keymap=czech
  460. set iminsert=0
  461. call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
  462. call assert_equal("|'é+ěščřžýáíé'", getline('.'))
  463. " reset keymap and encoding option
  464. set keymap=
  465. bw!
  466. endfunc
  467. func Test_digraph_cmndline()
  468. " Create digraph on commandline
  469. call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
  470. call assert_equal('"€', @:)
  471. " Canceling a CTRL-K on the cmdline
  472. call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
  473. call assert_equal('"ab', @:)
  474. endfunc
  475. func Test_show_digraph()
  476. new
  477. call Put_Dig("e=")
  478. call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
  479. bwipe!
  480. endfunc
  481. func Test_show_digraph_cp1251()
  482. throw 'skipped: Nvim supports ''utf8'' encoding only'
  483. new
  484. set encoding=cp1251
  485. call Put_Dig("='")
  486. call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii'))
  487. set encoding=utf-8
  488. bwipe!
  489. endfunc
  490. " Test for error in a keymap file
  491. func Test_loadkeymap_error()
  492. CheckFeature keymap
  493. call assert_fails('loadkeymap', 'E105:')
  494. call writefile(['loadkeymap', 'a'], 'Xkeymap', 'D')
  495. call assert_fails('source Xkeymap', 'E791:')
  496. endfunc
  497. " Test for the characters displayed on the screen when entering a digraph
  498. func Test_entering_digraph()
  499. CheckRunVimInTerminal
  500. let buf = RunVimInTerminal('', {'rows': 6})
  501. call term_sendkeys(buf, "i\<C-K>")
  502. call term_wait(buf)
  503. call assert_equal('?', term_getline(buf, 1))
  504. call term_sendkeys(buf, "1")
  505. call term_wait(buf)
  506. call assert_equal('1', term_getline(buf, 1))
  507. call term_sendkeys(buf, "2")
  508. call term_wait(buf)
  509. call assert_equal('½', term_getline(buf, 1))
  510. call StopVimInTerminal(buf)
  511. endfunc
  512. func Test_digraph_set_function()
  513. new
  514. call digraph_set('aa', 'あ')
  515. call Put_Dig('aa')
  516. call assert_equal('あ', getline('$'))
  517. call digraph_set(' i', 'い')
  518. call Put_Dig(' i')
  519. call assert_equal('い', getline('$'))
  520. call digraph_set(' ', 'う')
  521. call Put_Dig(' ')
  522. call assert_equal('う', getline('$'))
  523. eval 'aa'->digraph_set('え')
  524. call Put_Dig('aa')
  525. call assert_equal('え', getline('$'))
  526. call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
  527. call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
  528. call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ')
  529. call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
  530. call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))', 'E1215: Digraph must be one character: か' .. nr2char(0x3099))
  531. call assert_fails('call digraph_set(v:_null_string, "い")', 'E1214: Digraph must be just two characters')
  532. call assert_fails('call digraph_set("aa", 0z10)', 'E976: Using a Blob as a String')
  533. bwipe!
  534. endfunc
  535. func Test_digraph_get_function()
  536. " Built-in digraphs
  537. call assert_equal('∞', digraph_get('00'))
  538. " User-defined digraphs
  539. call digraph_set('aa', 'あ')
  540. call digraph_set(' i', 'い')
  541. call digraph_set(' ', 'う')
  542. call assert_equal('あ', digraph_get('aa'))
  543. call assert_equal('あ', 'aa'->digraph_get())
  544. call assert_equal('い', digraph_get(' i'))
  545. call assert_equal('う', digraph_get(' '))
  546. call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
  547. call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
  548. call assert_fails('call digraph_get(v:_null_string)', 'E1214: Digraph must be just two characters:')
  549. call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
  550. endfunc
  551. func Test_digraph_get_function_encode()
  552. throw 'Skipped: Nvim does not support setting encoding=japan'
  553. CheckFeature iconv
  554. let testcases = {
  555. \'00': '∞',
  556. \'aa': 'あ',
  557. \}
  558. for [key, ch] in items(testcases)
  559. call digraph_set(key, ch)
  560. set encoding=japan
  561. call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
  562. set encoding=utf-8
  563. endfor
  564. endfunc
  565. func Test_digraph_setlist_function()
  566. call digraph_setlist([['aa', 'き'], ['bb', 'く']])
  567. call assert_equal('き', digraph_get('aa'))
  568. call assert_equal('く', digraph_get('bb'))
  569. call assert_fails('call digraph_setlist([[]])', 'E1216:')
  570. call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
  571. call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ')
  572. call assert_fails('call digraph_setlist([v:_null_list])', 'E1216:')
  573. call assert_fails('call digraph_setlist({})', 'E1216:')
  574. call assert_fails('call digraph_setlist([{}])', 'E1216:')
  575. call assert_true(digraph_setlist(v:_null_list))
  576. endfunc
  577. func Test_digraph_getlist_function()
  578. " Make sure user-defined digraphs are defined
  579. call digraph_setlist([['aa', 'き'], ['bb', 'く']])
  580. for pair in digraph_getlist(1)
  581. call assert_equal(pair[1], digraph_get(pair[0]))
  582. endfor
  583. " We don't know how many digraphs are registered before, so check the number
  584. " of digraphs returned.
  585. call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
  586. call assert_notequal(digraph_getlist()->len(), digraph_getlist(1)->len())
  587. call assert_equal(digraph_getlist()->len(), digraph_getlist(v:false)->len())
  588. call assert_notequal(digraph_getlist()->len(), digraph_getlist(v:true)->len())
  589. call assert_fails('call digraph_getlist(0z12)', 'E1212: Bool required for argument 1')
  590. endfunc
  591. " vim: shiftwidth=2 sts=2 expandtab