]> granicus.if.org Git - clang/commitdiff
Patch for decl printer test of objective-c methods.
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 18 Oct 2012 19:12:17 +0000 (19:12 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 18 Oct 2012 19:12:17 +0000 (19:12 +0000)
Patch by Dmitri Gribenko.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166209 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/AST/DeclPrinterTest.cpp

index 0bb0272eb56f59758e4a13deafb689a616194901..a2fc839b9c8e5299c7c8a7a5091c42e54001820a 100644 (file)
@@ -69,13 +69,14 @@ public:
                                   StringRef Code,
                                   const std::vector<std::string> &Args,
                                   const DeclarationMatcher &NodeMatch,
-                                  StringRef ExpectedPrinted) {
+                                  StringRef ExpectedPrinted,
+                                  StringRef FileName) {
   PrintMatch Printer;
   MatchFinder Finder;
   Finder.addMatcher(NodeMatch, &Printer);
   OwningPtr<FrontendActionFactory> Factory(newFrontendActionFactory(&Finder));
 
-  if (!runToolOnCodeWithArgs(Factory->create(), Code, Args))
+  if (!runToolOnCodeWithArgs(Factory->create(), Code, Args, FileName))
     return testing::AssertionFailure() << "Parsing error in \"" << Code << "\"";
 
   if (Printer.getNumFoundDecls() == 0)
@@ -102,7 +103,8 @@ public:
   return PrintedDeclMatches(Code,
                             Args,
                             namedDecl(hasName(DeclName)).bind("id"),
-                            ExpectedPrinted);
+                            ExpectedPrinted,
+                            "input.cc");
 }
 
 ::testing::AssertionResult PrintedDeclCXX98Matches(
@@ -113,7 +115,8 @@ public:
   return PrintedDeclMatches(Code,
                             Args,
                             NodeMatch,
-                            ExpectedPrinted);
+                            ExpectedPrinted,
+                            "input.cc");
 }
 
 ::testing::AssertionResult PrintedDeclCXX11Matches(StringRef Code,
@@ -123,7 +126,8 @@ public:
   return PrintedDeclMatches(Code,
                             Args,
                             namedDecl(hasName(DeclName)).bind("id"),
-                            ExpectedPrinted);
+                            ExpectedPrinted,
+                            "input.cc");
 }
 
 ::testing::AssertionResult PrintedDeclCXX11Matches(
@@ -134,7 +138,20 @@ public:
   return PrintedDeclMatches(Code,
                             Args,
                             NodeMatch,
-                            ExpectedPrinted);
+                            ExpectedPrinted,
+                            "input.cc");
+}
+
+::testing::AssertionResult PrintedDeclObjCMatches(
+                                  StringRef Code,
+                                  const DeclarationMatcher &NodeMatch,
+                                  StringRef ExpectedPrinted) {
+  std::vector<std::string> Args(1, "");
+  return PrintedDeclMatches(Code,
+                            Args,
+                            NodeMatch,
+                            ExpectedPrinted,
+                            "input.m");
 }
 
 } // unnamed namespace
@@ -1216,3 +1233,16 @@ TEST(DeclPrinter, TestTemplateArgumentList15) {
     // Should be: with semicolon, without extra space in "> >"
 }
 
+TEST(DeclPrinter, TestObjCMethod1) {
+  ASSERT_TRUE(PrintedDeclObjCMatches(
+    "__attribute__((objc_root_class)) @interface X\n"
+    "- (int)A:(id)anObject inRange:(long)range;\n"
+    "@end\n"
+    "@implementation X\n"
+    "- (int)A:(id)anObject inRange:(long)range { int printThis; return 0; }\n"
+    "@end\n",
+    namedDecl(hasName("A:inRange:"),
+              hasDescendant(namedDecl(hasName("printThis")))).bind("id"),
+    "- (int) A:(id)anObject inRange:(long)range"));
+}
+