blob: 6bbd33cacdb552930614493492d9d776a12bd570 [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
Bram Moolenaareeed6652018-12-15 17:43:42 +01005" Only do this with the +eval feature
6if 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 Moolenaarc0fe4972018-10-25 16:53:19 +020014
15au! SwapExists * call HandleSwapExists()
16func HandleSwapExists()
17 " Ignore finding a swap file for the test input and output, the user might be
18 " editing them and that's OK.
19 if expand('<afile>') =~ '.*\.\(in\|out\|fail\|ok\)'
20 let v:swapchoice = 'e'
21 endif
22endfunc
23
Bram Moolenaarcd670592019-09-18 22:14:43 +020024let failed_count = 0
Bram Moolenaarc0fe4972018-10-25 16:53:19 +020025for fname in glob('testdir/*.in', 1, 1)
26 let root = substitute(fname, '\.in', '', '')
27
28 " Execute the test if the .out file does not exist of when the .in file is
29 " newer.
30 let in_time = getftime(fname)
31 let out_time = getftime(root . '.out')
32 if out_time < 0 || in_time > out_time
33 call delete(root . '.fail')
34 call delete(root . '.out')
35
36 set sw& ts& filetype=
37 exe 'split ' . fname
38
39 let did_some = 0
40 let failed = 0
41 let end = 1
42 while 1
43 " Indent all the lines between "START_INDENT" and "END_INDENT"
44 exe end
45 let start = search('\<START_INDENT\>')
46 let end = search('\<END_INDENT\>')
47 if start <= 0 || end <= 0 || end <= start
48 if did_some == 0
49 call append(0, 'ERROR: START_INDENT and/or END_INDENT not found')
50 let failed = 1
51 endif
52 break
53 else
54 let did_some = 1
55
56 " Execute all commands marked with INDENT_EXE and find any pattern.
57 let lnum = start
58 let pattern = ''
59 let at = ''
60 while 1
61 exe lnum + 1
62 let lnum_exe = search('\<INDENT_EXE\>')
63 exe lnum + 1
64 let indent_at = search('\<INDENT_\(AT\|NEXT\|PREV\)\>')
65 if lnum_exe > 0 && lnum_exe < end && (indent_at <= 0 || lnum_exe < indent_at)
66 exe substitute(getline(lnum_exe), '.*INDENT_EXE', '', '')
67 let lnum = lnum_exe
68 let start = lnum
69 elseif indent_at > 0 && indent_at < end
70 if pattern != ''
71 call append(indent_at, 'ERROR: duplicate pattern')
72 let failed = 1
73 break
74 endif
75 let text = getline(indent_at)
76 let pattern = substitute(text, '.*INDENT_\S*\s*', '', '')
77 let at = substitute(text, '.*INDENT_\(\S*\).*', '\1', '')
78 let lnum = indent_at
79 let start = lnum
80 else
81 break
82 endif
83 endwhile
84
85 exe start + 1
86 if pattern == ''
87 exe 'normal =' . (end - 1) . 'G'
88 else
89 let lnum = search(pattern)
90 if lnum <= 0
91 call append(indent_at, 'ERROR: pattern not found: ' . pattern)
92 let failed = 1
93 break
94 endif
95 if at == 'AT'
96 exe lnum
97 elseif at == 'NEXT'
98 exe lnum + 1
99 else
100 exe lnum - 1
101 endif
102 normal ==
103 endif
104 endif
105 endwhile
106
107 if !failed
108 " Check the resulting text equals the .ok file.
109 if getline(1, '$') != readfile(root . '.ok')
110 let failed = 1
111 endif
112 endif
113
114 if failed
Bram Moolenaarcd670592019-09-18 22:14:43 +0200115 let failed_count += 1
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200116 exe 'write ' . root . '.fail'
117 echoerr 'Test ' . fname . ' FAILED!'
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200118 else
119 exe 'write ' . root . '.out'
Bram Moolenaar32b364f2019-12-08 15:07:48 +0100120 echo "Test " . fname . " OK\n"
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200121 endif
122
123 quit! " close the indented file
124 endif
125endfor
126
Bram Moolenaareeed6652018-12-15 17:43:42 +0100127" Matching "if 1" at the start.
128endif
129
Bram Moolenaarcd670592019-09-18 22:14:43 +0200130if failed_count > 0
131 " have make report an error
132 cquit
133endif
Bram Moolenaarc0fe4972018-10-25 16:53:19 +0200134qall!