[clang-tools-extra] r186842 - cpp11-migrate: Make a VirtualFilesHelper class for the unit tests.

Edwin Vane edwin.vane at intel.com
Mon Jul 22 09:36:58 PDT 2013


Author: revane
Date: Mon Jul 22 11:36:58 2013
New Revision: 186842

URL: http://llvm.org/viewvc/llvm-project?rev=186842&view=rev
Log:
cpp11-migrate: Make a VirtualFilesHelper class for the unit tests.

This change makes it easier for new unit tests to create virtual files.

Author: Guillaume Papin <guillaume.papin at epitech.eu>


Added:
    clang-tools-extra/trunk/unittests/cpp11-migrate/VirtualFileHelper.h
Modified:
    clang-tools-extra/trunk/unittests/cpp11-migrate/FileOverridesTest.cpp

Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/FileOverridesTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/FileOverridesTest.cpp?rev=186842&r1=186841&r2=186842&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/FileOverridesTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/FileOverridesTest.cpp Mon Jul 22 11:36:58 2013
@@ -9,78 +9,16 @@
 
 #include "Core/FileOverrides.h"
 #include "gtest/gtest.h"
-#include "clang/Basic/Diagnostic.h"
-#include "clang/Basic/DiagnosticOptions.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/SourceManager.h"
+#include "VirtualFileHelper.h"
 
-using namespace llvm;
 using namespace clang;
+using namespace clang::tooling;
 
