components_test_suite.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // Copyright 2016 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. #include "components/test/components_test_suite.h"
  5. #include <memory>
  6. #include <utility>
  7. #include "base/bind.h"
  8. #include "base/command_line.h"
  9. #include "base/files/file_path.h"
  10. #include "base/path_service.h"
  11. #include "base/test/launcher/unit_test_launcher.h"
  12. #include "base/test/test_suite.h"
  13. #include "build/build_config.h"
  14. #include "build/buildflag.h"
  15. #include "components/content_settings/core/common/content_settings_pattern.h"
  16. #include "mojo/core/embedder/embedder.h"
  17. #include "services/network/public/cpp/features.h"
  18. #include "testing/gtest/include/gtest/gtest.h"
  19. #include "ui/base/resource/resource_bundle.h"
  20. #include "ui/base/ui_base_paths.h"
  21. #include "url/url_util.h"
  22. #if BUILDFLAG(IS_IOS)
  23. #include "components/test/ios_components_test_initializer.h"
  24. #else
  25. #include "content/public/common/content_client.h"
  26. #include "content/public/common/network_service_util.h"
  27. #include "content/public/test/content_test_suite_base.h"
  28. #include "content/public/test/unittest_test_suite.h"
  29. #include "ui/gl/test/gl_surface_test_support.h"
  30. #endif
  31. namespace {
  32. // Not using kExtensionScheme and kChromeSearchScheme to avoid the dependency
  33. // to extensions and chrome/common.
  34. const char* const kNonWildcardDomainNonPortSchemes[] = {
  35. "chrome-extension", "chrome-search", "chrome", "chrome-untrusted",
  36. "devtools"};
  37. class ComponentsTestSuite : public base::TestSuite {
  38. public:
  39. ComponentsTestSuite(int argc, char** argv) : base::TestSuite(argc, argv) {}
  40. ComponentsTestSuite(const ComponentsTestSuite&) = delete;
  41. ComponentsTestSuite& operator=(const ComponentsTestSuite&) = delete;
  42. private:
  43. void Initialize() override {
  44. base::TestSuite::Initialize();
  45. mojo::core::Init();
  46. // These schemes need to be added globally to pass tests of
  47. // autocomplete_input_unittest.cc and content_settings_pattern*
  48. // TODO(https://crbug.com/1047702): Move this scheme initialization into the
  49. // individual tests that need these schemes.
  50. url::AddStandardScheme("chrome-extension", url::SCHEME_WITH_HOST);
  51. url::AddStandardScheme("chrome-search", url::SCHEME_WITH_HOST);
  52. url::AddStandardScheme("chrome-distiller", url::SCHEME_WITH_HOST);
  53. #if !BUILDFLAG(IS_IOS)
  54. gl::GLSurfaceTestSupport::InitializeOneOff();
  55. content::ForceInProcessNetworkService(true);
  56. // Setup content scheme statics.
  57. {
  58. content::ContentClient content_client;
  59. content::ContentTestSuiteBase::RegisterContentSchemes(&content_client);
  60. }
  61. #else
  62. url::AddStandardScheme("chrome", url::SCHEME_WITH_HOST);
  63. url::AddStandardScheme("chrome-untrusted", url::SCHEME_WITH_HOST);
  64. url::AddStandardScheme("devtools", url::SCHEME_WITH_HOST);
  65. #endif
  66. ui::RegisterPathProvider();
  67. base::FilePath pak_path;
  68. #if BUILDFLAG(IS_ANDROID)
  69. base::PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &pak_path);
  70. #else
  71. base::PathService::Get(base::DIR_ASSETS, &pak_path);
  72. #endif
  73. base::FilePath ui_test_pak_path;
  74. ASSERT_TRUE(base::PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path));
  75. ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path);
  76. ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath(
  77. pak_path.AppendASCII("components_tests_resources.pak"),
  78. ui::kScaleFactorNone);
  79. ContentSettingsPattern::SetNonWildcardDomainNonPortSchemes(
  80. kNonWildcardDomainNonPortSchemes,
  81. std::size(kNonWildcardDomainNonPortSchemes));
  82. }
  83. void Shutdown() override {
  84. ui::ResourceBundle::CleanupSharedInstance();
  85. base::TestSuite::Shutdown();
  86. }
  87. };
  88. #if BUILDFLAG(IS_IOS)
  89. class ComponentsUnitTestEventListener : public testing::EmptyTestEventListener {
  90. public:
  91. ComponentsUnitTestEventListener() = default;
  92. ComponentsUnitTestEventListener(const ComponentsUnitTestEventListener&) =
  93. delete;
  94. ComponentsUnitTestEventListener& operator=(
  95. const ComponentsUnitTestEventListener&) = delete;
  96. ~ComponentsUnitTestEventListener() override = default;
  97. void OnTestStart(const testing::TestInfo& test_info) override {
  98. ios_initializer_.reset(new IosComponentsTestInitializer());
  99. }
  100. void OnTestEnd(const testing::TestInfo& test_info) override {
  101. ios_initializer_.reset();
  102. }
  103. private:
  104. std::unique_ptr<IosComponentsTestInitializer> ios_initializer_;
  105. };
  106. #endif
  107. } // namespace
  108. base::RunTestSuiteCallback GetLaunchCallback(int argc, char** argv) {
  109. #if !BUILDFLAG(IS_IOS)
  110. auto test_suite = std::make_unique<content::UnitTestTestSuite>(
  111. new ComponentsTestSuite(argc, argv),
  112. base::BindRepeating(
  113. content::UnitTestTestSuite::CreateTestContentClients));
  114. #else
  115. auto test_suite = std::make_unique<ComponentsTestSuite>(argc, argv);
  116. testing::TestEventListeners& listeners =
  117. testing::UnitTest::GetInstance()->listeners();
  118. listeners.Append(new ComponentsUnitTestEventListener());
  119. #endif
  120. #if !BUILDFLAG(IS_IOS)
  121. return base::BindOnce(&content::UnitTestTestSuite::Run,
  122. std::move(test_suite));
  123. #else
  124. return base::BindOnce(&base::TestSuite::Run, std::move(test_suite));
  125. #endif
  126. }