xref: /vim-8.2.3635/src/testdir/test_digraph.vim (revision fc3b7750)
1397eadbeSBram Moolenaar" Tests for digraphs
2397eadbeSBram Moolenaar
3b46fecd3SBram Moolenaarsource check.vim
4b46fecd3SBram MoolenaarCheckFeature digraphs
5845e0ee5SBram Moolenaarsource term_util.vim
6397eadbeSBram Moolenaar
75f73ef8dSBram Moolenaarfunc Put_Dig(chars)
8397eadbeSBram Moolenaar  exe "norm! o\<c-k>".a:chars
9397eadbeSBram Moolenaarendfu
10397eadbeSBram Moolenaar
115f73ef8dSBram Moolenaarfunc Put_Dig_BS(char1, char2)
12397eadbeSBram Moolenaar  exe "norm! o".a:char1."\<bs>".a:char2
13397eadbeSBram Moolenaarendfu
14397eadbeSBram Moolenaar
155f73ef8dSBram Moolenaarfunc Test_digraphs()
16397eadbeSBram Moolenaar  new
17397eadbeSBram Moolenaar  call Put_Dig("00")
18397eadbeSBram Moolenaar  call assert_equal("∞", getline('.'))
19397eadbeSBram Moolenaar  " not a digraph
20397eadbeSBram Moolenaar  call Put_Dig("el")
21397eadbeSBram Moolenaar  call assert_equal("l", getline('.'))
22397eadbeSBram Moolenaar  call Put_Dig("ht")
23397eadbeSBram Moolenaar  call assert_equal("þ", getline('.'))
24397eadbeSBram Moolenaar  " digraph "ab" is the same as "ba"
25397eadbeSBram Moolenaar  call Put_Dig("ab")
26397eadbeSBram Moolenaar  call Put_Dig("ba")
27397eadbeSBram Moolenaar  call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
28397eadbeSBram Moolenaar  " Euro sign
29397eadbeSBram Moolenaar  call Put_Dig("e=")
30397eadbeSBram Moolenaar  call Put_Dig("=e")
31397eadbeSBram Moolenaar  call Put_Dig("Eu")
32397eadbeSBram Moolenaar  call Put_Dig("uE")
33397eadbeSBram Moolenaar  call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
34397eadbeSBram Moolenaar  " Rouble sign
35397eadbeSBram Moolenaar  call Put_Dig("R=")
36397eadbeSBram Moolenaar  call Put_Dig("=R")
37397eadbeSBram Moolenaar  call Put_Dig("=P")
38397eadbeSBram Moolenaar  call Put_Dig("P=")
39397eadbeSBram Moolenaar  call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
40397eadbeSBram Moolenaar  " Not a digraph
41397eadbeSBram Moolenaar  call Put_Dig("a\<bs>")
42397eadbeSBram Moolenaar  call Put_Dig("\<bs>a")
43397eadbeSBram Moolenaar  call assert_equal(["<BS>", "<BS>a"], getline(line('.')-1,line('.')))
44397eadbeSBram Moolenaar  " Grave
45397eadbeSBram Moolenaar  call Put_Dig("a!")
46397eadbeSBram Moolenaar  call Put_Dig("!e")
47397eadbeSBram Moolenaar  call Put_Dig("b!") " not defined
48397eadbeSBram Moolenaar  call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
49397eadbeSBram Moolenaar  " Acute accent
50397eadbeSBram Moolenaar  call Put_Dig("a'")
51397eadbeSBram Moolenaar  call Put_Dig("'e")
52397eadbeSBram Moolenaar  call Put_Dig("b'") " not defined
53397eadbeSBram Moolenaar  call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
54397eadbeSBram Moolenaar  " Cicumflex
55397eadbeSBram Moolenaar  call Put_Dig("a>")
56397eadbeSBram Moolenaar  call Put_Dig(">e")
57397eadbeSBram Moolenaar  call Put_Dig("b>") " not defined
58397eadbeSBram Moolenaar  call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
59397eadbeSBram Moolenaar  " Tilde
60397eadbeSBram Moolenaar  call Put_Dig("o~")
61397eadbeSBram Moolenaar  call Put_Dig("~u") " not defined
62397eadbeSBram Moolenaar  call Put_Dig("z~") " not defined
63397eadbeSBram Moolenaar  call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
64397eadbeSBram Moolenaar  " Tilde
65397eadbeSBram Moolenaar  call Put_Dig("o?")
66397eadbeSBram Moolenaar  call Put_Dig("?u")
67397eadbeSBram Moolenaar  call Put_Dig("z?") " not defined
68397eadbeSBram Moolenaar  call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
69397eadbeSBram Moolenaar  " Macron
70397eadbeSBram Moolenaar  call Put_Dig("o-")
71397eadbeSBram Moolenaar  call Put_Dig("-u")
72397eadbeSBram Moolenaar  call Put_Dig("z-") " not defined
73397eadbeSBram Moolenaar  call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
74397eadbeSBram Moolenaar  " Breve
75397eadbeSBram Moolenaar  call Put_Dig("o(")
76397eadbeSBram Moolenaar  call Put_Dig("(u")
77397eadbeSBram Moolenaar  call Put_Dig("z(") " not defined
78397eadbeSBram Moolenaar  call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
79397eadbeSBram Moolenaar  " Dot above
80397eadbeSBram Moolenaar  call Put_Dig("b.")
81397eadbeSBram Moolenaar  call Put_Dig(".e")
82397eadbeSBram Moolenaar  call Put_Dig("a.") " not defined
83397eadbeSBram Moolenaar  call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
844b96df5aSBram Moolenaar  " Diaeresis
85397eadbeSBram Moolenaar  call Put_Dig("a:")
86397eadbeSBram Moolenaar  call Put_Dig(":u")
87397eadbeSBram Moolenaar  call Put_Dig("b:") " not defined
88397eadbeSBram Moolenaar  call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
89397eadbeSBram Moolenaar  " Cedilla
90397eadbeSBram Moolenaar  call Put_Dig("',")
91397eadbeSBram Moolenaar  call Put_Dig(",C")
92397eadbeSBram Moolenaar  call Put_Dig("b,") " not defined
93397eadbeSBram Moolenaar  call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
94397eadbeSBram Moolenaar  " Underline
95397eadbeSBram Moolenaar  call Put_Dig("B_")
96397eadbeSBram Moolenaar  call Put_Dig("_t")
97397eadbeSBram Moolenaar  call Put_Dig("a_") " not defined
98397eadbeSBram Moolenaar  call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
99397eadbeSBram Moolenaar  " Stroke
100397eadbeSBram Moolenaar  call Put_Dig("j/")
101397eadbeSBram Moolenaar  call Put_Dig("/l")
102397eadbeSBram Moolenaar  call Put_Dig("b/") " not defined
103397eadbeSBram Moolenaar  call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
104397eadbeSBram Moolenaar  " Double acute
105397eadbeSBram Moolenaar  call Put_Dig('O"')
106397eadbeSBram Moolenaar  call Put_Dig('"y')
107397eadbeSBram Moolenaar  call Put_Dig('b"') " not defined
108397eadbeSBram Moolenaar  call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
109397eadbeSBram Moolenaar  " Ogonek
110397eadbeSBram Moolenaar  call Put_Dig('u;')
111397eadbeSBram Moolenaar  call Put_Dig(';E')
112397eadbeSBram Moolenaar  call Put_Dig('b;') " not defined
113397eadbeSBram Moolenaar  call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
114397eadbeSBram Moolenaar  " Caron
115397eadbeSBram Moolenaar  call Put_Dig('u<')
116397eadbeSBram Moolenaar  call Put_Dig('<E')
117397eadbeSBram Moolenaar  call Put_Dig('b<') " not defined
118397eadbeSBram Moolenaar  call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
119397eadbeSBram Moolenaar  " Ring above
120397eadbeSBram Moolenaar  call Put_Dig('u0')
121397eadbeSBram Moolenaar  call Put_Dig('0E') " not defined
122397eadbeSBram Moolenaar  call Put_Dig('b0') " not defined
123397eadbeSBram Moolenaar  call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
124397eadbeSBram Moolenaar  " Hook
125397eadbeSBram Moolenaar  call Put_Dig('u2')
126397eadbeSBram Moolenaar  call Put_Dig('2E')
127397eadbeSBram Moolenaar  call Put_Dig('b2') " not defined
128397eadbeSBram Moolenaar  call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
129397eadbeSBram Moolenaar  " Horn
130397eadbeSBram Moolenaar  call Put_Dig('u9')
131397eadbeSBram Moolenaar  call Put_Dig('9E') " not defined
132397eadbeSBram Moolenaar  call Put_Dig('b9') " not defined
133397eadbeSBram Moolenaar  call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
134397eadbeSBram Moolenaar  " Cyrillic
135397eadbeSBram Moolenaar  call Put_Dig('u=')
136397eadbeSBram Moolenaar  call Put_Dig('=b')
137397eadbeSBram Moolenaar  call Put_Dig('=_')
138397eadbeSBram Moolenaar  call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
139397eadbeSBram Moolenaar  " Greek
140397eadbeSBram Moolenaar  call Put_Dig('u*')
141397eadbeSBram Moolenaar  call Put_Dig('*b')
142397eadbeSBram Moolenaar  call Put_Dig('*_')
143397eadbeSBram Moolenaar  call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
144397eadbeSBram Moolenaar  " Greek/Cyrillic special
145397eadbeSBram Moolenaar  call Put_Dig('u%')
146397eadbeSBram Moolenaar  call Put_Dig('%b') " not defined
147397eadbeSBram Moolenaar  call Put_Dig('%_') " not defined
148397eadbeSBram Moolenaar  call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
149397eadbeSBram Moolenaar  " Arabic
150397eadbeSBram Moolenaar  call Put_Dig('u+')
151397eadbeSBram Moolenaar  call Put_Dig('+b')
152397eadbeSBram Moolenaar  call Put_Dig('+_') " japanese industrial symbol
153397eadbeSBram Moolenaar  call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
154397eadbeSBram Moolenaar  " Hebrew
155397eadbeSBram Moolenaar  call Put_Dig('Q+')
156397eadbeSBram Moolenaar  call Put_Dig('+B')
157397eadbeSBram Moolenaar  call Put_Dig('+X')
158397eadbeSBram Moolenaar  call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
159397eadbeSBram Moolenaar  " Latin
160397eadbeSBram Moolenaar  call Put_Dig('a3')
161397eadbeSBram Moolenaar  call Put_Dig('A3')
162397eadbeSBram Moolenaar  call Put_Dig('3X')
163397eadbeSBram Moolenaar  call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
164397eadbeSBram Moolenaar  " Bopomofo
165397eadbeSBram Moolenaar  call Put_Dig('a4')
166397eadbeSBram Moolenaar  call Put_Dig('A4')
167397eadbeSBram Moolenaar  call Put_Dig('4X')
168397eadbeSBram Moolenaar  call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
169397eadbeSBram Moolenaar  " Hiragana
170397eadbeSBram Moolenaar  call Put_Dig('a5')
171397eadbeSBram Moolenaar  call Put_Dig('A5')
172397eadbeSBram Moolenaar  call Put_Dig('5X')
173397eadbeSBram Moolenaar  call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
174397eadbeSBram Moolenaar  " Katakana
175397eadbeSBram Moolenaar  call Put_Dig('a6')
176397eadbeSBram Moolenaar  call Put_Dig('A6')
177397eadbeSBram Moolenaar  call Put_Dig('6X')
178397eadbeSBram Moolenaar  call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
179397eadbeSBram Moolenaar  " Superscripts
180397eadbeSBram Moolenaar  call Put_Dig('1S')
181397eadbeSBram Moolenaar  call Put_Dig('2S')
182397eadbeSBram Moolenaar  call Put_Dig('3S')
183397eadbeSBram Moolenaar  call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
184397eadbeSBram Moolenaar  " Subscripts
185397eadbeSBram Moolenaar  call Put_Dig('1s')
186397eadbeSBram Moolenaar  call Put_Dig('2s')
187397eadbeSBram Moolenaar  call Put_Dig('3s')
188397eadbeSBram Moolenaar  call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
189397eadbeSBram Moolenaar  " Eszet (only lowercase)
190397eadbeSBram Moolenaar  call Put_Dig("ss")
191397eadbeSBram Moolenaar  call Put_Dig("SS") " start of string
192397eadbeSBram Moolenaar  call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
193397eadbeSBram Moolenaar  " High bit set
194397eadbeSBram Moolenaar  call Put_Dig("a ")
195397eadbeSBram Moolenaar  call Put_Dig(" A")
196397eadbeSBram Moolenaar  call assert_equal(['á', 'Á'], getline(line('.')-1,line('.')))
197397eadbeSBram Moolenaar  " Escape is not part of a digraph
198397eadbeSBram Moolenaar  call Put_Dig("a\<esc>")
199397eadbeSBram Moolenaar  call Put_Dig("\<esc>A")
200397eadbeSBram Moolenaar  call assert_equal(['', 'A'], getline(line('.')-1,line('.')))
201397eadbeSBram Moolenaar  " define some custom digraphs
202397eadbeSBram Moolenaar  " old: 00 ∞
203397eadbeSBram Moolenaar  " old: el l
204397eadbeSBram Moolenaar  digraph 00 9216
205397eadbeSBram Moolenaar  digraph el 0252
206397eadbeSBram Moolenaar  call Put_Dig("00")
207397eadbeSBram Moolenaar  call Put_Dig("el")
208397eadbeSBram Moolenaar  " Reset digraphs
209397eadbeSBram Moolenaar  digraph 00 8734
210397eadbeSBram Moolenaar  digraph el 108
211397eadbeSBram Moolenaar  call Put_Dig("00")
212397eadbeSBram Moolenaar  call Put_Dig("el")
213397eadbeSBram Moolenaar  call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
214ee4e0c1eSBram Moolenaar  call assert_fails('exe "digraph a\<Esc> 100"', 'E104:')
215ee4e0c1eSBram Moolenaar  call assert_fails('exe "digraph \<Esc>a 100"', 'E104:')
216067297e1SBram Moolenaar  call assert_fails('digraph xy z', 'E39:')
2176106504eSmityu  call assert_fails('digraph x', 'E1214:')
218397eadbeSBram Moolenaar  bw!
219397eadbeSBram Moolenaarendfunc
220397eadbeSBram Moolenaar
2215f73ef8dSBram Moolenaarfunc Test_digraphs_option()
222397eadbeSBram Moolenaar  " reset whichwrap option, so that testing <esc><bs>A works,
223397eadbeSBram Moolenaar  " without moving up a line
224dfd63e30SBram Moolenaar  set digraph ww=
225397eadbeSBram Moolenaar  new
226397eadbeSBram Moolenaar  call Put_Dig_BS("0","0")
227397eadbeSBram Moolenaar  call assert_equal("∞", getline('.'))
228397eadbeSBram Moolenaar  " not a digraph
229397eadbeSBram Moolenaar  call Put_Dig_BS("e","l")
230397eadbeSBram Moolenaar  call assert_equal("l", getline('.'))
231397eadbeSBram Moolenaar  call Put_Dig_BS("h","t")
232397eadbeSBram Moolenaar  call assert_equal("þ", getline('.'))
233397eadbeSBram Moolenaar  " digraph "ab" is the same as "ba"
234397eadbeSBram Moolenaar  call Put_Dig_BS("a","b")
235397eadbeSBram Moolenaar  call Put_Dig_BS("b","a")
236397eadbeSBram Moolenaar  call assert_equal(["ば","ば"], getline(line('.')-1,line('.')))
237397eadbeSBram Moolenaar  " Euro sign
238397eadbeSBram Moolenaar  call Put_Dig_BS("e","=")
239397eadbeSBram Moolenaar  call Put_Dig_BS("=","e")
240397eadbeSBram Moolenaar  call Put_Dig_BS("E","u")
241397eadbeSBram Moolenaar  call Put_Dig_BS("u","E")
242397eadbeSBram Moolenaar  call assert_equal(['е']+repeat(["€"],3), getline(line('.')-3,line('.')))
243397eadbeSBram Moolenaar  " Rouble sign
244397eadbeSBram Moolenaar  call Put_Dig_BS("R","=")
245397eadbeSBram Moolenaar  call Put_Dig_BS("=","R")
246397eadbeSBram Moolenaar  call Put_Dig_BS("=","P")
247397eadbeSBram Moolenaar  call Put_Dig_BS("P","=")
248397eadbeSBram Moolenaar  call assert_equal(['Р']+repeat(["₽"],2)+['П'], getline(line('.')-3,line('.')))
249397eadbeSBram Moolenaar  " Not a digraph: this is different from <c-k>!
250397eadbeSBram Moolenaar  call Put_Dig_BS("a","\<bs>")
251397eadbeSBram Moolenaar  call Put_Dig_BS("\<bs>","a")
252397eadbeSBram Moolenaar  call assert_equal(['','a'], getline(line('.')-1,line('.')))
253397eadbeSBram Moolenaar  " Grave
254397eadbeSBram Moolenaar  call Put_Dig_BS("a","!")
255397eadbeSBram Moolenaar  call Put_Dig_BS("!","e")
256397eadbeSBram Moolenaar  call Put_Dig_BS("b","!") " not defined
257397eadbeSBram Moolenaar  call assert_equal(["à", "è", "!"], getline(line('.')-2,line('.')))
258397eadbeSBram Moolenaar  " Acute accent
259397eadbeSBram Moolenaar  call Put_Dig_BS("a","'")
260397eadbeSBram Moolenaar  call Put_Dig_BS("'","e")
261397eadbeSBram Moolenaar  call Put_Dig_BS("b","'") " not defined
262397eadbeSBram Moolenaar  call assert_equal(["á", "é", "'"], getline(line('.')-2,line('.')))
263397eadbeSBram Moolenaar  " Cicumflex
264397eadbeSBram Moolenaar  call Put_Dig_BS("a",">")
265397eadbeSBram Moolenaar  call Put_Dig_BS(">","e")
266397eadbeSBram Moolenaar  call Put_Dig_BS("b",">") " not defined
267397eadbeSBram Moolenaar  call assert_equal(['â', 'ê', '>'], getline(line('.')-2,line('.')))
268397eadbeSBram Moolenaar  " Tilde
269397eadbeSBram Moolenaar  call Put_Dig_BS("o","~")
270397eadbeSBram Moolenaar  call Put_Dig_BS("~","u") " not defined
271397eadbeSBram Moolenaar  call Put_Dig_BS("z","~") " not defined
272397eadbeSBram Moolenaar  call assert_equal(['õ', 'u', '~'], getline(line('.')-2,line('.')))
273397eadbeSBram Moolenaar  " Tilde
274397eadbeSBram Moolenaar  call Put_Dig_BS("o","?")
275397eadbeSBram Moolenaar  call Put_Dig_BS("?","u")
276397eadbeSBram Moolenaar  call Put_Dig_BS("z","?") " not defined
277397eadbeSBram Moolenaar  call assert_equal(['õ', 'ũ', '?'], getline(line('.')-2,line('.')))
278397eadbeSBram Moolenaar  " Macron
279397eadbeSBram Moolenaar  call Put_Dig_BS("o","-")
280397eadbeSBram Moolenaar  call Put_Dig_BS("-","u")
281397eadbeSBram Moolenaar  call Put_Dig_BS("z","-") " not defined
282397eadbeSBram Moolenaar  call assert_equal(['ō', 'ū', '-'], getline(line('.')-2,line('.')))
283397eadbeSBram Moolenaar  " Breve
284397eadbeSBram Moolenaar  call Put_Dig_BS("o","(")
285397eadbeSBram Moolenaar  call Put_Dig_BS("(","u")
286397eadbeSBram Moolenaar  call Put_Dig_BS("z","(") " not defined
287397eadbeSBram Moolenaar  call assert_equal(['ŏ', 'ŭ', '('], getline(line('.')-2,line('.')))
288397eadbeSBram Moolenaar  " Dot above
289397eadbeSBram Moolenaar  call Put_Dig_BS("b",".")
290397eadbeSBram Moolenaar  call Put_Dig_BS(".","e")
291397eadbeSBram Moolenaar  call Put_Dig_BS("a",".") " not defined
292397eadbeSBram Moolenaar  call assert_equal(['ḃ', 'ė', '.'], getline(line('.')-2,line('.')))
2934b96df5aSBram Moolenaar  " Diaeresis
294397eadbeSBram Moolenaar  call Put_Dig_BS("a",":")
295397eadbeSBram Moolenaar  call Put_Dig_BS(":","u")
296397eadbeSBram Moolenaar  call Put_Dig_BS("b",":") " not defined
297397eadbeSBram Moolenaar  call assert_equal(['ä', 'ü', ':'], getline(line('.')-2,line('.')))
298397eadbeSBram Moolenaar  " Cedilla
299397eadbeSBram Moolenaar  call Put_Dig_BS("'",",")
300397eadbeSBram Moolenaar  call Put_Dig_BS(",","C")
301397eadbeSBram Moolenaar  call Put_Dig_BS("b",",") " not defined
302397eadbeSBram Moolenaar  call assert_equal(['¸', 'Ç', ','], getline(line('.')-2,line('.')))
303397eadbeSBram Moolenaar  " Underline
304397eadbeSBram Moolenaar  call Put_Dig_BS("B","_")
305397eadbeSBram Moolenaar  call Put_Dig_BS("_","t")
306397eadbeSBram Moolenaar  call Put_Dig_BS("a","_") " not defined
307397eadbeSBram Moolenaar  call assert_equal(['Ḇ', 'ṯ', '_'], getline(line('.')-2,line('.')))
308397eadbeSBram Moolenaar  " Stroke
309397eadbeSBram Moolenaar  call Put_Dig_BS("j","/")
310397eadbeSBram Moolenaar  call Put_Dig_BS("/","l")
311397eadbeSBram Moolenaar  call Put_Dig_BS("b","/") " not defined
312397eadbeSBram Moolenaar  call assert_equal(['/', 'ł', '/'], getline(line('.')-2,line('.')))
313397eadbeSBram Moolenaar  " Double acute
314397eadbeSBram Moolenaar  call Put_Dig_BS('O','"')
315397eadbeSBram Moolenaar  call Put_Dig_BS('"','y')
316397eadbeSBram Moolenaar  call Put_Dig_BS('b','"') " not defined
317397eadbeSBram Moolenaar  call assert_equal(['Ő', 'ÿ', '"'], getline(line('.')-2,line('.')))
318397eadbeSBram Moolenaar  " Ogonek
319397eadbeSBram Moolenaar  call Put_Dig_BS('u',';')
320397eadbeSBram Moolenaar  call Put_Dig_BS(';','E')
321397eadbeSBram Moolenaar  call Put_Dig_BS('b',';') " not defined
322397eadbeSBram Moolenaar  call assert_equal(['ų', 'Ę', ';'], getline(line('.')-2,line('.')))
323397eadbeSBram Moolenaar  " Caron
324397eadbeSBram Moolenaar  call Put_Dig_BS('u','<')
325397eadbeSBram Moolenaar  call Put_Dig_BS('<','E')
326397eadbeSBram Moolenaar  call Put_Dig_BS('b','<') " not defined
327397eadbeSBram Moolenaar  call assert_equal(['ǔ', 'Ě', '<'], getline(line('.')-2,line('.')))
328397eadbeSBram Moolenaar  " Ring above
329397eadbeSBram Moolenaar  call Put_Dig_BS('u','0')
330397eadbeSBram Moolenaar  call Put_Dig_BS('0','E') " not defined
331397eadbeSBram Moolenaar  call Put_Dig_BS('b','0') " not defined
332397eadbeSBram Moolenaar  call assert_equal(['ů', 'E', '0'], getline(line('.')-2,line('.')))
333397eadbeSBram Moolenaar  " Hook
334397eadbeSBram Moolenaar  call Put_Dig_BS('u','2')
335397eadbeSBram Moolenaar  call Put_Dig_BS('2','E')
336397eadbeSBram Moolenaar  call Put_Dig_BS('b','2') " not defined
337397eadbeSBram Moolenaar  call assert_equal(['ủ', 'Ẻ', '2'], getline(line('.')-2,line('.')))
338397eadbeSBram Moolenaar  " Horn
339397eadbeSBram Moolenaar  call Put_Dig_BS('u','9')
340397eadbeSBram Moolenaar  call Put_Dig_BS('9','E') " not defined
341397eadbeSBram Moolenaar  call Put_Dig_BS('b','9') " not defined
342397eadbeSBram Moolenaar  call assert_equal(['ư', 'E', '9'], getline(line('.')-2,line('.')))
343397eadbeSBram Moolenaar  " Cyrillic
344397eadbeSBram Moolenaar  call Put_Dig_BS('u','=')
345397eadbeSBram Moolenaar  call Put_Dig_BS('=','b')
346397eadbeSBram Moolenaar  call Put_Dig_BS('=','_')
347397eadbeSBram Moolenaar  call assert_equal(['у', 'б', '〓'], getline(line('.')-2,line('.')))
348397eadbeSBram Moolenaar  " Greek
349397eadbeSBram Moolenaar  call Put_Dig_BS('u','*')
350397eadbeSBram Moolenaar  call Put_Dig_BS('*','b')
351397eadbeSBram Moolenaar  call Put_Dig_BS('*','_')
352397eadbeSBram Moolenaar  call assert_equal(['υ', 'β', '々'], getline(line('.')-2,line('.')))
353397eadbeSBram Moolenaar  " Greek/Cyrillic special
354397eadbeSBram Moolenaar  call Put_Dig_BS('u','%')
355397eadbeSBram Moolenaar  call Put_Dig_BS('%','b') " not defined
356397eadbeSBram Moolenaar  call Put_Dig_BS('%','_') " not defined
357397eadbeSBram Moolenaar  call assert_equal(['ύ', 'b', '_'], getline(line('.')-2,line('.')))
358397eadbeSBram Moolenaar  " Arabic
359397eadbeSBram Moolenaar  call Put_Dig_BS('u','+')
360397eadbeSBram Moolenaar  call Put_Dig_BS('+','b')
361397eadbeSBram Moolenaar  call Put_Dig_BS('+','_') " japanese industrial symbol
362397eadbeSBram Moolenaar  call assert_equal(['+', 'ب', '〄'], getline(line('.')-2,line('.')))
363397eadbeSBram Moolenaar  " Hebrew
364397eadbeSBram Moolenaar  call Put_Dig_BS('Q','+')
365397eadbeSBram Moolenaar  call Put_Dig_BS('+','B')
366397eadbeSBram Moolenaar  call Put_Dig_BS('+','X')
367397eadbeSBram Moolenaar  call assert_equal(['ק', 'ב', 'ח'], getline(line('.')-2,line('.')))
368397eadbeSBram Moolenaar  " Latin
369397eadbeSBram Moolenaar  call Put_Dig_BS('a','3')
370397eadbeSBram Moolenaar  call Put_Dig_BS('A','3')
371397eadbeSBram Moolenaar  call Put_Dig_BS('3','X')
372397eadbeSBram Moolenaar  call assert_equal(['ǣ', 'Ǣ', 'X'], getline(line('.')-2,line('.')))
373397eadbeSBram Moolenaar  " Bopomofo
374397eadbeSBram Moolenaar  call Put_Dig_BS('a','4')
375397eadbeSBram Moolenaar  call Put_Dig_BS('A','4')
376397eadbeSBram Moolenaar  call Put_Dig_BS('4','X')
377397eadbeSBram Moolenaar  call assert_equal(['ㄚ', '4', 'X'], getline(line('.')-2,line('.')))
378397eadbeSBram Moolenaar  " Hiragana
379397eadbeSBram Moolenaar  call Put_Dig_BS('a','5')
380397eadbeSBram Moolenaar  call Put_Dig_BS('A','5')
381397eadbeSBram Moolenaar  call Put_Dig_BS('5','X')
382397eadbeSBram Moolenaar  call assert_equal(['あ', 'ぁ', 'X'], getline(line('.')-2,line('.')))
383397eadbeSBram Moolenaar  " Katakana
384397eadbeSBram Moolenaar  call Put_Dig_BS('a','6')
385397eadbeSBram Moolenaar  call Put_Dig_BS('A','6')
386397eadbeSBram Moolenaar  call Put_Dig_BS('6','X')
387397eadbeSBram Moolenaar  call assert_equal(['ァ', 'ア', 'X'], getline(line('.')-2,line('.')))
388397eadbeSBram Moolenaar  " Superscripts
389397eadbeSBram Moolenaar  call Put_Dig_BS('1','S')
390397eadbeSBram Moolenaar  call Put_Dig_BS('2','S')
391397eadbeSBram Moolenaar  call Put_Dig_BS('3','S')
392397eadbeSBram Moolenaar  call assert_equal(['¹', '²', '³'], getline(line('.')-2,line('.')))
393397eadbeSBram Moolenaar  " Subscripts
394397eadbeSBram Moolenaar  call Put_Dig_BS('1','s')
395397eadbeSBram Moolenaar  call Put_Dig_BS('2','s')
396397eadbeSBram Moolenaar  call Put_Dig_BS('3','s')
397397eadbeSBram Moolenaar  call assert_equal(['₁', '₂', '₃'], getline(line('.')-2,line('.')))
398397eadbeSBram Moolenaar  " Eszet (only lowercase)
399397eadbeSBram Moolenaar  call Put_Dig_BS("s","s")
400397eadbeSBram Moolenaar  call Put_Dig_BS("S","S") " start of string
401397eadbeSBram Moolenaar  call assert_equal(["ß", "˜"], getline(line('.')-1,line('.')))
402397eadbeSBram Moolenaar  " High bit set (different from <c-k>)
403397eadbeSBram Moolenaar  call Put_Dig_BS("a"," ")
404397eadbeSBram Moolenaar  call Put_Dig_BS(" ","A")
405397eadbeSBram Moolenaar  call assert_equal([' ', 'A'], getline(line('.')-1,line('.')))
406397eadbeSBram Moolenaar  " Escape is not part of a digraph (different from <c-k>)
407397eadbeSBram Moolenaar  call Put_Dig_BS("a","\<esc>")
408397eadbeSBram Moolenaar  call Put_Dig_BS("\<esc>","A")
409397eadbeSBram Moolenaar  call assert_equal(['', ''], getline(line('.')-1,line('.')))
410397eadbeSBram Moolenaar  " define some custom digraphs
411397eadbeSBram Moolenaar  " old: 00 ∞
412397eadbeSBram Moolenaar  " old: el l
413397eadbeSBram Moolenaar  digraph 00 9216
414397eadbeSBram Moolenaar  digraph el 0252
415397eadbeSBram Moolenaar  call Put_Dig_BS("0","0")
416397eadbeSBram Moolenaar  call Put_Dig_BS("e","l")
417397eadbeSBram Moolenaar  " Reset digraphs
418397eadbeSBram Moolenaar  digraph 00 8734
419397eadbeSBram Moolenaar  digraph el 108
420397eadbeSBram Moolenaar  call Put_Dig_BS("0","0")
421397eadbeSBram Moolenaar  call Put_Dig_BS("e","l")
422397eadbeSBram Moolenaar  call assert_equal(['␀', 'ü', '∞', 'l'], getline(line('.')-3,line('.')))
423397eadbeSBram Moolenaar  set nodigraph ww&vim
424397eadbeSBram Moolenaar  bw!
425397eadbeSBram Moolenaarendfunc
426397eadbeSBram Moolenaar
4275f73ef8dSBram Moolenaarfunc Test_digraphs_output()
428e25bc5abSBram Moolenaar  new
429e25bc5abSBram Moolenaar  let out = execute(':digraph')
430e25bc5abSBram Moolenaar  call assert_equal('Eu €  8364',  matchstr(out, '\C\<Eu\D*8364\>'))
431e25bc5abSBram Moolenaar  call assert_equal('=e €  8364',  matchstr(out, '\C=e\D*8364\>'))
432e25bc5abSBram Moolenaar  call assert_equal('=R ₽  8381',  matchstr(out, '\C=R\D*8381\>'))
433e25bc5abSBram Moolenaar  call assert_equal('=P ₽  8381',  matchstr(out, '\C=P\D*8381\>'))
434e25bc5abSBram Moolenaar  call assert_equal('o: ö  246',   matchstr(out, '\C\<o:\D*246\>'))
435e25bc5abSBram Moolenaar  call assert_equal('v4 ㄪ 12586', matchstr(out, '\C\<v4\D*12586\>'))
436e25bc5abSBram Moolenaar  call assert_equal("'0 ˚  730",   matchstr(out, '\C''0\D*730\>'))
437e25bc5abSBram Moolenaar  call assert_equal('Z% Ж  1046',  matchstr(out, '\C\<Z%\D*1046\>'))
438e25bc5abSBram Moolenaar  call assert_equal('u- ū  363',   matchstr(out, '\C\<u-\D*363\>'))
439e25bc5abSBram Moolenaar  call assert_equal('SH ^A   1',   matchstr(out, '\C\<SH\D*1\>'))
440e3242346SBram Moolenaar  call assert_notmatch('Latin supplement', out)
441e3242346SBram Moolenaar
442e3242346SBram Moolenaar  let out_bang_without_custom = execute(':digraph!')
443e3242346SBram Moolenaar  digraph lt 60
444e3242346SBram Moolenaar  let out_bang_with_custom = execute(':digraph!')
445e3242346SBram Moolenaar  call assert_notmatch('lt', out_bang_without_custom)
446e3242346SBram Moolenaar  call assert_match("^\n"
447e3242346SBram Moolenaar        \        .. "NU ^@  10 .*\n"
448e3242346SBram Moolenaar        \        .. "Latin supplement\n"
449e3242346SBram Moolenaar        \        .. "!I ¡  161 .*\n"
450e3242346SBram Moolenaar        \        .. ".*\n"
451e3242346SBram Moolenaar        \        .. 'Custom\n.*\<lt <   60\>', out_bang_with_custom)
452e25bc5abSBram Moolenaar  bw!
453e25bc5abSBram Moolenaarendfunc
454e25bc5abSBram Moolenaar
4555f73ef8dSBram Moolenaarfunc Test_loadkeymap()
4566d91bcb4SBram Moolenaar  CheckFeature keymap
457e25bc5abSBram Moolenaar  new
458e25bc5abSBram Moolenaar  set keymap=czech
459e25bc5abSBram Moolenaar  set iminsert=0
460e25bc5abSBram Moolenaar  call feedkeys("o|\<c-^>|01234567890|\<esc>", 'tx')
461e25bc5abSBram Moolenaar  call assert_equal("|'é+ěščřžýáíé'", getline('.'))
462e25bc5abSBram Moolenaar  " reset keymap and encoding option
463e25bc5abSBram Moolenaar  set keymap=
464e25bc5abSBram Moolenaar  bw!
465e25bc5abSBram Moolenaarendfunc
466e25bc5abSBram Moolenaar
4675f73ef8dSBram Moolenaarfunc Test_digraph_cmndline()
468e25bc5abSBram Moolenaar  " Create digraph on commandline
46991ffc8a5SBram Moolenaar  call feedkeys(":\"\<c-k>Eu\<cr>", 'xt')
47091ffc8a5SBram Moolenaar  call assert_equal('"€', @:)
47191ffc8a5SBram Moolenaar
47291ffc8a5SBram Moolenaar  " Canceling a CTRL-K on the cmdline
47391ffc8a5SBram Moolenaar  call feedkeys(":\"a\<c-k>\<esc>b\<cr>", 'xt')
47491ffc8a5SBram Moolenaar  call assert_equal('"ab', @:)
475e25bc5abSBram Moolenaarendfunc
476e25bc5abSBram Moolenaar
4775f73ef8dSBram Moolenaarfunc Test_show_digraph()
4785f73ef8dSBram Moolenaar  new
4795f73ef8dSBram Moolenaar  call Put_Dig("e=")
4805f73ef8dSBram Moolenaar  call assert_equal("\n<е> 1077, Hex 0435, Oct 2065, Digr e=", execute('ascii'))
4815f73ef8dSBram Moolenaar  bwipe!
4825f73ef8dSBram Moolenaarendfunc
4835f73ef8dSBram Moolenaar
484bc5020aaSBram Moolenaarfunc Test_show_digraph_cp1251()
485bc5020aaSBram Moolenaar  new
486bc5020aaSBram Moolenaar  set encoding=cp1251
487bc5020aaSBram Moolenaar  call Put_Dig("='")
488bc5020aaSBram Moolenaar  call assert_equal("\n<\xfa>  <|z>  <M-z>  250,  Hex fa,  Oct 372, Digr ='", execute('ascii'))
489bc5020aaSBram Moolenaar  set encoding=utf-8
490bc5020aaSBram Moolenaar  bwipe!
491bc5020aaSBram Moolenaarendfunc
492bc5020aaSBram Moolenaar
493ee4e0c1eSBram Moolenaar" Test for error in a keymap file
494ee4e0c1eSBram Moolenaarfunc Test_loadkeymap_error()
4956d91bcb4SBram Moolenaar  CheckFeature keymap
496ee4e0c1eSBram Moolenaar  call assert_fails('loadkeymap', 'E105:')
497ee4e0c1eSBram Moolenaar  call writefile(['loadkeymap', 'a'], 'Xkeymap')
498ee4e0c1eSBram Moolenaar  call assert_fails('source Xkeymap', 'E791:')
499ee4e0c1eSBram Moolenaar  call delete('Xkeymap')
500ee4e0c1eSBram Moolenaarendfunc
501ee4e0c1eSBram Moolenaar
5028c524f76SBram Moolenaar" Test for the characters displayed on the screen when entering a digraph
503845e0ee5SBram Moolenaarfunc Test_entering_digraph()
504845e0ee5SBram Moolenaar  CheckRunVimInTerminal
505845e0ee5SBram Moolenaar  let buf = RunVimInTerminal('', {'rows': 6})
506845e0ee5SBram Moolenaar  call term_sendkeys(buf, "i\<C-K>")
507733d259aSBram Moolenaar  call TermWait(buf)
508845e0ee5SBram Moolenaar  call assert_equal('?', term_getline(buf, 1))
509845e0ee5SBram Moolenaar  call term_sendkeys(buf, "1")
510733d259aSBram Moolenaar  call TermWait(buf)
511845e0ee5SBram Moolenaar  call assert_equal('1', term_getline(buf, 1))
512845e0ee5SBram Moolenaar  call term_sendkeys(buf, "2")
513733d259aSBram Moolenaar  call TermWait(buf)
514845e0ee5SBram Moolenaar  call assert_equal('½', term_getline(buf, 1))
515845e0ee5SBram Moolenaar  call StopVimInTerminal(buf)
516845e0ee5SBram Moolenaarendfunc
517845e0ee5SBram Moolenaar
51829b85715Sh-eastfunc Test_digraph_set_function()
5196106504eSmityu  new
52029b85715Sh-east  call digraph_set('aa', 'あ')
5216106504eSmityu  call Put_Dig('aa')
5226106504eSmityu  call assert_equal('あ', getline('$'))
52329b85715Sh-east  call digraph_set(' i', 'い')
5246106504eSmityu  call Put_Dig(' i')
5256106504eSmityu  call assert_equal('い', getline('$'))
52629b85715Sh-east  call digraph_set('  ', 'う')
5276106504eSmityu  call Put_Dig('  ')
5286106504eSmityu  call assert_equal('う', getline('$'))
5296106504eSmityu
53029b85715Sh-east  eval 'aa'->digraph_set('え')
5316106504eSmityu  call Put_Dig('aa')
5326106504eSmityu  call assert_equal('え', getline('$'))
5336106504eSmityu
53429b85715Sh-east  call assert_fails('call digraph_set("aaa", "あ")', 'E1214: Digraph must be just two characters: aaa')
53529b85715Sh-east  call assert_fails('call digraph_set("b", "あ")', 'E1214: Digraph must be just two characters: b')
53629b85715Sh-east  call assert_fails('call digraph_set("あ", "あ")', 'E1214: Digraph must be just two characters: あ')
53729b85715Sh-east  call assert_fails('call digraph_set("aa", "ああ")', 'E1215: Digraph must be one character: ああ')
53829b85715Sh-east  call assert_fails('call digraph_set("aa", "か" .. nr2char(0x3099))',  'E1215: Digraph must be one character: か' .. nr2char(0x3099))
539*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_set(test_null_string(), "い")',  'E1214: Digraph must be just two characters')
540*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_set("aa", 0z10)',  'E976: Using a Blob as a String')
5416106504eSmityu  bwipe!
5426106504eSmityuendfunc
5436106504eSmityu
54429b85715Sh-eastfunc Test_digraph_get_function()
5456106504eSmityu  " Built-in digraphs
54629b85715Sh-east  call assert_equal('∞', digraph_get('00'))
5476106504eSmityu
5486106504eSmityu  " User-defined digraphs
54929b85715Sh-east  call digraph_set('aa', 'あ')
55029b85715Sh-east  call digraph_set(' i', 'い')
55129b85715Sh-east  call digraph_set('  ', 'う')
55229b85715Sh-east  call assert_equal('あ', digraph_get('aa'))
55329b85715Sh-east  call assert_equal('あ', 'aa'->digraph_get())
55429b85715Sh-east  call assert_equal('い', digraph_get(' i'))
55529b85715Sh-east  call assert_equal('う', digraph_get('  '))
55629b85715Sh-east  call assert_fails('call digraph_get("aaa")', 'E1214: Digraph must be just two characters: aaa')
55729b85715Sh-east  call assert_fails('call digraph_get("b")', 'E1214: Digraph must be just two characters: b')
558*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_get(test_null_string())', 'E1214: Digraph must be just two characters:')
559*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_get(0z10)', 'E976: Using a Blob as a String')
5606106504eSmityuendfunc
5616106504eSmityu
56229b85715Sh-eastfunc Test_digraph_get_function_encode()
5636106504eSmityu  CheckFeature iconv
56452eb372aSBram Moolenaar
5656106504eSmityu  let testcases = {
5666106504eSmityu        \'00': '∞',
5676106504eSmityu        \'aa': 'あ',
5686106504eSmityu        \}
5696106504eSmityu  for [key, ch] in items(testcases)
57029b85715Sh-east    call digraph_set(key, ch)
5716106504eSmityu    set encoding=japan
57229b85715Sh-east    call assert_equal(iconv(ch, 'utf-8', 'japan'), digraph_get(key))
57352eb372aSBram Moolenaar    set encoding=utf-8
5746106504eSmityu  endfor
5756106504eSmityuendfunc
5766106504eSmityu
57729b85715Sh-eastfunc Test_digraph_setlist_function()
57829b85715Sh-east  call digraph_setlist([['aa', 'き'], ['bb', 'く']])
57929b85715Sh-east  call assert_equal('き', digraph_get('aa'))
58029b85715Sh-east  call assert_equal('く', digraph_get('bb'))
5816106504eSmityu
58229b85715Sh-east  call assert_fails('call digraph_setlist([[]])', 'E1216:')
583*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_setlist([["aa", "b", "cc"]])', 'E1216:')
58429b85715Sh-east  call assert_fails('call digraph_setlist([["あ", "あ"]])', 'E1214: Digraph must be just two characters: あ')
585*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_setlist([test_null_list()])', 'E1216:')
586*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_setlist({})', 'E1216:')
587*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_setlist([{}])', 'E1216:')
588*fc3b7750SYegappan Lakshmanan  call assert_true(digraph_setlist(test_null_list()))
5896106504eSmityuendfunc
5906106504eSmityu
59129b85715Sh-eastfunc Test_digraph_getlist_function()
5926106504eSmityu  " Make sure user-defined digraphs are defined
59329b85715Sh-east  call digraph_setlist([['aa', 'き'], ['bb', 'く']])
5946106504eSmityu
59529b85715Sh-east  for pair in digraph_getlist(1)
59629b85715Sh-east    call assert_equal(digraph_get(pair[0]), pair[1])
5976106504eSmityu  endfor
5986106504eSmityu
5996106504eSmityu  " We don't know how many digraphs are registered before, so check the number
6006106504eSmityu  " of digraphs returned.
60129b85715Sh-east  call assert_equal(digraph_getlist()->len(), digraph_getlist(0)->len())
60229b85715Sh-east  call assert_notequal((digraph_getlist()->len()), digraph_getlist(1)->len())
603*fc3b7750SYegappan Lakshmanan
604*fc3b7750SYegappan Lakshmanan  call assert_fails('call digraph_getlist(0z12)', 'E974: Using a Blob as a Number')
6056106504eSmityuendfunc
60652eb372aSBram Moolenaar
60752eb372aSBram Moolenaar
6089e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
609