xref: /netbsd-src/external/bsd/atf/dist/tools/reader_test.cpp (revision ad23a81712ef29f8911becbb5b5ca2aee6441b2a)
1d780102eSjmmv //
2d780102eSjmmv // Automated Testing Framework (atf)
3d780102eSjmmv //
4d780102eSjmmv // Copyright (c) 2010 The NetBSD Foundation, Inc.
5d780102eSjmmv // All rights reserved.
6d780102eSjmmv //
7d780102eSjmmv // Redistribution and use in source and binary forms, with or without
8d780102eSjmmv // modification, are permitted provided that the following conditions
9d780102eSjmmv // are met:
10d780102eSjmmv // 1. Redistributions of source code must retain the above copyright
11d780102eSjmmv //    notice, this list of conditions and the following disclaimer.
12d780102eSjmmv // 2. Redistributions in binary form must reproduce the above copyright
13d780102eSjmmv //    notice, this list of conditions and the following disclaimer in the
14d780102eSjmmv //    documentation and/or other materials provided with the distribution.
15d780102eSjmmv //
16d780102eSjmmv // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17d780102eSjmmv // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18d780102eSjmmv // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19d780102eSjmmv // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20d780102eSjmmv // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21d780102eSjmmv // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22d780102eSjmmv // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23d780102eSjmmv // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24d780102eSjmmv // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25d780102eSjmmv // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26d780102eSjmmv // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27d780102eSjmmv // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28d780102eSjmmv //
29d780102eSjmmv 
30d780102eSjmmv #include <iostream>
31d780102eSjmmv #include <sstream>
32d780102eSjmmv #include <string>
33d780102eSjmmv #include <utility>
34d780102eSjmmv #include <vector>
35d780102eSjmmv 
36d780102eSjmmv #include <atf-c++.hpp>
37d780102eSjmmv 
38d780102eSjmmv #include "parser.hpp"
39d780102eSjmmv #include "reader.hpp"
40d780102eSjmmv #include "test_helpers.hpp"
41d780102eSjmmv #include "text.hpp"
42d780102eSjmmv 
43d780102eSjmmv namespace impl = tools::atf_report;
44d780102eSjmmv 
45d780102eSjmmv class tps_reader : protected impl::atf_tps_reader {
46d780102eSjmmv     void
got_info(const std::string & what,const std::string & val)47d780102eSjmmv     got_info(const std::string& what, const std::string& val)
48d780102eSjmmv     {
49d780102eSjmmv         m_calls.push_back("got_info(" + what + ", " + val + ")");
50d780102eSjmmv     }
51d780102eSjmmv 
52d780102eSjmmv     void
got_ntps(size_t ntps)53d780102eSjmmv     got_ntps(size_t ntps)
54d780102eSjmmv     {
55d780102eSjmmv         m_calls.push_back("got_ntps(" + tools::text::to_string(ntps) + ")");
56d780102eSjmmv     }
57d780102eSjmmv 
58d780102eSjmmv     void
got_tp_start(const std::string & tpname,size_t ntcs)59d780102eSjmmv     got_tp_start(const std::string& tpname, size_t ntcs)
60d780102eSjmmv     {
61d780102eSjmmv         m_calls.push_back("got_tp_start(" + tpname + ", " +
62d780102eSjmmv                           tools::text::to_string(ntcs) + ")");
63d780102eSjmmv     }
64d780102eSjmmv 
65d780102eSjmmv     void
got_tp_end(struct timeval * tv,const std::string & reason)66*ad23a817Sjmmv     got_tp_end(struct timeval* tv __attribute__((__unused__)),
67d780102eSjmmv                const std::string& reason)
68d780102eSjmmv     {
69d780102eSjmmv         m_calls.push_back("got_tp_end(" + reason + ")");
70d780102eSjmmv     }
71d780102eSjmmv 
72d780102eSjmmv     void
got_tc_start(const std::string & tcname)73d780102eSjmmv     got_tc_start(const std::string& tcname)
74d780102eSjmmv     {
75d780102eSjmmv         m_calls.push_back("got_tc_start(" + tcname + ")");
76d780102eSjmmv     }
77d780102eSjmmv 
78d780102eSjmmv     void
got_tc_end(const std::string & state,struct timeval * tv,const std::string & reason)79d780102eSjmmv     got_tc_end(const std::string& state,
80*ad23a817Sjmmv                struct timeval* tv __attribute__((__unused__)),
81d780102eSjmmv                const std::string& reason)
82d780102eSjmmv     {
83d780102eSjmmv         const std::string r = state + (reason.empty() ? "" : ", " + reason);
84d780102eSjmmv         m_calls.push_back("got_tc_end(" + r + ")");
85d780102eSjmmv     }
86d780102eSjmmv 
87d780102eSjmmv     void
got_tc_stdout_line(const std::string & line)88d780102eSjmmv     got_tc_stdout_line(const std::string& line)
89d780102eSjmmv     {
90d780102eSjmmv         m_calls.push_back("got_tc_stdout_line(" + line + ")");
91d780102eSjmmv     }
92d780102eSjmmv 
93d780102eSjmmv     void
got_tc_stderr_line(const std::string & line)94d780102eSjmmv     got_tc_stderr_line(const std::string& line)
95d780102eSjmmv     {
96d780102eSjmmv         m_calls.push_back("got_tc_stderr_line(" + line + ")");
97d780102eSjmmv     }
98d780102eSjmmv 
99d780102eSjmmv     void
got_eof(void)100d780102eSjmmv     got_eof(void)
101d780102eSjmmv     {
102d780102eSjmmv         m_calls.push_back("got_eof()");
103d780102eSjmmv     }
104d780102eSjmmv 
105d780102eSjmmv public:
tps_reader(std::istream & is)106d780102eSjmmv     tps_reader(std::istream& is) :
107d780102eSjmmv         impl::atf_tps_reader(is)
108d780102eSjmmv     {
109d780102eSjmmv     }
110d780102eSjmmv 
111d780102eSjmmv     void
read(void)112d780102eSjmmv     read(void)
113d780102eSjmmv     {
114d780102eSjmmv         atf_tps_reader::read();
115d780102eSjmmv     }
116d780102eSjmmv 
117d780102eSjmmv     std::vector< std::string > m_calls;
118d780102eSjmmv };
119d780102eSjmmv 
120d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_1);
ATF_TEST_CASE_BODY(tps_1)121d780102eSjmmv ATF_TEST_CASE_BODY(tps_1)
122d780102eSjmmv {
123d780102eSjmmv     const char* input =
124d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
125d780102eSjmmv         "\n"
126d780102eSjmmv         "tps-count: 0\n"
127d780102eSjmmv     ;
128d780102eSjmmv 
129d780102eSjmmv     const char* exp_calls[] = {
130d780102eSjmmv         "got_ntps(0)",
131d780102eSjmmv         "got_eof()",
132d780102eSjmmv         NULL
133d780102eSjmmv     };
134d780102eSjmmv 
135d780102eSjmmv     const char* exp_errors[] = {
136d780102eSjmmv         NULL
137d780102eSjmmv     };
138d780102eSjmmv 
139d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
140d780102eSjmmv }
141d780102eSjmmv 
142d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_2);
ATF_TEST_CASE_BODY(tps_2)143d780102eSjmmv ATF_TEST_CASE_BODY(tps_2)
144d780102eSjmmv {
145d780102eSjmmv     const char* input =
146d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
147d780102eSjmmv         "\n"
148d780102eSjmmv         "tps-count: 2\n"
149d780102eSjmmv         "tp-start: 123.456, first-prog, 0\n"
150d780102eSjmmv         "tp-end: 123.567, first-prog\n"
151d780102eSjmmv         "tp-start: 123.678, second-prog, 0\n"
152d780102eSjmmv         "tp-end: 123.789, second-prog, This program failed\n"
153d780102eSjmmv     ;
154d780102eSjmmv 
155d780102eSjmmv     const char* exp_calls[] = {
156d780102eSjmmv         "got_ntps(2)",
157d780102eSjmmv         "got_tp_start(first-prog, 0)",
158d780102eSjmmv         "got_tp_end()",
159d780102eSjmmv         "got_tp_start(second-prog, 0)",
160d780102eSjmmv         "got_tp_end(This program failed)",
161d780102eSjmmv         "got_eof()",
162d780102eSjmmv         NULL
163d780102eSjmmv     };
164d780102eSjmmv 
165d780102eSjmmv     const char* exp_errors[] = {
166d780102eSjmmv         NULL
167d780102eSjmmv     };
168d780102eSjmmv 
169d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
170d780102eSjmmv }
171d780102eSjmmv 
172d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_3);
ATF_TEST_CASE_BODY(tps_3)173d780102eSjmmv ATF_TEST_CASE_BODY(tps_3)
174d780102eSjmmv {
175d780102eSjmmv     const char* input =
176d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
177d780102eSjmmv         "\n"
178d780102eSjmmv         "tps-count: 2\n"
179d780102eSjmmv         "tp-start: 123.123, first-prog, 3\n"
180d780102eSjmmv         "tc-start: 123.234, first-test\n"
181d780102eSjmmv         "tc-end: 123.345, first-test, passed\n"
182d780102eSjmmv         "tc-start: 123.456, second-test\n"
183d780102eSjmmv         "tc-end: 123.567, second-test, skipped, Testing skipped reason\n"
184d780102eSjmmv         "tc-start: 123.678, third.test\n"
185d780102eSjmmv         "tc-end: 123.789, third.test, failed, Testing failed reason\n"
186d780102eSjmmv         "tp-end: 123.890, first-prog\n"
187d780102eSjmmv         "tp-start: 124.901, second-prog, 3\n"
188d780102eSjmmv         "tc-start: 124.1012, first-test\n"
189d780102eSjmmv         "tc-so:first stdout line for 1st test\n"
190d780102eSjmmv         "tc-se:first stderr line for 1st test\n"
191d780102eSjmmv         "tc-so:second stdout line for 1st test\n"
192d780102eSjmmv         "tc-se:second stderr line for 1st test\n"
193d780102eSjmmv         "tc-end: 124.1123, first-test, passed\n"
194d780102eSjmmv         "tc-start: 124.1234, second-test\n"
195d780102eSjmmv         "tc-so:first stdout line for 2nd test\n"
196d780102eSjmmv         "tc-se:first stderr line for 2nd test\n"
197d780102eSjmmv         "tc-so:second stdout line for 2nd test\n"
198d780102eSjmmv         "tc-se:second stderr line for 2nd test\n"
199d780102eSjmmv         "tc-end: 124.1345, second-test, skipped, Testing skipped reason\n"
200d780102eSjmmv         "tc-start: 124.1456, third.test\n"
201d780102eSjmmv         "tc-so:first stdout line for 3rd test\n"
202d780102eSjmmv         "tc-se:first stderr line for 3rd test\n"
203d780102eSjmmv         "tc-so:second stdout line for 3rd test\n"
204d780102eSjmmv         "tc-se:second stderr line for 3rd test\n"
205d780102eSjmmv         "tc-end: 124.1567, third.test, failed, Testing failed reason\n"
206d780102eSjmmv         "tp-end: 124.1678, second-prog, This program failed\n"
207d780102eSjmmv     ;
208d780102eSjmmv 
209d780102eSjmmv     const char* exp_calls[] = {
210d780102eSjmmv         "got_ntps(2)",
211d780102eSjmmv         "got_tp_start(first-prog, 3)",
212d780102eSjmmv         "got_tc_start(first-test)",
213d780102eSjmmv         "got_tc_end(passed)",
214d780102eSjmmv         "got_tc_start(second-test)",
215d780102eSjmmv         "got_tc_end(skipped, Testing skipped reason)",
216d780102eSjmmv         "got_tc_start(third.test)",
217d780102eSjmmv         "got_tc_end(failed, Testing failed reason)",
218d780102eSjmmv         "got_tp_end()",
219d780102eSjmmv         "got_tp_start(second-prog, 3)",
220d780102eSjmmv         "got_tc_start(first-test)",
221d780102eSjmmv         "got_tc_stdout_line(first stdout line for 1st test)",
222d780102eSjmmv         "got_tc_stderr_line(first stderr line for 1st test)",
223d780102eSjmmv         "got_tc_stdout_line(second stdout line for 1st test)",
224d780102eSjmmv         "got_tc_stderr_line(second stderr line for 1st test)",
225d780102eSjmmv         "got_tc_end(passed)",
226d780102eSjmmv         "got_tc_start(second-test)",
227d780102eSjmmv         "got_tc_stdout_line(first stdout line for 2nd test)",
228d780102eSjmmv         "got_tc_stderr_line(first stderr line for 2nd test)",
229d780102eSjmmv         "got_tc_stdout_line(second stdout line for 2nd test)",
230d780102eSjmmv         "got_tc_stderr_line(second stderr line for 2nd test)",
231d780102eSjmmv         "got_tc_end(skipped, Testing skipped reason)",
232d780102eSjmmv         "got_tc_start(third.test)",
233d780102eSjmmv         "got_tc_stdout_line(first stdout line for 3rd test)",
234d780102eSjmmv         "got_tc_stderr_line(first stderr line for 3rd test)",
235d780102eSjmmv         "got_tc_stdout_line(second stdout line for 3rd test)",
236d780102eSjmmv         "got_tc_stderr_line(second stderr line for 3rd test)",
237d780102eSjmmv         "got_tc_end(failed, Testing failed reason)",
238d780102eSjmmv         "got_tp_end(This program failed)",
239d780102eSjmmv         "got_eof()",
240d780102eSjmmv         NULL
241d780102eSjmmv     };
242d780102eSjmmv 
243d780102eSjmmv     const char* exp_errors[] = {
244d780102eSjmmv         NULL
245d780102eSjmmv     };
246d780102eSjmmv 
247d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
248d780102eSjmmv }
249d780102eSjmmv 
250d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_4);
ATF_TEST_CASE_BODY(tps_4)251d780102eSjmmv ATF_TEST_CASE_BODY(tps_4)
252d780102eSjmmv {
253d780102eSjmmv     const char* input =
254d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
255d780102eSjmmv         "\n"
256d780102eSjmmv         "info: a, foo\n"
257d780102eSjmmv         "info: b, bar\n"
258d780102eSjmmv         "info: c, baz\n"
259d780102eSjmmv         "tps-count: 2\n"
260d780102eSjmmv         "tp-start: 234.1, first-prog, 3\n"
261d780102eSjmmv         "tc-start: 234.12, first-test\n"
262d780102eSjmmv         "tc-end: 234.23, first-test, passed\n"
263d780102eSjmmv         "tc-start: 234.34, second-test\n"
264d780102eSjmmv         "tc-end: 234.45, second-test, skipped, Testing skipped reason\n"
265d780102eSjmmv         "tc-start: 234.56, third-test\n"
266d780102eSjmmv         "tc-end: 234.67, third-test, failed, Testing failed reason\n"
267d780102eSjmmv         "tp-end: 234.78, first-prog\n"
268d780102eSjmmv         "tp-start: 234.89, second-prog, 3\n"
269d780102eSjmmv         "tc-start: 234.90, first-test\n"
270d780102eSjmmv         "tc-so:first stdout line for 1st test\n"
271d780102eSjmmv         "tc-se:first stderr line for 1st test\n"
272d780102eSjmmv         "tc-so:second stdout line for 1st test\n"
273d780102eSjmmv         "tc-se:second stderr line for 1st test\n"
274d780102eSjmmv         "tc-end: 234.101, first-test, passed\n"
275d780102eSjmmv         "tc-start: 234.112, second-test\n"
276d780102eSjmmv         "tc-so:first stdout line for 2nd test\n"
277d780102eSjmmv         "tc-se:first stderr line for 2nd test\n"
278d780102eSjmmv         "tc-so:second stdout line for 2nd test\n"
279d780102eSjmmv         "tc-se:second stderr line for 2nd test\n"
280d780102eSjmmv         "tc-end: 234.123, second-test, skipped, Testing skipped reason\n"
281d780102eSjmmv         "tc-start: 234.134, third-test\n"
282d780102eSjmmv         "tc-so:first stdout line for 3rd test\n"
283d780102eSjmmv         "tc-se:first stderr line for 3rd test\n"
284d780102eSjmmv         "tc-so:second stdout line for 3rd test\n"
285d780102eSjmmv         "tc-se:second stderr line for 3rd test\n"
286d780102eSjmmv         "tc-end: 234.145, third-test, failed, Testing failed reason\n"
287d780102eSjmmv         "tp-end: 234.156, second-prog, This program failed\n"
288d780102eSjmmv         "info: d, foo\n"
289d780102eSjmmv         "info: e, bar\n"
290d780102eSjmmv         "info: f, baz\n"
291d780102eSjmmv     ;
292d780102eSjmmv 
293d780102eSjmmv     const char* exp_calls[] = {
294d780102eSjmmv         "got_info(a, foo)",
295d780102eSjmmv         "got_info(b, bar)",
296d780102eSjmmv         "got_info(c, baz)",
297d780102eSjmmv         "got_ntps(2)",
298d780102eSjmmv         "got_tp_start(first-prog, 3)",
299d780102eSjmmv         "got_tc_start(first-test)",
300d780102eSjmmv         "got_tc_end(passed)",
301d780102eSjmmv         "got_tc_start(second-test)",
302d780102eSjmmv         "got_tc_end(skipped, Testing skipped reason)",
303d780102eSjmmv         "got_tc_start(third-test)",
304d780102eSjmmv         "got_tc_end(failed, Testing failed reason)",
305d780102eSjmmv         "got_tp_end()",
306d780102eSjmmv         "got_tp_start(second-prog, 3)",
307d780102eSjmmv         "got_tc_start(first-test)",
308d780102eSjmmv         "got_tc_stdout_line(first stdout line for 1st test)",
309d780102eSjmmv         "got_tc_stderr_line(first stderr line for 1st test)",
310d780102eSjmmv         "got_tc_stdout_line(second stdout line for 1st test)",
311d780102eSjmmv         "got_tc_stderr_line(second stderr line for 1st test)",
312d780102eSjmmv         "got_tc_end(passed)",
313d780102eSjmmv         "got_tc_start(second-test)",
314d780102eSjmmv         "got_tc_stdout_line(first stdout line for 2nd test)",
315d780102eSjmmv         "got_tc_stderr_line(first stderr line for 2nd test)",
316d780102eSjmmv         "got_tc_stdout_line(second stdout line for 2nd test)",
317d780102eSjmmv         "got_tc_stderr_line(second stderr line for 2nd test)",
318d780102eSjmmv         "got_tc_end(skipped, Testing skipped reason)",
319d780102eSjmmv         "got_tc_start(third-test)",
320d780102eSjmmv         "got_tc_stdout_line(first stdout line for 3rd test)",
321d780102eSjmmv         "got_tc_stderr_line(first stderr line for 3rd test)",
322d780102eSjmmv         "got_tc_stdout_line(second stdout line for 3rd test)",
323d780102eSjmmv         "got_tc_stderr_line(second stderr line for 3rd test)",
324d780102eSjmmv         "got_tc_end(failed, Testing failed reason)",
325d780102eSjmmv         "got_tp_end(This program failed)",
326d780102eSjmmv         "got_info(d, foo)",
327d780102eSjmmv         "got_info(e, bar)",
328d780102eSjmmv         "got_info(f, baz)",
329d780102eSjmmv         "got_eof()",
330d780102eSjmmv         NULL
331d780102eSjmmv     };
332d780102eSjmmv 
333d780102eSjmmv     const char* exp_errors[] = {
334d780102eSjmmv         NULL
335d780102eSjmmv     };
336d780102eSjmmv 
337d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
338d780102eSjmmv }
339d780102eSjmmv 
340d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_5);
ATF_TEST_CASE_BODY(tps_5)341d780102eSjmmv ATF_TEST_CASE_BODY(tps_5)
342d780102eSjmmv {
343d780102eSjmmv     const char* input =
344d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
345d780102eSjmmv         "\n"
346d780102eSjmmv         "tps-count: 1\n"
347d780102eSjmmv         "tp-start: 345.123, the-prog, 1\n"
348d780102eSjmmv         "tc-start: 345.134, the-test\n"
349d780102eSjmmv         "tc-so:--- a	2007-11-04 14:00:41.000000000 +0100\n"
350d780102eSjmmv         "tc-so:+++ b	2007-11-04 14:00:48.000000000 +0100\n"
351d780102eSjmmv         "tc-so:@@ -1,7 +1,7 @@\n"
352d780102eSjmmv         "tc-so: This test is meant to simulate a diff.\n"
353d780102eSjmmv         "tc-so: Blank space at beginning of context lines must be preserved.\n"
354d780102eSjmmv         "tc-so: \n"
355d780102eSjmmv         "tc-so:-First original line.\n"
356d780102eSjmmv         "tc-so:-Second original line.\n"
357d780102eSjmmv         "tc-so:+First modified line.\n"
358d780102eSjmmv         "tc-so:+Second modified line.\n"
359d780102eSjmmv         "tc-so: \n"
360d780102eSjmmv         "tc-so: EOF\n"
361d780102eSjmmv         "tc-end: 345.145, the-test, passed\n"
362d780102eSjmmv         "tp-end: 345.156, the-prog\n"
363d780102eSjmmv     ;
364d780102eSjmmv 
365d780102eSjmmv     // NO_CHECK_STYLE_BEGIN
366d780102eSjmmv     const char* exp_calls[] = {
367d780102eSjmmv         "got_ntps(1)",
368d780102eSjmmv         "got_tp_start(the-prog, 1)",
369d780102eSjmmv         "got_tc_start(the-test)",
370d780102eSjmmv         "got_tc_stdout_line(--- a	2007-11-04 14:00:41.000000000 +0100)",
371d780102eSjmmv         "got_tc_stdout_line(+++ b	2007-11-04 14:00:48.000000000 +0100)",
372d780102eSjmmv         "got_tc_stdout_line(@@ -1,7 +1,7 @@)",
373d780102eSjmmv         "got_tc_stdout_line( This test is meant to simulate a diff.)",
374d780102eSjmmv         "got_tc_stdout_line( Blank space at beginning of context lines must be preserved.)",
375d780102eSjmmv         "got_tc_stdout_line( )",
376d780102eSjmmv         "got_tc_stdout_line(-First original line.)",
377d780102eSjmmv         "got_tc_stdout_line(-Second original line.)",
378d780102eSjmmv         "got_tc_stdout_line(+First modified line.)",
379d780102eSjmmv         "got_tc_stdout_line(+Second modified line.)",
380d780102eSjmmv         "got_tc_stdout_line( )",
381d780102eSjmmv         "got_tc_stdout_line( EOF)",
382d780102eSjmmv         "got_tc_end(passed)",
383d780102eSjmmv         "got_tp_end()",
384d780102eSjmmv         "got_eof()",
385d780102eSjmmv         NULL
386d780102eSjmmv     };
387d780102eSjmmv     // NO_CHECK_STYLE_END
388d780102eSjmmv 
389d780102eSjmmv     const char* exp_errors[] = {
390d780102eSjmmv         NULL
391d780102eSjmmv     };
392d780102eSjmmv 
393d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
394d780102eSjmmv }
395d780102eSjmmv 
396d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_6);
ATF_TEST_CASE_BODY(tps_6)397d780102eSjmmv ATF_TEST_CASE_BODY(tps_6)
398d780102eSjmmv {
399d780102eSjmmv     const char* input =
400d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
401d780102eSjmmv         "\n"
402d780102eSjmmv         "tps-count: 1\n"
403d780102eSjmmv         "tp-start: 321.1, the-prog, 8\n"
404d780102eSjmmv         "tc-start: 321.12, one\n"
405d780102eSjmmv         "tc-end: 321.23, one, expected_death, The reason\n"
406d780102eSjmmv         "tc-start: 321.34, two\n"
407d780102eSjmmv         "tc-end: 321.45, two, expected_exit, This would be an exit\n"
408d780102eSjmmv         "tc-start: 321.56, three\n"
409d780102eSjmmv         "tc-end: 321.67, three, expected_failure, And this a failure\n"
410d780102eSjmmv         "tc-start: 321.78, four\n"
411d780102eSjmmv         "tc-end: 321.89, four, expected_signal, And this a signal\n"
412d780102eSjmmv         "tc-start: 321.90, five\n"
413d780102eSjmmv         "tc-end: 321.101, five, failed, Another reason\n"
414d780102eSjmmv         "tc-start: 321.112, six\n"
415d780102eSjmmv         "tc-end: 321.123, six, passed\n"
416d780102eSjmmv         "tc-start: 321.134, seven\n"
417d780102eSjmmv         "tc-end: 321.145, seven, skipped, Skipping it\n"
418d780102eSjmmv         "tc-start: 321.156, eight\n"
419d780102eSjmmv         "tc-end: 321.167, eight, expected_timeout, Some hang reason\n"
420d780102eSjmmv         "tp-end: 321.178, the-prog\n"
421d780102eSjmmv     ;
422d780102eSjmmv 
423d780102eSjmmv     // NO_CHECK_STYLE_BEGIN
424d780102eSjmmv     const char* exp_calls[] = {
425d780102eSjmmv         "got_ntps(1)",
426d780102eSjmmv         "got_tp_start(the-prog, 8)",
427d780102eSjmmv         "got_tc_start(one)",
428d780102eSjmmv         "got_tc_end(expected_death, The reason)",
429d780102eSjmmv         "got_tc_start(two)",
430d780102eSjmmv         "got_tc_end(expected_exit, This would be an exit)",
431d780102eSjmmv         "got_tc_start(three)",
432d780102eSjmmv         "got_tc_end(expected_failure, And this a failure)",
433d780102eSjmmv         "got_tc_start(four)",
434d780102eSjmmv         "got_tc_end(expected_signal, And this a signal)",
435d780102eSjmmv         "got_tc_start(five)",
436d780102eSjmmv         "got_tc_end(failed, Another reason)",
437d780102eSjmmv         "got_tc_start(six)",
438d780102eSjmmv         "got_tc_end(passed)",
439d780102eSjmmv         "got_tc_start(seven)",
440d780102eSjmmv         "got_tc_end(skipped, Skipping it)",
441d780102eSjmmv         "got_tc_start(eight)",
442d780102eSjmmv         "got_tc_end(expected_timeout, Some hang reason)",
443d780102eSjmmv         "got_tp_end()",
444d780102eSjmmv         "got_eof()",
445d780102eSjmmv         NULL
446d780102eSjmmv     };
447d780102eSjmmv     // NO_CHECK_STYLE_END
448d780102eSjmmv 
449d780102eSjmmv     const char* exp_errors[] = {
450d780102eSjmmv         NULL
451d780102eSjmmv     };
452d780102eSjmmv 
453d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
454d780102eSjmmv }
455d780102eSjmmv 
456d780102eSjmmv 
457d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_50);
ATF_TEST_CASE_BODY(tps_50)458d780102eSjmmv ATF_TEST_CASE_BODY(tps_50)
459d780102eSjmmv {
460d780102eSjmmv     const char* input =
461d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
462d780102eSjmmv         "\n"
463d780102eSjmmv         "foo\n"
464d780102eSjmmv     ;
465d780102eSjmmv 
466d780102eSjmmv     const char* exp_calls[] = {
467d780102eSjmmv         NULL
468d780102eSjmmv     };
469d780102eSjmmv 
470d780102eSjmmv     const char* exp_errors[] = {
471d780102eSjmmv         "3: Unexpected token `foo'; expected tps-count or info field",
472d780102eSjmmv         NULL
473d780102eSjmmv     };
474d780102eSjmmv 
475d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
476d780102eSjmmv }
477d780102eSjmmv 
478d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_51);
ATF_TEST_CASE_BODY(tps_51)479d780102eSjmmv ATF_TEST_CASE_BODY(tps_51)
480d780102eSjmmv {
481d780102eSjmmv     const char* input =
482d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
483d780102eSjmmv         "\n"
484d780102eSjmmv         "tps-count\n"
485d780102eSjmmv     ;
486d780102eSjmmv 
487d780102eSjmmv     const char* exp_calls[] = {
488d780102eSjmmv         NULL
489d780102eSjmmv     };
490d780102eSjmmv 
491d780102eSjmmv     const char* exp_errors[] = {
492d780102eSjmmv         "3: Unexpected token `<<NEWLINE>>'; expected `:'",
493d780102eSjmmv         NULL
494d780102eSjmmv     };
495d780102eSjmmv 
496d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
497d780102eSjmmv }
498d780102eSjmmv 
499d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_52);
ATF_TEST_CASE_BODY(tps_52)500d780102eSjmmv ATF_TEST_CASE_BODY(tps_52)
501d780102eSjmmv {
502d780102eSjmmv     const char* input =
503d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
504d780102eSjmmv         "\n"
505d780102eSjmmv         "tps-count:\n"
506d780102eSjmmv     ;
507d780102eSjmmv 
508d780102eSjmmv     const char* exp_calls[] = {
509d780102eSjmmv         NULL
510d780102eSjmmv     };
511d780102eSjmmv 
512d780102eSjmmv     const char* exp_errors[] = {
513d780102eSjmmv         "3: Unexpected token `<<NEWLINE>>'; expected number of test programs",
514d780102eSjmmv         NULL
515d780102eSjmmv     };
516d780102eSjmmv 
517d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
518d780102eSjmmv }
519d780102eSjmmv 
520d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_53);
ATF_TEST_CASE_BODY(tps_53)521d780102eSjmmv ATF_TEST_CASE_BODY(tps_53)
522d780102eSjmmv {
523d780102eSjmmv     const char* input =
524d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
525d780102eSjmmv         "\n"
526d780102eSjmmv         "tps-count: 1\n"
527d780102eSjmmv         "foo\n"
528d780102eSjmmv     ;
529d780102eSjmmv 
530d780102eSjmmv     const char* exp_calls[] = {
531d780102eSjmmv         "got_ntps(1)",
532d780102eSjmmv         NULL
533d780102eSjmmv     };
534d780102eSjmmv 
535d780102eSjmmv     const char* exp_errors[] = {
536d780102eSjmmv         "4: Unexpected token `foo'; expected start of test program",
537d780102eSjmmv         NULL
538d780102eSjmmv     };
539d780102eSjmmv 
540d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
541d780102eSjmmv }
542d780102eSjmmv 
543d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_54);
ATF_TEST_CASE_BODY(tps_54)544d780102eSjmmv ATF_TEST_CASE_BODY(tps_54)
545d780102eSjmmv {
546d780102eSjmmv     const char* input =
547d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
548d780102eSjmmv         "\n"
549d780102eSjmmv         "tps-count: 1\n"
550d780102eSjmmv         "foo\n"
551d780102eSjmmv         "tp-start\n"
552d780102eSjmmv         "tp-start:\n"
553d780102eSjmmv         "tp-start: 123\n"
554d780102eSjmmv         "tp-start: 123.\n"
555d780102eSjmmv         "tp-start: 123.456\n"
556d780102eSjmmv         "tp-start: 123.456,\n"
557d780102eSjmmv         "tp-start: 123.456, foo\n"
558d780102eSjmmv         "tp-start: 123.456, foo,\n"
559d780102eSjmmv         "tp-start: 123.456, foo, 0\n"
560d780102eSjmmv         "bar\n"
561d780102eSjmmv         "tp-start: 456.789, foo, 0\n"
562d780102eSjmmv         "tp-end\n"
563d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
564d780102eSjmmv         "tp-end:\n"
565d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
566d780102eSjmmv         "tp-end: 777\n"
567d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
568d780102eSjmmv         "tp-end: 777.\n"
569d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
570d780102eSjmmv         "tp-end: 777.888\n"
571d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
572d780102eSjmmv         "tp-end: 777.888, \n"
573d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
574d780102eSjmmv         "tp-end: 777.888, bar\n"
575d780102eSjmmv         "tp-start: 777.777, foo, 0\n"
576d780102eSjmmv         "tp-end: 777.888, foo,\n"
577d780102eSjmmv     ;
578d780102eSjmmv 
579d780102eSjmmv     const char* exp_calls[] = {
580d780102eSjmmv         "got_ntps(1)",
581d780102eSjmmv         NULL
582d780102eSjmmv     };
583d780102eSjmmv 
584d780102eSjmmv     const char* exp_errors[] = {
585d780102eSjmmv         "4: Unexpected token `foo'; expected start of test program",
586d780102eSjmmv         "5: Unexpected token `<<NEWLINE>>'; expected `:'",
587d780102eSjmmv         "6: Unexpected token `<<NEWLINE>>'; expected timestamp",
588d780102eSjmmv         "7: Malformed timestamp value 123",
589d780102eSjmmv         "8: Malformed timestamp value 123.",
590d780102eSjmmv         "9: Unexpected token `<<NEWLINE>>'; expected `,'",
591d780102eSjmmv         "10: Unexpected token `<<NEWLINE>>'; expected test program name",
592d780102eSjmmv         "11: Unexpected token `<<NEWLINE>>'; expected `,'",
593d780102eSjmmv         "12: Unexpected token `<<NEWLINE>>'; expected number of test programs",
594d780102eSjmmv         "14: Unexpected token `bar'; expected end of test program",
595d780102eSjmmv         "16: Unexpected token `<<NEWLINE>>'; expected `:'",
596d780102eSjmmv         "18: Unexpected token `<<NEWLINE>>'; expected timestamp",
597d780102eSjmmv         "20: Malformed timestamp value 777",
598d780102eSjmmv         "22: Malformed timestamp value 777.",
599d780102eSjmmv         "24: Unexpected token `<<NEWLINE>>'; expected `,'",
600d780102eSjmmv 
601d780102eSjmmv         "26: Unexpected token `<<NEWLINE>>'; expected test program name",
602d780102eSjmmv         "28: Test program name used in terminator does not match opening",
603d780102eSjmmv         "30: Empty reason for failed test program",
604d780102eSjmmv         NULL
605d780102eSjmmv     };
606d780102eSjmmv 
607d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
608d780102eSjmmv }
609d780102eSjmmv 
610d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_55);
ATF_TEST_CASE_BODY(tps_55)611d780102eSjmmv ATF_TEST_CASE_BODY(tps_55)
612d780102eSjmmv {
613d780102eSjmmv     const char* input =
614d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
615d780102eSjmmv         "\n"
616d780102eSjmmv         "tps-count: 1\n"
617d780102eSjmmv         "tp-start: 100.200, foo, 1\n"
618d780102eSjmmv         "foo\n"
619d780102eSjmmv         "tc-start\n"
620d780102eSjmmv         "tc-start:\n"
621d780102eSjmmv         "tc-start: 111\n"
622d780102eSjmmv         "tc-start: 111.\n"
623d780102eSjmmv         "tc-start: 111.222\n"
624d780102eSjmmv         "tc-start: 111.222,\n"
625d780102eSjmmv         "tc-start: 111.222, foo\n"
626d780102eSjmmv         "bar\n"
627d780102eSjmmv         "tc-start: 111.333, foo\n"
628d780102eSjmmv         "tc-end\n"
629d780102eSjmmv         "tc-start: 111.444, foo\n"
630d780102eSjmmv         "tc-end:\n"
631d780102eSjmmv         "tc-start: 111.444, foo\n"
632d780102eSjmmv         "tc-end: 111\n"
633d780102eSjmmv         "tc-start: 111.444, foo\n"
634d780102eSjmmv         "tc-end: 111.\n"
635d780102eSjmmv         "tc-start: 111.444, foo\n"
636d780102eSjmmv         "tc-end: 111.555\n"
637d780102eSjmmv         "tc-start: 111.444, foo\n"
638d780102eSjmmv         "tc-end: 111.555, \n"
639d780102eSjmmv         "tc-start: 111.444, foo\n"
640d780102eSjmmv         "tc-end: 111.555, bar\n"
641d780102eSjmmv         "tc-start: 111.444, foo\n"
642d780102eSjmmv         "tc-end: 111.555, foo\n"
643d780102eSjmmv         "tc-start: 111.444, foo\n"
644d780102eSjmmv         "tc-end: 111.555, foo,\n"
645d780102eSjmmv         "tp-end: 111.666, foo\n"
646d780102eSjmmv     ;
647d780102eSjmmv 
648d780102eSjmmv     const char* exp_calls[] = {
649d780102eSjmmv         "got_ntps(1)",
650d780102eSjmmv         "got_tp_start(foo, 1)",
651d780102eSjmmv         NULL
652d780102eSjmmv     };
653d780102eSjmmv 
654d780102eSjmmv     // NO_CHECK_STYLE_BEGIN
655d780102eSjmmv     const char* exp_errors[] = {
656d780102eSjmmv         "5: Unexpected token `foo'; expected start of test case",
657d780102eSjmmv         "6: Unexpected token `<<NEWLINE>>'; expected `:'",
658d780102eSjmmv         "7: Unexpected token `<<NEWLINE>>'; expected timestamp",
659d780102eSjmmv         "8: Malformed timestamp value 111",
660d780102eSjmmv         "9: Malformed timestamp value 111.",
661d780102eSjmmv         "10: Unexpected token `<<NEWLINE>>'; expected `,'",
662d780102eSjmmv         "11: Unexpected token `<<NEWLINE>>'; expected test case name",
663d780102eSjmmv         "13: Unexpected token `bar'; expected end of test case or test case's stdout/stderr line",
664d780102eSjmmv         "15: Unexpected token `<<NEWLINE>>'; expected `:'",
665d780102eSjmmv         "17: Unexpected token `<<NEWLINE>>'; expected timestamp",
666d780102eSjmmv         "19: Malformed timestamp value 111",
667d780102eSjmmv         "21: Malformed timestamp value 111.",
668d780102eSjmmv         "23: Unexpected token `<<NEWLINE>>'; expected `,'",
669d780102eSjmmv         "25: Unexpected token `<<NEWLINE>>'; expected test case name",
670d780102eSjmmv         "27: Test case name used in terminator does not match opening",
671d780102eSjmmv         "29: Unexpected token `<<NEWLINE>>'; expected `,'",
672d780102eSjmmv         "31: Unexpected token `<<NEWLINE>>'; expected expected_{death,exit,failure,signal,timeout}, failed, passed or skipped",
673d780102eSjmmv         "32: Unexpected token `tp-end'; expected start of test case",
674d780102eSjmmv         NULL
675d780102eSjmmv     };
676d780102eSjmmv     // NO_CHECK_STYLE_END
677d780102eSjmmv 
678d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
679d780102eSjmmv }
680d780102eSjmmv 
681d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_56);
ATF_TEST_CASE_BODY(tps_56)682d780102eSjmmv ATF_TEST_CASE_BODY(tps_56)
683d780102eSjmmv {
684d780102eSjmmv     const char* input =
685d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
686d780102eSjmmv         "\n"
687d780102eSjmmv         "tps-count: 1\n"
688d780102eSjmmv         "tp-start: 111.222, foo, 1\n"
689d780102eSjmmv         "tc-start: 111.333, foo\n"
690d780102eSjmmv         "tc-end: 111.444, foo, passe\n"
691d780102eSjmmv         "tc-start: 111.333, foo\n"
692d780102eSjmmv         "tc-end: 111.444, foo, passed,\n"
693d780102eSjmmv         "tc-start: 111.555, bar\n"
694d780102eSjmmv         "tc-end: 111.666, bar, failed\n"
695d780102eSjmmv         "tc-start: 111.555, bar\n"
696d780102eSjmmv         "tc-end: 111.666, bar, failed,\n"
697d780102eSjmmv         "tc-start: 111.555, baz\n"
698d780102eSjmmv         "tc-end: 111.666, baz, skipped\n"
699d780102eSjmmv         "tc-start: 111.555, baz\n"
700d780102eSjmmv         "tc-end: 111.666, baz, skipped,\n"
701d780102eSjmmv         "tp-end: 111.777, foo\n"
702d780102eSjmmv     ;
703d780102eSjmmv 
704d780102eSjmmv     const char* exp_calls[] = {
705d780102eSjmmv         "got_ntps(1)",
706d780102eSjmmv         "got_tp_start(foo, 1)",
707d780102eSjmmv         "got_tc_start(foo)",
708d780102eSjmmv         NULL
709d780102eSjmmv     };
710d780102eSjmmv 
711d780102eSjmmv     // NO_CHECK_STYLE_BEGIN
712d780102eSjmmv     const char* exp_errors[] = {
713d780102eSjmmv         "6: Unexpected token `passe'; expected expected_{death,exit,failure,signal,timeout}, failed, passed or skipped",
714d780102eSjmmv         "8: Unexpected token `,'; expected new line",
715d780102eSjmmv         "10: Unexpected token `<<NEWLINE>>'; expected `,'",
716d780102eSjmmv         "12: Empty reason for failed test case result",
717d780102eSjmmv         "14: Unexpected token `<<NEWLINE>>'; expected `,'",
718d780102eSjmmv         "16: Empty reason for skipped test case result",
719d780102eSjmmv         "17: Unexpected token `tp-end'; expected start of test case",
720d780102eSjmmv         NULL
721d780102eSjmmv     };
722d780102eSjmmv     // NO_CHECK_STYLE_END
723d780102eSjmmv 
724d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
725d780102eSjmmv }
726d780102eSjmmv 
727d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_57);
ATF_TEST_CASE_BODY(tps_57)728d780102eSjmmv ATF_TEST_CASE_BODY(tps_57)
729d780102eSjmmv {
730d780102eSjmmv     const char* input =
731d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
732d780102eSjmmv         "\n"
733d780102eSjmmv         "tps-count: 2\n"
734d780102eSjmmv         "tp-start: 111.222, foo, 0\n"
735d780102eSjmmv         "tp-end: 111.333, foo\n"
736d780102eSjmmv     ;
737d780102eSjmmv 
738d780102eSjmmv     const char* exp_calls[] = {
739d780102eSjmmv         "got_ntps(2)",
740d780102eSjmmv         "got_tp_start(foo, 0)",
741d780102eSjmmv         "got_tp_end()",
742d780102eSjmmv         NULL
743d780102eSjmmv     };
744d780102eSjmmv 
745d780102eSjmmv     const char* exp_errors[] = {
746d780102eSjmmv         "6: Unexpected token `<<EOF>>'; expected start of test program",
747d780102eSjmmv         NULL
748d780102eSjmmv     };
749d780102eSjmmv 
750d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
751d780102eSjmmv }
752d780102eSjmmv 
753d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_58);
ATF_TEST_CASE_BODY(tps_58)754d780102eSjmmv ATF_TEST_CASE_BODY(tps_58)
755d780102eSjmmv {
756d780102eSjmmv     const char* input =
757d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
758d780102eSjmmv         "\n"
759d780102eSjmmv         "tps-count: 1\n"
760d780102eSjmmv         "tp-start: 111.222, foo, 0\n"
761d780102eSjmmv         "tp-end: 111.333, foo\n"
762d780102eSjmmv         "tp-start: 111.444, bar, 0\n"
763d780102eSjmmv         "tp-end: 111.555, bar\n"
764d780102eSjmmv     ;
765d780102eSjmmv 
766d780102eSjmmv     const char* exp_calls[] = {
767d780102eSjmmv         "got_ntps(1)",
768d780102eSjmmv         "got_tp_start(foo, 0)",
769d780102eSjmmv         "got_tp_end()",
770d780102eSjmmv         NULL
771d780102eSjmmv     };
772d780102eSjmmv 
773d780102eSjmmv     const char* exp_errors[] = {
774d780102eSjmmv         "6: Unexpected token `tp-start'; expected end of stream or info field",
775d780102eSjmmv         NULL
776d780102eSjmmv     };
777d780102eSjmmv 
778d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
779d780102eSjmmv }
780d780102eSjmmv 
781d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_59);
ATF_TEST_CASE_BODY(tps_59)782d780102eSjmmv ATF_TEST_CASE_BODY(tps_59)
783d780102eSjmmv {
784d780102eSjmmv     const char* input =
785d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
786d780102eSjmmv         "\n"
787d780102eSjmmv         "info\n"
788d780102eSjmmv     ;
789d780102eSjmmv 
790d780102eSjmmv     const char* exp_calls[] = {
791d780102eSjmmv         NULL
792d780102eSjmmv     };
793d780102eSjmmv 
794d780102eSjmmv     const char* exp_errors[] = {
795d780102eSjmmv         "3: Unexpected token `<<NEWLINE>>'; expected `:'",
796d780102eSjmmv         NULL
797d780102eSjmmv     };
798d780102eSjmmv 
799d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
800d780102eSjmmv }
801d780102eSjmmv 
802d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_60);
ATF_TEST_CASE_BODY(tps_60)803d780102eSjmmv ATF_TEST_CASE_BODY(tps_60)
804d780102eSjmmv {
805d780102eSjmmv     const char* input =
806d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
807d780102eSjmmv         "\n"
808d780102eSjmmv         "info:\n"
809d780102eSjmmv     ;
810d780102eSjmmv 
811d780102eSjmmv     const char* exp_calls[] = {
812d780102eSjmmv         NULL
813d780102eSjmmv     };
814d780102eSjmmv 
815d780102eSjmmv     const char* exp_errors[] = {
816d780102eSjmmv         "3: Unexpected token `<<NEWLINE>>'; expected info property name",
817d780102eSjmmv         NULL
818d780102eSjmmv     };
819d780102eSjmmv 
820d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
821d780102eSjmmv }
822d780102eSjmmv 
823d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_61);
ATF_TEST_CASE_BODY(tps_61)824d780102eSjmmv ATF_TEST_CASE_BODY(tps_61)
825d780102eSjmmv {
826d780102eSjmmv     const char* input =
827d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
828d780102eSjmmv         "\n"
829d780102eSjmmv         "info: a\n"
830d780102eSjmmv     ;
831d780102eSjmmv 
832d780102eSjmmv     const char* exp_calls[] = {
833d780102eSjmmv         NULL
834d780102eSjmmv     };
835d780102eSjmmv 
836d780102eSjmmv     const char* exp_errors[] = {
837d780102eSjmmv         "3: Unexpected token `<<NEWLINE>>'; expected `,'",
838d780102eSjmmv         NULL
839d780102eSjmmv     };
840d780102eSjmmv 
841d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
842d780102eSjmmv }
843d780102eSjmmv 
844d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_62);
ATF_TEST_CASE_BODY(tps_62)845d780102eSjmmv ATF_TEST_CASE_BODY(tps_62)
846d780102eSjmmv {
847d780102eSjmmv     const char* input =
848d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
849d780102eSjmmv         "\n"
850d780102eSjmmv         "info: a,\n"
851d780102eSjmmv     ;
852d780102eSjmmv 
853d780102eSjmmv     const char* exp_calls[] = {
854d780102eSjmmv         "got_info(a, )",
855d780102eSjmmv         NULL
856d780102eSjmmv     };
857d780102eSjmmv 
858d780102eSjmmv     const char* exp_errors[] = {
859d780102eSjmmv         "4: Unexpected token `<<EOF>>'; expected tps-count or info field",
860d780102eSjmmv         NULL
861d780102eSjmmv     };
862d780102eSjmmv 
863d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
864d780102eSjmmv }
865d780102eSjmmv 
866d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_63);
ATF_TEST_CASE_BODY(tps_63)867d780102eSjmmv ATF_TEST_CASE_BODY(tps_63)
868d780102eSjmmv {
869d780102eSjmmv     const char* input =
870d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
871d780102eSjmmv         "\n"
872d780102eSjmmv         "info: a, b\n"
873d780102eSjmmv     ;
874d780102eSjmmv 
875d780102eSjmmv     const char* exp_calls[] = {
876d780102eSjmmv         "got_info(a, b)",
877d780102eSjmmv         NULL
878d780102eSjmmv     };
879d780102eSjmmv 
880d780102eSjmmv     const char* exp_errors[] = {
881d780102eSjmmv         "4: Unexpected token `<<EOF>>'; expected tps-count or info field",
882d780102eSjmmv         NULL
883d780102eSjmmv     };
884d780102eSjmmv 
885d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
886d780102eSjmmv }
887d780102eSjmmv 
888d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_64);
ATF_TEST_CASE_BODY(tps_64)889d780102eSjmmv ATF_TEST_CASE_BODY(tps_64)
890d780102eSjmmv {
891d780102eSjmmv     const char* input =
892d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
893d780102eSjmmv         "\n"
894d780102eSjmmv         "info: a, b\n"
895d780102eSjmmv         "info: a.b.c.def, g\n"
896d780102eSjmmv         "tps-count\n"
897d780102eSjmmv     ;
898d780102eSjmmv 
899d780102eSjmmv     const char* exp_calls[] = {
900d780102eSjmmv         "got_info(a, b)",
901d780102eSjmmv         "got_info(a.b.c.def, g)",
902d780102eSjmmv         NULL
903d780102eSjmmv     };
904d780102eSjmmv 
905d780102eSjmmv     const char* exp_errors[] = {
906d780102eSjmmv         "5: Unexpected token `<<NEWLINE>>'; expected `:'",
907d780102eSjmmv         NULL
908d780102eSjmmv     };
909d780102eSjmmv 
910d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
911d780102eSjmmv }
912d780102eSjmmv 
913d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_65);
ATF_TEST_CASE_BODY(tps_65)914d780102eSjmmv ATF_TEST_CASE_BODY(tps_65)
915d780102eSjmmv {
916d780102eSjmmv     const char* input =
917d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
918d780102eSjmmv         "\n"
919d780102eSjmmv         "info: a, b\n"
920d780102eSjmmv         "tps-count:\n"
921d780102eSjmmv     ;
922d780102eSjmmv 
923d780102eSjmmv     const char* exp_calls[] = {
924d780102eSjmmv         "got_info(a, b)",
925d780102eSjmmv         NULL
926d780102eSjmmv     };
927d780102eSjmmv 
928d780102eSjmmv     const char* exp_errors[] = {
929d780102eSjmmv         "4: Unexpected token `<<NEWLINE>>'; expected number of test programs",
930d780102eSjmmv         NULL
931d780102eSjmmv     };
932d780102eSjmmv 
933d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
934d780102eSjmmv }
935d780102eSjmmv 
936d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(tps_66);
ATF_TEST_CASE_BODY(tps_66)937d780102eSjmmv ATF_TEST_CASE_BODY(tps_66)
938d780102eSjmmv {
939d780102eSjmmv     const char* input =
940d780102eSjmmv         "Content-Type: application/X-atf-tps; version=\"3\"\n"
941d780102eSjmmv         "\n"
942d780102eSjmmv         "info: a, b\n"
943d780102eSjmmv         "tps-count: 0\n"
944d780102eSjmmv         "info\n"
945d780102eSjmmv     ;
946d780102eSjmmv 
947d780102eSjmmv     const char* exp_calls[] = {
948d780102eSjmmv         "got_info(a, b)",
949d780102eSjmmv         "got_ntps(0)",
950d780102eSjmmv         NULL
951d780102eSjmmv     };
952d780102eSjmmv 
953d780102eSjmmv     const char* exp_errors[] = {
954d780102eSjmmv         "5: Unexpected token `<<NEWLINE>>'; expected `:'",
955d780102eSjmmv         NULL
956d780102eSjmmv     };
957d780102eSjmmv 
958d780102eSjmmv     do_parser_test< tps_reader >(input, exp_calls, exp_errors);
959d780102eSjmmv }
960d780102eSjmmv 
ATF_INIT_TEST_CASES(tcs)961d780102eSjmmv ATF_INIT_TEST_CASES(tcs)
962d780102eSjmmv {
963d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_1);
964d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_2);
965d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_3);
966d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_4);
967d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_5);
968d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_6);
969d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_50);
970d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_51);
971d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_52);
972d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_53);
973d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_54);
974d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_55);
975d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_56);
976d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_57);
977d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_58);
978d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_59);
979d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_60);
980d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_61);
981d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_62);
982d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_63);
983d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_64);
984d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_65);
985d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, tps_66);
986d780102eSjmmv }
987d780102eSjmmv 
988