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