]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/wave/test/testwave/testwave_app.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / wave / test / testwave / testwave_app.hpp
1 /*=============================================================================
2 Boost.Wave: A Standard compliant C++ preprocessor library
3 http://www.boost.org/
4
5 Copyright (c) 2001-2013 Hartmut Kaiser. Distributed under the Boost
6 Software License, Version 1.0. (See accompanying file
7 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 =============================================================================*/
9
10 #if !defined(BOOST_WAVE_LIBS_WAVE_TEST_TESTWAVE_APP_HPP)
11 #define BOOST_WAVE_LIBS_WAVE_TEST_TESTWAVE_APP_HPP
12
13 #include <string>
14 #include <vector>
15
16 // include boost
17 #include <boost/config.hpp>
18
19 #include "cmd_line_utils.hpp"
20
21 ///////////////////////////////////////////////////////////////////////////////
22 class testwave_app
23 {
24 public:
25 testwave_app(boost::program_options::variables_map const& vm);
26
27 // Test the given file (i.e. preprocess the file and compare the result
28 // against the embedded 'R' comments, if an error occurs compare the error
29 // message against the given 'E' comments).
30 bool test_a_file(std::string filename);
31
32 // print the current version of this program
33 int print_version();
34
35 // print the copyright statement
36 int print_copyright();
37
38 // access the common options used for the command line and the config
39 // options inside the test files
40 boost::program_options::options_description const& common_options() const
41 {
42 return desc_options;
43 }
44
45 void set_debuglevel(int debuglevel_)
46 {
47 debuglevel = debuglevel_;
48 }
49 int get_debuglevel() const
50 {
51 return debuglevel;
52 }
53
54 protected:
55 // Read the given file into a string
56 bool read_file(std::string const& filename, std::string& instr);
57
58 // Extract special information from comments marked with the given letter
59 bool extract_special_information(std::string const& filename,
60 std::string const& instr, char flag, std::string& content);
61
62 // Extract the expected output and expected hooks information from the
63 // given input data.
64 // The expected output has to be provided inside of special comments which
65 // start with a capital 'R' ('H' for the hooks information). All such
66 // comments are concatenated and returned through the parameter 'expected'
67 // ('expectedhooks' for hooks information).
68 bool extract_expected_output(std::string const& filename,
69 std::string const& instr, std::string& expected,
70 std::string& expectedhooks);
71
72 // Extracts the required preprocessing options from the given input data
73 // and initializes the given Wave context object accordingly.
74 // We allow the same (applicable) options to be used as are valid for the
75 // wave driver executable.
76 template <typename Context>
77 bool extract_options(std::string const& filename,
78 std::string const& instr, Context& ctx, bool single_line,
79 boost::program_options::variables_map& vm);
80
81 // transfers the options collected in the vm parameter into the given
82 // context
83 template <typename Context>
84 bool initialise_options(Context& ctx,
85 boost::program_options::variables_map const& vm, bool single_line);
86
87 // Preprocess the given input data and return the generated output through
88 // the parameter 'result'.
89 bool preprocess_file(std::string filename, std::string const& instr,
90 std::string& result, std::string& error, std::string& hooks,
91 bool single_line = false);
92
93 // Add special predefined macros to the context object
94 template <typename Context>
95 bool add_predefined_macros(Context& ctx);
96
97 // This function compares the real result and the expected one but first
98 // replaces all occurrences in the expected result of
99 // $E: to the result of preprocessing the given expression
100 // $F: to the passed full filepath
101 // $P: to the full path
102 // $R: to the relative path
103 // $V: to the current Boost version number
104 bool got_expected_result(std::string const& filename,
105 std::string const& result, std::string& expected);
106
107 // construct a SIZEOF macro definition string and predefine this macro
108 template <typename Context>
109 bool add_sizeof_definition(Context& ctx, char const *name, int value);
110
111 // construct a MIN macro definition string and predefine this macro
112 template <typename T, typename Context>
113 bool add_min_definition(Context& ctx, char const *name);
114
115 // construct a MAX macro definition string and predefine this macro
116 template <typename T, typename Context>
117 bool add_max_definition(Context& ctx, char const *name);
118
119 // Predefine __TESTWAVE_HAS_STRICT_LEXER__
120 template <typename Context>
121 bool add_strict_lexer_definition(Context& ctx);
122
123 #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS
124 // Predefine __TESTWAVE_SUPPORT_MS_EXTENSIONS__
125 template <typename Context>
126 bool add_support_ms_extensions_definition(Context& ctx);
127 #endif
128
129 private:
130 int debuglevel;
131 boost::program_options::options_description desc_options;
132 boost::program_options::variables_map const& global_vm;
133 };
134
135 #endif // !defined(BOOST_WAVE_LIBS_WAVE_TEST_TESTWAVE_APP_HPP)