-// Test fixture object that setup some files once for all test cases and remove
-// them when the tests are done.
-class SourceOverridesTest : public ::testing::Test {
-protected:
-  static void SetUpTestCase() {
-    DiagOpts =
-        new IntrusiveRefCntPtr<DiagnosticOptions>(new DiagnosticOptions());
-    Diagnostics = new DiagnosticsEngine(
-        IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),
-        DiagOpts->getPtr());
-  }
-
-  static void TearDownTestCase() {
-    delete DiagOpts;
-    delete Diagnostics;
-  }
-
-  virtual void SetUp() {
-    Files = new FileManager(FileSystemOptions());
-    Sources = NULL;
-    FileName = NULL;
-    Code = NULL;
-  }
-
-  void setFilename(const char *F) { FileName = F; }
-  void setCode(const char *C) { Code = C; }
-
-  virtual void TearDown() {
-    delete Files;
-    delete Sources;
-  }
-
-  // Creates a new SourceManager with the virtual file and content
-  SourceManager &getNewSourceManager() {
-    assert(FileName && Code && "expected Code and FileName to be set.");
-    delete Sources;
-    Sources = new SourceManager(*Diagnostics, *Files);
-    MemoryBuffer *Buf = MemoryBuffer::getMemBuffer(Code, FileName);
-    const FileEntry *Entry = Files->getVirtualFile(
-        FileName, Buf->getBufferSize(), /*ModificationTime=*/0);
-    Sources->overrideFileContents(Entry, Buf);
-    return *Sources;
-  }
-
-  static SourceManager *Sources;
-  static const char *FileName;
-  static const char *Code;
-
-private:
-  static IntrusiveRefCntPtr<DiagnosticOptions> *DiagOpts;
-  static DiagnosticsEngine *Diagnostics;
-  static FileManager *Files;
-};
-
-IntrusiveRefCntPtr<DiagnosticOptions> *SourceOverridesTest::DiagOpts = NULL;
-DiagnosticsEngine *SourceOverridesTest::Diagnostics = NULL;
-FileManager *SourceOverridesTest::Files = NULL;
-SourceManager *SourceOverridesTest::Sources = NULL;
-const char *SourceOverridesTest::FileName;
-const char *SourceOverridesTest::Code;
-
-TEST_F(SourceOverridesTest, Interface) {
-  setFilename("<test-file>");
-  setCode(
+TEST(SourceOverridesTest, Interface) {
+  llvm::StringRef FileName = "<test-file>";
+  VirtualFileHelper VFHelper;
+  VFHelper.mapFile(
+      FileName,
       "std::vector<such_a_long_name_for_a_type>::const_iterator long_type =\n"
       "    vec.begin();\n");
   SourceOverrides Overrides(FileName);
@@ -88,16 +26,14 @@ TEST_F(SourceOverridesTest, Interface) {
   EXPECT_EQ(FileName, Overrides.getMainFileName());
   EXPECT_FALSE(Overrides.isSourceOverriden());
 
-  tooling::Replacements Replaces;
+  Replacements Replaces;
   unsigned ReplacementLength =
       strlen("std::vector<such_a_long_name_for_a_type>::const_iterator");
-  Replaces.insert(
-      tooling::Replacement(FileName, 0, ReplacementLength, "auto"));
-  Overrides.applyReplacements(Replaces, getNewSourceManager());
+  Replaces.insert(Replacement(FileName, 0, ReplacementLength, "auto"));
+  Overrides.applyReplacements(Replaces, VFHelper.getNewSourceManager());
   EXPECT_TRUE(Overrides.isSourceOverriden());
 
   std::string ExpectedContent = "auto long_type =\n"
                                 "    vec.begin();\n";
-
   EXPECT_EQ(ExpectedContent, Overrides.getMainFileContent());
 }

Added: clang-tools-extra/trunk/unittests/cpp11-migrate/VirtualFileHelper.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/VirtualFileHelper.h?rev=186842&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/VirtualFileHelper.h (added)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/VirtualFileHelper.h Mon Jul 22 11:36:58 2013
@@ -0,0 +1,75 @@
+//===--- VirtualFileHelper.h ------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \brief This file defines an utility class for tests that needs a source
+/// manager for a virtual file with customizable content.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef CPP11_MIGRATE_VIRTUAL_FILE_HELPER_H
+#define CPP11_MIGRATE_VIRTUAL_FILE_HELPER_H
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Frontend/TextDiagnosticPrinter.h"
+
+namespace clang {
+
+/// \brief Class that provides easy access to a SourceManager and that allows to
+/// map virtual files conveniently.
+class VirtualFileHelper {
+  struct VirtualFile {
+    llvm::StringRef FileName;
+    llvm::StringRef Code;
+  };
+
+public:
+  VirtualFileHelper()
+      : DiagOpts(new DiagnosticOptions()),
+        Diagnostics(IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs),
+                    &*DiagOpts),
+        DiagnosticPrinter(llvm::outs(), &*DiagOpts),
+        Files((FileSystemOptions())) {}
+
+  /// \brief Create a virtual file \p FileName, with content \p Code.
+  void mapFile(llvm::StringRef FileName, llvm::StringRef Code) {
+    VirtualFile VF = { FileName, Code };
+    VirtualFiles.push_back(VF);
+  }
+
+  /// \brief Create a new \c SourceManager with the virtual files and contents
+  /// mapped to it.
+  SourceManager &getNewSourceManager() {
+    Sources.reset(new SourceManager(Diagnostics, Files));
+    for (llvm::SmallVectorImpl<VirtualFile>::iterator I = VirtualFiles.begin(),
+                                                      E = VirtualFiles.end();
+         I != E; ++I) {
+      llvm::MemoryBuffer *Buf = llvm::MemoryBuffer::getMemBuffer(I->Code);
+      const FileEntry *Entry = Files.getVirtualFile(
+          I->FileName, Buf->getBufferSize(), /*ModificationTime=*/0);
+      Sources->overrideFileContents(Entry, Buf);
+    }
+    return *Sources;
+  }
+
+private:
+  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
+  DiagnosticsEngine Diagnostics;
+  TextDiagnosticPrinter DiagnosticPrinter;
+  FileManager Files;
+  // most tests don't need more than one file
+  llvm::SmallVector<VirtualFile, 1> VirtualFiles;
+  llvm::OwningPtr<SourceManager> Sources;
+};
+
+} // end namespace clang
+
+#endif // CPP11_MIGRATE_VIRTUAL_FILE_HELPER_H





More information about the cfe-commits mailing list