Move base64 to test code

Change-Id: I0cda5d8a559a2d60250c1d8a8ee6f69509515214
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 00fb75c..888ef12 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -11,7 +11,7 @@
 class ClassLinkerTest : public RuntimeTest {};
 
 TEST_F(ClassLinkerTest, FindClassNonexistent) {
-  scoped_ptr<DexFile> dex(DexFile::OpenBase64(kMyClassDex));
+  scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassDex));
   ASSERT_TRUE(dex != NULL);
 
   scoped_ptr<ClassLinker> linker(ClassLinker::Create());
@@ -24,9 +24,9 @@
 }
 
 TEST_F(ClassLinkerTest, FindClassNested) {
-  scoped_ptr<DexFile> objectDex(DexFile::OpenBase64(kJavaLangDex));
+  scoped_ptr<DexFile> objectDex(OpenDexFileBase64(kJavaLangDex));
   ASSERT_TRUE(objectDex != NULL);
-  scoped_ptr<DexFile> nestedDex(DexFile::OpenBase64(kNestedDex));
+  scoped_ptr<DexFile> nestedDex(OpenDexFileBase64(kNestedDex));
   ASSERT_TRUE(nestedDex != NULL);
 
   scoped_ptr<ClassLinker> linker(ClassLinker::Create());
@@ -122,7 +122,7 @@
     }
   }
 
-  scoped_ptr<DexFile> dex(DexFile::OpenBase64(kMyClassDex));
+  scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassDex));
   ASSERT_TRUE(dex != NULL);
   linker->AppendToClassPath(dex.get());
 
diff --git a/src/common_test.h b/src/common_test.h
index b9392c8..f341407 100644
--- a/src/common_test.h
+++ b/src/common_test.h
@@ -1,11 +1,27 @@
 // Copyright 2011 Google Inc. All Rights Reserved.
 
+#include "src/base64.h"
 #include "src/thread.h"
