1cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines//===- SpecialCaseListTest.cpp - Unit tests for SpecialCaseList -----------===// 2cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// 3cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// The LLVM Compiler Infrastructure 4cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// 5cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// This file is distributed under the University of Illinois Open Source 6cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// License. See LICENSE.TXT for details. 7cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines// 8cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines//===----------------------------------------------------------------------===// 9cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 10cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "llvm/Support/MemoryBuffer.h" 11cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "llvm/Support/SpecialCaseList.h" 12cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "gtest/gtest.h" 13cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 14cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesusing namespace llvm; 15cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 16cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesnamespace { 17cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 18cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass SpecialCaseListTest : public ::testing::Test { 19cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesprotected: 20cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SpecialCaseList *makeSpecialCaseList(StringRef List, std::string &Error) { 21cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::unique_ptr<MemoryBuffer> MB(MemoryBuffer::getMemBuffer(List)); 22cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return SpecialCaseList::create(MB.get(), Error); 23cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 24cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 25cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SpecialCaseList *makeSpecialCaseList(StringRef List) { 26cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::string Error; 27cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SpecialCaseList *SCL = makeSpecialCaseList(List, Error); 28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines assert(SCL); 29cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines assert(Error == ""); 30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines return SCL; 31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines } 32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines}; 33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST_F(SpecialCaseListTest, Basic) { 35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::unique_ptr<SpecialCaseList> SCL( 36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines makeSpecialCaseList("# This is a comment.\n" 37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "\n" 38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "src:hello\n" 39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "src:bye\n" 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "src:hi=category\n" 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "src:z*=category\n")); 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "hello")); 43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "bye")); 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "hi", "category")); 45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "zzzz", "category")); 46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "hi")); 47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("fun", "hello")); 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "hello", "category")); 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 50cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST_F(SpecialCaseListTest, GlobalInitCompat) { 52cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::unique_ptr<SpecialCaseList> SCL( 53cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines makeSpecialCaseList("global:foo=init\n")); 54cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "foo")); 55cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "bar")); 56cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("global", "foo", "init")); 57cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "bar", "init")); 58cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 59cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("global-init:foo\n")); 60cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "foo")); 61cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "bar")); 62cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("global", "foo", "init")); 63cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "bar", "init")); 64cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 65cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("type:t2=init\n")); 66cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t1")); 67cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t2")); 68cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t1", "init")); 69cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("type", "t2", "init")); 70cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 71cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("global-init-type:t2\n")); 72cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t1")); 73cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t2")); 74cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("type", "t1", "init")); 75cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("type", "t2", "init")); 76cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 77cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("src:hello=init\n")); 78cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "hello")); 79cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "bye")); 80cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "hello", "init")); 81cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "bye", "init")); 82cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 83cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("global-init-src:hello\n")); 84cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "hello")); 85cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "bye")); 86cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("src", "hello", "init")); 87cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "bye", "init")); 88cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 89cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 90cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST_F(SpecialCaseListTest, Substring) { 91cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::unique_ptr<SpecialCaseList> SCL(makeSpecialCaseList("src:hello\n" 92cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "fun:foo\n" 93cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "global:bar\n")); 94cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("src", "othello")); 95cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("fun", "tomfoolery")); 96cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("global", "bartender")); 97cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 98cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SCL.reset(makeSpecialCaseList("fun:*foo*\n")); 99cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("fun", "tomfoolery")); 100cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_TRUE(SCL->inSection("fun", "foobar")); 101cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 102cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 103cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST_F(SpecialCaseListTest, InvalidSpecialCaseList) { 104cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::string Error; 105cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(nullptr, makeSpecialCaseList("badline", Error)); 106cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ("Malformed line 1: 'badline'", Error); 107cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(nullptr, makeSpecialCaseList("src:bad[a-", Error)); 108cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ("Malformed regex in line 1: 'bad[a-': invalid character range", 109cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Error); 110cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(nullptr, makeSpecialCaseList("src:a.c\n" 111cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines "fun:fun(a\n", 112cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Error)); 113cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ("Malformed regex in line 2: 'fun(a': parentheses not balanced", 114cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines Error); 115cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(nullptr, SpecialCaseList::create("unexisting", Error)); 116cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_EQ(0U, Error.find("Can't open file 'unexisting':")); 117cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 118cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 119cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesTEST_F(SpecialCaseListTest, EmptySpecialCaseList) { 120cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines std::unique_ptr<SpecialCaseList> SCL(makeSpecialCaseList("")); 121cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines EXPECT_FALSE(SCL->inSection("foo", "bar")); 122cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 123cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 124cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 125cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 126cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 127