1*890232f2SAndroid Build Coastguard Worker 2*890232f2SAndroid Build Coastguard Worker #ifndef FUZZER_TEST_INIT_H_ 3*890232f2SAndroid Build Coastguard Worker #define FUZZER_TEST_INIT_H_ 4*890232f2SAndroid Build Coastguard Worker 5*890232f2SAndroid Build Coastguard Worker #include "fuzzer_assert.h" 6*890232f2SAndroid Build Coastguard Worker #include "test_assert.h" 7*890232f2SAndroid Build Coastguard Worker 8*890232f2SAndroid Build Coastguard Worker // Utility for test run. 9*890232f2SAndroid Build Coastguard Worker struct OneTimeTestInit { 10*890232f2SAndroid Build Coastguard Worker // Declare trap for the Flatbuffers test engine. 11*890232f2SAndroid Build Coastguard Worker // This hook terminate program both in Debug and Release. 12*890232f2SAndroid Build Coastguard Worker static bool TestFailListener(const char *expval, const char *val, 13*890232f2SAndroid Build Coastguard Worker const char *exp, const char *file, int line, 14*890232f2SAndroid Build Coastguard Worker const char *func = nullptr) { 15*890232f2SAndroid Build Coastguard Worker (void)expval; 16*890232f2SAndroid Build Coastguard Worker (void)val; 17*890232f2SAndroid Build Coastguard Worker (void)exp; 18*890232f2SAndroid Build Coastguard Worker (void)file; 19*890232f2SAndroid Build Coastguard Worker (void)line; 20*890232f2SAndroid Build Coastguard Worker (void)func; 21*890232f2SAndroid Build Coastguard Worker // FLATBUFFERS_ASSERT redefined to be fully independent of the Flatbuffers 22*890232f2SAndroid Build Coastguard Worker // library implementation (see test_assert.h for details). 23*890232f2SAndroid Build Coastguard Worker fuzzer_assert_impl(false); // terminate 24*890232f2SAndroid Build Coastguard Worker return false; 25*890232f2SAndroid Build Coastguard Worker } 26*890232f2SAndroid Build Coastguard Worker OneTimeTestInitOneTimeTestInit27*890232f2SAndroid Build Coastguard Worker OneTimeTestInit() : has_locale_(false) { 28*890232f2SAndroid Build Coastguard Worker // Fuzzer test should be independent of the test engine implementation. 29*890232f2SAndroid Build Coastguard Worker // This hook will terminate test if TEST_EQ/TEST_ASSERT asserted. 30*890232f2SAndroid Build Coastguard Worker InitTestEngine(OneTimeTestInit::TestFailListener); 31*890232f2SAndroid Build Coastguard Worker 32*890232f2SAndroid Build Coastguard Worker // Read a locale for the test. 33*890232f2SAndroid Build Coastguard Worker if (flatbuffers::ReadEnvironmentVariable("FLATBUFFERS_TEST_LOCALE", 34*890232f2SAndroid Build Coastguard Worker &test_locale_)) { 35*890232f2SAndroid Build Coastguard Worker TEST_OUTPUT_LINE("The environment variable FLATBUFFERS_TEST_LOCALE=%s", 36*890232f2SAndroid Build Coastguard Worker test_locale_.c_str()); 37*890232f2SAndroid Build Coastguard Worker test_locale_ = flatbuffers::RemoveStringQuotes(test_locale_); 38*890232f2SAndroid Build Coastguard Worker has_locale_ = true; 39*890232f2SAndroid Build Coastguard Worker } 40*890232f2SAndroid Build Coastguard Worker } 41*890232f2SAndroid Build Coastguard Worker test_localeOneTimeTestInit42*890232f2SAndroid Build Coastguard Worker static const char *test_locale() { 43*890232f2SAndroid Build Coastguard Worker return one_time_init_.has_locale_ ? nullptr 44*890232f2SAndroid Build Coastguard Worker : one_time_init_.test_locale_.c_str(); 45*890232f2SAndroid Build Coastguard Worker } 46*890232f2SAndroid Build Coastguard Worker 47*890232f2SAndroid Build Coastguard Worker bool has_locale_; 48*890232f2SAndroid Build Coastguard Worker std::string test_locale_; 49*890232f2SAndroid Build Coastguard Worker static OneTimeTestInit one_time_init_; 50*890232f2SAndroid Build Coastguard Worker }; 51*890232f2SAndroid Build Coastguard Worker 52*890232f2SAndroid Build Coastguard Worker #endif // !FUZZER_TEST_INIT_H_ 53