• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2015 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.native_test;
6 
7 import android.app.Activity;
8 
9 import org.chromium.base.ApplicationStatus;
10 import org.chromium.base.ContextUtils;
11 import org.chromium.base.Log;
12 import org.chromium.base.PathUtils;
13 import org.chromium.base.PowerMonitor;
14 import org.chromium.base.library_loader.LibraryLoader;
15 
16 /**
17  * A helper for running native unit tests (i.e., not browser tests)
18  */
19 public class NativeUnitTest extends NativeTest {
20     private static final String TAG = "NativeTest";
21 
22     private static final String LIBRARY_UNDER_TEST_NAME =
23             "org.chromium.native_test.NativeTestInstrumentationTestRunner.LibraryUnderTest";
24     private static class NativeUnitTestLibraryLoader extends LibraryLoader {
setLibrariesLoaded()25         static void setLibrariesLoaded() {
26             LibraryLoader.setLibrariesLoadedForNativeTests();
27         }
28     }
29 
30     @Override
preCreate(Activity activity)31     public void preCreate(Activity activity) {
32         super.preCreate(activity);
33         // Necessary because NativeUnitTestActivity uses BaseChromiumApplication which does not
34         // initialize ContextUtils.
35         ContextUtils.initApplicationContext(activity.getApplicationContext());
36 
37         // Necessary because BaseChromiumApplication no longer automatically initializes application
38         // tracking.
39         ApplicationStatus.initialize(activity.getApplication());
40 
41         // Needed by path_utils_unittest.cc
42         PathUtils.setPrivateDataDirectorySuffix("chrome");
43 
44         // Needed by system_monitor_unittest.cc
45         PowerMonitor.createForTests();
46 
47         // For NativeActivity based tests,
48         // dependency libraries must be loaded before NativeActivity::OnCreate,
49         // otherwise loading android.app.lib_name will fail
50         String libraryToLoad = activity.getIntent().getStringExtra(LIBRARY_UNDER_TEST_NAME);
51         if (libraryToLoad != null) {
52             loadLibrary(libraryToLoad);
53         } else {
54             Log.e(TAG, "No Library provided for native tests! Exiting");
55             activity.finish();
56         }
57     }
58 
loadLibrary(String library)59     private void loadLibrary(String library) {
60 
61         LibraryLoader.setEnvForNative();
62         Log.i(TAG, "loading: %s", library);
63         System.loadLibrary(library);
64         Log.i(TAG, "loaded: %s", library);
65         NativeUnitTestLibraryLoader.setLibrariesLoaded();
66     }
67 }
68