blob: 66ffa54aded269ba155898088f7b8402b3182320 [file] [log] [blame]
Bram Moolenaar29f9ed22018-04-10 19:20:31 +02001" Test for the xxd command
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02002
Aapo Rantalainene2528ae2023-08-31 17:58:13 +02003source check.vim
4source screendump.vim
5
Bram Moolenaar6995c0a2018-04-10 21:46:10 +02006if empty($XXD) && executable('..\xxd\xxd.exe')
7 let s:xxd_cmd = '..\xxd\xxd.exe'
8elseif empty($XXD) || !executable($XXD)
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02009 throw 'Skipped: xxd program missing'
Bram Moolenaar6995c0a2018-04-10 21:46:10 +020010else
11 let s:xxd_cmd = $XXD
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020012endif
13
Bram Moolenaar1e115362019-01-09 23:01:02 +010014func PrepareBuffer(lines)
Bram Moolenaar164268d2018-04-10 20:06:17 +020015 new
16 call append(0, a:lines)
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020017 $d
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020018endfunc
19
Bram Moolenaar1e115362019-01-09 23:01:02 +010020func s:Mess(counter)
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020021 return printf("Failed xxd test %d:", a:counter)
22endfunc
23
Bram Moolenaar1e115362019-01-09 23:01:02 +010024func Test_xxd()
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020025 call PrepareBuffer(range(1,30))
Bram Moolenaar6995c0a2018-04-10 21:46:10 +020026 set ff=unix
Bram Moolenaar970f5d32019-01-25 21:52:17 +010027 w! XXDfile
Bram Moolenaar164268d2018-04-10 20:06:17 +020028
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020029 " Test 1: simple, filter the result through xxd
30 let s:test = 1
Bram Moolenaar6995c0a2018-04-10 21:46:10 +020031 exe '%!' . s:xxd_cmd . ' %'
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020032 let expected = [
33 \ '00000000: 310a 320a 330a 340a 350a 360a 370a 380a 1.2.3.4.5.6.7.8.',
34 \ '00000010: 390a 3130 0a31 310a 3132 0a31 330a 3134 9.10.11.12.13.14',
35 \ '00000020: 0a31 350a 3136 0a31 370a 3138 0a31 390a .15.16.17.18.19.',
36 \ '00000030: 3230 0a32 310a 3232 0a32 330a 3234 0a32 20.21.22.23.24.2',
37 \ '00000040: 350a 3236 0a32 370a 3238 0a32 390a 3330 5.26.27.28.29.30',
38 \ '00000050: 0a .']
39 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
Bram Moolenaar164268d2018-04-10 20:06:17 +020040
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020041 " Test 2: reverse the result
42 let s:test += 1
Bram Moolenaar6995c0a2018-04-10 21:46:10 +020043 exe '%!' . s:xxd_cmd . ' -r'
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020044 call assert_equal(map(range(1,30), {v,c -> string(c)}), getline(1,'$'), s:Mess(s:test))
45
Bram Moolenaar970f5d32019-01-25 21:52:17 +010046 " Test 3: Skip the first 0x30 bytes
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020047 let s:test += 1
Bram Moolenaar970f5d32019-01-25 21:52:17 +010048 for arg in ['-s 0x30', '-s0x30', '-s+0x30', '-skip 0x030', '-seek 0x30', '-seek +0x30 --']
49 exe '%!' . s:xxd_cmd . ' ' . arg . ' %'
50 call assert_equal(expected[3:], getline(1,'$'), s:Mess(s:test))
51 endfor
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020052
53 " Test 4: Skip the first 30 bytes
54 let s:test += 1
Bram Moolenaar970f5d32019-01-25 21:52:17 +010055 for arg in ['-s -0x31', '-s-0x31']
56 exe '%!' . s:xxd_cmd . ' ' . arg . ' %'
57 call assert_equal(expected[2:], getline(1,'$'), s:Mess(s:test))
58 endfor
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020059
Bram Moolenaar0eb220c2019-01-27 14:41:43 +010060 " The following tests use the xxd man page.
61 " For these tests to pass, the fileformat must be "unix".
62 let man_copy = 'Xxd.1'
63 let man_page = '../../runtime/doc/xxd.1'
64 if has('win32') && !filereadable(man_page)
65 let man_page = '../../doc/xxd.1'
66 endif
67 %d
68 exe '0r ' man_page '| set ff=unix | $d | w' man_copy '| bwipe!' man_copy
69
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020070 " Test 5: Print 120 bytes as continuous hexdump with 20 octets per line
71 let s:test += 1
72 %d
Bram Moolenaar0eb220c2019-01-27 14:41:43 +010073 exe '0r! ' . s:xxd_cmd . ' -l 120 -ps -c20 ' . man_copy
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020074 $d
75 let expected = [
76 \ '2e54482058584420312022417567757374203139',
77 \ '39362220224d616e75616c207061676520666f72',
78 \ '20787864220a2e5c220a2e5c222032317374204d',
79 \ '617920313939360a2e5c22204d616e2070616765',
80 \ '20617574686f723a0a2e5c2220202020546f6e79',
81 \ '204e7567656e74203c746f6e79407363746e7567']
82 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
Bram Moolenaar164268d2018-04-10 20:06:17 +020083
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020084 " Test 6: Print the date from xxd.1
85 let s:test += 1
Bram Moolenaar970f5d32019-01-25 21:52:17 +010086 for arg in ['-l 13', '-l13', '-len 13']
87 %d
Bram Moolenaar0eb220c2019-01-27 14:41:43 +010088 exe '0r! ' . s:xxd_cmd . ' -s 0x36 ' . arg . ' -cols 13 ' . man_copy
Bram Moolenaar970f5d32019-01-25 21:52:17 +010089 $d
90 call assert_equal('00000036: 3231 7374 204d 6179 2031 3939 36 21st May 1996', getline(1), s:Mess(s:test))
91 endfor
Bram Moolenaar164268d2018-04-10 20:06:17 +020092
Bram Moolenaar0eb220c2019-01-27 14:41:43 +010093 " Cleanup after tests 5 and 6
94 call delete(man_copy)
95
Bram Moolenaar29f9ed22018-04-10 19:20:31 +020096 " Test 7: Print C include
97 let s:test += 1
98 call writefile(['TESTabcd09'], 'XXDfile')
99 %d
Bram Moolenaar6995c0a2018-04-10 21:46:10 +0200100 exe '0r! ' . s:xxd_cmd . ' -i XXDfile'
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200101 $d
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200102 let expected =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200103 unsigned char XXDfile[] = {
104 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
105 };
106 unsigned int XXDfile_len = 11;
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200107 [CODE]
108
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200109 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
Bram Moolenaar164268d2018-04-10 20:06:17 +0200110
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200111 " Test 8: Print C include capitalized
112 let s:test += 1
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100113 for arg in ['-C', '-capitalize']
114 call writefile(['TESTabcd09'], 'XXDfile')
115 %d
116 exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' XXDfile'
117 $d
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200118 let expected =<< trim [CODE]
Bram Moolenaare7eb9272019-06-24 00:58:07 +0200119 unsigned char XXDFILE[] = {
120 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
121 };
122 unsigned int XXDFILE_LEN = 11;
Bram Moolenaarc79745a2019-05-20 22:12:34 +0200123 [CODE]
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100124 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
125 endfor
Bram Moolenaar164268d2018-04-10 20:06:17 +0200126
127 " Test 9: Create a file with containing a single 'A'
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200128 let s:test += 1
129 call delete('XXDfile')
Bram Moolenaar164268d2018-04-10 20:06:17 +0200130 bwipe! XXDfile
Bram Moolenaar6995c0a2018-04-10 21:46:10 +0200131 if has('unix')
132 call system('echo "010000: 41"|' . s:xxd_cmd . ' -r -s -0x10000 > XXDfile')
133 else
134 call writefile(['010000: 41'], 'Xinput')
135 silent exe '!' . s:xxd_cmd . ' -r -s -0x10000 < Xinput > XXDfile'
136 call delete('Xinput')
137 endif
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200138 call PrepareBuffer(readfile('XXDfile')[0])
139 call assert_equal('A', getline(1), s:Mess(s:test))
140 call delete('XXDfile')
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100141
142 " Test 10: group with 4 octets
143 let s:test += 1
144 for arg in ['-g 4', '-group 4', '-g4']
145 call writefile(['TESTabcd09'], 'XXDfile')
146 %d
147 exe '0r! ' . s:xxd_cmd . ' ' . arg . ' XXDfile'
148 $d
149 let expected = ['00000000: 54455354 61626364 30390a TESTabcd09.']
150 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
151 call delete('XXDfile')
152 endfor
153
Bram Moolenaar203651b2019-01-26 14:11:19 +0100154 " Test 11: reverse with CR, hex upper, Postscript style with a TAB
155 let s:test += 1
156 call writefile([" 54455354\t610B6364 30390A TESTa\0x0bcd09.\r"], 'Xinput')
157 silent exe '!' . s:xxd_cmd . ' -r -p < Xinput > XXDfile'
158 let blob = readfile('XXDfile', 'B')
159 call assert_equal(0z54455354.610B6364.30390A, blob)
160 call delete('Xinput')
161 call delete('XXDfile')
162
163 " Test 12: reverse with seek
164 let s:test += 1
165 call writefile(["00000000: 54455354\t610B6364 30390A TESTa\0x0bcd09.\r"], 'Xinput')
166 silent exe '!' . s:xxd_cmd . ' -r -seek 5 < Xinput > XXDfile'
167 let blob = readfile('XXDfile', 'B')
168 call assert_equal(0z0000000000.54455354.610B6364.30390A, blob)
169 call delete('Xinput')
170 call delete('XXDfile')
171
Bram Moolenaar363d6142020-05-30 20:50:25 +0200172 " Test 13: simple, decimal offset
173 call PrepareBuffer(range(1,30))
174 set ff=unix
175 w! XXDfile
176 let s:test += 1
177 exe '%!' . s:xxd_cmd . ' -d %'
178 let expected = [
179 \ '00000000: 310a 320a 330a 340a 350a 360a 370a 380a 1.2.3.4.5.6.7.8.',
180 \ '00000016: 390a 3130 0a31 310a 3132 0a31 330a 3134 9.10.11.12.13.14',
181 \ '00000032: 0a31 350a 3136 0a31 370a 3138 0a31 390a .15.16.17.18.19.',
182 \ '00000048: 3230 0a32 310a 3232 0a32 330a 3234 0a32 20.21.22.23.24.2',
183 \ '00000064: 350a 3236 0a32 370a 3238 0a32 390a 3330 5.26.27.28.29.30',
184 \ '00000080: 0a .']
185 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
186
187 " Test 14: grouping with -d
188 let s:test += 1
189 let expected = [
190 \ '00000000: 310a320a 330a340a 350a360a 370a380a 1.2.3.4.5.6.7.8.',
191 \ '00000016: 390a3130 0a31310a 31320a31 330a3134 9.10.11.12.13.14',
192 \ '00000032: 0a31350a 31360a31 370a3138 0a31390a .15.16.17.18.19.',
193 \ '00000048: 32300a32 310a3232 0a32330a 32340a32 20.21.22.23.24.2',
194 \ '00000064: 350a3236 0a32370a 32380a32 390a3330 5.26.27.28.29.30',
195 \ '00000080: 0a .']
196 for arg in ['-g 4', '-group 4', '-g4']
197 exe '%!' . s:xxd_cmd . ' ' . arg . ' -d %'
198 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
199 endfor
200
201 " Test 15: cols with decimal offset: -c 21 -d
202 let s:test += 1
203 let expected = [
204 \ '00000000: 310a 320a 330a 340a 350a 360a 370a 380a 390a 3130 0a 1.2.3.4.5.6.7.8.9.10.',
205 \ '00000021: 3131 0a31 320a 3133 0a31 340a 3135 0a31 360a 3137 0a 11.12.13.14.15.16.17.',
206 \ '00000042: 3138 0a31 390a 3230 0a32 310a 3232 0a32 330a 3234 0a 18.19.20.21.22.23.24.',
207 \ '00000063: 3235 0a32 360a 3237 0a32 380a 3239 0a33 300a 25.26.27.28.29.30.']
208 exe '%!' . s:xxd_cmd . ' -c 21 -d %'
209 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
210
Erik Auerswalda00e6222022-01-13 17:42:28 +0000211 " Test 16: -o -offset
212 let s:test += 1
213 let expected = [
214 \ '0000000f: 310a 320a 330a 340a 350a 360a 370a 380a 1.2.3.4.5.6.7.8.',
215 \ '0000001f: 390a 3130 0a31 310a 3132 0a31 330a 3134 9.10.11.12.13.14',
216 \ '0000002f: 0a31 350a 3136 0a31 370a 3138 0a31 390a .15.16.17.18.19.',
217 \ '0000003f: 3230 0a32 310a 3232 0a32 330a 3234 0a32 20.21.22.23.24.2',
218 \ '0000004f: 350a 3236 0a32 370a 3238 0a32 390a 3330 5.26.27.28.29.30',
219 \ '0000005f: 0a .']
220 for arg in ['-o 15', '-offset 15', '-o15']
221 exe '%!' . s:xxd_cmd . ' ' . arg . ' %'
222 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
223 endfor
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100224
David Gow83e11802022-06-29 20:24:49 +0100225 " Test 17: Print C include with custom variable name
226 let s:test += 1
227 call writefile(['TESTabcd09'], 'XXDfile')
228 for arg in ['-nvarName', '-n varName', '-name varName']
229 %d
230 exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' XXDfile'
231 $d
232 let expected =<< trim [CODE]
233 unsigned char varName[] = {
234 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
235 };
236 unsigned int varName_len = 11;
237 [CODE]
Bram Moolenaar94722c52023-01-28 19:19:03 +0000238
David Gow83e11802022-06-29 20:24:49 +0100239 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
240 endfor
241
242 " using "-n name" reading from stdin
243 %d
244 exe '0r! ' . s:xxd_cmd . ' -i < XXDfile -n StdIn'
245 $d
246 let expected =<< trim [CODE]
247 unsigned char StdIn[] = {
248 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
249 };
250 unsigned int StdIn_len = 11;
251 [CODE]
252 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
253
254
255 " Test 18: Print C include: custom variable names can be capitalized
256 let s:test += 1
257 for arg in ['-C', '-capitalize']
258 call writefile(['TESTabcd09'], 'XXDfile')
259 %d
260 exe '0r! ' . s:xxd_cmd . ' -i ' . arg . ' -n varName XXDfile'
261 $d
262 let expected =<< trim [CODE]
263 unsigned char VARNAME[] = {
264 0x54, 0x45, 0x53, 0x54, 0x61, 0x62, 0x63, 0x64, 0x30, 0x39, 0x0a
265 };
266 unsigned int VARNAME_LEN = 11;
267 [CODE]
268 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
269 endfor
270
271
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200272 %d
Bram Moolenaar253ea9f2020-06-10 14:21:20 +0200273 bwipe!
274 call delete('XXDfile')
Bram Moolenaar29f9ed22018-04-10 19:20:31 +0200275endfunc
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100276
DungSaga47810462021-10-22 12:55:42 +0100277func Test_xxd_patch()
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100278 let cmd1 = 'silent !' .. s:xxd_cmd .. ' -r Xxxdin Xxxdfile'
279 let cmd2 = 'silent !' .. s:xxd_cmd .. ' -g1 Xxxdfile > Xxxdout'
Bram Moolenaardb4c9472022-10-15 22:06:06 +0100280 call writefile(["2: 41 41", "8: 42 42"], 'Xxxdin', 'D')
281 call writefile(['::::::::'], 'Xxxdfile', 'D')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100282 exe cmd1
283 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100284 call assert_equal(['00000000: 3a 3a 41 41 3a 3a 3a 3a 42 42 ::AA::::BB'], readfile('Xxxdout'))
285
286 call writefile(["2: 43 43 ", "8: 44 44"], 'Xxxdin')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100287 exe cmd1
288 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100289 call assert_equal(['00000000: 3a 3a 43 43 3a 3a 3a 3a 44 44 ::CC::::DD'], readfile('Xxxdout'))
290
291 call writefile(["2: 45 45 ", "8: 46 46"], 'Xxxdin')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100292 exe cmd1
293 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100294 call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 46 46 ::EE::::FF'], readfile('Xxxdout'))
Bram Moolenaar94722c52023-01-28 19:19:03 +0000295
DungSaga47810462021-10-22 12:55:42 +0100296 call writefile(["2: 41 41", "08: 42 42"], 'Xxxdin')
297 call writefile(['::::::::'], 'Xxxdfile')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100298 exe cmd1
299 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100300 call assert_equal(['00000000: 3a 3a 41 41 3a 3a 3a 3a 42 42 ::AA::::BB'], readfile('Xxxdout'))
301
302 call writefile(["2: 43 43 ", "09: 44 44"], 'Xxxdin')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100303 exe cmd1
304 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100305 call assert_equal(['00000000: 3a 3a 43 43 3a 3a 3a 3a 42 44 44 ::CC::::BDD'], readfile('Xxxdout'))
306
307 call writefile(["2: 45 45 ", "0a: 46 46"], 'Xxxdin')
Bram Moolenaar5a5c1112021-10-22 15:11:37 +0100308 exe cmd1
309 exe cmd2
DungSaga47810462021-10-22 12:55:42 +0100310 call assert_equal(['00000000: 3a 3a 45 45 3a 3a 3a 3a 42 44 46 46 ::EE::::BDFF'], readfile('Xxxdout'))
Bram Moolenaar94722c52023-01-28 19:19:03 +0000311
DungSaga47810462021-10-22 12:55:42 +0100312 call delete('Xxxdout')
313endfunc
314
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100315" Various ways with wrong arguments that trigger the usage output.
316func Test_xxd_usage()
Aapo Rantalainene2528ae2023-08-31 17:58:13 +0200317 for arg in ['-h', '-c', '-g', '-o', '-s', '-l', '-X', '-R', 'one two three']
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100318 new
319 exe 'r! ' . s:xxd_cmd . ' ' . arg
320 call assert_match("Usage:", join(getline(1, 3)))
321 bwipe!
322 endfor
323endfunc
324
DungSaga48608b42021-11-24 11:18:07 +0000325func Test_xxd_ignore_garbage()
326 new
327 exe 'r! printf "\n\r xxxx 0: 42 42" | ' . s:xxd_cmd . ' -r'
328 call assert_match('BB', join(getline(1, 3)))
329 bwipe!
330endfunc
331
332func Test_xxd_bit_dump()
333 new
334 exe 'r! printf "123456" | ' . s:xxd_cmd . ' -b1'
335 call assert_match('00000000: 00110001 00110010 00110011 00110100 00110101 00110110 123456', join(getline(1, 3)))
336 bwipe!
337endfunc
338
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100339func Test_xxd_version()
340 new
341 exe 'r! ' . s:xxd_cmd . ' -v'
=?UTF-8?q?J=C3=BCrgen=20Weigert?=80b2ba32021-06-29 20:36:25 +0200342 call assert_match('xxd 20\d\d-\d\d-\d\d by Juergen Weigert et al\.', join(getline(1, 3)))
Bram Moolenaar970f5d32019-01-25 21:52:17 +0100343 bwipe!
344endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200345
Erik Auerswalda00e6222022-01-13 17:42:28 +0000346" number of columns must be non-negative
347func Test_xxd_min_cols()
348 for cols in ['-c-1', '-c -1', '-cols -1']
349 for fmt in ['', '-b', '-e', '-i', '-p', ]
350 new
351 exe 'r! printf "ignored" | ' . s:xxd_cmd . ' ' . cols . ' ' . fmt
352 call assert_match("invalid number of columns", join(getline(1, '$')))
353 bwipe!
354 endfor
355 endfor
356endfunc
357
358" some hex formats limit columns to 256 (a #define in xxd.c)
359func Test_xxd_max_cols()
360 for cols in ['-c257', '-c 257', '-cols 257']
361 for fmt in ['', '-b', '-e' ]
362 new
363 exe 'r! printf "ignored" | ' . s:xxd_cmd . ' ' . cols . ' ' . fmt
364 call assert_match("invalid number of columns", join(getline(1, '$')))
365 bwipe!
366 endfor
367 endfor
368endfunc
369
370" -c0 selects the format specific default column value, as if no -c was given
Erik Auerswaldc0a1d372022-01-14 11:58:48 +0000371" except for -ps, where it disables extra newlines
Erik Auerswalda00e6222022-01-13 17:42:28 +0000372func Test_xxd_c0_is_def_cols()
Bram Moolenaardb4c9472022-10-15 22:06:06 +0100373 call writefile(["abcdefghijklmnopqrstuvwxyz0123456789"], 'Xxdin', 'D')
Erik Auerswalda00e6222022-01-13 17:42:28 +0000374 for cols in ['-c0', '-c 0', '-cols 0']
Erik Auerswaldc0a1d372022-01-14 11:58:48 +0000375 for fmt in ['', '-b', '-e', '-i']
Erik Auerswalda00e6222022-01-13 17:42:28 +0000376 exe 'r! ' . s:xxd_cmd . ' ' . fmt ' Xxdin > Xxdout1'
377 exe 'r! ' . s:xxd_cmd . ' ' . cols . ' ' . fmt ' Xxdin > Xxdout2'
378 call assert_equalfile('Xxdout1', 'Xxdout2')
379 endfor
380 endfor
Erik Auerswalda00e6222022-01-13 17:42:28 +0000381 call delete('Xxdout1')
382 call delete('Xxdout2')
383endfunc
384
Erik Auerswaldc0a1d372022-01-14 11:58:48 +0000385" all output in a single line for -c0 -ps
386func Test_xxd_plain_one_line()
387 call writefile([
388 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
389 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
390 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
391 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
392 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
393 \ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"],
Bram Moolenaardb4c9472022-10-15 22:06:06 +0100394 \ 'Xxdin', 'D')
Erik Auerswaldc0a1d372022-01-14 11:58:48 +0000395 for cols in ['-c0', '-c 0', '-cols 0']
396 exe 'r! ' . s:xxd_cmd . ' -ps ' . cols ' Xxdin'
397 " output seems to start in line 2
398 let out = join(getline(2, '$'))
399 bwipe!
400 " newlines in xxd output result in spaces in the string variable out
401 call assert_notmatch(" ", out)
402 " xxd output must be non-empty and comprise only lower case hex digits
403 call assert_match("^[0-9a-f][0-9a-f]*$", out)
404 endfor
Erik Auerswaldc0a1d372022-01-14 11:58:48 +0000405endfunc
406
Bram Moolenaar4390d872023-03-05 20:17:39 +0000407func Test_xxd_little_endian_with_cols()
408 enew!
409 call writefile(["ABCDEF"], 'Xxdin', 'D')
410 exe 'r! ' .. s:xxd_cmd .. ' -e -c6 ' .. ' Xxdin'
411 call assert_equal('00000000: 44434241 4645 ABCDEF', getline(2))
412
413 enew!
414 call writefile(["ABCDEFGHI"], 'Xxdin', 'D')
415 exe 'r! ' .. s:xxd_cmd .. ' -e -c9 ' .. ' Xxdin'
416 call assert_equal('00000000: 44434241 48474645 49 ABCDEFGHI', getline(2))
417
418 bwipe!
419endfunc
420
Aapo Rantalainene2528ae2023-08-31 17:58:13 +0200421func Test_xxd_color()
422"Test: color=never
423let s:test = 1
424
425"Note Quotation mark escaped
426"Note Aposhpere vaihdettu apostrophe replaced with 0x00
427"Note Backslash replaced with 0x00
428let data = [
429 \ "00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................",
430 \ "00000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................",
431 \ "00000020: 2021 2223 2425 2600 2829 2a2b 2c2d 2e2f !\"#$%&.()*+,-./",
432 \ "00000030: 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f 0123456789:;<=>?",
433 \ "00000040: 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f @ABCDEFGHIJKLMNO",
434 \ "00000050: 5051 5253 5455 5657 5859 5a5b 005d 5e5f PQRSTUVWXYZ[.]^_",
435 \ "00000060: 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f `abcdefghijklmno",
436 \ "00000070: 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f pqrstuvwxyz{|}~.",
437 \ "00000080: 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f ................",
438 \ "00000090: 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f ................",
439 \ "000000a0: a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf ................",
440 \ "000000b0: b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf ................",
441 \ "000000c0: c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf ................",
442 \ "000000d0: d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf ................",
443 \ "000000e0: e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef ................",
444 \ "000000f0: f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff ................"]
445call writefile(data,'Xinput')
446
447 silent exe '!' . s:xxd_cmd . ' -r < Xinput > XXDfile'
448
449 %d
450 exe '0r! ' . s:xxd_cmd . ' -R never ' . ' XXDfile'
451 $d
452 let expected = [
453 \ "00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................",
454 \ "00000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................",
455 \ "00000020: 2021 2223 2425 2600 2829 2a2b 2c2d 2e2f !\"#$%&.()*+,-./",
456 \ "00000030: 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f 0123456789:;<=>?",
457 \ "00000040: 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f @ABCDEFGHIJKLMNO",
458 \ "00000050: 5051 5253 5455 5657 5859 5a5b 005d 5e5f PQRSTUVWXYZ[.]^_",
459 \ "00000060: 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f `abcdefghijklmno",
460 \ "00000070: 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f pqrstuvwxyz{|}~.",
461 \ "00000080: 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f ................",
462 \ "00000090: 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f ................",
463 \ "000000a0: a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf ................",
464 \ "000000b0: b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf ................",
465 \ "000000c0: c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf ................",
466 \ "000000d0: d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf ................",
467 \ "000000e0: e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef ................",
468 \ "000000f0: f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff ................"]
469
470 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
471
472 "Test: color=always
473 let s:test += 1
474
475 %d
476 exe '0r! ' . s:xxd_cmd . ' -R always -c 4 ' . ' XXDfile'
477 $d
478 let expected = [
479 \ "00000000: \e[1;37m00\e[0m\e[1;31m01\e[0m \e[1;31m02\e[0m\e[1;31m03\e[0m \e[1;37m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
480 \ "00000004: \e[1;31m04\e[0m\e[1;31m05\e[0m \e[1;31m06\e[0m\e[1;31m07\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
481 \ "00000008: \e[1;31m08\e[0m\e[1;33m09\e[0m \e[1;33m0a\e[0m\e[1;31m0b\e[0m \e[1;31m.\e[0m\e[1;33m.\e[0m\e[1;33m.\e[0m\e[1;31m.\e[0m",
482 \ "0000000c: \e[1;31m0c\e[0m\e[1;33m0d\e[0m \e[1;31m0e\e[0m\e[1;31m0f\e[0m \e[1;31m.\e[0m\e[1;33m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
483 \ "00000010: \e[1;31m10\e[0m\e[1;31m11\e[0m \e[1;31m12\e[0m\e[1;31m13\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
484 \ "00000014: \e[1;31m14\e[0m\e[1;31m15\e[0m \e[1;31m16\e[0m\e[1;31m17\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
485 \ "00000018: \e[1;31m18\e[0m\e[1;31m19\e[0m \e[1;31m1a\e[0m\e[1;31m1b\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
486 \ "0000001c: \e[1;31m1c\e[0m\e[1;31m1d\e[0m \e[1;31m1e\e[0m\e[1;31m1f\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
487 \ "00000020: \e[1;32m20\e[0m\e[1;32m21\e[0m \e[1;32m22\e[0m\e[1;32m23\e[0m \e[1;32m \e[0m\e[1;32m!\e[0m\e[1;32m\"\e[0m\e[1;32m#\e[0m",
488 \ "00000024: \e[1;32m24\e[0m\e[1;32m25\e[0m \e[1;32m26\e[0m\e[1;37m00\e[0m \e[1;32m$\e[0m\e[1;32m%\e[0m\e[1;32m&\e[0m\e[1;37m.\e[0m",
489 \ "00000028: \e[1;32m28\e[0m\e[1;32m29\e[0m \e[1;32m2a\e[0m\e[1;32m2b\e[0m \e[1;32m(\e[0m\e[1;32m)\e[0m\e[1;32m*\e[0m\e[1;32m+\e[0m",
490 \ "0000002c: \e[1;32m2c\e[0m\e[1;32m2d\e[0m \e[1;32m2e\e[0m\e[1;32m2f\e[0m \e[1;32m,\e[0m\e[1;32m-\e[0m\e[1;32m.\e[0m\e[1;32m/\e[0m",
491 \ "00000030: \e[1;32m30\e[0m\e[1;32m31\e[0m \e[1;32m32\e[0m\e[1;32m33\e[0m \e[1;32m0\e[0m\e[1;32m1\e[0m\e[1;32m2\e[0m\e[1;32m3\e[0m",
492 \ "00000034: \e[1;32m34\e[0m\e[1;32m35\e[0m \e[1;32m36\e[0m\e[1;32m37\e[0m \e[1;32m4\e[0m\e[1;32m5\e[0m\e[1;32m6\e[0m\e[1;32m7\e[0m",
493 \ "00000038: \e[1;32m38\e[0m\e[1;32m39\e[0m \e[1;32m3a\e[0m\e[1;32m3b\e[0m \e[1;32m8\e[0m\e[1;32m9\e[0m\e[1;32m:\e[0m\e[1;32m;\e[0m",
494 \ "0000003c: \e[1;32m3c\e[0m\e[1;32m3d\e[0m \e[1;32m3e\e[0m\e[1;32m3f\e[0m \e[1;32m<\e[0m\e[1;32m=\e[0m\e[1;32m>\e[0m\e[1;32m?\e[0m",
495 \ "00000040: \e[1;32m40\e[0m\e[1;32m41\e[0m \e[1;32m42\e[0m\e[1;32m43\e[0m \e[1;32m@\e[0m\e[1;32mA\e[0m\e[1;32mB\e[0m\e[1;32mC\e[0m",
496 \ "00000044: \e[1;32m44\e[0m\e[1;32m45\e[0m \e[1;32m46\e[0m\e[1;32m47\e[0m \e[1;32mD\e[0m\e[1;32mE\e[0m\e[1;32mF\e[0m\e[1;32mG\e[0m",
497 \ "00000048: \e[1;32m48\e[0m\e[1;32m49\e[0m \e[1;32m4a\e[0m\e[1;32m4b\e[0m \e[1;32mH\e[0m\e[1;32mI\e[0m\e[1;32mJ\e[0m\e[1;32mK\e[0m",
498 \ "0000004c: \e[1;32m4c\e[0m\e[1;32m4d\e[0m \e[1;32m4e\e[0m\e[1;32m4f\e[0m \e[1;32mL\e[0m\e[1;32mM\e[0m\e[1;32mN\e[0m\e[1;32mO\e[0m",
499 \ "00000050: \e[1;32m50\e[0m\e[1;32m51\e[0m \e[1;32m52\e[0m\e[1;32m53\e[0m \e[1;32mP\e[0m\e[1;32mQ\e[0m\e[1;32mR\e[0m\e[1;32mS\e[0m",
500 \ "00000054: \e[1;32m54\e[0m\e[1;32m55\e[0m \e[1;32m56\e[0m\e[1;32m57\e[0m \e[1;32mT\e[0m\e[1;32mU\e[0m\e[1;32mV\e[0m\e[1;32mW\e[0m",
501 \ "00000058: \e[1;32m58\e[0m\e[1;32m59\e[0m \e[1;32m5a\e[0m\e[1;32m5b\e[0m \e[1;32mX\e[0m\e[1;32mY\e[0m\e[1;32mZ\e[0m\e[1;32m[\e[0m",
502 \ "0000005c: \e[1;37m00\e[0m\e[1;32m5d\e[0m \e[1;32m5e\e[0m\e[1;32m5f\e[0m \e[1;37m.\e[0m\e[1;32m]\e[0m\e[1;32m^\e[0m\e[1;32m_\e[0m",
503 \ "00000060: \e[1;32m60\e[0m\e[1;32m61\e[0m \e[1;32m62\e[0m\e[1;32m63\e[0m \e[1;32m`\e[0m\e[1;32ma\e[0m\e[1;32mb\e[0m\e[1;32mc\e[0m",
504 \ "00000064: \e[1;32m64\e[0m\e[1;32m65\e[0m \e[1;32m66\e[0m\e[1;32m67\e[0m \e[1;32md\e[0m\e[1;32me\e[0m\e[1;32mf\e[0m\e[1;32mg\e[0m",
505 \ "00000068: \e[1;32m68\e[0m\e[1;32m69\e[0m \e[1;32m6a\e[0m\e[1;32m6b\e[0m \e[1;32mh\e[0m\e[1;32mi\e[0m\e[1;32mj\e[0m\e[1;32mk\e[0m",
506 \ "0000006c: \e[1;32m6c\e[0m\e[1;32m6d\e[0m \e[1;32m6e\e[0m\e[1;32m6f\e[0m \e[1;32ml\e[0m\e[1;32mm\e[0m\e[1;32mn\e[0m\e[1;32mo\e[0m",
507 \ "00000070: \e[1;32m70\e[0m\e[1;32m71\e[0m \e[1;32m72\e[0m\e[1;32m73\e[0m \e[1;32mp\e[0m\e[1;32mq\e[0m\e[1;32mr\e[0m\e[1;32ms\e[0m",
508 \ "00000074: \e[1;32m74\e[0m\e[1;32m75\e[0m \e[1;32m76\e[0m\e[1;32m77\e[0m \e[1;32mt\e[0m\e[1;32mu\e[0m\e[1;32mv\e[0m\e[1;32mw\e[0m",
509 \ "00000078: \e[1;32m78\e[0m\e[1;32m79\e[0m \e[1;32m7a\e[0m\e[1;32m7b\e[0m \e[1;32mx\e[0m\e[1;32my\e[0m\e[1;32mz\e[0m\e[1;32m{\e[0m",
510 \ "0000007c: \e[1;32m7c\e[0m\e[1;32m7d\e[0m \e[1;32m7e\e[0m\e[1;31m7f\e[0m \e[1;32m|\e[0m\e[1;32m}\e[0m\e[1;32m~\e[0m\e[1;31m.\e[0m",
511 \ "00000080: \e[1;31m80\e[0m\e[1;31m81\e[0m \e[1;31m82\e[0m\e[1;31m83\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
512 \ "00000084: \e[1;31m84\e[0m\e[1;31m85\e[0m \e[1;31m86\e[0m\e[1;31m87\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
513 \ "00000088: \e[1;31m88\e[0m\e[1;31m89\e[0m \e[1;31m8a\e[0m\e[1;31m8b\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
514 \ "0000008c: \e[1;31m8c\e[0m\e[1;31m8d\e[0m \e[1;31m8e\e[0m\e[1;31m8f\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
515 \ "00000090: \e[1;31m90\e[0m\e[1;31m91\e[0m \e[1;31m92\e[0m\e[1;31m93\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
516 \ "00000094: \e[1;31m94\e[0m\e[1;31m95\e[0m \e[1;31m96\e[0m\e[1;31m97\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
517 \ "00000098: \e[1;31m98\e[0m\e[1;31m99\e[0m \e[1;31m9a\e[0m\e[1;31m9b\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
518 \ "0000009c: \e[1;31m9c\e[0m\e[1;31m9d\e[0m \e[1;31m9e\e[0m\e[1;31m9f\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
519 \ "000000a0: \e[1;31ma0\e[0m\e[1;31ma1\e[0m \e[1;31ma2\e[0m\e[1;31ma3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
520 \ "000000a4: \e[1;31ma4\e[0m\e[1;31ma5\e[0m \e[1;31ma6\e[0m\e[1;31ma7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
521 \ "000000a8: \e[1;31ma8\e[0m\e[1;31ma9\e[0m \e[1;31maa\e[0m\e[1;31mab\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
522 \ "000000ac: \e[1;31mac\e[0m\e[1;31mad\e[0m \e[1;31mae\e[0m\e[1;31maf\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
523 \ "000000b0: \e[1;31mb0\e[0m\e[1;31mb1\e[0m \e[1;31mb2\e[0m\e[1;31mb3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
524 \ "000000b4: \e[1;31mb4\e[0m\e[1;31mb5\e[0m \e[1;31mb6\e[0m\e[1;31mb7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
525 \ "000000b8: \e[1;31mb8\e[0m\e[1;31mb9\e[0m \e[1;31mba\e[0m\e[1;31mbb\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
526 \ "000000bc: \e[1;31mbc\e[0m\e[1;31mbd\e[0m \e[1;31mbe\e[0m\e[1;31mbf\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
527 \ "000000c0: \e[1;31mc0\e[0m\e[1;31mc1\e[0m \e[1;31mc2\e[0m\e[1;31mc3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
528 \ "000000c4: \e[1;31mc4\e[0m\e[1;31mc5\e[0m \e[1;31mc6\e[0m\e[1;31mc7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
529 \ "000000c8: \e[1;31mc8\e[0m\e[1;31mc9\e[0m \e[1;31mca\e[0m\e[1;31mcb\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
530 \ "000000cc: \e[1;31mcc\e[0m\e[1;31mcd\e[0m \e[1;31mce\e[0m\e[1;31mcf\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
531 \ "000000d0: \e[1;31md0\e[0m\e[1;31md1\e[0m \e[1;31md2\e[0m\e[1;31md3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
532 \ "000000d4: \e[1;31md4\e[0m\e[1;31md5\e[0m \e[1;31md6\e[0m\e[1;31md7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
533 \ "000000d8: \e[1;31md8\e[0m\e[1;31md9\e[0m \e[1;31mda\e[0m\e[1;31mdb\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
534 \ "000000dc: \e[1;31mdc\e[0m\e[1;31mdd\e[0m \e[1;31mde\e[0m\e[1;31mdf\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
535 \ "000000e0: \e[1;31me0\e[0m\e[1;31me1\e[0m \e[1;31me2\e[0m\e[1;31me3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
536 \ "000000e4: \e[1;31me4\e[0m\e[1;31me5\e[0m \e[1;31me6\e[0m\e[1;31me7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
537 \ "000000e8: \e[1;31me8\e[0m\e[1;31me9\e[0m \e[1;31mea\e[0m\e[1;31meb\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
538 \ "000000ec: \e[1;31mec\e[0m\e[1;31med\e[0m \e[1;31mee\e[0m\e[1;31mef\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
539 \ "000000f0: \e[1;31mf0\e[0m\e[1;31mf1\e[0m \e[1;31mf2\e[0m\e[1;31mf3\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
540 \ "000000f4: \e[1;31mf4\e[0m\e[1;31mf5\e[0m \e[1;31mf6\e[0m\e[1;31mf7\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
541 \ "000000f8: \e[1;31mf8\e[0m\e[1;31mf9\e[0m \e[1;31mfa\e[0m\e[1;31mfb\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m",
542 \ "000000fc: \e[1;31mfc\e[0m\e[1;31mfd\e[0m \e[1;31mfe\e[0m\e[1;34mff\e[0m \e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;31m.\e[0m\e[1;34m.\e[0m"]
543 call assert_equal(expected, getline(1,'$'), s:Mess(s:test))
544
545 call delete('Xinput')
546 call delete('XXDfile')
547
548endfunc
549
550func Test_xxd_color2()
551 CheckScreendump
552 CheckUnix
553 CheckNotMac
554 CheckNotBSD
555
556 "Note Quotation mark escaped
557 "Note Aposhpere vaihdettu apostrophe replaced with 0x00
558 "Note Backslash replaced with 0x00
559 let data = [
560 \ "00000000: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ................",
561 \ "00000010: 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f ................",
562 \ "00000020: 2021 2223 2425 2600 2829 2a2b 2c2d 2e2f !\"#$%&.()*+,-./",
563 \ "00000030: 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f 0123456789:;<=>?",
564 \ "00000040: 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f @ABCDEFGHIJKLMNO",
565 \ "00000050: 5051 5253 5455 5657 5859 5a5b 005d 5e5f PQRSTUVWXYZ[.]^_",
566 \ "00000060: 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f `abcdefghijklmno",
567 \ "00000070: 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f pqrstuvwxyz{|}~.",
568 \ "00000080: 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f ................",
569 \ "00000090: 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f ................",
570 \ "000000a0: a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf ................",
571 \ "000000b0: b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf ................",
572 \ "000000c0: c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf ................",
573 \ "000000d0: d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf ................",
574 \ "000000e0: e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef ................",
575 \ "000000f0: f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff ................"]
576 call writefile(data, 'Xinput', 'D')
577
578 call system(s:xxd_cmd .. ' -r < Xinput > XXDfile_colors')
579
580 let buf = RunVimInTerminal('', #{rows: 20, cmd: 'sh'})
581 call term_sendkeys(buf, s:xxd_cmd .. " -R never < XXDfile_colors\<cr>")
582 call TermWait(buf)
583 call VerifyScreenDump(buf, 'Test_xxd_color_0', {})
584
585 call TermWait(buf)
586 call term_sendkeys(buf, "clear\<CR>")
587 call term_sendkeys(buf, s:xxd_cmd .. " -R always < XXDfile_colors\<cr>")
588 call TermWait(buf)
589 call VerifyScreenDump(buf, 'Test_xxd_color_1', {})
590
591 call term_sendkeys(buf, "exit\<CR>")
592
593 call delete('XXDfile_colors')
594endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200595" vim: shiftwidth=2 sts=2 expandtab