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());