1 #ifndef TEST_UNIT_LANG_PARSER_UTILITY_HPP 2 #define TEST_UNIT_LANG_PARSER_UTILITY_HPP 4 #include <gtest/gtest.h> 16 #include <boost/lexical_cast.hpp> 29 size_t last_bk = name_copy.find_last_of(
'\\');
30 if (last_bk != std::string::npos)
31 name_copy.erase(0,last_bk + 1);
32 size_t last_fwd = name_copy.find_last_of(
'/');
33 if (last_fwd != std::string::npos)
34 name_copy.erase(0,last_fwd + 1);
36 size_t last_dot = name_copy.find_last_of(
'.');
37 if (last_dot != std::string::npos)
38 name_copy.erase(last_dot,name_copy.size());
40 name_copy +=
"_model";
52 std::ostream*
msgs = 0,
53 bool allow_undefined =
false) {
55 std::ifstream
fs(file_name.c_str());
64 std::stringstream
ss(s);
79 std::ostream*
msgs = 0,
96 std::stringstream
msgs;
97 SCOPED_TRACE(
"parsing: " + model_name);
101 <<
"model name=" << model_name <<
std::endl 114 SCOPED_TRACE(
"parsing standalone functions: " + model_name);
127 std::stringstream
msgs;
130 if (msgs.str().length() > 0)
132 <<
"model name=" << model_name <<
std::endl 133 <<
"*** no exception thrown by parser" <<
std::endl 134 <<
"*** parser msgs: msgs.str()=" << msgs.str() <<
std::endl 135 <<
"*** expected: error_msg=" << error_msg <<
std::endl 136 <<
"*********************************" <<
std::endl 139 if (
std::string(e.what()).find(error_msg) == std::string::npos
140 && msgs.str().find(error_msg) == std::string::npos) {
142 <<
"model name=" << model_name <<
std::endl 143 <<
"*** EXPECTED: error_msg=" << error_msg <<
std::endl 144 <<
"*** FOUND: e.what()=" << e.what() <<
std::endl 145 <<
"*** FOUND: msgs.str()=" << msgs.str() <<
std::endl 146 <<
"*********************************" <<
std::endl 151 FAIL() <<
"model name=" << model_name
152 <<
" is parsable and were expecting msg=" << error_msg
186 std::stringstream
msgs;
188 bool found = msgs.str().find(warning_msg) != std::string::npos;
190 <<
"FOUND: " << msgs.str()
192 <<
"EXPECTED (as substring): " << warning_msg
198 std::stringstream
ss(model_text);
199 std::stringstream
msgs;
203 reader.
add_event(0, 0,
"start",
"unnamed_unit_test");
204 reader.
add_event(500, 500,
"end",
"unnamed_unit_test");
206 EXPECT_TRUE(parsable);
219 <<
"looking for: " <<
target;
234 bool allow_undefined =
false) {
235 std::stringstream
msgs;
237 std::ifstream file_stream(file_name.c_str());
238 std::stringstream cpp_out_stream;
240 model_name, allow_undefined);
244 <<
"looking for: " << target <<
std::endl 259 std::stringstream
msgs;
262 <<
"looking for: " << warning_msg;
std::string get_file_name(const std::string &folder, const std::string &model_name)
bool compile(std::ostream *msgs, std::istream &in, std::ostream &out, const std::string &name, const bool allow_undefined=false, const std::string &filename="unknown file name", const std::vector< std::string > &include_paths=std::vector< std::string >())
int count_matches(const std::string &target, const std::string &s)
void add_event(int concat_line_num, int line_num, const std::string &action, const std::string &path)
void expect_matches(int n, const std::string &stan_code, const std::string &target)
void test_parsable_standalone_functions(const std::string &model_name)
void test_throws(const std::string &model_name, const std::string &error_msg)
void test_warning(const std::string &model_name, const std::string &warning_msg)
bool parse(std::ostream *out, std::istream &in, const std::string &name, const io::program_reader &reader, program &prog, const bool allow_undefined=false)
void generate_cpp(const program &prog, const std::string &model_name, const std::vector< io::preproc_event > &history, std::ostream &o)
void invalid_argument(const char *function, const char *name, const T &y, const char *msg1, const char *msg2)
const std::vector< preproc_event > & history() const
std::string model_to_cpp(const std::string &model_text)
void test_parsable(const std::string &model_name)
void expect_match(const std::string &model_name, const std::string &target, bool allow_undefined=false)
std::string program() const
bool is_parsable(const std::string &file_name, std::ostream *msgs=0, bool allow_undefined=false)
bool is_parsable_folder(const std::string &model_name, const std::string folder="good", std::ostream *msgs=0, const std::string extension=".stan")
void test_num_warnings(const std::string &model_name, const std::string &warning_msg, int n)
std::string file_name_to_model_name(const std::string &name)