summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-01-22 17:18:46 -0800
committerTom Sepez <tsepez@chromium.org>2015-01-22 17:18:46 -0800
commit36faa4ac92100936d108354a066218d1aae327a3 (patch)
tree215bcd3fbb2b63a80ba69796bd7f2c5202be85bc
parent219e462c2a0bb9a5462c0ee43ec93ac86c9cda40 (diff)
downloadpdfium-36faa4ac92100936d108354a066218d1aae327a3.tar.xz
Fix build of pdfium_embeddertest under V8_USE_EXTERNAL_STARTUP_DATA.
Currently, this is a difference between the standalone pdfium environment vs. pdfium as part of a chromium checkout. Locating the external data files is a nusiance when you don't have the binary's argv[0] line, so we create a new main that preserves this for us. R=thestig@chromium.org Review URL: https://codereview.chromium.org/851283006
-rw-r--r--pdfium.gyp1
-rw-r--r--testing/embedder_test.cpp37
2 files changed, 21 insertions, 17 deletions
diff --git a/pdfium.gyp b/pdfium.gyp
index 2125852360..d287181dfc 100644
--- a/pdfium.gyp
+++ b/pdfium.gyp
@@ -831,7 +831,6 @@
'target_name': 'pdfium_embeddertests',
'type': 'executable',
'dependencies': [
- '<(DEPTH)/testing/gtest.gyp:gtest_main',
'<(DEPTH)/testing/gtest.gyp:gtest',
'pdfium',
],
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 74d4f2530f..88cce00f5a 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -29,6 +29,8 @@
namespace {
+const char* g_exe_path_ = nullptr;
+
// Reads the entire contents of a file into a newly malloc'd buffer.
static char* GetFileContents(const char* filename, size_t* retlen) {
FILE* file = fopen(filename, "rb");
@@ -60,18 +62,13 @@ static char* GetFileContents(const char* filename, size_t* retlen) {
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
// Returns the full path for an external V8 data file based on either
// the currect exectuable path or an explicit override.
-static std::string GetFullPathForSnapshotFile(const Options& options,
+static std::string GetFullPathForSnapshotFile(const std::string& exe_path,
const std::string& filename) {
std::string result;
- if (!options.bin_directory.empty()) {
- result = options.bin_directory;
- if (*options.bin_directory.rbegin() != PATH_SEPARATOR) {
- result += PATH_SEPARATOR;
- }
- } else if (!options.exe_path.empty()) {
- size_t last_separator = options.exe_path.rfind(PATH_SEPARATOR);
+ if (!exe_path.empty()) {
+ size_t last_separator = exe_path.rfind(PATH_SEPARATOR);
if (last_separator != std::string::npos) {
- result = options.exe_path.substr(0, last_separator + 1);
+ result = exe_path.substr(0, last_separator + 1);
}
}
result += filename;
@@ -80,10 +77,10 @@ static std::string GetFullPathForSnapshotFile(const Options& options,
// Reads an extenal V8 data file from the |options|-indicated location,
// returing true on success and false on error.
-static bool GetExternalData(const Options& options,
- const std::string& bin_filename,
+static bool GetExternalData(const std::string& exe_path,
+ const std::string& filename,
v8::StartupData* result_data) {
- std::string full_path = GetFullPathForSnapshotFile(options, bin_filename);
+ std::string full_path = GetFullPathForSnapshotFile(exe_path, filename);
size_t data_length = 0;
char* data_buffer = GetFileContents(full_path.c_str(), &data_length);
if (!data_buffer) {
@@ -177,10 +174,10 @@ void EmbedderTest::SetUp() {
v8::V8::InitializeICU();
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
- ASSERT_TRUE(GetExternalData(options, "natives_blob.bin", &natives_));
- ASSERT_TRUE(GetExternalData(options, "snapshot_blob.bin", &snapshot_));
- v8::V8::SetNativesDataBlob(&natives);
- v8::V8::SetSnapshotDataBlob(&snapshot);
+ ASSERT_TRUE(GetExternalData(g_exe_path_, "natives_blob.bin", &natives_));
+ ASSERT_TRUE(GetExternalData(g_exe_path_, "snapshot_blob.bin", &snapshot_));
+ v8::V8::SetNativesDataBlob(&natives_);
+ v8::V8::SetSnapshotDataBlob(&snapshot_);
#endif // V8_USE_EXTERNAL_STARTUP_DATA
FPDF_InitLibrary();
@@ -304,3 +301,11 @@ void EmbedderTest::UnloadPage(FPDF_PAGE page, FPDF_FORMHANDLE form) {
FORM_OnBeforeClosePage(page, form);
FPDF_ClosePage(page);
}
+
+// Can't use gtest-provided main since we need to stash the path to the
+// executable in order to find the external V8 binary data files.
+int main(int argc, char** argv) {
+ g_exe_path_ = argv[0];
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}