xref: /aosp_15_r20/external/flatbuffers/tests/fuzzer/test_init.h (revision 890232f25432b36107d06881e0a25aaa6b473652)
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