diff options
Diffstat (limited to 'unittests/StaticAnalyzer')
-rw-r--r-- | unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp | 74 | ||||
-rw-r--r-- | unittests/StaticAnalyzer/CMakeLists.txt | 13 | ||||
-rw-r--r-- | unittests/StaticAnalyzer/Makefile | 15 |
3 files changed, 102 insertions, 0 deletions
diff --git a/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp b/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp new file mode 100644 index 0000000..33f1740 --- /dev/null +++ b/unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp @@ -0,0 +1,74 @@ +//===- unittest/Analysis/AnalyzerOptionsTest.cpp - SA Options test --------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "clang/StaticAnalyzer/Core/AnalyzerOptions.h" +#include "clang/StaticAnalyzer/Core/Checker.h" +#include "gtest/gtest.h" + +namespace clang { +namespace ento { + +TEST(StaticAnalyzerOptions, SearchInParentPackageTests) { + AnalyzerOptions Opts; + Opts.Config["Outer.Inner.CheckerOne:Option"] = "true"; + Opts.Config["Outer.Inner:Option"] = "false"; + Opts.Config["Outer.Inner:Option2"] = "true"; + Opts.Config["Outer:Option2"] = "false"; + + struct CheckerOneMock : CheckerBase { + StringRef getTagDescription() const override { + return "Outer.Inner.CheckerOne"; + } + }; + struct CheckerTwoMock : CheckerBase { + StringRef getTagDescription() const override { + return "Outer.Inner.CheckerTwo"; + } + }; + + // Checker one has Option specified as true. It should read true regardless of + // search mode. + CheckerOneMock CheckerOne; + EXPECT_TRUE(Opts.getBooleanOption("Option", false, &CheckerOne)); + // The package option is overriden with a checker option. + EXPECT_TRUE(Opts.getBooleanOption("Option", false, &CheckerOne, true)); + // The Outer package option is overriden by the Inner package option. No + // package option is specified. + EXPECT_TRUE(Opts.getBooleanOption("Option2", false, &CheckerOne, true)); + // No package option is specified and search in packages is turned off. The + // default value should be returned. + EXPECT_FALSE(Opts.getBooleanOption("Option2", false, &CheckerOne)); + EXPECT_TRUE(Opts.getBooleanOption("Option2", true, &CheckerOne)); + + // Checker true has no option specified. It should get the default value when + // search in parents turned off and false when search in parents turned on. + CheckerTwoMock CheckerTwo; + EXPECT_FALSE(Opts.getBooleanOption("Option", false, &CheckerTwo)); + EXPECT_TRUE(Opts.getBooleanOption("Option", true, &CheckerTwo)); + EXPECT_FALSE(Opts.getBooleanOption("Option", true, &CheckerTwo, true)); +} + +TEST(StaticAnalyzerOptions, StringOptions) { + AnalyzerOptions Opts; + Opts.Config["Outer.Inner.CheckerOne:Option"] = "StringValue"; + + struct CheckerOneMock : CheckerBase { + StringRef getTagDescription() const override { + return "Outer.Inner.CheckerOne"; + } + }; + + CheckerOneMock CheckerOne; + EXPECT_TRUE("StringValue" == + Opts.getOptionAsString("Option", "DefaultValue", &CheckerOne)); + EXPECT_TRUE("DefaultValue" == + Opts.getOptionAsString("Option2", "DefaultValue", &CheckerOne)); +} +} // end namespace ento +} // end namespace clang diff --git a/unittests/StaticAnalyzer/CMakeLists.txt b/unittests/StaticAnalyzer/CMakeLists.txt new file mode 100644 index 0000000..4aa5efb --- /dev/null +++ b/unittests/StaticAnalyzer/CMakeLists.txt @@ -0,0 +1,13 @@ +set(LLVM_LINK_COMPONENTS + Support + ) + +add_clang_unittest(StaticAnalysisTests + AnalyzerOptionsTest.cpp + ) + +target_link_libraries(StaticAnalysisTests + clangBasic + clangAnalysis + clangStaticAnalyzerCore + ) diff --git a/unittests/StaticAnalyzer/Makefile b/unittests/StaticAnalyzer/Makefile new file mode 100644 index 0000000..af85b71 --- /dev/null +++ b/unittests/StaticAnalyzer/Makefile @@ -0,0 +1,15 @@ +##===- unittests/Basic/Makefile ----------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +CLANG_LEVEL = ../.. +TESTNAME = StaticAnalysis +LINK_COMPONENTS := support mc +USEDLIBS = clangBasic.a clangAnalysis.a clangStaticAnalyzerCore.a + +include $(CLANG_LEVEL)/unittests/Makefile |