+#include "src/dex_file.h"
 
 #include "gtest/gtest.h"
 
 namespace art {
 
+static inline RawDexFile* OpenRawDexFileBase64(const char* base64) {
+  CHECK(base64 != NULL);
+  size_t length;
+  byte* dex_file = DecodeBase64(base64, &length);
+  if (dex_file == NULL) {
+    return NULL;
+  }
+  return RawDexFile::OpenPtr(dex_file, length);
+}
+
+static inline DexFile* OpenDexFileBase64(const char* base64) {
+  return DexFile::Open(OpenRawDexFileBase64(base64));
+}
+
 class RuntimeTest : public testing::Test {
  protected:
   virtual void SetUp() {
diff --git a/src/dex_file.cc b/src/dex_file.cc
index 5b39bfc..6cb8258 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -14,11 +14,6 @@
   return Open(raw);
 }
 
-DexFile* DexFile::OpenBase64(const char* base64) {
-  RawDexFile* raw = RawDexFile::OpenBase64(base64);
-  return Open(raw);
-}
-
 DexFile* DexFile::Open(RawDexFile* raw) {
   if (raw == NULL) {
     return NULL;
diff --git a/src/dex_file.h b/src/dex_file.h
index 911d3ea..1f4afa3 100644
--- a/src/dex_file.h
+++ b/src/dex_file.h
@@ -20,11 +20,6 @@
   // Opens a .dex file from the file system.  Returns NULL on failure.
   static DexFile* OpenFile(const char* filename);
 
-  // Opens a .dex file from a base64 encoded array.  Returns NULL on
-  // failure.
-  // TODO: move this into the DexFile unit test
-  static DexFile* OpenBase64(const char* base64);
-
   // Opens a .dex file from a RawDexFile.  Takes ownership of the
   // RawDexFile.
   static DexFile* Open(RawDexFile* raw);
diff --git a/src/dex_file_test.cc b/src/dex_file_test.cc
index 0424cde..561c740 100644
--- a/src/dex_file_test.cc
+++ b/src/dex_file_test.cc
@@ -11,7 +11,7 @@
 namespace art {
 
 TEST(DexFileTest, Open) {
-  scoped_ptr<DexFile> dex(DexFile::OpenBase64(kNestedDex));
+  scoped_ptr<DexFile> dex(OpenDexFileBase64(kNestedDex));
   ASSERT_TRUE(dex != NULL);
 }
 
diff --git a/src/object_test.cc b/src/object_test.cc
index 21aa111..839d61b 100644
--- a/src/object_test.cc
+++ b/src/object_test.cc
@@ -34,9 +34,9 @@
 // TODO: test 0 argument methods
 // TODO: make this test simpler and shorter
 TEST_F(MethodTest, ProtoCompare) {
-  scoped_ptr<DexFile> object_dex_file(DexFile::OpenBase64(kJavaLangDex));
+  scoped_ptr<DexFile> object_dex_file(OpenDexFileBase64(kJavaLangDex));
   ASSERT_TRUE(object_dex_file != NULL);
-  scoped_ptr<DexFile> proto_dex_file(DexFile::OpenBase64(kProtoCompareDex));
+  scoped_ptr<DexFile> proto_dex_file(OpenDexFileBase64(kProtoCompareDex));
   ASSERT_TRUE(proto_dex_file != NULL);
 
   scoped_ptr<ClassLinker> linker(ClassLinker::Create());
@@ -92,11 +92,11 @@
 }
 
 TEST_F(MethodTest, ProtoCompare2) {
-  scoped_ptr<DexFile> object_dex_file(DexFile::OpenBase64(kJavaLangDex));
+  scoped_ptr<DexFile> object_dex_file(OpenDexFileBase64(kJavaLangDex));
   ASSERT_TRUE(object_dex_file != NULL);
-  scoped_ptr<DexFile> proto1_dex_file(DexFile::OpenBase64(kProtoCompareDex));
+  scoped_ptr<DexFile> proto1_dex_file(OpenDexFileBase64(kProtoCompareDex));
   ASSERT_TRUE(proto1_dex_file != NULL);
-  scoped_ptr<DexFile> proto2_dex_file(DexFile::OpenBase64(kProtoCompare2Dex));
+  scoped_ptr<DexFile> proto2_dex_file(OpenDexFileBase64(kProtoCompare2Dex));
   ASSERT_TRUE(proto2_dex_file != NULL);
   scoped_ptr<ClassLinker> linker1(ClassLinker::Create());
   linker1->AppendToClassPath(object_dex_file.get());
diff --git a/src/raw_dex_file.cc b/src/raw_dex_file.cc
index 9960aea..d03723d 100644
--- a/src/raw_dex_file.cc
+++ b/src/raw_dex_file.cc
@@ -9,7 +9,6 @@
 #include <sys/types.h>
 #include <map>
 
-#include "src/base64.h"
 #include "src/globals.h"
 #include "src/logging.h"
 #include "src/object.h"
@@ -21,33 +20,20 @@
 const byte RawDexFile::kDexMagic[] = { 'd', 'e', 'x', '\n' };
 const byte RawDexFile::kDexMagicVersion[] = { '0', '3', '5', '\0' };
 
-// Helper class to deallocate mmap-backed .dex files.
-class MmapCloser : public RawDexFile::Closer {
- public:
-  MmapCloser(void* addr, size_t length) : addr_(addr), length_(length) {
-    CHECK(addr != NULL);
-  };
-  virtual ~MmapCloser() {
-    if (munmap(addr_, length_) == -1) {
-      PLOG(INFO) << "munmap failed";
-    }
-  }
- private:
-  void* addr_;
-  size_t length_;
-};
-
-// Helper class for deallocating new/delete-backed .dex files.
-class PtrCloser : public RawDexFile::Closer {
- public:
-  PtrCloser(byte* addr) : addr_(addr) {};
-  virtual ~PtrCloser() { delete[] addr_; }
- private:
-  byte* addr_;
-};
-
 RawDexFile::Closer::~Closer() {}
 
+RawDexFile::MmapCloser::MmapCloser(void* addr, size_t length) : addr_(addr), length_(length) {
+  CHECK(addr != NULL);
+}
+RawDexFile::MmapCloser::~MmapCloser() {
+  if (munmap(addr_, length_) == -1) {
+    PLOG(INFO) << "munmap failed";
+  }
+}
+
+RawDexFile::PtrCloser::PtrCloser(byte* addr) : addr_(addr) {}
+RawDexFile::PtrCloser::~PtrCloser() { delete[] addr_; }
+
 RawDexFile* RawDexFile::OpenFile(const char* filename) {
   CHECK(filename != NULL);
   int fd = open(filename, O_RDONLY);  // TODO: scoped_fd
@@ -75,15 +61,10 @@
   return Open(dex_file, length, closer);
 }
 
-RawDexFile* RawDexFile::OpenBase64(const char* base64) {
-  CHECK(base64 != NULL);
-  size_t length;
-  byte* dex_file = DecodeBase64(base64, &length);
-  if (dex_file == NULL) {
-    return NULL;
-  }
-  RawDexFile::Closer* closer = new PtrCloser(dex_file);
-  return Open(dex_file, length, closer);
+RawDexFile* RawDexFile::OpenPtr(byte* ptr, size_t length) {
+  CHECK(ptr != NULL);
+  RawDexFile::Closer* closer = new PtrCloser(ptr);
+  return Open(ptr, length, closer);
 }
 
 RawDexFile* RawDexFile::Open(const byte* dex_file, size_t length,
diff --git a/src/raw_dex_file.h b/src/raw_dex_file.h
index f47b982..0bfab12 100644
--- a/src/raw_dex_file.h
+++ b/src/raw_dex_file.h
@@ -203,21 +203,11 @@
     uint32_t code_off_;
   };
 
-  // Helper class to deallocate underlying storage.
-  class Closer {
-   public:
-    virtual ~Closer();
-  };
-
   // Opens a .dex file from the file system.
   static RawDexFile* OpenFile(const char* filename);
 
-  // Opens a .dex file from a base64 encoded array.
-  // TODO: move this into the RawDexFile unit test
-  static RawDexFile* OpenBase64(const char* base64);
-
-  // Opens a .dex file at a the given address.
-  static RawDexFile* Open(const byte* dex_file, size_t length, Closer* closer);
+  // Opens a .dex file from a new allocated pointer
+  static RawDexFile* OpenPtr(byte* ptr, size_t length);
 
   // Closes a .dex file.
   virtual ~RawDexFile();
@@ -440,6 +430,34 @@
   }
 
  private:
+  // Helper class to deallocate underlying storage.
+  class Closer {
+   public:
+    virtual ~Closer();
+  };
+
+  // Helper class to deallocate mmap-backed .dex files.
+  class MmapCloser : public Closer {
+   public:
+    MmapCloser(void* addr, size_t length);
+    virtual ~MmapCloser();
+   private:
+    void* addr_;
+    size_t length_;
+  };
+
+  // Helper class for deallocating new/delete-backed .dex files.
+  class PtrCloser : public Closer {
+   public:
+    PtrCloser(byte* addr);
+    virtual ~PtrCloser();
+   private:
+    byte* addr_;
+  };
+
+  // Opens a .dex file at a the given address.
+  static RawDexFile* Open(const byte* dex_file, size_t length, Closer* closer);
+
   RawDexFile(const byte* addr, size_t length, Closer* closer)
       : base_(addr),
         length_(length),
diff --git a/src/raw_dex_file_test.cc b/src/raw_dex_file_test.cc
index a67ad77..0395bbd 100644
--- a/src/raw_dex_file_test.cc
+++ b/src/raw_dex_file_test.cc
@@ -11,12 +11,12 @@
 namespace art {
 
 TEST(RawDexFileTest, Open) {
-  scoped_ptr<RawDexFile> raw(RawDexFile::OpenBase64(kNestedDex));
+  scoped_ptr<RawDexFile> raw(OpenRawDexFileBase64(kNestedDex));
   ASSERT_TRUE(raw != NULL);
 }
 
 TEST(RawDexFileTest, Header) {
-  scoped_ptr<RawDexFile> raw(RawDexFile::OpenBase64(kNestedDex));
+  scoped_ptr<RawDexFile> raw(OpenRawDexFileBase64(kNestedDex));
   ASSERT_TRUE(raw != NULL);
 
   const RawDexFile::Header& header = raw->GetHeader();
@@ -44,7 +44,7 @@
 }
 
 TEST(RawDexFileTest, ClassDefs) {
-  scoped_ptr<RawDexFile> raw(RawDexFile::OpenBase64(kNestedDex));
+  scoped_ptr<RawDexFile> raw(OpenRawDexFileBase64(kNestedDex));
   ASSERT_TRUE(raw != NULL);
   EXPECT_EQ(2U, raw->NumClassDefs());