1 //===-- sanitizer_flags_test.cc -------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file is a part of ThreadSanitizer/AddressSanitizer runtime. 11 // 12 //===----------------------------------------------------------------------===// 13 #include "sanitizer_common/sanitizer_common.h" 14 #include "sanitizer_common/sanitizer_flags.h" 15 #include "gtest/gtest.h" 16 17 #include <string.h> 18 19 namespace __sanitizer { 20 21 static const char kFlagName[] = "flag_name"; 22 23 template <typename T> 24 static void TestFlag(T start_value, const char *env, T final_value) { 25 T flag = start_value; 26 ParseFlag(env, &flag, kFlagName); 27 EXPECT_EQ(final_value, flag); 28 } 29 30 static void TestStrFlag(const char *start_value, const char *env, 31 const char *final_value) { 32 const char *flag = start_value; 33 ParseFlag(env, &flag, kFlagName); 34 EXPECT_STREQ(final_value, flag); 35 } 36 37 TEST(SanitizerCommon, BooleanFlags) { 38 TestFlag(true, "--flag_name", true); 39 TestFlag(false, "flag_name", false); 40 TestFlag(false, "--flag_name=1", true); 41 TestFlag(true, "asdas flag_name=0 asdas", false); 42 TestFlag(true, " --flag_name=0 ", false); 43 TestFlag(false, "flag_name=yes", true); 44 TestFlag(false, "flag_name=true", true); 45 TestFlag(true, "flag_name=no", false); 46 TestFlag(true, "flag_name=false", false); 47 } 48 49 TEST(SanitizerCommon, IntFlags) { 50 TestFlag(-11, 0, -11); 51 TestFlag(-11, "flag_name", 0); 52 TestFlag(-11, "--flag_name=", 0); 53 TestFlag(-11, "--flag_name=42", 42); 54 TestFlag(-11, "--flag_name=-42", -42); 55 } 56 57 TEST(SanitizerCommon, StrFlags) { 58 TestStrFlag("zzz", 0, "zzz"); 59 TestStrFlag("zzz", "flag_name", ""); 60 TestStrFlag("zzz", "--flag_name=", ""); 61 TestStrFlag("", "--flag_name=abc", "abc"); 62 TestStrFlag("", "--flag_name='abc zxc'", "abc zxc"); 63 TestStrFlag("", "--flag_name='abc zxcc'", "abc zxcc"); 64 TestStrFlag("", "--flag_name=\"abc qwe\" asd", "abc qwe"); 65 } 66 67 } // namespace __sanitizer 68