Home | History | Annotate | Download | only in test
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/bind.h"
      6 #include "base/files/file_path.h"
      7 #include "base/path_service.h"
      8 #include "base/test/launcher/unit_test_launcher.h"
      9 #include "base/test/test_suite.h"
     10 #include "build/build_config.h"
     11 #include "ui/base/resource/resource_bundle.h"
     12 #include "ui/base/ui_base_paths.h"
     13 #include "ui/gfx/gfx_paths.h"
     14 
     15 #if defined(OS_ANDROID)
     16 #include "base/android/jni_android.h"
     17 #include "ui/base/android/ui_base_jni_registrar.h"
     18 #include "ui/gfx/android/gfx_jni_registrar.h"
     19 #endif
     20 
     21 #if defined(OS_MACOSX) && !defined(OS_IOS)
     22 #include "base/mac/bundle_locations.h"
     23 #endif
     24 
     25 #if defined(OS_WIN)
     26 #include "ui/gfx/win/dpi.h"
     27 #endif
     28 
     29 namespace {
     30 
     31 class UIBaseTestSuite : public base::TestSuite {
     32  public:
     33   UIBaseTestSuite(int argc, char** argv);
     34 
     35  protected:
     36   // base::TestSuite:
     37   virtual void Initialize() OVERRIDE;
     38   virtual void Shutdown() OVERRIDE;
     39 
     40  private:
     41   DISALLOW_COPY_AND_ASSIGN(UIBaseTestSuite);
     42 };
     43 
     44 UIBaseTestSuite::UIBaseTestSuite(int argc, char** argv)
     45     : base::TestSuite(argc, argv) {}
     46 
     47 void UIBaseTestSuite::Initialize() {
     48   base::TestSuite::Initialize();
     49 
     50 #if defined(OS_WIN)
     51   gfx::ForceHighDPISupportForTesting(1.0);
     52 #endif
     53 
     54 #if defined(OS_ANDROID)
     55   // Register JNI bindings for android.
     56   gfx::android::RegisterJni(base::android::AttachCurrentThread());
     57   ui::android::RegisterJni(base::android::AttachCurrentThread());
     58 #endif
     59 
     60   ui::RegisterPathProvider();
     61   gfx::RegisterPathProvider();
     62 
     63   base::FilePath exe_path;
     64   PathService::Get(base::DIR_EXE, &exe_path);
     65 
     66 #if defined(OS_MACOSX) && !defined(OS_IOS)
     67   // On Mac, a test Framework bundle is created that links locale.pak and
     68   // chrome_100_percent.pak at the appropriate places to ui_test.pak.
     69   base::mac::SetOverrideFrameworkBundlePath(
     70       exe_path.AppendASCII("ui_unittests Framework.framework"));
     71   ui::ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
     72 
     73 #elif defined(OS_IOS) || defined(OS_ANDROID)
     74   // On iOS, the ui_unittests binary is itself a mini bundle, with resources
     75   // built in. On Android, ui_unittests_apk provides the necessary framework.
     76   ui::ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
     77 
     78 #else
     79   // On other platforms, the (hardcoded) paths for chrome_100_percent.pak and
     80   // locale.pak get populated by later build steps. To avoid clobbering them,
     81   // load the test .pak files directly.
     82   ui::ResourceBundle::InitSharedInstanceWithPakPath(
     83       exe_path.AppendASCII("ui_test.pak"));
     84 
     85   // ui_unittests can't depend on the locales folder which Chrome will make
     86   // later, so use the path created by ui_test_pak.
     87   PathService::Override(ui::DIR_LOCALES, exe_path.AppendASCII("ui"));
     88 #endif
     89 }
     90 
     91 void UIBaseTestSuite::Shutdown() {
     92   ui::ResourceBundle::CleanupSharedInstance();
     93 
     94 #if defined(OS_MACOSX) && !defined(OS_IOS)
     95   base::mac::SetOverrideFrameworkBundle(NULL);
     96 #endif
     97   base::TestSuite::Shutdown();
     98 }
     99 
    100 }  // namespace
    101 
    102 int main(int argc, char** argv) {
    103   UIBaseTestSuite test_suite(argc, argv);
    104 
    105   return base::LaunchUnitTests(argc,
    106                                argv,
    107                                base::Bind(&UIBaseTestSuite::Run,
    108                                           base::Unretained(&test_suite)));
    109 }
    110