| Index: testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
|
| diff --git a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b4bb6add2c0632c807c1e8d3f04cc7a36bda54a9
|
| --- /dev/null
|
| +++ b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestActivity.java
|
| @@ -0,0 +1,66 @@
|
| +// 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.
|
| +
|
| +package org.chromium.native_test;
|
| +
|
| +import android.app.Activity;
|
| +import android.os.Bundle;
|
| +import android.util.Log;
|
| +
|
| +// Android's NativeActivity is mostly useful for pure-native code.
|
| +// Our tests need to go up to our own java classes, which is not possible using
|
| +// the native activity class loader.
|
| +// We start a background thread in here to run the tests and avoid an ANR.
|
| +// TODO(bulach): watch out for tests that implicitly assume they run on the main
|
| +// thread.
|
| +public class ChromeNativeTestActivity extends Activity {
|
| + private final String TAG = "ChromeNativeTestActivity";
|
| +
|
| + // Name of our shlib as obtained from a string resource.
|
| + private String mLibrary;
|
| +
|
| + @Override
|
| + public void onCreate(Bundle savedInstanceState) {
|
| + super.onCreate(savedInstanceState);
|
| +
|
| + mLibrary = getResources().getString(R.string.native_library);
|
| + if ((mLibrary == null) || mLibrary.startsWith("replace")) {
|
| + nativeTestFailed();
|
| + return;
|
| + }
|
| +
|
| + try {
|
| + loadLibrary();
|
| + new Thread() {
|
| + @Override
|
| + public void run() {
|
| + Log.d(TAG, ">>nativeRunTests");
|
| + nativeRunTests(getFilesDir().getAbsolutePath());
|
| + // TODO(jrg): make sure a crash in native code
|
| + // triggers nativeTestFailed().
|
| + Log.d(TAG, "<<nativeRunTests");
|
| + }
|
| + }.start();
|
| + } catch (UnsatisfiedLinkError e) {
|
| + Log.e(TAG, "Unable to load lib" + mLibrary + ".so: " + e);
|
| + nativeTestFailed();
|
| + throw e;
|
| + }
|
| + }
|
| +
|
| + // Signal a failure of the native test loader to python scripts
|
| + // which run tests. For example, we look for
|
| + // RUNNER_FAILED build/android/test_package.py.
|
| + private void nativeTestFailed() {
|
| + Log.e(TAG, "[ RUNNER_FAILED ] could not load native library");
|
| + }
|
| +
|
| + private void loadLibrary() throws UnsatisfiedLinkError {
|
| + Log.i(TAG, "loading: " + mLibrary);
|
| + System.loadLibrary(mLibrary);
|
| + Log.i(TAG, "loaded: " + mLibrary);
|
| + }
|
| +
|
| + private native void nativeRunTests(String filesDir);
|
| +}
|
|
|