Add PathUtilsTest.
- This test invokes JNI calls and included only if gtest_target_type=shared_library.
- Also set the application context to get these JNI calls working.
BUG=125059
TEST=
Review URL: http://codereview.chromium.org/10161032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134144 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/base/android/path_utils.h b/base/android/path_utils.h
index 8015ed93..2e95727 100644
--- a/base/android/path_utils.h
+++ b/base/android/path_utils.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -21,6 +21,9 @@
// cache dir.
std::string GetCacheDirectory();
+// Returns the path to the public downloads directory.
+std::string GetDownloadsDirectory();
+
bool RegisterPathUtils(JNIEnv* env);
} // namespace android
diff --git a/base/android/path_utils_unittest.cc b/base/android/path_utils_unittest.cc
new file mode 100644
index 0000000..e86cd49
--- /dev/null
+++ b/base/android/path_utils_unittest.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/path_utils.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace android {
+
+typedef testing::Test PathUtilsTest;
+
+TEST_F(PathUtilsTest, TestGetDataDirectory) {
+ // The string comes from the Java side and depends on the APK
+ // we are running in. Assumes that we are packaged in
+ // org.chromium.native_test
+ EXPECT_STREQ("/data/data/org.chromium.native_test/app_chrome",
+ GetDataDirectory().c_str());
+}
+
+TEST_F(PathUtilsTest, TestGetCacheDirectory) {
+ // The string comes from the Java side and depends on the APK
+ // we are running in. Assumes that we are packaged in
+ // org.chromium.native_test
+ EXPECT_STREQ("/data/data/org.chromium.native_test/cache",
+ GetCacheDirectory().c_str());
+}
+
+} // namespace android
+} // namespace base
diff --git a/base/base.gyp b/base/base.gyp
index 91269004..e048d097 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -132,6 +132,7 @@
'sources': [
# Tests.
'android/jni_android_unittest.cc',
+ 'android/path_utils_unittest.cc',
'android/scoped_java_ref_unittest.cc',
'at_exit_unittest.cc',
'atomicops_unittest.cc',
@@ -301,22 +302,27 @@
['OS == "android"', {
'sources!': [
# TODO(michaelbai): Removed the below once the fix upstreamed.
+ 'debug/stack_trace_unittest.cc',
'memory/mru_cache_unittest.cc',
'process_util_unittest.cc',
'synchronization/cancellation_flag_unittest.cc',
- # TODO(michaelbai): The below files are excluded because of the
- # missing JNI and should be added back once JNI is ready.
- 'android/jni_android_unittest.cc',
- 'android/scoped_java_ref_unittest.cc',
- 'debug/stack_trace_unittest.cc',
],
'dependencies': [
'android/jni_generator/jni_generator.gyp:jni_generator_tests',
],
- }],
- ['OS=="android" and "<(gtest_target_type)"=="shared_library"', {
- 'dependencies': [
- '../testing/android/native_test.gyp:native_test_native_code',
+ 'conditions': [
+ ['"<(gtest_target_type)"=="shared_library"', {
+ 'dependencies': [
+ '../testing/android/native_test.gyp:native_test_native_code',
+ ],
+ }, { # gtest_target_type != shared_library
+ 'sources!': [
+ # The below files are excluded because of the missing JNI.
+ 'android/jni_android_unittest.cc',
+ 'android/path_utils_unittest.cc',
+ 'android/scoped_java_ref_unittest.cc',
+ ],
+ }],
],
}],
['use_glib==1', {
diff --git a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
index b4bb6ad..35e381f 100644
--- a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
+++ b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
@@ -5,6 +5,7 @@
package org.chromium.native_test;
import android.app.Activity;
+import android.content.Context;
import android.os.Bundle;
import android.util.Log;
@@ -36,7 +37,7 @@
@Override
public void run() {
Log.d(TAG, ">>nativeRunTests");
- nativeRunTests(getFilesDir().getAbsolutePath());
+ nativeRunTests(getFilesDir().getAbsolutePath(), getApplicationContext());
// TODO(jrg): make sure a crash in native code
// triggers nativeTestFailed().
Log.d(TAG, "<<nativeRunTests");
@@ -62,5 +63,5 @@
Log.i(TAG, "loaded: " + mLibrary);
}
- private native void nativeRunTests(String filesDir);
+ private native void nativeRunTests(String filesDir, Context appContext);
}
diff --git a/testing/android/native_test_launcher.cc b/testing/android/native_test_launcher.cc
index 455d43d..1555fbe 100644
--- a/testing/android/native_test_launcher.cc
+++ b/testing/android/native_test_launcher.cc
@@ -7,6 +7,7 @@
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/path_utils.h"
+#include "base/android/scoped_java_ref.h"
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/file_path.h"
@@ -156,7 +157,10 @@
// This method is called on a separate java thread so that we won't trigger
// an ANR.
-static void RunTests(JNIEnv* env, jobject obj, jstring jfiles_dir) {
+static void RunTests(JNIEnv* env,
+ jobject obj,
+ jstring jfiles_dir,
+ jobject app_context) {
FilePath files_dir(base::android::ConvertJavaStringToUTF8(env, jfiles_dir));
// A few options, such "--gtest_list_tests", will just use printf directly
// and won't use the "AndroidLogPrinter". Redirect stdout to a known file.
@@ -175,6 +179,11 @@
AndroidLogPrinter* log = new AndroidLogPrinter();
log->Init(&argc, &argv[0]);
+ // Set the application context in base.
+ base::android::ScopedJavaLocalRef<jobject> scoped_context(
+ env, env->NewLocalRef(app_context));
+ base::android::InitApplicationContext(scoped_context);
+
main(argc, &argv[0]);
}