summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/Support
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r--llvm/unittests/Support/FileCheckTest.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/unittests/Support/FileCheckTest.cpp b/llvm/unittests/Support/FileCheckTest.cpp
index 497c8086431..e120cbe5f1f 100644
--- a/llvm/unittests/Support/FileCheckTest.cpp
+++ b/llvm/unittests/Support/FileCheckTest.cpp
@@ -90,6 +90,62 @@ TEST_F(FileCheckTest, ParseVar) {
EXPECT_EQ(TrailIdx, VarName.size() - 1);
}
+class ExprTester {
+private:
+ SourceMgr SM;
+ FileCheckPatternContext Context;
+ FileCheckPattern P = FileCheckPattern(Check::CheckPlain, &Context);
+
+public:
+ bool parseExpect(std::string &VarName, std::string &Trailer) {
+ StringRef NameTrailer = StringRef(VarName + Trailer);
+ std::unique_ptr<MemoryBuffer> Buffer =
+ MemoryBuffer::getMemBufferCopy(NameTrailer, "TestBuffer");
+ StringRef NameTrailerRef = Buffer->getBuffer();
+ SM.AddNewSourceBuffer(std::move(Buffer), SMLoc());
+ StringRef VarNameRef = NameTrailerRef.substr(0, VarName.size());
+ StringRef TrailerRef = NameTrailerRef.substr(VarName.size());
+ return P.parseExpression(VarNameRef, TrailerRef, SM);
+ }
+};
+
+TEST_F(FileCheckTest, ParseExpr) {
+ ExprTester Tester;
+
+ // @LINE with offset.
+ std::string VarName = "@LINE";
+ std::string Trailer = "+3";
+ EXPECT_FALSE(Tester.parseExpect(VarName, Trailer));
+
+ // @LINE only.
+ Trailer = "";
+ EXPECT_FALSE(Tester.parseExpect(VarName, Trailer));
+
+ // Wrong Pseudovar.
+ VarName = "@FOO";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Unsupported operator.
+ VarName = "@LINE";
+ Trailer = "/2";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Missing offset operand.
+ VarName = "@LINE";
+ Trailer = "+";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Cannot parse offset operand.
+ VarName = "@LINE";
+ Trailer = "+x";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+
+ // Unexpected string at end of numeric expression.
+ VarName = "@LINE";
+ Trailer = "+5x";
+ EXPECT_TRUE(Tester.parseExpect(VarName, Trailer));
+}
+
TEST_F(FileCheckTest, FileCheckContext) {
FileCheckPatternContext Cxt = FileCheckPatternContext();
std::vector<std::string> GlobalDefines;
OpenPOWER on IntegriCloud