]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //===- SpecialCaseListTest.cpp - Unit tests for SpecialCaseList -----------===// |
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 | #include "llvm/Support/MemoryBuffer.h" | |
11 | #include "llvm/Support/SpecialCaseList.h" | |
12 | #include "gtest/gtest.h" | |
13 | ||
14 | using namespace llvm; | |
15 | ||
16 | namespace { | |
17 | ||
18 | class SpecialCaseListTest : public ::testing::Test { | |
19 | protected: | |
20 | std::unique_ptr<SpecialCaseList> makeSpecialCaseList(StringRef List, | |
21 | std::string &Error) { | |
22 | std::unique_ptr<MemoryBuffer> MB = MemoryBuffer::getMemBuffer(List); | |
23 | return SpecialCaseList::create(MB.get(), Error); | |
24 | } | |
25 | ||
26 | std::unique_ptr<SpecialCaseList> makeSpecialCaseList(StringRef List) { | |
27 | std::string Error; | |
28 | auto SCL = makeSpecialCaseList(List, Error); | |
29 | assert(SCL); | |
30 | assert(Error == ""); | |
31 | return SCL; | |
32 | } | |
33 | }; | |
34 | ||
35 | TEST_F(SpecialCaseListTest, Basic) { | |
36 | std::unique_ptr<SpecialCaseList> SCL = | |
37 | makeSpecialCaseList("# This is a comment.\n" | |
38 | "\n" | |
39 | "src:hello\n" | |
40 | "src:bye\n" | |
41 | "src:hi=category\n" | |
42 | "src:z*=category\n"); | |
43 | EXPECT_TRUE(SCL->inSection("src", "hello")); | |
44 | EXPECT_TRUE(SCL->inSection("src", "bye")); | |
45 | EXPECT_TRUE(SCL->inSection("src", "hi", "category")); | |
46 | EXPECT_TRUE(SCL->inSection("src", "zzzz", "category")); | |
47 | EXPECT_FALSE(SCL->inSection("src", "hi")); | |
48 | EXPECT_FALSE(SCL->inSection("fun", "hello")); | |
49 | EXPECT_FALSE(SCL->inSection("src", "hello", "category")); | |
50 | } | |
51 | ||
85aaf69f | 52 | TEST_F(SpecialCaseListTest, GlobalInit) { |
1a4d82fc JJ |
53 | std::unique_ptr<SpecialCaseList> SCL = |
54 | makeSpecialCaseList("global:foo=init\n"); | |
55 | EXPECT_FALSE(SCL->inSection("global", "foo")); | |
56 | EXPECT_FALSE(SCL->inSection("global", "bar")); | |
57 | EXPECT_TRUE(SCL->inSection("global", "foo", "init")); | |
58 | EXPECT_FALSE(SCL->inSection("global", "bar", "init")); | |
59 | ||
1a4d82fc JJ |
60 | SCL = makeSpecialCaseList("type:t2=init\n"); |
61 | EXPECT_FALSE(SCL->inSection("type", "t1")); | |
62 | EXPECT_FALSE(SCL->inSection("type", "t2")); | |
63 | EXPECT_FALSE(SCL->inSection("type", "t1", "init")); | |
64 | EXPECT_TRUE(SCL->inSection("type", "t2", "init")); | |
65 | ||
1a4d82fc JJ |
66 | SCL = makeSpecialCaseList("src:hello=init\n"); |
67 | EXPECT_FALSE(SCL->inSection("src", "hello")); | |
68 | EXPECT_FALSE(SCL->inSection("src", "bye")); | |
69 | EXPECT_TRUE(SCL->inSection("src", "hello", "init")); | |
70 | EXPECT_FALSE(SCL->inSection("src", "bye", "init")); | |
1a4d82fc JJ |
71 | } |
72 | ||
73 | TEST_F(SpecialCaseListTest, Substring) { | |
74 | std::unique_ptr<SpecialCaseList> SCL = makeSpecialCaseList("src:hello\n" | |
75 | "fun:foo\n" | |
76 | "global:bar\n"); | |
77 | EXPECT_FALSE(SCL->inSection("src", "othello")); | |
78 | EXPECT_FALSE(SCL->inSection("fun", "tomfoolery")); | |
79 | EXPECT_FALSE(SCL->inSection("global", "bartender")); | |
80 | ||
81 | SCL = makeSpecialCaseList("fun:*foo*\n"); | |
82 | EXPECT_TRUE(SCL->inSection("fun", "tomfoolery")); | |
83 | EXPECT_TRUE(SCL->inSection("fun", "foobar")); | |
84 | } | |
85 | ||
86 | TEST_F(SpecialCaseListTest, InvalidSpecialCaseList) { | |
87 | std::string Error; | |
88 | EXPECT_EQ(nullptr, makeSpecialCaseList("badline", Error)); | |
89 | EXPECT_EQ("Malformed line 1: 'badline'", Error); | |
90 | EXPECT_EQ(nullptr, makeSpecialCaseList("src:bad[a-", Error)); | |
91 | EXPECT_EQ("Malformed regex in line 1: 'bad[a-': invalid character range", | |
92 | Error); | |
93 | EXPECT_EQ(nullptr, makeSpecialCaseList("src:a.c\n" | |
94 | "fun:fun(a\n", | |
95 | Error)); | |
96 | EXPECT_EQ("Malformed regex in line 2: 'fun(a': parentheses not balanced", | |
97 | Error); | |
98 | EXPECT_EQ(nullptr, SpecialCaseList::create("unexisting", Error)); | |
99 | EXPECT_EQ(0U, Error.find("Can't open file 'unexisting':")); | |
100 | } | |
101 | ||
102 | TEST_F(SpecialCaseListTest, EmptySpecialCaseList) { | |
103 | std::unique_ptr<SpecialCaseList> SCL = makeSpecialCaseList(""); | |
104 | EXPECT_FALSE(SCL->inSection("foo", "bar")); | |
105 | } | |
106 | ||
107 | } | |
108 | ||
109 |