1edebbb8eSjmmv //
2edebbb8eSjmmv // Automated Testing Framework (atf)
3edebbb8eSjmmv //
4a551a20fSjmmv // Copyright (c) 2007 The NetBSD Foundation, Inc.
5edebbb8eSjmmv // All rights reserved.
6edebbb8eSjmmv //
7edebbb8eSjmmv // Redistribution and use in source and binary forms, with or without
8edebbb8eSjmmv // modification, are permitted provided that the following conditions
9edebbb8eSjmmv // are met:
10edebbb8eSjmmv // 1. Redistributions of source code must retain the above copyright
11edebbb8eSjmmv // notice, this list of conditions and the following disclaimer.
12edebbb8eSjmmv // 2. Redistributions in binary form must reproduce the above copyright
13edebbb8eSjmmv // notice, this list of conditions and the following disclaimer in the
14edebbb8eSjmmv // documentation and/or other materials provided with the distribution.
15edebbb8eSjmmv //
16edebbb8eSjmmv // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17edebbb8eSjmmv // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18edebbb8eSjmmv // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19edebbb8eSjmmv // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20edebbb8eSjmmv // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21edebbb8eSjmmv // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22edebbb8eSjmmv // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23edebbb8eSjmmv // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24edebbb8eSjmmv // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25edebbb8eSjmmv // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26edebbb8eSjmmv // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27edebbb8eSjmmv // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28edebbb8eSjmmv //
29edebbb8eSjmmv
30edebbb8eSjmmv extern "C" {
31edebbb8eSjmmv #include <sys/types.h>
32edebbb8eSjmmv #include <sys/stat.h>
33edebbb8eSjmmv
34edebbb8eSjmmv #include <fcntl.h>
35edebbb8eSjmmv #include <unistd.h>
36edebbb8eSjmmv }
37edebbb8eSjmmv
38edebbb8eSjmmv #include <fstream>
39edebbb8eSjmmv #include <sstream>
40edebbb8eSjmmv
41895f502bSjmmv #include "macros.hpp"
42edebbb8eSjmmv
43895f502bSjmmv #include "detail/test_helpers.hpp"
44*d780102eSjmmv #include "detail/text.hpp"
45edebbb8eSjmmv
46edebbb8eSjmmv // ------------------------------------------------------------------------
47edebbb8eSjmmv // Tests for the "atf_tp_writer" class.
48edebbb8eSjmmv // ------------------------------------------------------------------------
49edebbb8eSjmmv
50edebbb8eSjmmv static
51edebbb8eSjmmv void
print_indented(const std::string & str)52edebbb8eSjmmv print_indented(const std::string& str)
53edebbb8eSjmmv {
54edebbb8eSjmmv std::vector< std::string > ws = atf::text::split(str, "\n");
55edebbb8eSjmmv for (std::vector< std::string >::const_iterator iter = ws.begin();
56edebbb8eSjmmv iter != ws.end(); iter++)
57895f502bSjmmv std::cout << ">>" << *iter << "<<\n";
58edebbb8eSjmmv }
59edebbb8eSjmmv
60edebbb8eSjmmv // XXX Should this string handling and verbosity level be part of the
61895f502bSjmmv // ATF_REQUIRE_EQ macro? It may be hard to predict sometimes that a
62edebbb8eSjmmv // string can have newlines in it, and so the error message generated
63edebbb8eSjmmv // at the moment will be bogus if there are some.
64edebbb8eSjmmv static
65edebbb8eSjmmv void
check_equal(const atf::tests::tc & tc,const std::string & str,const std::string & exp)66895f502bSjmmv check_equal(const atf::tests::tc& tc, const std::string& str,
67895f502bSjmmv const std::string& exp)
68edebbb8eSjmmv {
69edebbb8eSjmmv if (str != exp) {
70895f502bSjmmv std::cout << "String equality check failed.\n"
71895f502bSjmmv "Adding >> and << to delimit the string boundaries below.\n";
72895f502bSjmmv std::cout << "GOT:\n";
73edebbb8eSjmmv print_indented(str);
74895f502bSjmmv std::cout << "EXPECTED:\n";
75edebbb8eSjmmv print_indented(exp);
76895f502bSjmmv tc.fail("Constructed string differs from the expected one");
77edebbb8eSjmmv }
78edebbb8eSjmmv }
79edebbb8eSjmmv
80edebbb8eSjmmv ATF_TEST_CASE(atf_tp_writer);
ATF_TEST_CASE_HEAD(atf_tp_writer)81edebbb8eSjmmv ATF_TEST_CASE_HEAD(atf_tp_writer)
82edebbb8eSjmmv {
83edebbb8eSjmmv set_md_var("descr", "Verifies the application/X-atf-tp writer");
84edebbb8eSjmmv }
ATF_TEST_CASE_BODY(atf_tp_writer)85edebbb8eSjmmv ATF_TEST_CASE_BODY(atf_tp_writer)
86edebbb8eSjmmv {
87edebbb8eSjmmv std::ostringstream expss;
88edebbb8eSjmmv std::ostringstream ss;
89edebbb8eSjmmv
90edebbb8eSjmmv #define RESET \
91edebbb8eSjmmv expss.str(""); \
92edebbb8eSjmmv ss.str("")
93edebbb8eSjmmv
94edebbb8eSjmmv #define CHECK \
95895f502bSjmmv check_equal(*this, ss.str(), expss.str())
96edebbb8eSjmmv
97edebbb8eSjmmv {
98edebbb8eSjmmv RESET;
99edebbb8eSjmmv
100edebbb8eSjmmv atf::tests::detail::atf_tp_writer w(ss);
101895f502bSjmmv expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n";
102edebbb8eSjmmv CHECK;
103edebbb8eSjmmv }
104edebbb8eSjmmv
105edebbb8eSjmmv {
106edebbb8eSjmmv RESET;
107edebbb8eSjmmv
108edebbb8eSjmmv atf::tests::detail::atf_tp_writer w(ss);
109895f502bSjmmv expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n";
110edebbb8eSjmmv CHECK;
111edebbb8eSjmmv
112edebbb8eSjmmv w.start_tc("test1");
113895f502bSjmmv expss << "ident: test1\n";
114edebbb8eSjmmv CHECK;
115edebbb8eSjmmv
116edebbb8eSjmmv w.end_tc();
117edebbb8eSjmmv CHECK;
118edebbb8eSjmmv }
119edebbb8eSjmmv
120edebbb8eSjmmv {
121edebbb8eSjmmv RESET;
122edebbb8eSjmmv
123edebbb8eSjmmv atf::tests::detail::atf_tp_writer w(ss);
124895f502bSjmmv expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n";
125edebbb8eSjmmv CHECK;
126edebbb8eSjmmv
127edebbb8eSjmmv w.start_tc("test1");
128895f502bSjmmv expss << "ident: test1\n";
129edebbb8eSjmmv CHECK;
130edebbb8eSjmmv
131edebbb8eSjmmv w.end_tc();
132edebbb8eSjmmv CHECK;
133edebbb8eSjmmv
134edebbb8eSjmmv w.start_tc("test2");
135895f502bSjmmv expss << "\nident: test2\n";
136edebbb8eSjmmv CHECK;
137edebbb8eSjmmv
138edebbb8eSjmmv w.end_tc();
139edebbb8eSjmmv CHECK;
140edebbb8eSjmmv }
141edebbb8eSjmmv
142edebbb8eSjmmv {
143edebbb8eSjmmv RESET;
144edebbb8eSjmmv
145edebbb8eSjmmv atf::tests::detail::atf_tp_writer w(ss);
146895f502bSjmmv expss << "Content-Type: application/X-atf-tp; version=\"1\"\n\n";
147edebbb8eSjmmv CHECK;
148edebbb8eSjmmv
149edebbb8eSjmmv w.start_tc("test1");
150895f502bSjmmv expss << "ident: test1\n";
151edebbb8eSjmmv CHECK;
152edebbb8eSjmmv
153edebbb8eSjmmv w.tc_meta_data("descr", "the description");
154895f502bSjmmv expss << "descr: the description\n";
155edebbb8eSjmmv CHECK;
156edebbb8eSjmmv
157edebbb8eSjmmv w.end_tc();
158edebbb8eSjmmv CHECK;
159edebbb8eSjmmv
160edebbb8eSjmmv w.start_tc("test2");
161895f502bSjmmv expss << "\nident: test2\n";
162edebbb8eSjmmv CHECK;
163edebbb8eSjmmv
164edebbb8eSjmmv w.tc_meta_data("descr", "second test case");
165895f502bSjmmv expss << "descr: second test case\n";
166edebbb8eSjmmv CHECK;
167edebbb8eSjmmv
168edebbb8eSjmmv w.tc_meta_data("require.progs", "/bin/cp");
169895f502bSjmmv expss << "require.progs: /bin/cp\n";
170edebbb8eSjmmv CHECK;
171edebbb8eSjmmv
172edebbb8eSjmmv w.tc_meta_data("X-custom", "foo bar baz");
173895f502bSjmmv expss << "X-custom: foo bar baz\n";
174edebbb8eSjmmv CHECK;
175edebbb8eSjmmv
176edebbb8eSjmmv w.end_tc();
177edebbb8eSjmmv CHECK;
178edebbb8eSjmmv }
179edebbb8eSjmmv
180edebbb8eSjmmv #undef CHECK
181edebbb8eSjmmv #undef RESET
182edebbb8eSjmmv }
183edebbb8eSjmmv
184edebbb8eSjmmv // ------------------------------------------------------------------------
185edebbb8eSjmmv // Tests cases for the header file.
186edebbb8eSjmmv // ------------------------------------------------------------------------
187edebbb8eSjmmv
188edebbb8eSjmmv HEADER_TC(include, "atf-c++/tests.hpp");
189edebbb8eSjmmv
190edebbb8eSjmmv // ------------------------------------------------------------------------
191edebbb8eSjmmv // Main.
192edebbb8eSjmmv // ------------------------------------------------------------------------
193edebbb8eSjmmv
ATF_INIT_TEST_CASES(tcs)194edebbb8eSjmmv ATF_INIT_TEST_CASES(tcs)
195edebbb8eSjmmv {
196edebbb8eSjmmv // Add tests for the "atf_tp_writer" class.
197edebbb8eSjmmv ATF_ADD_TEST_CASE(tcs, atf_tp_writer);
198edebbb8eSjmmv
199edebbb8eSjmmv // Add the test cases for the header file.
200edebbb8eSjmmv ATF_ADD_TEST_CASE(tcs, include);
201edebbb8eSjmmv }
202