blob: 9559a810b1a05a303124efdc3fcacc8e59d2246a [file] [log] [blame]
Bram Moolenaardc2f73a2018-11-25 04:03:09 +01001" Runs all the indent tests for which there is no .out file.
2"
3" Current directory must be runtime/indent.
Bram Moolenaarc0fe4972018-10-25 16:53:19 +02004
RestorerZ8291e912024-03-16 15:08:53 +01005" Only do this with the +eval feature.
Bram Moolenaareeed6652018-12-15 17:43:42 +01006if 1
7
Bram Moolenaarc0fe4972018-10-25 16:53:19 +02008set nocp
9filetype indent on
Bram Moolenaar63b74a82019-03-24 15:09:13 +010010syn on
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020011set nowrapscan
Bram Moolenaar9d87a372018-12-18 21:41:50 +010012set report=9999
Bram Moolenaar36576862020-05-06 22:25:05 +020013set modeline
Bram Moolenaar0daafaa2022-09-04 17:45:43 +010014set debug=throw
ichizok9f3afe72023-05-26 14:40:45 +010015set nomore
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020016
Aliaksei Budavei9fd5d962024-11-03 09:15:35 +010017" Remember the directory where we started.
18let indentDir = getcwd()
19cd ../../src/testdir
20
21" Needed for ValgrindOrAsan().
22source shared.vim
23exe 'cd ' .. fnameescape(indentDir)
24
25if ValgrindOrAsan()
26 let g:vim_indent = {"searchpair_timeout": 1024}
27 let g:python_indent = {"searchpair_timeout": 1024}
28endif
29
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020030au! SwapExists * call HandleSwapExists()
31func HandleSwapExists()
32 " Ignore finding a swap file for the test input and output, the user might be
33 " editing them and that's OK.
RestorerZ8291e912024-03-16 15:08:53 +010034 if expand('<afile>') =~ '.*\.\%(in\|out\|fail\|ok\)'
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020035 let v:swapchoice = 'e'
36 endif
37endfunc
38
Bram Moolenaarcd670592019-09-18 22:14:43 +020039let failed_count = 0
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020040for fname in glob('testdir/*.in', 1, 1)
41 let root = substitute(fname, '\.in', '', '')
42
43 " Execute the test if the .out file does not exist of when the .in file is
44 " newer.
45 let in_time = getftime(fname)
RestorerZ8291e912024-03-16 15:08:53 +010046 let out_time = getftime(root .. '.out')
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020047 if out_time < 0 || in_time > out_time
RestorerZ8291e912024-03-16 15:08:53 +010048 call delete(root .. '.fail')
49 call delete(root .. '.out')
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020050
51 set sw& ts& filetype=
RestorerZ8291e912024-03-16 15:08:53 +010052 exe 'split ' .. fname
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020053
54 let did_some = 0
55 let failed = 0
56 let end = 1
57 while 1
RestorerZ8291e912024-03-16 15:08:53 +010058 " Indent all the lines between "START_INDENT" and "END_INDENT".
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020059 exe end
60 let start = search('\<START_INDENT\>')
61 let end = search('\<END_INDENT\>')
62 if start <= 0 || end <= 0 || end <= start
63 if did_some == 0
64 call append(0, 'ERROR: START_INDENT and/or END_INDENT not found')
65 let failed = 1
66 endif
67 break
68 else
69 let did_some = 1
70
71 " Execute all commands marked with INDENT_EXE and find any pattern.
72 let lnum = start
73 let pattern = ''
74 let at = ''
75 while 1
76 exe lnum + 1
77 let lnum_exe = search('\<INDENT_EXE\>')
78 exe lnum + 1
RestorerZ8291e912024-03-16 15:08:53 +010079 let indent_at = search('\<INDENT_\%(AT\|NEXT\|PREV\)\>')
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020080 if lnum_exe > 0 && lnum_exe < end && (indent_at <= 0 || lnum_exe < indent_at)
81 exe substitute(getline(lnum_exe), '.*INDENT_EXE', '', '')
82 let lnum = lnum_exe
83 let start = lnum
84 elseif indent_at > 0 && indent_at < end
85 if pattern != ''
86 call append(indent_at, 'ERROR: duplicate pattern')
87 let failed = 1
88 break
89 endif
90 let text = getline(indent_at)
91 let pattern = substitute(text, '.*INDENT_\S*\s*', '', '')
92 let at = substitute(text, '.*INDENT_\(\S*\).*', '\1', '')
93 let lnum = indent_at
94 let start = lnum
95 else
96 break
97 endif
98 endwhile
99
100 exe start + 1
101 if pattern == ''
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100102 try
RestorerZ8291e912024-03-16 15:08:53 +0100103 exe 'normal =' .. (end - 1) .. 'G'
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100104 catch
RestorerZ8291e912024-03-16 15:08:53 +0100105 call append(indent_at, 'ERROR: ' .. v:exception)
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100106 let failed = 1
107 endtry
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200108 else
109 let lnum = search(pattern)
110 if lnum <= 0
RestorerZ8291e912024-03-16 15:08:53 +0100111 call append(indent_at, 'ERROR: pattern not found: ' .. pattern)
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200112 let failed = 1
113 break
114 endif
115 if at == 'AT'
116 exe lnum
117 elseif at == 'NEXT'
118 exe lnum + 1
119 else
120 exe lnum - 1
121 endif
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100122 try
123 normal ==
124 catch
RestorerZ8291e912024-03-16 15:08:53 +0100125 call append(indent_at, 'ERROR: ' .. v:exception)
Bram Moolenaar0daafaa2022-09-04 17:45:43 +0100126 let failed = 1
127 endtry
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200128 endif
129 endif
130 endwhile
131
132 if !failed
133 " Check the resulting text equals the .ok file.
RestorerZ8291e912024-03-16 15:08:53 +0100134 if getline(1, '$') != readfile(root .. '.ok')
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200135 let failed = 1
136 endif
137 endif
138
139 if failed
Bram Moolenaarcd670592019-09-18 22:14:43 +0200140 let failed_count += 1
RestorerZ8291e912024-03-16 15:08:53 +0100141 exe 'write ' .. root .. '.fail'
142 echoerr 'Test ' .. fname .. ' FAILED!'
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200143 else
RestorerZ8291e912024-03-16 15:08:53 +0100144 exe 'write ' .. root .. '.out'
145 echo "Test " .. fname .. " OK\n"
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200146 endif
147
RestorerZ8291e912024-03-16 15:08:53 +0100148 quit! " Close the indented file.
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200149 endif
150endfor
151
Bram Moolenaareeed6652018-12-15 17:43:42 +0100152" Matching "if 1" at the start.
153endif
154
Bram Moolenaarcd670592019-09-18 22:14:43 +0200155if failed_count > 0
RestorerZ8291e912024-03-16 15:08:53 +0100156 " Have make report an error.
Bram Moolenaarcd670592019-09-18 22:14:43 +0200157 cquit
158endif
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200159qall!