Remove most of base/test
Change-Id: I19119b5cb23a293f80719ca92c980196671aa50f
Reviewed-on: https://gn-review.googlesource.com/1424
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Scott Graham <scottmg@chromium.org>
diff --git a/base/test/DEPS b/base/test/DEPS
deleted file mode 100644
index 5827c26..0000000
--- a/base/test/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+third_party/libxml",
-]
diff --git a/base/test/OWNERS b/base/test/OWNERS
deleted file mode 100644
index 6807748..0000000
--- a/base/test/OWNERS
+++ /dev/null
@@ -1,16 +0,0 @@
-per-file *task_scheduler*=file://base/task_scheduler/OWNERS
-
-# Metrics-related test utilites:
-per-file *histogram_tester*=file://base/metrics/OWNERS
-per-file *scoped_feature_list*=file://base/metrics/OWNERS
-per-file *user_action_tester*=file://base/metrics/OWNERS
-
-# Tracing test utilities:
-per-file trace_*=file://base/trace_event/OWNERS
-
-# For Android-specific changes:
-per-file *android*=file://base/test/android/OWNERS
-per-file BUILD.gn=file://base/test/android/OWNERS
-
-# Linux fontconfig changes
-per-file *fontconfig*=file://base/nix/OWNERS
diff --git a/base/test/bind_test_util.h b/base/test/bind_test_util.h
deleted file mode 100644
index 0dfcb46..0000000
--- a/base/test/bind_test_util.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef BASE_TEST_BIND_TEST_UTIL_H_
-#define BASE_TEST_BIND_TEST_UTIL_H_
-
-#include "base/bind.h"
-
-namespace base {
-namespace internal {
-
-template <typename F, typename Signature>
-struct BindLambdaHelper;
-
-template <typename F, typename R, typename... Args>
-struct BindLambdaHelper<F, R(Args...)> {
- static R Run(const std::decay_t<F>& f, Args... args) {
- return f(std::forward<Args>(args)...);
- }
-};
-
-} // namespace internal
-
-// A variant of Bind() that can bind capturing lambdas for testing.
-// This doesn't support extra arguments binding as the lambda itself can do.
-template <typename F>
-decltype(auto) BindLambdaForTesting(F&& f) {
- using Signature = internal::ExtractCallableRunType<std::decay_t<F>>;
- return BindRepeating(&internal::BindLambdaHelper<F, Signature>::Run,
- std::forward<F>(f));
-}
-
-} // namespace base
-
-#endif // BASE_TEST_BIND_TEST_UTIL_H_
diff --git a/base/test/copy_only_int.h b/base/test/copy_only_int.h
deleted file mode 100644
index 4e482c9..0000000
--- a/base/test/copy_only_int.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef BASE_TEST_COPY_ONLY_INT_H_
-#define BASE_TEST_COPY_ONLY_INT_H_
-
-#include "base/macros.h"
-
-namespace base {
-
-// A copy-only (not moveable) class that holds an integer. This is designed for
-// testing containers. See also MoveOnlyInt.
-class CopyOnlyInt {
- public:
- explicit CopyOnlyInt(int data = 1) : data_(data) {}
- CopyOnlyInt(const CopyOnlyInt& other) = default;
- ~CopyOnlyInt() { data_ = 0; }
-
- friend bool operator==(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return lhs.data_ == rhs.data_;
- }
-
- friend bool operator!=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return !operator==(lhs, rhs);
- }
-
- friend bool operator<(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return lhs.data_ < rhs.data_;
- }
-
- friend bool operator>(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return rhs < lhs;
- }
-
- friend bool operator<=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return !(rhs < lhs);
- }
-
- friend bool operator>=(const CopyOnlyInt& lhs, const CopyOnlyInt& rhs) {
- return !(lhs < rhs);
- }
-
- int data() const { return data_; }
-
- private:
- volatile int data_;
-
- CopyOnlyInt(CopyOnlyInt&&) = delete;
- CopyOnlyInt& operator=(CopyOnlyInt&) = delete;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_COPY_ONLY_INT_H_
diff --git a/base/test/data/file_util/binary_file.bin b/base/test/data/file_util/binary_file.bin
deleted file mode 100644
index f53cc82..0000000
--- a/base/test/data/file_util/binary_file.bin
+++ /dev/null
Binary files differ
diff --git a/base/test/data/file_util/binary_file_diff.bin b/base/test/data/file_util/binary_file_diff.bin
deleted file mode 100644
index 103b26d..0000000
--- a/base/test/data/file_util/binary_file_diff.bin
+++ /dev/null
Binary files differ
diff --git a/base/test/data/file_util/binary_file_same.bin b/base/test/data/file_util/binary_file_same.bin
deleted file mode 100644
index f53cc82..0000000
--- a/base/test/data/file_util/binary_file_same.bin
+++ /dev/null
Binary files differ
diff --git a/base/test/data/file_util/blank_line.txt b/base/test/data/file_util/blank_line.txt
deleted file mode 100644
index 8892069..0000000
--- a/base/test/data/file_util/blank_line.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The next line is blank.
-
-But this one isn't.
diff --git a/base/test/data/file_util/blank_line_crlf.txt b/base/test/data/file_util/blank_line_crlf.txt
deleted file mode 100644
index 3aefe52..0000000
--- a/base/test/data/file_util/blank_line_crlf.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-The next line is blank.
-
-But this one isn't.
diff --git a/base/test/data/file_util/crlf.txt b/base/test/data/file_util/crlf.txt
deleted file mode 100644
index 0e62728..0000000
--- a/base/test/data/file_util/crlf.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is the same.
diff --git a/base/test/data/file_util/different.txt b/base/test/data/file_util/different.txt
deleted file mode 100644
index 5b9f9c4..0000000
--- a/base/test/data/file_util/different.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is different.
diff --git a/base/test/data/file_util/different_first.txt b/base/test/data/file_util/different_first.txt
deleted file mode 100644
index 8661d66..0000000
--- a/base/test/data/file_util/different_first.txt
+++ /dev/null
@@ -1 +0,0 @@
-this file is the same.
diff --git a/base/test/data/file_util/different_last.txt b/base/test/data/file_util/different_last.txt
deleted file mode 100644
index e8b3e5a..0000000
--- a/base/test/data/file_util/different_last.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is the same.
\ No newline at end of file
diff --git a/base/test/data/file_util/empty1.txt b/base/test/data/file_util/empty1.txt
deleted file mode 100644
index e69de29..0000000
--- a/base/test/data/file_util/empty1.txt
+++ /dev/null
diff --git a/base/test/data/file_util/empty2.txt b/base/test/data/file_util/empty2.txt
deleted file mode 100644
index e69de29..0000000
--- a/base/test/data/file_util/empty2.txt
+++ /dev/null
diff --git a/base/test/data/file_util/first1.txt b/base/test/data/file_util/first1.txt
deleted file mode 100644
index 2c6e300..0000000
--- a/base/test/data/file_util/first1.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-The first line is the same.
-The second line is different.
diff --git a/base/test/data/file_util/first2.txt b/base/test/data/file_util/first2.txt
deleted file mode 100644
index e39b5ec..0000000
--- a/base/test/data/file_util/first2.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-The first line is the same.
-The second line is not.
diff --git a/base/test/data/file_util/original.txt b/base/test/data/file_util/original.txt
deleted file mode 100644
index 4422f57..0000000
--- a/base/test/data/file_util/original.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is the same.
diff --git a/base/test/data/file_util/red.png b/base/test/data/file_util/red.png
deleted file mode 100644
index 0806141..0000000
--- a/base/test/data/file_util/red.png
+++ /dev/null
Binary files differ
diff --git a/base/test/data/file_util/same.txt b/base/test/data/file_util/same.txt
deleted file mode 100644
index 4422f57..0000000
--- a/base/test/data/file_util/same.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is the same.
diff --git a/base/test/data/file_util/same_length.txt b/base/test/data/file_util/same_length.txt
deleted file mode 100644
index 157405c..0000000
--- a/base/test/data/file_util/same_length.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is not same.
diff --git a/base/test/data/file_util/shortened.txt b/base/test/data/file_util/shortened.txt
deleted file mode 100644
index 2bee82c..0000000
--- a/base/test/data/file_util/shortened.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is the
\ No newline at end of file
diff --git a/base/test/data/file_version_info_unittest/FileVersionInfoTest1.dll b/base/test/data/file_version_info_unittest/FileVersionInfoTest1.dll
deleted file mode 100755
index bdf8dc0..0000000
--- a/base/test/data/file_version_info_unittest/FileVersionInfoTest1.dll
+++ /dev/null
Binary files differ
diff --git a/base/test/data/file_version_info_unittest/FileVersionInfoTest2.dll b/base/test/data/file_version_info_unittest/FileVersionInfoTest2.dll
deleted file mode 100755
index 51e7966..0000000
--- a/base/test/data/file_version_info_unittest/FileVersionInfoTest2.dll
+++ /dev/null
Binary files differ
diff --git a/base/test/data/json/bom_feff.json b/base/test/data/json/bom_feff.json
deleted file mode 100644
index b05ae50..0000000
--- a/base/test/data/json/bom_feff.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "appName": {
- "message": "Gmail",
- "description": "App name."
- },
- "appDesc": {
- "message": "بريد إلكتروني يوفر إمكانية البحث مع مقدار أقل من الرسائل غير المرغوب فيها.",
- "description":"App description."
- }
-}
\ No newline at end of file
diff --git a/base/test/data/pe_image/pe_image_test_32.dll b/base/test/data/pe_image/pe_image_test_32.dll
deleted file mode 100755
index 539d631..0000000
--- a/base/test/data/pe_image/pe_image_test_32.dll
+++ /dev/null
Binary files differ
diff --git a/base/test/data/pe_image/pe_image_test_64.dll b/base/test/data/pe_image/pe_image_test_64.dll
deleted file mode 100755
index 8801e23..0000000
--- a/base/test/data/pe_image/pe_image_test_64.dll
+++ /dev/null
Binary files differ
diff --git a/base/test/data/serializer_nested_test.json b/base/test/data/serializer_nested_test.json
deleted file mode 100644
index cfea8e8..0000000
--- a/base/test/data/serializer_nested_test.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "bool": true,
- "dict": {
- "bool": true,
- "dict": {
- "bees": "knees",
- "cats": "meow"
- },
- "foos": "bar",
- "list": [ 3.4, "second", null ]
- },
- "int": 42,
- "list": [ 1, 2 ],
- "null": null,
- "real": 3.14,
- "string": "hello"
-}
diff --git a/base/test/data/serializer_test.json b/base/test/data/serializer_test.json
deleted file mode 100644
index 446925e..0000000
--- a/base/test/data/serializer_test.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "bool": true,
- "int": 42,
- "list": [ 1, 2 ],
- "null": null,
- "real": 3.14,
- "string": "hello"
-}
diff --git a/base/test/data/serializer_test_nowhitespace.json b/base/test/data/serializer_test_nowhitespace.json
deleted file mode 100644
index a1afdc5..0000000
--- a/base/test/data/serializer_test_nowhitespace.json
+++ /dev/null
@@ -1 +0,0 @@
-{"bool":true,"int":42,"list":[1,2],"null":null,"real":3.14,"string":"hello"}
\ No newline at end of file
diff --git a/base/test/fontconfig_util_linux.cc b/base/test/fontconfig_util_linux.cc
deleted file mode 100644
index 8bd7c92..0000000
--- a/base/test/fontconfig_util_linux.cc
+++ /dev/null
@@ -1,496 +0,0 @@
-// Copyright 2014 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/test/fontconfig_util_linux.h"
-
-#include <fontconfig/fontconfig.h>
-
-#include "base/base_paths.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/path_service.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-
-namespace base {
-
-namespace {
-
-const char kFontsConfTemplate[] = R"(<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<fontconfig>
-
- <!-- Cache location. -->
- <cachedir>$1</cachedir>
-
- <!-- GCS-synced fonts. -->
- <dir>$2</dir>
-
- <!-- Default properties. -->
- <match target="font">
- <edit name="embeddedbitmap" mode="append_last">
- <bool>false</bool>
- </edit>
- </match>
-
- <!-- TODO(thomasanderson): Figure out why this is necessary. -->
- <match target="pattern">
- <test name="family" compare="eq">
- <string>Tinos</string>
- </test>
- <test name="prgname" compare="eq">
- <string>chromevox_tests</string>
- </test>
- <edit name="hintstyle" mode="assign">
- <const>hintslight</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Times</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>sans</string>
- </test>
- <edit name="family" mode="assign">
- <string>DejaVu Sans</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>sans serif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- </match>
-
- <!-- Some layout tests specify Helvetica as a family and we need to make sure
- that we don't fallback to Tinos for them -->
- <match target="pattern">
- <test qual="any" name="family">
- <string>Helvetica</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>sans-serif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>serif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>mono</string>
- </test>
- <edit name="family" mode="assign">
- <string>Cousine</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>monospace</string>
- </test>
- <edit name="family" mode="assign">
- <string>Cousine</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Courier</string>
- </test>
- <edit name="family" mode="assign">
- <string>Cousine</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>cursive</string>
- </test>
- <edit name="family" mode="assign">
- <string>Comic Sans MS</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>fantasy</string>
- </test>
- <edit name="family" mode="assign">
- <string>Impact</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Monaco</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Arial</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Courier New</string>
- </test>
- <edit name="family" mode="assign">
- <string>Cousine</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Georgia</string>
- </test>
- <edit name="family" mode="assign">
- <string>Gelasio</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Times New Roman</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test qual="any" name="family">
- <string>Verdana</string>
- </test>
- <!-- NOT metrically compatible! -->
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- </match>
-
- <!-- TODO(thomasanderson): Move these configs to be test-specific. -->
- <match target="pattern">
- <test name="family" compare="eq">
- <string>NonAntiAliasedSans</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="antialias" mode="assign">
- <bool>false</bool>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>SlightHintedGeorgia</string>
- </test>
- <edit name="family" mode="assign">
- <string>Gelasio</string>
- </edit>
- <edit name="hintstyle" mode="assign">
- <const>hintslight</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>NonHintedSans</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <!-- These deliberately contradict each other. The 'hinting' preference
- should take priority -->
- <edit name="hintstyle" mode="assign">
- <const>hintfull</const>
- </edit>
- <edit name="hinting" mode="assign">
- <bool>false</bool>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>AutohintedSerif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="autohint" mode="assign">
- <bool>true</bool>
- </edit>
- <edit name="hintstyle" mode="assign">
- <const>hintmedium</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>HintedSerif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="autohint" mode="assign">
- <bool>false</bool>
- </edit>
- <edit name="hintstyle" mode="assign">
- <const>hintmedium</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>FullAndAutoHintedSerif</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="autohint" mode="assign">
- <bool>true</bool>
- </edit>
- <edit name="hintstyle" mode="assign">
- <const>hintfull</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>SubpixelEnabledArial</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="rgba" mode="assign">
- <const>rgb</const>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>SubpixelDisabledArial</string>
- </test>
- <edit name="family" mode="assign">
- <string>Arimo</string>
- </edit>
- <edit name="rgba" mode="assign">
- <const>none</const>
- </edit>
- </match>
-
- <match target="pattern">
- <!-- FontConfig doesn't currently provide a well-defined way to turn on
- subpixel positioning. This is just an arbitrary pattern to use after
- turning subpixel positioning on globally to ensure that we don't have
- issues with our style getting cached for other tests. -->
- <test name="family" compare="eq">
- <string>SubpixelPositioning</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- </match>
-
- <match target="pattern">
- <!-- See comments above -->
- <test name="family" compare="eq">
- <string>SubpixelPositioningAhem</string>
- </test>
- <edit name="family" mode="assign">
- <string>ahem</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="family" compare="eq">
- <string>SlightHintedTimesNewRoman</string>
- </test>
- <edit name="family" mode="assign">
- <string>Tinos</string>
- </edit>
- <edit name="hintstyle" mode="assign">
- <const>hintslight</const>
- </edit>
- </match>
-
- <!-- When we encounter a character that the current font doesn't
- support, gfx::GetFallbackFontForChar() returns the first font
- that does have a glyph for the character. The list of fonts is
- sorted by a pattern that includes the current locale, but doesn't
- include a font family (which means that the fallback font depends
- on the locale but not on the current font).
-
- DejaVu Sans is commonly the only font that supports some
- characters, such as "⇧", and even when other candidates are
- available, DejaVu Sans is commonly first among them, because of
- the way Fontconfig is ordinarily configured. For example, the
- configuration in the Fonconfig source lists DejaVu Sans under the
- sans-serif generic family, and appends sans-serif to patterns
- that don't already include a generic family (such as the pattern
- in gfx::GetFallbackFontForChar()).
-
- To get the same fallback font in the layout tests, we could
- duplicate this configuration here, or more directly, simply
- append DejaVu Sans to all patterns. -->
- <match target="pattern">
- <edit name="family" mode="append_last">
- <string>DejaVu Sans</string>
- </edit>
- </match>
-
-</fontconfig>
-)";
-
-} // namespace
-
-void SetUpFontconfig() {
- FilePath dir_module;
- PathService::Get(DIR_MODULE, &dir_module);
- FilePath font_cache = dir_module.Append("fontconfig_caches");
- FilePath test_fonts = dir_module.Append("test_fonts");
- std::string fonts_conf = ReplaceStringPlaceholders(
- kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr);
-
- FcConfig* config = FcConfigCreate();
- CHECK(config);
-#if FC_VERSION >= 21205
- CHECK(FcConfigParseAndLoadFromMemory(
- config, reinterpret_cast<const FcChar8*>(fonts_conf.c_str()), FcTrue));
-#else
- FilePath temp;
- CHECK(CreateTemporaryFile(&temp));
- CHECK(WriteFile(temp, fonts_conf.c_str(), fonts_conf.size()));
- CHECK(FcConfigParseAndLoad(
- config, reinterpret_cast<const FcChar8*>(temp.value().c_str()), FcTrue));
- CHECK(DeleteFile(temp, false));
-#endif
- CHECK(FcConfigBuildFonts(config));
- CHECK(FcConfigSetCurrent(config));
-
- // Decrement the reference count for |config|. It's now owned by fontconfig.
- FcConfigDestroy(config);
-}
-
-void TearDownFontconfig() {
- FcFini();
-}
-
-bool LoadFontIntoFontconfig(const FilePath& path) {
- if (!PathExists(path)) {
- LOG(ERROR) << "You are missing " << path.value() << ". Try re-running "
- << "build/install-build-deps.sh. "
- << "Please make sure that "
- << "third_party/test_fonts/ has downloaded "
- << "and extracted the test_fonts."
- << "Also see "
- << "https://chromium.googlesource.com/chromium/src/+/master/"
- << "docs/layout_tests_linux.md";
- return false;
- }
-
- if (!FcConfigAppFontAddFile(
- NULL, reinterpret_cast<const FcChar8*>(path.value().c_str()))) {
- LOG(ERROR) << "Failed to load font " << path.value();
- return false;
- }
-
- return true;
-}
-
-bool LoadConfigFileIntoFontconfig(const FilePath& path) {
- // Unlike other FcConfig functions, FcConfigParseAndLoad() doesn't default to
- // the current config when passed NULL. So that's cool.
- if (!FcConfigParseAndLoad(
- FcConfigGetCurrent(),
- reinterpret_cast<const FcChar8*>(path.value().c_str()), FcTrue)) {
- LOG(ERROR) << "Fontconfig failed to load " << path.value();
- return false;
- }
- return true;
-}
-
-bool LoadConfigDataIntoFontconfig(const FilePath& temp_dir,
- const std::string& data) {
- FilePath path;
- if (!CreateTemporaryFileInDir(temp_dir, &path)) {
- PLOG(ERROR) << "Unable to create temporary file in " << temp_dir.value();
- return false;
- }
- if (WriteFile(path, data.data(), data.size()) !=
- static_cast<int>(data.size())) {
- PLOG(ERROR) << "Unable to write config data to " << path.value();
- return false;
- }
- return LoadConfigFileIntoFontconfig(path);
-}
-
-std::string CreateFontconfigEditStanza(const std::string& name,
- const std::string& type,
- const std::string& value) {
- return StringPrintf(
- " <edit name=\"%s\" mode=\"assign\">\n"
- " <%s>%s</%s>\n"
- " </edit>\n",
- name.c_str(), type.c_str(), value.c_str(), type.c_str());
-}
-
-std::string CreateFontconfigTestStanza(const std::string& name,
- const std::string& op,
- const std::string& type,
- const std::string& value) {
- return StringPrintf(
- " <test name=\"%s\" compare=\"%s\" qual=\"any\">\n"
- " <%s>%s</%s>\n"
- " </test>\n",
- name.c_str(), op.c_str(), type.c_str(), value.c_str(), type.c_str());
-}
-
-std::string CreateFontconfigAliasStanza(const std::string& original_family,
- const std::string& preferred_family) {
- return StringPrintf(
- " <alias>\n"
- " <family>%s</family>\n"
- " <prefer><family>%s</family></prefer>\n"
- " </alias>\n",
- original_family.c_str(), preferred_family.c_str());
-}
-
-} // namespace base
diff --git a/base/test/fontconfig_util_linux.h b/base/test/fontconfig_util_linux.h
deleted file mode 100644
index ac7037a..0000000
--- a/base/test/fontconfig_util_linux.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef BASE_TEST_FONTCONFIG_UTIL_LINUX_H_
-#define BASE_TEST_FONTCONFIG_UTIL_LINUX_H_
-
-#include <stddef.h>
-
-#include <string>
-
-namespace base {
-class FilePath;
-
-// Initializes Fontconfig with a custom configuration suitable for tests.
-void SetUpFontconfig();
-
-// Deinitializes Fontconfig.
-void TearDownFontconfig();
-
-// Loads the font file at |path| into the current config, returning true on
-// success.
-bool LoadFontIntoFontconfig(const FilePath& path);
-
-// Instructs Fontconfig to load |path|, an XML configuration file, into the
-// current config, returning true on success.
-bool LoadConfigFileIntoFontconfig(const FilePath& path);
-
-// Writes |data| to a file in |temp_dir| and passes it to
-// LoadConfigFileIntoFontconfig().
-bool LoadConfigDataIntoFontconfig(const FilePath& temp_dir,
- const std::string& data);
-
-// Returns a Fontconfig <edit> stanza.
-std::string CreateFontconfigEditStanza(const std::string& name,
- const std::string& type,
- const std::string& value);
-
-// Returns a Fontconfig <test> stanza.
-std::string CreateFontconfigTestStanza(const std::string& name,
- const std::string& op,
- const std::string& type,
- const std::string& value);
-
-// Returns a Fontconfig <alias> stanza.
-std::string CreateFontconfigAliasStanza(const std::string& original_family,
- const std::string& preferred_family);
-
-} // namespace base
-
-#endif // BASE_TEST_FONTCONFIG_UTIL_LINUX_H_
diff --git a/base/test/fuzzed_data_provider.cc b/base/test/fuzzed_data_provider.cc
deleted file mode 100644
index b2d443a..0000000
--- a/base/test/fuzzed_data_provider.cc
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2016 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/test/fuzzed_data_provider.h"
-
-#include <algorithm>
-#include <limits>
-
-#include "base/logging.h"
-
-namespace base {
-
-FuzzedDataProvider::FuzzedDataProvider(const uint8_t* data, size_t size)
- : remaining_data_(reinterpret_cast<const char*>(data), size) {}
-
-FuzzedDataProvider::~FuzzedDataProvider() = default;
-
-std::string FuzzedDataProvider::ConsumeBytes(size_t num_bytes) {
- num_bytes = std::min(num_bytes, remaining_data_.length());
- StringPiece result(remaining_data_.data(), num_bytes);
- remaining_data_ = remaining_data_.substr(num_bytes);
- return result.as_string();
-}
-
-std::string FuzzedDataProvider::ConsumeRemainingBytes() {
- return ConsumeBytes(remaining_data_.length());
-}
-
-uint32_t FuzzedDataProvider::ConsumeUint32InRange(uint32_t min, uint32_t max) {
- CHECK_LE(min, max);
-
- uint32_t range = max - min;
- uint32_t offset = 0;
- uint32_t result = 0;
-
- while (offset < 32 && (range >> offset) > 0 && !remaining_data_.empty()) {
- // Pull bytes off the end of the seed data. Experimentally, this seems to
- // allow the fuzzer to more easily explore the input space. This makes
- // sense, since it works by modifying inputs that caused new code to run,
- // and this data is often used to encode length of data read by
- // ConsumeBytes. Separating out read lengths makes it easier modify the
- // contents of the data that is actually read.
- uint8_t next_byte = remaining_data_.back();
- remaining_data_.remove_suffix(1);
- result = (result << 8) | next_byte;
- offset += 8;
- }
-
- // Avoid division by 0, in the case |range + 1| results in overflow.
- if (range == std::numeric_limits<uint32_t>::max())
- return result;
-
- return min + result % (range + 1);
-}
-
-std::string FuzzedDataProvider::ConsumeRandomLengthString(size_t max_length) {
- // Reads bytes from start of |remaining_data_|. Maps "\\" to "\", and maps "\"
- // followed by anything else to the end of the string. As a result of this
- // logic, a fuzzer can insert characters into the string, and the string will
- // be lengthened to include those new characters, resulting in a more stable
- // fuzzer than picking the length of a string independently from picking its
- // contents.
- std::string out;
- for (size_t i = 0; i < max_length && !remaining_data_.empty(); ++i) {
- char next = remaining_data_[0];
- remaining_data_.remove_prefix(1);
- if (next == '\\' && !remaining_data_.empty()) {
- next = remaining_data_[0];
- remaining_data_.remove_prefix(1);
- if (next != '\\')
- return out;
- }
- out += next;
- }
- return out;
-}
-
-int FuzzedDataProvider::ConsumeInt32InRange(int min, int max) {
- CHECK_LE(min, max);
-
- uint32_t range = max - min;
- return min + ConsumeUint32InRange(0, range);
-}
-
-bool FuzzedDataProvider::ConsumeBool() {
- return (ConsumeUint8() & 0x01) == 0x01;
-}
-
-uint8_t FuzzedDataProvider::ConsumeUint8() {
- return ConsumeUint32InRange(0, 0xFF);
-}
-
-uint16_t FuzzedDataProvider::ConsumeUint16() {
- return ConsumeUint32InRange(0, 0xFFFF);
-}
-
-} // namespace base
diff --git a/base/test/fuzzed_data_provider.h b/base/test/fuzzed_data_provider.h
deleted file mode 100644
index 425c820..0000000
--- a/base/test/fuzzed_data_provider.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_FUZZED_DATA_PROVIDER_H_
-#define BASE_TEST_FUZZED_DATA_PROVIDER_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "base/base_export.h"
-#include "base/macros.h"
-#include "base/strings/string_piece.h"
-
-namespace base {
-
-// Utility class to break up fuzzer input for multiple consumers. Whenever run
-// on the same input, provides the same output, as long as its methods are
-// called in the same order, with the same arguments.
-class FuzzedDataProvider {
- public:
- // |data| is an array of length |size| that the FuzzedDataProvider wraps to
- // provide more granular access. |data| must outlive the FuzzedDataProvider.
- FuzzedDataProvider(const uint8_t* data, size_t size);
- ~FuzzedDataProvider();
-
- // Returns a std::string containing |num_bytes| of input data. If fewer than
- // |num_bytes| of data remain, returns a shorter std::string containing all
- // of the data that's left.
- std::string ConsumeBytes(size_t num_bytes);
-
- // Returns a std::string containing all remaining bytes of the input data.
- std::string ConsumeRemainingBytes();
-
- // Returns a std::string of length from 0 to |max_length|. When it runs out of
- // input data, returns what remains of the input. Designed to be more stable
- // with respect to a fuzzer inserting characters than just picking a random
- // length and then consuming that many bytes with ConsumeBytes().
- std::string ConsumeRandomLengthString(size_t max_length);
-
- // Returns a number in the range [min, max] by consuming bytes from the input
- // data. The value might not be uniformly distributed in the given range. If
- // there's no input data left, always returns |min|. |min| must be less than
- // or equal to |max|.
- uint32_t ConsumeUint32InRange(uint32_t min, uint32_t max);
- int ConsumeInt32InRange(int min, int max);
-
- // Returns a bool, or false when no data remains.
- bool ConsumeBool();
-
- // Returns a uint8_t from the input or 0 if nothing remains. This is
- // equivalent to ConsumeUint32InRange(0, 0xFF).
- uint8_t ConsumeUint8();
-
- // Returns a uint16_t from the input. If fewer than 2 bytes of data remain
- // will fill the most significant bytes with 0. This is equivalent to
- // ConsumeUint32InRange(0, 0xFFFF).
- uint16_t ConsumeUint16();
-
- // Returns a value from |array|, consuming as many bytes as needed to do so.
- // |array| must be a fixed-size array. Equivalent to
- // array[ConsumeUint32InRange(sizeof(array)-1)];
- template <typename Type, size_t size>
- Type PickValueInArray(Type (&array)[size]) {
- return array[ConsumeUint32InRange(0, size - 1)];
- }
-
- // Reports the remaining bytes available for fuzzed input.
- size_t remaining_bytes() { return remaining_data_.length(); }
-
- private:
- StringPiece remaining_data_;
-
- DISALLOW_COPY_AND_ASSIGN(FuzzedDataProvider);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_FUZZED_DATA_PROVIDER_H_
diff --git a/base/test/generate_fontconfig_caches.cc b/base/test/generate_fontconfig_caches.cc
deleted file mode 100644
index f12eb48..0000000
--- a/base/test/generate_fontconfig_caches.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2018 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 <string>
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/path_service.h"
-#include "base/test/fontconfig_util_linux.h"
-
-int main(void) {
- base::SetUpFontconfig();
- base::TearDownFontconfig();
-
- base::FilePath dir_module;
- CHECK(base::PathService::Get(base::DIR_MODULE, &dir_module));
- base::FilePath fontconfig_caches = dir_module.Append("fontconfig_caches");
- CHECK(base::DirectoryExists(fontconfig_caches));
- base::FilePath stamp = fontconfig_caches.Append("STAMP");
- CHECK_EQ(0, base::WriteFile(stamp, "", 0));
-
- return 0;
-}
diff --git a/base/test/gtest_util.cc b/base/test/gtest_util.cc
deleted file mode 100644
index e5d38f4..0000000
--- a/base/test/gtest_util.cc
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2014 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/test/gtest_util.h"
-
-#include <stddef.h>
-
-#include <memory>
-
-#include "base/files/file_path.h"
-#include "base/json/json_file_value_serializer.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-TestIdentifier::TestIdentifier() = default;
-
-TestIdentifier::TestIdentifier(const TestIdentifier& other) = default;
-
-std::string FormatFullTestName(const std::string& test_case_name,
- const std::string& test_name) {
- return test_case_name + "." + test_name;
-}
-
-std::string TestNameWithoutDisabledPrefix(const std::string& full_test_name) {
- std::string test_name_no_disabled(full_test_name);
- ReplaceSubstringsAfterOffset(&test_name_no_disabled, 0, "DISABLED_", "");
- return test_name_no_disabled;
-}
-
-std::vector<TestIdentifier> GetCompiledInTests() {
- testing::UnitTest* const unit_test = testing::UnitTest::GetInstance();
-
- std::vector<TestIdentifier> tests;
- for (int i = 0; i < unit_test->total_test_case_count(); ++i) {
- const testing::TestCase* test_case = unit_test->GetTestCase(i);
- for (int j = 0; j < test_case->total_test_count(); ++j) {
- const testing::TestInfo* test_info = test_case->GetTestInfo(j);
- TestIdentifier test_data;
- test_data.test_case_name = test_case->name();
- test_data.test_name = test_info->name();
- test_data.file = test_info->file();
- test_data.line = test_info->line();
- tests.push_back(test_data);
- }
- }
- return tests;
-}
-
-bool WriteCompiledInTestsToFile(const FilePath& path) {
- std::vector<TestIdentifier> tests(GetCompiledInTests());
-
- ListValue root;
- for (size_t i = 0; i < tests.size(); ++i) {
- std::unique_ptr<DictionaryValue> test_info(new DictionaryValue);
- test_info->SetString("test_case_name", tests[i].test_case_name);
- test_info->SetString("test_name", tests[i].test_name);
- test_info->SetString("file", tests[i].file);
- test_info->SetInteger("line", tests[i].line);
- root.Append(std::move(test_info));
- }
-
- JSONFileValueSerializer serializer(path);
- return serializer.Serialize(root);
-}
-
-bool ReadTestNamesFromFile(const FilePath& path,
- std::vector<TestIdentifier>* output) {
- JSONFileValueDeserializer deserializer(path);
- int error_code = 0;
- std::string error_message;
- std::unique_ptr<base::Value> value =
- deserializer.Deserialize(&error_code, &error_message);
- if (!value.get())
- return false;
-
- base::ListValue* tests = nullptr;
- if (!value->GetAsList(&tests))
- return false;
-
- std::vector<base::TestIdentifier> result;
- for (base::ListValue::iterator i = tests->begin(); i != tests->end(); ++i) {
- base::DictionaryValue* test = nullptr;
- if (!i->GetAsDictionary(&test))
- return false;
-
- TestIdentifier test_data;
-
- if (!test->GetStringASCII("test_case_name", &test_data.test_case_name))
- return false;
-
- if (!test->GetStringASCII("test_name", &test_data.test_name))
- return false;
-
- if (!test->GetStringASCII("file", &test_data.file))
- return false;
-
- if (!test->GetInteger("line", &test_data.line))
- return false;
-
- result.push_back(test_data);
- }
-
- output->swap(result);
- return true;
-}
-
-} // namespace base
diff --git a/base/test/gtest_util.h b/base/test/gtest_util.h
deleted file mode 100644
index e4ec0bf..0000000
--- a/base/test/gtest_util.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2014 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.
-
-#ifndef BASE_TEST_GTEST_UTIL_H_
-#define BASE_TEST_GTEST_UTIL_H_
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-// EXPECT/ASSERT_DCHECK_DEATH is intended to replace EXPECT/ASSERT_DEBUG_DEATH
-// when the death is expected to be caused by a DCHECK. Contrary to
-// EXPECT/ASSERT_DEBUG_DEATH however, it doesn't execute the statement in non-
-// dcheck builds as DCHECKs are intended to catch things that should never
-// happen and as such executing the statement results in undefined behavior
-// (|statement| is compiled in unsupported configurations nonetheless).
-// Death tests misbehave on Android.
-#if DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
-
-// EXPECT/ASSERT_DCHECK_DEATH tests verify that a DCHECK is hit ("Check failed"
-// is part of the error message), but intentionally do not expose the gtest
-// death test's full |regex| parameter to avoid users having to verify the exact
-// syntax of the error message produced by the DCHECK.
-#define EXPECT_DCHECK_DEATH(statement) EXPECT_DEATH(statement, "Check failed")
-#define ASSERT_DCHECK_DEATH(statement) ASSERT_DEATH(statement, "Check failed")
-
-#else
-// DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
-
-#define EXPECT_DCHECK_DEATH(statement) \
- GTEST_UNSUPPORTED_DEATH_TEST(statement, "Check failed", )
-#define ASSERT_DCHECK_DEATH(statement) \
- GTEST_UNSUPPORTED_DEATH_TEST(statement, "Check failed", return)
-
-#endif
-// DCHECK_IS_ON() && defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
-
-namespace base {
-
-class FilePath;
-
-struct TestIdentifier {
- TestIdentifier();
- TestIdentifier(const TestIdentifier& other);
-
- std::string test_case_name;
- std::string test_name;
- std::string file;
- int line;
-};
-
-// Constructs a full test name given a test case name and a test name,
-// e.g. for test case "A" and test name "B" returns "A.B".
-std::string FormatFullTestName(const std::string& test_case_name,
- const std::string& test_name);
-
-// Returns the full test name with the "DISABLED_" prefix stripped out.
-// e.g. for the full test names "A.DISABLED_B", "DISABLED_A.B", and
-// "DISABLED_A.DISABLED_B", returns "A.B".
-std::string TestNameWithoutDisabledPrefix(const std::string& full_test_name);
-
-// Returns a vector of gtest-based tests compiled into
-// current executable.
-std::vector<TestIdentifier> GetCompiledInTests();
-
-// Writes the list of gtest-based tests compiled into
-// current executable as a JSON file. Returns true on success.
-bool WriteCompiledInTestsToFile(const FilePath& path) WARN_UNUSED_RESULT;
-
-// Reads the list of gtest-based tests from |path| into |output|.
-// Returns true on success.
-bool ReadTestNamesFromFile(
- const FilePath& path,
- std::vector<TestIdentifier>* output) WARN_UNUSED_RESULT;
-
-} // namespace base
-
-#endif // BASE_TEST_GTEST_UTIL_H_
diff --git a/base/test/gtest_xml_unittest_result_printer.cc b/base/test/gtest_xml_unittest_result_printer.cc
deleted file mode 100644
index 558a986..0000000
--- a/base/test/gtest_xml_unittest_result_printer.cc
+++ /dev/null
@@ -1,162 +0,0 @@
-// Copyright 2015 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/test/gtest_xml_unittest_result_printer.h"
-
-#include "base/base64.h"
-#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/test/test_switches.h"
-#include "base/time/time.h"
-
-namespace base {
-
-namespace {
-const int kDefaultTestPartResultsLimit = 10;
-
-const char kTestPartLesultsLimitExceeded[] =
- "Test part results limit exceeded. Use --test-launcher-test-part-limit to "
- "increase or disable limit.";
-} // namespace
-
-XmlUnitTestResultPrinter::XmlUnitTestResultPrinter()
- : output_file_(nullptr), open_failed_(false) {}
-
-XmlUnitTestResultPrinter::~XmlUnitTestResultPrinter() {
- if (output_file_ && !open_failed_) {
- fprintf(output_file_, "</testsuites>\n");
- fflush(output_file_);
- CloseFile(output_file_);
- }
-}
-
-bool XmlUnitTestResultPrinter::Initialize(const FilePath& output_file_path) {
- DCHECK(!output_file_);
- output_file_ = OpenFile(output_file_path, "w");
- if (!output_file_) {
- // If the file open fails, we set the output location to stderr. This is
- // because in current usage our caller CHECKs the result of this function.
- // But that in turn causes a LogMessage that comes back to this object,
- // which in turn causes a (double) crash. By pointing at stderr, there might
- // be some indication what's going wrong. See https://crbug.com/736783.
- output_file_ = stderr;
- open_failed_ = true;
- return false;
- }
-
- fprintf(output_file_,
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<testsuites>\n");
- fflush(output_file_);
-
- return true;
-}
-
-void XmlUnitTestResultPrinter::OnAssert(const char* file,
- int line,
- const std::string& summary,
- const std::string& message) {
- WriteTestPartResult(file, line, testing::TestPartResult::kFatalFailure,
- summary, message);
-}
-
-void XmlUnitTestResultPrinter::OnTestCaseStart(
- const testing::TestCase& test_case) {
- fprintf(output_file_, " <testsuite>\n");
- fflush(output_file_);
-}
-
-void XmlUnitTestResultPrinter::OnTestStart(
- const testing::TestInfo& test_info) {
- // This is our custom extension - it helps to recognize which test was
- // running when the test binary crashed. Note that we cannot even open the
- // <testcase> tag here - it requires e.g. run time of the test to be known.
- fprintf(output_file_,
- " <x-teststart name=\"%s\" classname=\"%s\" />\n",
- test_info.name(),
- test_info.test_case_name());
- fflush(output_file_);
-}
-
-void XmlUnitTestResultPrinter::OnTestEnd(const testing::TestInfo& test_info) {
- fprintf(output_file_,
- " <testcase name=\"%s\" status=\"run\" time=\"%.3f\""
- " classname=\"%s\">\n",
- test_info.name(),
- static_cast<double>(test_info.result()->elapsed_time()) /
- Time::kMillisecondsPerSecond,
- test_info.test_case_name());
- if (test_info.result()->Failed()) {
- fprintf(output_file_,
- " <failure message=\"\" type=\"\"></failure>\n");
- }
-
- int limit = test_info.result()->total_part_count();
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherTestPartResultsLimit)) {
- std::string limit_str =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kTestLauncherTestPartResultsLimit);
- int test_part_results_limit = std::strtol(limit_str.c_str(), nullptr, 10);
- if (test_part_results_limit >= 0)
- limit = std::min(limit, test_part_results_limit);
- } else {
- limit = std::min(limit, kDefaultTestPartResultsLimit);
- }
-
- for (int i = 0; i < limit; ++i) {
- const auto& test_part_result = test_info.result()->GetTestPartResult(i);
- WriteTestPartResult(test_part_result.file_name(),
- test_part_result.line_number(), test_part_result.type(),
- test_part_result.summary(), test_part_result.message());
- }
-
- if (test_info.result()->total_part_count() > limit) {
- WriteTestPartResult(
- "<unknown>", 0, testing::TestPartResult::kNonFatalFailure,
- kTestPartLesultsLimitExceeded, kTestPartLesultsLimitExceeded);
- }
-
- fprintf(output_file_, " </testcase>\n");
- fflush(output_file_);
-}
-
-void XmlUnitTestResultPrinter::OnTestCaseEnd(
- const testing::TestCase& test_case) {
- fprintf(output_file_, " </testsuite>\n");
- fflush(output_file_);
-}
-
-void XmlUnitTestResultPrinter::WriteTestPartResult(
- const char* file,
- int line,
- testing::TestPartResult::Type result_type,
- const std::string& summary,
- const std::string& message) {
- const char* type = "unknown";
- switch (result_type) {
- case testing::TestPartResult::kSuccess:
- type = "success";
- break;
- case testing::TestPartResult::kNonFatalFailure:
- type = "failure";
- break;
- case testing::TestPartResult::kFatalFailure:
- type = "fatal_failure";
- break;
- }
- std::string summary_encoded;
- Base64Encode(summary, &summary_encoded);
- std::string message_encoded;
- Base64Encode(message, &message_encoded);
- fprintf(output_file_,
- " <x-test-result-part type=\"%s\" file=\"%s\" line=\"%d\">\n"
- " <summary>%s</summary>\n"
- " <message>%s</message>\n"
- " </x-test-result-part>\n",
- type, file, line, summary_encoded.c_str(), message_encoded.c_str());
- fflush(output_file_);
-}
-
-} // namespace base
diff --git a/base/test/gtest_xml_unittest_result_printer.h b/base/test/gtest_xml_unittest_result_printer.h
deleted file mode 100644
index 9340382..0000000
--- a/base/test/gtest_xml_unittest_result_printer.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
-#define BASE_TEST_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
-
-#include <stdio.h>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-class FilePath;
-
-// Generates an XML output file. Format is very close to GTest, but has
-// extensions needed by the test launcher.
-class XmlUnitTestResultPrinter : public testing::EmptyTestEventListener {
- public:
- XmlUnitTestResultPrinter();
- ~XmlUnitTestResultPrinter() override;
-
- // Must be called before adding as a listener. Returns true on success.
- bool Initialize(const FilePath& output_file_path) WARN_UNUSED_RESULT;
-
- // CHECK/DCHECK failed. Print file/line and message to the xml.
- void OnAssert(const char* file,
- int line,
- const std::string& summary,
- const std::string& message);
-
- private:
- // testing::EmptyTestEventListener:
- void OnTestCaseStart(const testing::TestCase& test_case) override;
- void OnTestStart(const testing::TestInfo& test_info) override;
- void OnTestEnd(const testing::TestInfo& test_info) override;
- void OnTestCaseEnd(const testing::TestCase& test_case) override;
-
- void WriteTestPartResult(const char* file,
- int line,
- testing::TestPartResult::Type type,
- const std::string& summary,
- const std::string& message);
-
- FILE* output_file_;
- bool open_failed_;
-
- DISALLOW_COPY_AND_ASSIGN(XmlUnitTestResultPrinter);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_GTEST_XML_UNITTEST_RESULT_PRINTER_H_
diff --git a/base/test/gtest_xml_util.cc b/base/test/gtest_xml_util.cc
deleted file mode 100644
index 37104e8..0000000
--- a/base/test/gtest_xml_util.cc
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright 2013 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/test/gtest_xml_util.h"
-
-#include <stdint.h>
-
-#include "base/base64.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/stringprintf.h"
-#include "base/test/gtest_util.h"
-#include "base/test/launcher/test_launcher.h"
-#include "third_party/libxml/chromium/libxml_utils.h"
-
-namespace base {
-
-namespace {
-
-// This is used for the xml parser to report errors. This assumes the context
-// is a pointer to a std::string where the error message should be appended.
-static void XmlErrorFunc(void *context, const char *message, ...) {
- va_list args;
- va_start(args, message);
- std::string* error = static_cast<std::string*>(context);
- StringAppendV(error, message, args);
- va_end(args);
-}
-
-} // namespace
-
-bool ProcessGTestOutput(const base::FilePath& output_file,
- std::vector<TestResult>* results,
- bool* crashed) {
- DCHECK(results);
-
- std::string xml_contents;
- if (!ReadFileToString(output_file, &xml_contents))
- return false;
-
- // Silence XML errors - otherwise they go to stderr.
- std::string xml_errors;
- ScopedXmlErrorFunc error_func(&xml_errors, &XmlErrorFunc);
-
- XmlReader xml_reader;
- if (!xml_reader.Load(xml_contents))
- return false;
-
- enum {
- STATE_INIT,
- STATE_TESTSUITE,
- STATE_TESTCASE,
- STATE_TEST_RESULT,
- STATE_FAILURE,
- STATE_END,
- } state = STATE_INIT;
-
- while (xml_reader.Read()) {
- xml_reader.SkipToElement();
- std::string node_name(xml_reader.NodeName());
-
- switch (state) {
- case STATE_INIT:
- if (node_name == "testsuites" && !xml_reader.IsClosingElement())
- state = STATE_TESTSUITE;
- else
- return false;
- break;
- case STATE_TESTSUITE:
- if (node_name == "testsuites" && xml_reader.IsClosingElement())
- state = STATE_END;
- else if (node_name == "testsuite" && !xml_reader.IsClosingElement())
- state = STATE_TESTCASE;
- else
- return false;
- break;
- case STATE_TESTCASE:
- if (node_name == "testsuite" && xml_reader.IsClosingElement()) {
- state = STATE_TESTSUITE;
- } else if (node_name == "x-teststart" &&
- !xml_reader.IsClosingElement()) {
- // This is our custom extension that helps recognize which test was
- // running when the test binary crashed.
- TestResult result;
-
- std::string test_case_name;
- if (!xml_reader.NodeAttribute("classname", &test_case_name))
- return false;
- std::string test_name;
- if (!xml_reader.NodeAttribute("name", &test_name))
- return false;
- result.full_name = FormatFullTestName(test_case_name, test_name);
-
- result.elapsed_time = TimeDelta();
-
- // Assume the test crashed - we can correct that later.
- result.status = TestResult::TEST_CRASH;
-
- results->push_back(result);
- } else if (node_name == "testcase" && !xml_reader.IsClosingElement()) {
- std::string test_status;
- if (!xml_reader.NodeAttribute("status", &test_status))
- return false;
-
- if (test_status != "run" && test_status != "notrun")
- return false;
- if (test_status != "run")
- break;
-
- TestResult result;
-
- std::string test_case_name;
- if (!xml_reader.NodeAttribute("classname", &test_case_name))
- return false;
- std::string test_name;
- if (!xml_reader.NodeAttribute("name", &test_name))
- return false;
- result.full_name = test_case_name + "." + test_name;
-
- std::string test_time_str;
- if (!xml_reader.NodeAttribute("time", &test_time_str))
- return false;
- result.elapsed_time = TimeDelta::FromMicroseconds(
- static_cast<int64_t>(strtod(test_time_str.c_str(), nullptr) *
- Time::kMicrosecondsPerSecond));
-
- result.status = TestResult::TEST_SUCCESS;
-
- if (!results->empty() &&
- results->back().full_name == result.full_name &&
- results->back().status == TestResult::TEST_CRASH) {
- // Erase the fail-safe "crashed" result - now we know the test did
- // not crash.
- results->pop_back();
- }
-
- results->push_back(result);
- } else if (node_name == "failure" && !xml_reader.IsClosingElement()) {
- std::string failure_message;
- if (!xml_reader.NodeAttribute("message", &failure_message))
- return false;
-
- DCHECK(!results->empty());
- results->back().status = TestResult::TEST_FAILURE;
-
- state = STATE_FAILURE;
- } else if (node_name == "testcase" && xml_reader.IsClosingElement()) {
- // Deliberately empty.
- } else if (node_name == "x-test-result-part" &&
- !xml_reader.IsClosingElement()) {
- std::string result_type;
- if (!xml_reader.NodeAttribute("type", &result_type))
- return false;
-
- std::string file_name;
- if (!xml_reader.NodeAttribute("file", &file_name))
- return false;
-
- std::string line_number_str;
- if (!xml_reader.NodeAttribute("line", &line_number_str))
- return false;
-
- int line_number;
- if (!StringToInt(line_number_str, &line_number))
- return false;
-
- TestResultPart::Type type;
- if (!TestResultPart::TypeFromString(result_type, &type))
- return false;
-
- TestResultPart test_result_part;
- test_result_part.type = type;
- test_result_part.file_name = file_name,
- test_result_part.line_number = line_number;
- DCHECK(!results->empty());
- results->back().test_result_parts.push_back(test_result_part);
-
- state = STATE_TEST_RESULT;
- } else {
- return false;
- }
- break;
- case STATE_TEST_RESULT:
- if (node_name == "summary" && !xml_reader.IsClosingElement()) {
- std::string summary;
- if (!xml_reader.ReadElementContent(&summary))
- return false;
-
- if (!Base64Decode(summary, &summary))
- return false;
-
- DCHECK(!results->empty());
- DCHECK(!results->back().test_result_parts.empty());
- results->back().test_result_parts.back().summary = summary;
- } else if (node_name == "summary" && xml_reader.IsClosingElement()) {
- } else if (node_name == "message" && !xml_reader.IsClosingElement()) {
- std::string message;
- if (!xml_reader.ReadElementContent(&message))
- return false;
-
- if (!Base64Decode(message, &message))
- return false;
-
- DCHECK(!results->empty());
- DCHECK(!results->back().test_result_parts.empty());
- results->back().test_result_parts.back().message = message;
- } else if (node_name == "message" && xml_reader.IsClosingElement()) {
- } else if (node_name == "x-test-result-part" &&
- xml_reader.IsClosingElement()) {
- state = STATE_TESTCASE;
- } else {
- return false;
- }
- break;
- case STATE_FAILURE:
- if (node_name == "failure" && xml_reader.IsClosingElement())
- state = STATE_TESTCASE;
- else
- return false;
- break;
- case STATE_END:
- // If we are here and there are still XML elements, the file has wrong
- // format.
- return false;
- }
- }
-
- *crashed = (state != STATE_END);
- return true;
-}
-
-} // namespace base
diff --git a/base/test/gtest_xml_util.h b/base/test/gtest_xml_util.h
deleted file mode 100644
index b023f80..0000000
--- a/base/test/gtest_xml_util.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_GTEST_XML_UTIL_H_
-#define BASE_TEST_GTEST_XML_UTIL_H_
-
-#include <vector>
-
-#include "base/compiler_specific.h"
-
-namespace base {
-
-class FilePath;
-struct TestResult;
-
-// Produces a vector of test results based on GTest output file.
-// Returns true iff the output file exists and has been successfully parsed.
-// On successful return |crashed| is set to true if the test results
-// are valid but incomplete.
-bool ProcessGTestOutput(const base::FilePath& output_file,
- std::vector<TestResult>* results,
- bool* crashed) WARN_UNUSED_RESULT;
-
-} // namespace base
-
-#endif // BASE_TEST_GTEST_XML_UTIL_H_
diff --git a/base/test/icu_test_util.cc b/base/test/icu_test_util.cc
deleted file mode 100644
index a6f3e55..0000000
--- a/base/test/icu_test_util.cc
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2015 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/test/icu_test_util.h"
-
-#include "base/base_switches.h"
-#include "base/command_line.h"
-#include "base/i18n/icu_util.h"
-#include "base/i18n/rtl.h"
-#include "third_party/icu/source/common/unicode/uloc.h"
-
-namespace base {
-namespace test {
-
-ScopedRestoreICUDefaultLocale::ScopedRestoreICUDefaultLocale()
- : ScopedRestoreICUDefaultLocale(std::string()) {}
-
-ScopedRestoreICUDefaultLocale::ScopedRestoreICUDefaultLocale(
- const std::string& locale)
- : default_locale_(uloc_getDefault()) {
- if (!locale.empty())
- i18n::SetICUDefaultLocale(locale.data());
-}
-
-ScopedRestoreICUDefaultLocale::~ScopedRestoreICUDefaultLocale() {
- i18n::SetICUDefaultLocale(default_locale_.data());
-}
-
-void InitializeICUForTesting() {
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestDoNotInitializeIcu)) {
- i18n::AllowMultipleInitializeCallsForTesting();
- i18n::InitializeICU();
- }
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/icu_test_util.h b/base/test/icu_test_util.h
deleted file mode 100644
index 1a6e47d..0000000
--- a/base/test/icu_test_util.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_ICU_TEST_UTIL_H_
-#define BASE_TEST_ICU_TEST_UTIL_H_
-
-#include <string>
-
-#include "base/macros.h"
-
-namespace base {
-namespace test {
-
-// In unit tests, prefer ScopedRestoreICUDefaultLocale over
-// calling base::i18n::SetICUDefaultLocale() directly. This scoper makes it
-// harder to accidentally forget to reset the locale.
-class ScopedRestoreICUDefaultLocale {
- public:
- ScopedRestoreICUDefaultLocale();
- explicit ScopedRestoreICUDefaultLocale(const std::string& locale);
- ~ScopedRestoreICUDefaultLocale();
-
- private:
- const std::string default_locale_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedRestoreICUDefaultLocale);
-};
-
-void InitializeICUForTesting();
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_ICU_TEST_UTIL_H_
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc
deleted file mode 100644
index b5197c5..0000000
--- a/base/test/launcher/test_launcher.cc
+++ /dev/null
@@ -1,1349 +0,0 @@
-// Copyright 2013 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/test/launcher/test_launcher.h"
-
-#include <stdio.h>
-
-#include <algorithm>
-#include <map>
-#include <utility>
-
-#include "base/at_exit.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/environment.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/files/scoped_file.h"
-#include "base/format_macros.h"
-#include "base/hash.h"
-#include "base/lazy_instance.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/numerics/safe_conversions.h"
-#include "base/process/kill.h"
-#include "base/process/launch.h"
-#include "base/run_loop.h"
-#include "base/single_thread_task_runner.h"
-#include "base/strings/pattern.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_piece.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringize_macros.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/sys_info.h"
-#include "base/task_scheduler/post_task.h"
-#include "base/task_scheduler/task_scheduler.h"
-#include "base/test/gtest_util.h"
-#include "base/test/launcher/test_launcher_tracer.h"
-#include "base/test/launcher/test_results_tracker.h"
-#include "base/test/test_switches.h"
-#include "base/test/test_timeouts.h"
-#include "base/threading/thread_restrictions.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#if defined(OS_POSIX)
-#include <fcntl.h>
-
-#include "base/files/file_descriptor_watcher_posix.h"
-#endif
-
-#if defined(OS_MACOSX)
-#include "base/mac/scoped_nsautorelease_pool.h"
-#endif
-
-#if defined(OS_WIN)
-#include "base/win/windows_version.h"
-#endif
-
-#if defined(OS_FUCHSIA)
-// TODO(scottmg): For temporary code in OnOutputTimeout().
-#include <zircon/syscalls.h>
-#include <zircon/syscalls/object.h>
-#include "base/fuchsia/default_job.h"
-#endif
-
-namespace base {
-
-// See https://groups.google.com/a/chromium.org/d/msg/chromium-dev/nkdTP7sstSc/uT3FaE_sgkAJ .
-using ::operator<<;
-
-// The environment variable name for the total number of test shards.
-const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS";
-// The environment variable name for the test shard index.
-const char kTestShardIndex[] = "GTEST_SHARD_INDEX";
-
-namespace {
-
-// Global tag for test runs where the results are incomplete or unreliable
-// for any reason, e.g. early exit because of too many broken tests.
-const char kUnreliableResultsTag[] = "UNRELIABLE_RESULTS";
-
-// Maximum time of no output after which we print list of processes still
-// running. This deliberately doesn't use TestTimeouts (which is otherwise
-// a recommended solution), because they can be increased. This would defeat
-// the purpose of this timeout, which is 1) to avoid buildbot "no output for
-// X seconds" timeout killing the process 2) help communicate status of
-// the test launcher to people looking at the output (no output for a long
-// time is mysterious and gives no info about what is happening) 3) help
-// debugging in case the process hangs anyway.
-constexpr TimeDelta kOutputTimeout = TimeDelta::FromSeconds(15);
-
-// Limit of output snippet lines when printing to stdout.
-// Avoids flooding the logs with amount of output that gums up
-// the infrastructure.
-const size_t kOutputSnippetLinesLimit = 5000;
-
-// Limit of output snippet size. Exceeding this limit
-// results in truncating the output and failing the test.
-const size_t kOutputSnippetBytesLimit = 300 * 1024;
-
-// Set of live launch test processes with corresponding lock (it is allowed
-// for callers to launch processes on different threads).
-Lock* GetLiveProcessesLock() {
- static auto* lock = new Lock;
- return lock;
-}
-
-std::map<ProcessHandle, CommandLine>* GetLiveProcesses() {
- static auto* map = new std::map<ProcessHandle, CommandLine>;
- return map;
-}
-
-// Performance trace generator.
-TestLauncherTracer* GetTestLauncherTracer() {
- static auto* tracer = new TestLauncherTracer;
- return tracer;
-}
-
-// Creates and starts a TaskScheduler with |num_parallel_jobs| dedicated to
-// foreground blocking tasks (corresponds to the traits used to launch and wait
-// for child processes).
-void CreateAndStartTaskScheduler(int num_parallel_jobs) {
- // These values are taken from TaskScheduler::StartWithDefaultParams(), which
- // is not used directly to allow a custom number of threads in the foreground
- // blocking pool.
- constexpr int kMaxBackgroundThreads = 1;
- constexpr int kMaxBackgroundBlockingThreads = 2;
- const int max_foreground_threads =
- std::max(1, base::SysInfo::NumberOfProcessors());
- constexpr base::TimeDelta kSuggestedReclaimTime =
- base::TimeDelta::FromSeconds(30);
- base::TaskScheduler::Create("TestLauncher");
- base::TaskScheduler::GetInstance()->Start(
- {{kMaxBackgroundThreads, kSuggestedReclaimTime},
- {kMaxBackgroundBlockingThreads, kSuggestedReclaimTime},
- {max_foreground_threads, kSuggestedReclaimTime},
- {num_parallel_jobs, kSuggestedReclaimTime}});
-}
-
-// TODO(fuchsia): Fuchsia does not have POSIX signals, but equivalent
-// functionality will probably be necessary eventually. See
-// https://crbug.com/706592.
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
-// Self-pipe that makes it possible to do complex shutdown handling
-// outside of the signal handler.
-int g_shutdown_pipe[2] = { -1, -1 };
-
-void ShutdownPipeSignalHandler(int signal) {
- HANDLE_EINTR(write(g_shutdown_pipe[1], "q", 1));
-}
-
-void KillSpawnedTestProcesses() {
- // Keep the lock until exiting the process to prevent further processes
- // from being spawned.
- AutoLock lock(*GetLiveProcessesLock());
-
- fprintf(stdout, "Sending SIGTERM to %" PRIuS " child processes... ",
- GetLiveProcesses()->size());
- fflush(stdout);
-
- for (const auto& pair : *GetLiveProcesses()) {
- // Send the signal to entire process group.
- kill((-1) * (pair.first), SIGTERM);
- }
-
- fprintf(stdout,
- "done.\nGiving processes a chance to terminate cleanly... ");
- fflush(stdout);
-
- PlatformThread::Sleep(TimeDelta::FromMilliseconds(500));
-
- fprintf(stdout, "done.\n");
- fflush(stdout);
-
- fprintf(stdout, "Sending SIGKILL to %" PRIuS " child processes... ",
- GetLiveProcesses()->size());
- fflush(stdout);
-
- for (const auto& pair : *GetLiveProcesses()) {
- // Send the signal to entire process group.
- kill((-1) * (pair.first), SIGKILL);
- }
-
- fprintf(stdout, "done.\n");
- fflush(stdout);
-}
-#endif // defined(OS_POSIX) && !defined(OS_FUCHSIA)
-
-// Parses the environment variable var as an Int32. If it is unset, returns
-// true. If it is set, unsets it then converts it to Int32 before
-// returning it in |result|. Returns true on success.
-bool TakeInt32FromEnvironment(const char* const var, int32_t* result) {
- std::unique_ptr<Environment> env(Environment::Create());
- std::string str_val;
-
- if (!env->GetVar(var, &str_val))
- return true;
-
- if (!env->UnSetVar(var)) {
- LOG(ERROR) << "Invalid environment: we could not unset " << var << ".\n";
- return false;
- }
-
- if (!StringToInt(str_val, result)) {
- LOG(ERROR) << "Invalid environment: " << var << " is not an integer.\n";
- return false;
- }
-
- return true;
-}
-
-// Unsets the environment variable |name| and returns true on success.
-// Also returns true if the variable just doesn't exist.
-bool UnsetEnvironmentVariableIfExists(const std::string& name) {
- std::unique_ptr<Environment> env(Environment::Create());
- std::string str_val;
- if (!env->GetVar(name, &str_val))
- return true;
- return env->UnSetVar(name);
-}
-
-// Returns true if bot mode has been requested, i.e. defaults optimized
-// for continuous integration bots. This way developers don't have to remember
-// special command-line flags.
-bool BotModeEnabled() {
- std::unique_ptr<Environment> env(Environment::Create());
- return CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherBotMode) ||
- env->HasVar("CHROMIUM_TEST_LAUNCHER_BOT_MODE");
-}
-
-// Returns command line command line after gtest-specific processing
-// and applying |wrapper|.
-CommandLine PrepareCommandLineForGTest(const CommandLine& command_line,
- const std::string& wrapper) {
- CommandLine new_command_line(command_line.GetProgram());
- CommandLine::SwitchMap switches = command_line.GetSwitches();
-
- // Strip out gtest_repeat flag - this is handled by the launcher process.
- switches.erase(kGTestRepeatFlag);
-
- // Don't try to write the final XML report in child processes.
- switches.erase(kGTestOutputFlag);
-
- for (CommandLine::SwitchMap::const_iterator iter = switches.begin();
- iter != switches.end(); ++iter) {
- new_command_line.AppendSwitchNative((*iter).first, (*iter).second);
- }
-
- // Prepend wrapper after last CommandLine quasi-copy operation. CommandLine
- // does not really support removing switches well, and trying to do that
- // on a CommandLine with a wrapper is known to break.
- // TODO(phajdan.jr): Give it a try to support CommandLine removing switches.
-#if defined(OS_WIN)
- new_command_line.PrependWrapper(ASCIIToUTF16(wrapper));
-#elif defined(OS_POSIX)
- new_command_line.PrependWrapper(wrapper);
-#endif
-
- return new_command_line;
-}
-
-// Launches a child process using |command_line|. If the child process is still
-// running after |timeout|, it is terminated and |*was_timeout| is set to true.
-// Returns exit code of the process.
-int LaunchChildTestProcessWithOptions(const CommandLine& command_line,
- const LaunchOptions& options,
- int flags,
- TimeDelta timeout,
- ProcessLifetimeObserver* observer,
- bool* was_timeout) {
- TimeTicks start_time(TimeTicks::Now());
-#if defined(OS_FUCHSIA) // TODO(scottmg): https://crbug.com/755282
- const bool kOnBot = getenv("CHROME_HEADLESS") != nullptr;
-#endif // OS_FUCHSIA
-
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
- // Make sure an option we rely on is present - see LaunchChildGTestProcess.
- DCHECK(options.new_process_group);
-#endif
-
- LaunchOptions new_options(options);
-
-#if defined(OS_WIN)
- DCHECK(!new_options.job_handle);
-
- win::ScopedHandle job_handle;
- if (flags & TestLauncher::USE_JOB_OBJECTS) {
- job_handle.Set(CreateJobObject(NULL, NULL));
- if (!job_handle.IsValid()) {
- LOG(ERROR) << "Could not create JobObject.";
- return -1;
- }
-
- DWORD job_flags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
-
- // Allow break-away from job since sandbox and few other places rely on it
- // on Windows versions prior to Windows 8 (which supports nested jobs).
- if (win::GetVersion() < win::VERSION_WIN8 &&
- flags & TestLauncher::ALLOW_BREAKAWAY_FROM_JOB) {
- job_flags |= JOB_OBJECT_LIMIT_BREAKAWAY_OK;
- }
-
- if (!SetJobObjectLimitFlags(job_handle.Get(), job_flags)) {
- LOG(ERROR) << "Could not SetJobObjectLimitFlags.";
- return -1;
- }
-
- new_options.job_handle = job_handle.Get();
- }
-#elif defined(OS_FUCHSIA)
- DCHECK(!new_options.job_handle);
-
- ScopedZxHandle job_handle;
- zx_status_t result = zx_job_create(GetDefaultJob(), 0, job_handle.receive());
- CHECK_EQ(ZX_OK, result) << "zx_job_create: " << zx_status_get_string(result);
- new_options.job_handle = job_handle.get();
-#endif // defined(OS_FUCHSIA)
-
-#if defined(OS_LINUX)
- // To prevent accidental privilege sharing to an untrusted child, processes
- // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
- // new child will be privileged and trusted.
- new_options.allow_new_privs = true;
-#endif
-
- Process process;
-
- {
- // Note how we grab the lock before the process possibly gets created.
- // This ensures that when the lock is held, ALL the processes are registered
- // in the set.
- AutoLock lock(*GetLiveProcessesLock());
-
-#if defined(OS_WIN)
- // Allow the handle used to capture stdio and stdout to be inherited by the
- // child. Note that this is done under GetLiveProcessesLock() to ensure that
- // only the desired child receives the handle.
- if (new_options.stdout_handle) {
- ::SetHandleInformation(new_options.stdout_handle, HANDLE_FLAG_INHERIT,
- HANDLE_FLAG_INHERIT);
- }
-#endif
-
- process = LaunchProcess(command_line, new_options);
-
-#if defined(OS_WIN)
- // Revoke inheritance so that the handle isn't leaked into other children.
- // Note that this is done under GetLiveProcessesLock() to ensure that only
- // the desired child receives the handle.
- if (new_options.stdout_handle)
- ::SetHandleInformation(new_options.stdout_handle, HANDLE_FLAG_INHERIT, 0);
-#endif
-
- if (!process.IsValid())
- return -1;
-
-#if defined(OS_FUCHSIA) // TODO(scottmg): https://crbug.com/755282
- if (kOnBot) {
- LOG(ERROR) << base::StringPrintf("adding %x to live process list",
- process.Handle());
- }
-#endif // OS_FUCHSIA
-
- // TODO(rvargas) crbug.com/417532: Don't store process handles.
- GetLiveProcesses()->insert(std::make_pair(process.Handle(), command_line));
- }
-
- if (observer)
- observer->OnLaunched(process.Handle(), process.Pid());
-
- int exit_code = 0;
- bool did_exit = false;
-
- {
- base::ScopedAllowBaseSyncPrimitivesForTesting allow_base_sync_primitives;
- did_exit = process.WaitForExitWithTimeout(timeout, &exit_code);
- }
-
- if (!did_exit) {
- if (observer)
- observer->OnTimedOut(command_line);
-
- *was_timeout = true;
- exit_code = -1; // Set a non-zero exit code to signal a failure.
-
-#if defined(OS_FUCHSIA) // TODO(scottmg): https://crbug.com/755282
- if (kOnBot) {
- LOG(ERROR) << base::StringPrintf("about to process.Terminate() %x",
- process.Handle());
- }
-
- // TODO(crbug.com/799268): Remove once we have debugged timed-out/hung
- // test job processes.
- LOG(ERROR) << "Dumping threads in process " << process.Pid();
-
- CommandLine threads_cmdline(base::FilePath("/boot/bin/threads"));
- threads_cmdline.AppendArg(IntToString(process.Pid()));
-
- LaunchOptions threads_options;
- threads_options.wait = true;
- LaunchProcess(threads_cmdline, threads_options);
-#endif // OS_FUCHSIA
- {
- base::ScopedAllowBaseSyncPrimitivesForTesting allow_base_sync_primitives;
- // Ensure that the process terminates.
- process.Terminate(-1, true);
- }
- }
-
- {
- // Note how we grab the log before issuing a possibly broad process kill.
- // Other code parts that grab the log kill processes, so avoid trying
- // to do that twice and trigger all kinds of log messages.
- AutoLock lock(*GetLiveProcessesLock());
-
-#if defined(OS_FUCHSIA)
- // TODO(scottmg): https://crbug.com/755282
- if (kOnBot) {
- LOG(ERROR) << base::StringPrintf("going to zx_task_kill(job) for %x",
- process.Handle());
- }
-
- CHECK_EQ(zx_task_kill(job_handle.get()), ZX_OK);
-#elif defined(OS_POSIX)
- if (exit_code != 0) {
- // On POSIX, in case the test does not exit cleanly, either due to a crash
- // or due to it timing out, we need to clean up any child processes that
- // it might have created. On Windows, child processes are automatically
- // cleaned up using JobObjects.
- KillProcessGroup(process.Handle());
- }
-#endif
-
-#if defined(OS_FUCHSIA) // TODO(scottmg): https://crbug.com/755282
- if (kOnBot) {
- LOG(ERROR) << base::StringPrintf("removing %x from live process list",
- process.Handle());
- }
-#endif // OS_FUCHSIA
- GetLiveProcesses()->erase(process.Handle());
- }
-
- GetTestLauncherTracer()->RecordProcessExecution(
- start_time, TimeTicks::Now() - start_time);
-
- return exit_code;
-}
-
-void DoLaunchChildTestProcess(
- const CommandLine& command_line,
- TimeDelta timeout,
- const TestLauncher::LaunchOptions& test_launch_options,
- bool redirect_stdio,
- SingleThreadTaskRunner* task_runner,
- std::unique_ptr<ProcessLifetimeObserver> observer) {
- TimeTicks start_time = TimeTicks::Now();
-
- ScopedFILE output_file;
- FilePath output_filename;
- if (redirect_stdio) {
- FILE* raw_output_file = CreateAndOpenTemporaryFile(&output_filename);
- output_file.reset(raw_output_file);
- CHECK(output_file);
- }
-
- LaunchOptions options;
-#if defined(OS_WIN)
- options.inherit_mode = test_launch_options.inherit_mode;
- options.handles_to_inherit = test_launch_options.handles_to_inherit;
- if (redirect_stdio) {
- HANDLE handle =
- reinterpret_cast<HANDLE>(_get_osfhandle(_fileno(output_file.get())));
- CHECK_NE(INVALID_HANDLE_VALUE, handle);
- options.stdin_handle = INVALID_HANDLE_VALUE;
- options.stdout_handle = handle;
- options.stderr_handle = handle;
- // See LaunchOptions.stdout_handle comments for why this compares against
- // FILE_TYPE_CHAR.
- if (options.inherit_mode == base::LaunchOptions::Inherit::kSpecific &&
- GetFileType(handle) != FILE_TYPE_CHAR) {
- options.handles_to_inherit.push_back(handle);
- }
- }
-#elif defined(OS_POSIX)
- options.fds_to_remap = test_launch_options.fds_to_remap;
- if (redirect_stdio) {
- int output_file_fd = fileno(output_file.get());
- CHECK_LE(0, output_file_fd);
- options.fds_to_remap.push_back(
- std::make_pair(output_file_fd, STDOUT_FILENO));
- options.fds_to_remap.push_back(
- std::make_pair(output_file_fd, STDERR_FILENO));
- }
-
-#if !defined(OS_FUCHSIA)
- options.new_process_group = true;
-#endif
-#if defined(OS_LINUX)
- options.kill_on_parent_death = true;
-#endif
-
-#endif // defined(OS_POSIX)
-
- bool was_timeout = false;
- int exit_code = LaunchChildTestProcessWithOptions(
- command_line, options, test_launch_options.flags, timeout, observer.get(),
- &was_timeout);
-
- std::string output_file_contents;
- if (redirect_stdio) {
- fflush(output_file.get());
- output_file.reset();
- CHECK(ReadFileToString(output_filename, &output_file_contents))
- << output_filename;
-
- if (!DeleteFile(output_filename, false)) {
- // This needs to be non-fatal at least for Windows.
- LOG(WARNING) << "Failed to delete " << output_filename.AsUTF8Unsafe();
- }
- }
-
- // Invoke OnCompleted on the thread it was originating from, not on a worker
- // pool thread.
- task_runner->PostTask(
- FROM_HERE,
- BindOnce(&ProcessLifetimeObserver::OnCompleted, std::move(observer),
- exit_code, TimeTicks::Now() - start_time, was_timeout,
- output_file_contents));
-}
-
-} // namespace
-
-const char kGTestBreakOnFailure[] = "gtest_break_on_failure";
-const char kGTestFilterFlag[] = "gtest_filter";
-const char kGTestFlagfileFlag[] = "gtest_flagfile";
-const char kGTestHelpFlag[] = "gtest_help";
-const char kGTestListTestsFlag[] = "gtest_list_tests";
-const char kGTestRepeatFlag[] = "gtest_repeat";
-const char kGTestRunDisabledTestsFlag[] = "gtest_also_run_disabled_tests";
-const char kGTestOutputFlag[] = "gtest_output";
-
-TestLauncherDelegate::~TestLauncherDelegate() = default;
-
-TestLauncher::LaunchOptions::LaunchOptions() = default;
-TestLauncher::LaunchOptions::LaunchOptions(const LaunchOptions& other) =
- default;
-TestLauncher::LaunchOptions::~LaunchOptions() = default;
-
-TestLauncher::TestLauncher(TestLauncherDelegate* launcher_delegate,
- size_t parallel_jobs)
- : launcher_delegate_(launcher_delegate),
- total_shards_(1),
- shard_index_(0),
- cycles_(1),
- test_found_count_(0),
- test_started_count_(0),
- test_finished_count_(0),
- test_success_count_(0),
- test_broken_count_(0),
- retry_count_(0),
- retry_limit_(0),
- force_run_broken_tests_(false),
- run_result_(true),
- watchdog_timer_(FROM_HERE,
- kOutputTimeout,
- this,
- &TestLauncher::OnOutputTimeout),
- parallel_jobs_(parallel_jobs) {}
-
-TestLauncher::~TestLauncher() {
- base::TaskScheduler::GetInstance()->Shutdown();
-}
-
-bool TestLauncher::Run() {
- if (!Init())
- return false;
-
- // Value of |cycles_| changes after each iteration. Keep track of the
- // original value.
- int requested_cycles = cycles_;
-
-// TODO(fuchsia): Fuchsia does not have POSIX signals. Something similiar to
-// this will likely need to be implemented. See https://crbug.com/706592.
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
- CHECK_EQ(0, pipe(g_shutdown_pipe));
-
- struct sigaction action;
- memset(&action, 0, sizeof(action));
- sigemptyset(&action.sa_mask);
- action.sa_handler = &ShutdownPipeSignalHandler;
-
- CHECK_EQ(0, sigaction(SIGINT, &action, nullptr));
- CHECK_EQ(0, sigaction(SIGQUIT, &action, nullptr));
- CHECK_EQ(0, sigaction(SIGTERM, &action, nullptr));
-
- auto controller = base::FileDescriptorWatcher::WatchReadable(
- g_shutdown_pipe[0],
- base::Bind(&TestLauncher::OnShutdownPipeReadable, Unretained(this)));
-#endif // defined(OS_POSIX) && !defined(OS_FUCHSIA)
-
- // Start the watchdog timer.
- watchdog_timer_.Reset();
-
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, BindOnce(&TestLauncher::RunTestIteration, Unretained(this)));
-
- RunLoop().Run();
-
- if (requested_cycles != 1)
- results_tracker_.PrintSummaryOfAllIterations();
-
- MaybeSaveSummaryAsJSON(std::vector<std::string>());
-
- return run_result_;
-}
-
-void TestLauncher::LaunchChildGTestProcess(
- const CommandLine& command_line,
- const std::string& wrapper,
- TimeDelta timeout,
- const LaunchOptions& options,
- std::unique_ptr<ProcessLifetimeObserver> observer) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // Record the exact command line used to launch the child.
- CommandLine new_command_line(
- PrepareCommandLineForGTest(command_line, wrapper));
-
- // When running in parallel mode we need to redirect stdio to avoid mixed-up
- // output. We also always redirect on the bots to get the test output into
- // JSON summary.
- bool redirect_stdio = (parallel_jobs_ > 1) || BotModeEnabled();
-
- PostTaskWithTraits(
- FROM_HERE, {MayBlock(), TaskShutdownBehavior::BLOCK_SHUTDOWN},
- BindOnce(&DoLaunchChildTestProcess, new_command_line, timeout, options,
- redirect_stdio, RetainedRef(ThreadTaskRunnerHandle::Get()),
- std::move(observer)));
-}
-
-void TestLauncher::OnTestFinished(const TestResult& original_result) {
- ++test_finished_count_;
-
- TestResult result(original_result);
-
- if (result.output_snippet.length() > kOutputSnippetBytesLimit) {
- if (result.status == TestResult::TEST_SUCCESS)
- result.status = TestResult::TEST_EXCESSIVE_OUTPUT;
-
- // Keep the top and bottom of the log and truncate the middle part.
- result.output_snippet =
- result.output_snippet.substr(0, kOutputSnippetBytesLimit / 2) + "\n" +
- StringPrintf("<truncated (%" PRIuS " bytes)>\n",
- result.output_snippet.length()) +
- result.output_snippet.substr(result.output_snippet.length() -
- kOutputSnippetBytesLimit / 2) +
- "\n";
- }
-
- bool print_snippet = false;
- std::string print_test_stdio("auto");
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherPrintTestStdio)) {
- print_test_stdio = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kTestLauncherPrintTestStdio);
- }
- if (print_test_stdio == "auto") {
- print_snippet = (result.status != TestResult::TEST_SUCCESS);
- } else if (print_test_stdio == "always") {
- print_snippet = true;
- } else if (print_test_stdio == "never") {
- print_snippet = false;
- } else {
- LOG(WARNING) << "Invalid value of " << switches::kTestLauncherPrintTestStdio
- << ": " << print_test_stdio;
- }
- if (print_snippet) {
- std::vector<base::StringPiece> snippet_lines =
- SplitStringPiece(result.output_snippet, "\n", base::KEEP_WHITESPACE,
- base::SPLIT_WANT_ALL);
- if (snippet_lines.size() > kOutputSnippetLinesLimit) {
- size_t truncated_size = snippet_lines.size() - kOutputSnippetLinesLimit;
- snippet_lines.erase(
- snippet_lines.begin(),
- snippet_lines.begin() + truncated_size);
- snippet_lines.insert(snippet_lines.begin(), "<truncated>");
- }
- fprintf(stdout, "%s", base::JoinString(snippet_lines, "\n").c_str());
- fflush(stdout);
- }
-
- if (result.status == TestResult::TEST_SUCCESS) {
- ++test_success_count_;
- } else {
- tests_to_retry_.insert(result.full_name);
- }
-
- results_tracker_.AddTestResult(result);
-
- // TODO(phajdan.jr): Align counter (padding).
- std::string status_line(
- StringPrintf("[%" PRIuS "/%" PRIuS "] %s ",
- test_finished_count_,
- test_started_count_,
- result.full_name.c_str()));
- if (result.completed()) {
- status_line.append(StringPrintf("(%" PRId64 " ms)",
- result.elapsed_time.InMilliseconds()));
- } else if (result.status == TestResult::TEST_TIMEOUT) {
- status_line.append("(TIMED OUT)");
- } else if (result.status == TestResult::TEST_CRASH) {
- status_line.append("(CRASHED)");
- } else if (result.status == TestResult::TEST_SKIPPED) {
- status_line.append("(SKIPPED)");
- } else if (result.status == TestResult::TEST_UNKNOWN) {
- status_line.append("(UNKNOWN)");
- } else {
- // Fail very loudly so it's not ignored.
- CHECK(false) << "Unhandled test result status: " << result.status;
- }
- fprintf(stdout, "%s\n", status_line.c_str());
- fflush(stdout);
-
- // We just printed a status line, reset the watchdog timer.
- watchdog_timer_.Reset();
-
- // Do not waste time on timeouts. We include tests with unknown results here
- // because sometimes (e.g. hang in between unit tests) that's how a timeout
- // gets reported.
- if (result.status == TestResult::TEST_TIMEOUT ||
- result.status == TestResult::TEST_UNKNOWN) {
- test_broken_count_++;
- }
- size_t broken_threshold =
- std::max(static_cast<size_t>(20), test_found_count_ / 10);
- if (!force_run_broken_tests_ && test_broken_count_ >= broken_threshold) {
- fprintf(stdout, "Too many badly broken tests (%" PRIuS "), exiting now.\n",
- test_broken_count_);
- fflush(stdout);
-
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
- KillSpawnedTestProcesses();
-#endif // defined(OS_POSIX) && !defined(OS_FUCHSIA)
-
- MaybeSaveSummaryAsJSON({"BROKEN_TEST_EARLY_EXIT", kUnreliableResultsTag});
-
- exit(1);
- }
-
- if (test_finished_count_ != test_started_count_)
- return;
-
- if (tests_to_retry_.empty() || retry_count_ >= retry_limit_) {
- OnTestIterationFinished();
- return;
- }
-
- if (!force_run_broken_tests_ && tests_to_retry_.size() >= broken_threshold) {
- fprintf(stdout,
- "Too many failing tests (%" PRIuS "), skipping retries.\n",
- tests_to_retry_.size());
- fflush(stdout);
-
- results_tracker_.AddGlobalTag("BROKEN_TEST_SKIPPED_RETRIES");
- results_tracker_.AddGlobalTag(kUnreliableResultsTag);
-
- OnTestIterationFinished();
- return;
- }
-
- retry_count_++;
-
- std::vector<std::string> test_names(tests_to_retry_.begin(),
- tests_to_retry_.end());
-
- tests_to_retry_.clear();
-
- size_t retry_started_count = launcher_delegate_->RetryTests(this, test_names);
- if (retry_started_count == 0) {
- // Signal failure, but continue to run all requested test iterations.
- // With the summary of all iterations at the end this is a good default.
- run_result_ = false;
-
- OnTestIterationFinished();
- return;
- }
-
- fprintf(stdout, "Retrying %" PRIuS " test%s (retry #%" PRIuS ")\n",
- retry_started_count,
- retry_started_count > 1 ? "s" : "",
- retry_count_);
- fflush(stdout);
-
- test_started_count_ += retry_started_count;
-}
-
-// Helper used to parse test filter files. Syntax is documented in
-// //testing/buildbot/filters/README.md .
-bool LoadFilterFile(const FilePath& file_path,
- std::vector<std::string>* positive_filter,
- std::vector<std::string>* negative_filter) {
- std::string file_content;
- if (!ReadFileToString(file_path, &file_content)) {
- LOG(ERROR) << "Failed to read the filter file.";
- return false;
- }
-
- std::vector<std::string> filter_lines = SplitString(
- file_content, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
- int line_num = 0;
- for (const std::string& filter_line : filter_lines) {
- line_num++;
-
- size_t hash_pos = filter_line.find('#');
-
- // In case when # symbol is not in the beginning of the line and is not
- // proceeded with a space then it's likely that the comment was
- // unintentional.
- if (hash_pos != std::string::npos && hash_pos > 0 &&
- filter_line[hash_pos - 1] != ' ') {
- LOG(WARNING) << "Content of line " << line_num << " in " << file_path
- << " after # is treated as a comment, " << filter_line;
- }
-
- // Strip comments and whitespace from each line.
- std::string trimmed_line =
- TrimWhitespaceASCII(filter_line.substr(0, hash_pos), TRIM_ALL)
- .as_string();
-
- if (trimmed_line.substr(0, 2) == "//") {
- LOG(ERROR) << "Line " << line_num << " in " << file_path
- << " starts with //, use # for comments.";
- return false;
- }
-
- // Treat a line starting with '//' as a comment.
- if (trimmed_line.empty())
- continue;
-
- if (trimmed_line[0] == '-')
- negative_filter->push_back(trimmed_line.substr(1));
- else
- positive_filter->push_back(trimmed_line);
- }
-
- return true;
-}
-
-bool TestLauncher::Init() {
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
-
- // Initialize sharding. Command line takes precedence over legacy environment
- // variables.
- if (command_line->HasSwitch(switches::kTestLauncherTotalShards) &&
- command_line->HasSwitch(switches::kTestLauncherShardIndex)) {
- if (!StringToInt(
- command_line->GetSwitchValueASCII(
- switches::kTestLauncherTotalShards),
- &total_shards_)) {
- LOG(ERROR) << "Invalid value for " << switches::kTestLauncherTotalShards;
- return false;
- }
- if (!StringToInt(
- command_line->GetSwitchValueASCII(
- switches::kTestLauncherShardIndex),
- &shard_index_)) {
- LOG(ERROR) << "Invalid value for " << switches::kTestLauncherShardIndex;
- return false;
- }
- fprintf(stdout,
- "Using sharding settings from command line. This is shard %d/%d\n",
- shard_index_, total_shards_);
- fflush(stdout);
- } else {
- if (!TakeInt32FromEnvironment(kTestTotalShards, &total_shards_))
- return false;
- if (!TakeInt32FromEnvironment(kTestShardIndex, &shard_index_))
- return false;
- fprintf(stdout,
- "Using sharding settings from environment. This is shard %d/%d\n",
- shard_index_, total_shards_);
- fflush(stdout);
- }
- if (shard_index_ < 0 ||
- total_shards_ < 0 ||
- shard_index_ >= total_shards_) {
- LOG(ERROR) << "Invalid sharding settings: we require 0 <= "
- << kTestShardIndex << " < " << kTestTotalShards
- << ", but you have " << kTestShardIndex << "=" << shard_index_
- << ", " << kTestTotalShards << "=" << total_shards_ << ".\n";
- return false;
- }
-
- // Make sure we don't pass any sharding-related environment to the child
- // processes. This test launcher implements the sharding completely.
- CHECK(UnsetEnvironmentVariableIfExists("GTEST_TOTAL_SHARDS"));
- CHECK(UnsetEnvironmentVariableIfExists("GTEST_SHARD_INDEX"));
-
- if (command_line->HasSwitch(kGTestRepeatFlag) &&
- !StringToInt(command_line->GetSwitchValueASCII(kGTestRepeatFlag),
- &cycles_)) {
- LOG(ERROR) << "Invalid value for " << kGTestRepeatFlag;
- return false;
- }
-
- if (command_line->HasSwitch(switches::kTestLauncherRetryLimit)) {
- int retry_limit = -1;
- if (!StringToInt(command_line->GetSwitchValueASCII(
- switches::kTestLauncherRetryLimit), &retry_limit) ||
- retry_limit < 0) {
- LOG(ERROR) << "Invalid value for " << switches::kTestLauncherRetryLimit;
- return false;
- }
-
- retry_limit_ = retry_limit;
- } else if (!command_line->HasSwitch(kGTestFilterFlag) || BotModeEnabled()) {
- // Retry failures 3 times by default if we are running all of the tests or
- // in bot mode.
- retry_limit_ = 3;
- }
-
- if (command_line->HasSwitch(switches::kTestLauncherForceRunBrokenTests))
- force_run_broken_tests_ = true;
-
- fprintf(stdout, "Using %" PRIuS " parallel jobs.\n", parallel_jobs_);
- fflush(stdout);
-
- CreateAndStartTaskScheduler(static_cast<int>(parallel_jobs_));
-
- std::vector<std::string> positive_file_filter;
- std::vector<std::string> positive_gtest_filter;
-
- if (command_line->HasSwitch(switches::kTestLauncherFilterFile)) {
- base::FilePath filter_file_path = base::MakeAbsoluteFilePath(
- command_line->GetSwitchValuePath(switches::kTestLauncherFilterFile));
- if (!LoadFilterFile(filter_file_path, &positive_file_filter,
- &negative_test_filter_))
- return false;
- }
-
- // Split --gtest_filter at '-', if there is one, to separate into
- // positive filter and negative filter portions.
- std::string filter = command_line->GetSwitchValueASCII(kGTestFilterFlag);
- size_t dash_pos = filter.find('-');
- if (dash_pos == std::string::npos) {
- positive_gtest_filter =
- SplitString(filter, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
- } else {
- // Everything up to the dash.
- positive_gtest_filter =
- SplitString(filter.substr(0, dash_pos), ":", base::TRIM_WHITESPACE,
- base::SPLIT_WANT_ALL);
-
- // Everything after the dash.
- for (std::string pattern :
- SplitString(filter.substr(dash_pos + 1), ":", base::TRIM_WHITESPACE,
- base::SPLIT_WANT_ALL)) {
- negative_test_filter_.push_back(pattern);
- }
- }
-
- if (!launcher_delegate_->GetTests(&tests_)) {
- LOG(ERROR) << "Failed to get list of tests.";
- return false;
- }
-
- CombinePositiveTestFilters(std::move(positive_gtest_filter),
- std::move(positive_file_filter));
-
- if (!results_tracker_.Init(*command_line)) {
- LOG(ERROR) << "Failed to initialize test results tracker.";
- return 1;
- }
-
-#if defined(NDEBUG)
- results_tracker_.AddGlobalTag("MODE_RELEASE");
-#else
- results_tracker_.AddGlobalTag("MODE_DEBUG");
-#endif
-
- // Operating systems (sorted alphabetically).
- // Note that they can deliberately overlap, e.g. OS_LINUX is a subset
- // of OS_POSIX.
-#if defined(OS_ANDROID)
- results_tracker_.AddGlobalTag("OS_ANDROID");
-#endif
-
-#if defined(OS_BSD)
- results_tracker_.AddGlobalTag("OS_BSD");
-#endif
-
-#if defined(OS_FREEBSD)
- results_tracker_.AddGlobalTag("OS_FREEBSD");
-#endif
-
-#if defined(OS_FUCHSIA)
- results_tracker_.AddGlobalTag("OS_FUCHSIA");
-#endif
-
-#if defined(OS_IOS)
- results_tracker_.AddGlobalTag("OS_IOS");
-#endif
-
-#if defined(OS_LINUX)
- results_tracker_.AddGlobalTag("OS_LINUX");
-#endif
-
-#if defined(OS_MACOSX)
- results_tracker_.AddGlobalTag("OS_MACOSX");
-#endif
-
-#if defined(OS_NACL)
- results_tracker_.AddGlobalTag("OS_NACL");
-#endif
-
-#if defined(OS_OPENBSD)
- results_tracker_.AddGlobalTag("OS_OPENBSD");
-#endif
-
-#if defined(OS_POSIX)
- results_tracker_.AddGlobalTag("OS_POSIX");
-#endif
-
-#if defined(OS_SOLARIS)
- results_tracker_.AddGlobalTag("OS_SOLARIS");
-#endif
-
-#if defined(OS_WIN)
- results_tracker_.AddGlobalTag("OS_WIN");
-#endif
-
- // CPU-related tags.
-#if defined(ARCH_CPU_32_BITS)
- results_tracker_.AddGlobalTag("CPU_32_BITS");
-#endif
-
-#if defined(ARCH_CPU_64_BITS)
- results_tracker_.AddGlobalTag("CPU_64_BITS");
-#endif
-
- return true;
-}
-
-void TestLauncher::CombinePositiveTestFilters(
- std::vector<std::string> filter_a,
- std::vector<std::string> filter_b) {
- has_at_least_one_positive_filter_ = !filter_a.empty() || !filter_b.empty();
- if (!has_at_least_one_positive_filter_) {
- return;
- }
- // If two positive filters are present, only run tests that match a pattern
- // in both filters.
- if (!filter_a.empty() && !filter_b.empty()) {
- for (size_t i = 0; i < tests_.size(); i++) {
- std::string test_name =
- FormatFullTestName(tests_[i].test_case_name, tests_[i].test_name);
- bool found_a = false;
- bool found_b = false;
- for (size_t k = 0; k < filter_a.size(); ++k) {
- found_a = found_a || MatchPattern(test_name, filter_a[k]);
- }
- for (size_t k = 0; k < filter_b.size(); ++k) {
- found_b = found_b || MatchPattern(test_name, filter_b[k]);
- }
- if (found_a && found_b) {
- positive_test_filter_.push_back(test_name);
- }
- }
- } else if (!filter_a.empty()) {
- positive_test_filter_ = std::move(filter_a);
- } else {
- positive_test_filter_ = std::move(filter_b);
- }
-}
-
-void TestLauncher::RunTests() {
- std::vector<std::string> test_names;
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- for (const TestIdentifier& test_id : tests_) {
- std::string test_name =
- FormatFullTestName(test_id.test_case_name, test_id.test_name);
-
- results_tracker_.AddTest(test_name);
-
- if (test_name.find("DISABLED") != std::string::npos) {
- results_tracker_.AddDisabledTest(test_name);
-
- // Skip disabled tests unless explicitly requested.
- if (!command_line->HasSwitch(kGTestRunDisabledTestsFlag))
- continue;
- }
-
- if (!launcher_delegate_->ShouldRunTest(test_id.test_case_name,
- test_id.test_name)) {
- continue;
- }
-
- // Count tests in the binary, before we apply filter and sharding.
- test_found_count_++;
-
- std::string test_name_no_disabled =
- TestNameWithoutDisabledPrefix(test_name);
-
- // Skip the test that doesn't match the filter (if given).
- if (has_at_least_one_positive_filter_) {
- bool found = false;
- for (auto filter : positive_test_filter_) {
- if (MatchPattern(test_name, filter) ||
- MatchPattern(test_name_no_disabled, filter)) {
- found = true;
- break;
- }
- }
-
- if (!found)
- continue;
- }
- if (!negative_test_filter_.empty()) {
- bool excluded = false;
- for (auto filter : negative_test_filter_) {
- if (MatchPattern(test_name, filter) ||
- MatchPattern(test_name_no_disabled, filter)) {
- excluded = true;
- break;
- }
- }
-
- if (excluded)
- continue;
- }
-
- if (Hash(test_name) % total_shards_ != static_cast<uint32_t>(shard_index_))
- continue;
-
- // Report test locations after applying all filters, so that we report test
- // locations only for those tests that were run as part of this shard.
- results_tracker_.AddTestLocation(test_name, test_id.file, test_id.line);
-
- test_names.push_back(test_name);
- }
-
- // Save an early test summary in case the launcher crashes or gets killed.
- MaybeSaveSummaryAsJSON({"EARLY_SUMMARY", kUnreliableResultsTag});
-
- test_started_count_ = launcher_delegate_->RunTests(this, test_names);
-
- if (test_started_count_ == 0) {
- fprintf(stdout, "0 tests run\n");
- fflush(stdout);
-
- // No tests have actually been started, so kick off the next iteration.
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, BindOnce(&TestLauncher::RunTestIteration, Unretained(this)));
- }
-}
-
-void TestLauncher::RunTestIteration() {
- const bool stop_on_failure =
- CommandLine::ForCurrentProcess()->HasSwitch(kGTestBreakOnFailure);
- if (cycles_ == 0 ||
- (stop_on_failure && test_success_count_ != test_finished_count_)) {
- RunLoop::QuitCurrentWhenIdleDeprecated();
- return;
- }
-
- // Special value "-1" means "repeat indefinitely".
- cycles_ = (cycles_ == -1) ? cycles_ : cycles_ - 1;
-
- test_found_count_ = 0;
- test_started_count_ = 0;
- test_finished_count_ = 0;
- test_success_count_ = 0;
- test_broken_count_ = 0;
- retry_count_ = 0;
- tests_to_retry_.clear();
- results_tracker_.OnTestIterationStarting();
-
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, BindOnce(&TestLauncher::RunTests, Unretained(this)));
-}
-
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
-// I/O watcher for the reading end of the self-pipe above.
-// Terminates any launched child processes and exits the process.
-void TestLauncher::OnShutdownPipeReadable() {
- fprintf(stdout, "\nCaught signal. Killing spawned test processes...\n");
- fflush(stdout);
-
- KillSpawnedTestProcesses();
-
- MaybeSaveSummaryAsJSON({"CAUGHT_TERMINATION_SIGNAL", kUnreliableResultsTag});
-
- // The signal would normally kill the process, so exit now.
- _exit(1);
-}
-#endif // defined(OS_POSIX)
-
-void TestLauncher::MaybeSaveSummaryAsJSON(
- const std::vector<std::string>& additional_tags) {
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kTestLauncherSummaryOutput)) {
- FilePath summary_path(command_line->GetSwitchValuePath(
- switches::kTestLauncherSummaryOutput));
- if (!results_tracker_.SaveSummaryAsJSON(summary_path, additional_tags)) {
- LOG(ERROR) << "Failed to save test launcher output summary.";
- }
- }
- if (command_line->HasSwitch(switches::kTestLauncherTrace)) {
- FilePath trace_path(
- command_line->GetSwitchValuePath(switches::kTestLauncherTrace));
- if (!GetTestLauncherTracer()->Dump(trace_path)) {
- LOG(ERROR) << "Failed to save test launcher trace.";
- }
- }
-}
-
-void TestLauncher::OnTestIterationFinished() {
- TestResultsTracker::TestStatusMap tests_by_status(
- results_tracker_.GetTestStatusMapForCurrentIteration());
- if (!tests_by_status[TestResult::TEST_UNKNOWN].empty())
- results_tracker_.AddGlobalTag(kUnreliableResultsTag);
-
- // When we retry tests, success is determined by having nothing more
- // to retry (everything eventually passed), as opposed to having
- // no failures at all.
- if (tests_to_retry_.empty()) {
- fprintf(stdout, "SUCCESS: all tests passed.\n");
- fflush(stdout);
- } else {
- // Signal failure, but continue to run all requested test iterations.
- // With the summary of all iterations at the end this is a good default.
- run_result_ = false;
- }
-
- results_tracker_.PrintSummaryOfCurrentIteration();
-
- // Kick off the next iteration.
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, BindOnce(&TestLauncher::RunTestIteration, Unretained(this)));
-}
-
-void TestLauncher::OnOutputTimeout() {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- AutoLock lock(*GetLiveProcessesLock());
-
- fprintf(stdout, "Still waiting for the following processes to finish:\n");
-
- for (const auto& pair : *GetLiveProcesses()) {
-#if defined(OS_WIN)
- fwprintf(stdout, L"\t%s\n", pair.second.GetCommandLineString().c_str());
-#else
- fprintf(stdout, "\t%s\n", pair.second.GetCommandLineString().c_str());
-#endif
-
-#if defined(OS_FUCHSIA)
- // TODO(scottmg): Temporary code to try to identify why child processes
- // appear to not be terminated after a timeout correctly.
- // https://crbug.com/750370 and https://crbug.com/738275.
-
- zx_info_process_t proc_info = {};
- zx_status_t status =
- zx_object_get_info(pair.first, ZX_INFO_PROCESS, &proc_info,
- sizeof(proc_info), nullptr, nullptr);
- if (status != ZX_OK) {
- fprintf(stdout, "zx_object_get_info failed for '%s', status=%d\n",
- pair.second.GetCommandLineString().c_str(), status);
- } else {
- fprintf(stdout, " return_code=%d\n", proc_info.return_code);
- fprintf(stdout, " started=%d\n", proc_info.started);
- fprintf(stdout, " exited=%d\n", proc_info.exited);
- fprintf(stdout, " debugger_attached=%d\n", proc_info.debugger_attached);
- }
-#endif // OS_FUCHSIA
- }
-
- fflush(stdout);
-
- // Arm the timer again - otherwise it would fire only once.
- watchdog_timer_.Reset();
-}
-
-size_t NumParallelJobs() {
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kTestLauncherJobs)) {
- // If the number of test launcher jobs was specified, return that number.
- size_t jobs = 0U;
-
- if (!StringToSizeT(
- command_line->GetSwitchValueASCII(switches::kTestLauncherJobs),
- &jobs) ||
- !jobs) {
- LOG(ERROR) << "Invalid value for " << switches::kTestLauncherJobs;
- return 0U;
- }
- return jobs;
- }
- if (command_line->HasSwitch(kGTestFilterFlag) && !BotModeEnabled()) {
- // Do not run jobs in parallel by default if we are running a subset of
- // the tests and if bot mode is off.
- return 1U;
- }
-
- // Default to the number of processor cores.
- return base::checked_cast<size_t>(SysInfo::NumberOfProcessors());
-}
-
-std::string GetTestOutputSnippet(const TestResult& result,
- const std::string& full_output) {
- size_t run_pos = full_output.find(std::string("[ RUN ] ") +
- result.full_name);
- if (run_pos == std::string::npos)
- return std::string();
-
- size_t end_pos = full_output.find(std::string("[ FAILED ] ") +
- result.full_name,
- run_pos);
- // Only clip the snippet to the "OK" message if the test really
- // succeeded. It still might have e.g. crashed after printing it.
- if (end_pos == std::string::npos &&
- result.status == TestResult::TEST_SUCCESS) {
- end_pos = full_output.find(std::string("[ OK ] ") +
- result.full_name,
- run_pos);
- }
- if (end_pos != std::string::npos) {
- size_t newline_pos = full_output.find("\n", end_pos);
- if (newline_pos != std::string::npos)
- end_pos = newline_pos + 1;
- }
-
- std::string snippet(full_output.substr(run_pos));
- if (end_pos != std::string::npos)
- snippet = full_output.substr(run_pos, end_pos - run_pos);
-
- return snippet;
-}
-
-} // namespace base
diff --git a/base/test/launcher/test_launcher.h b/base/test/launcher/test_launcher.h
deleted file mode 100644
index fe9f080..0000000
--- a/base/test/launcher/test_launcher.h
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_LAUNCHER_TEST_LAUNCHER_H_
-#define BASE_TEST_LAUNCHER_TEST_LAUNCHER_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/process/launch.h"
-#include "base/test/gtest_util.h"
-#include "base/test/launcher/test_result.h"
-#include "base/test/launcher/test_results_tracker.h"
-#include "base/threading/thread_checker.h"
-#include "base/time/time.h"
-#include "base/timer/timer.h"
-#include "build_config.h"
-
-namespace base {
-
-class CommandLine;
-struct LaunchOptions;
-class TestLauncher;
-
-// Constants for GTest command-line flags.
-extern const char kGTestFilterFlag[];
-extern const char kGTestFlagfileFlag[];
-extern const char kGTestHelpFlag[];
-extern const char kGTestListTestsFlag[];
-extern const char kGTestRepeatFlag[];
-extern const char kGTestRunDisabledTestsFlag[];
-extern const char kGTestOutputFlag[];
-
-// Interface for use with LaunchTests that abstracts away exact details
-// which tests and how are run.
-class TestLauncherDelegate {
- public:
- // Called to get names of tests available for running. The delegate
- // must put the result in |output| and return true on success.
- virtual bool GetTests(std::vector<TestIdentifier>* output) = 0;
-
- // Called before a test is considered for running. If it returns false,
- // the test is not run. If it returns true, the test will be run provided
- // it is part of the current shard.
- virtual bool ShouldRunTest(const std::string& test_case_name,
- const std::string& test_name) = 0;
-
- // Called to make the delegate run the specified tests. The delegate must
- // return the number of actual tests it's going to run (can be smaller,
- // equal to, or larger than size of |test_names|). It must also call
- // |test_launcher|'s OnTestFinished method once per every run test,
- // regardless of its success.
- virtual size_t RunTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) = 0;
-
- // Called to make the delegate retry the specified tests. The delegate must
- // return the number of actual tests it's going to retry (can be smaller,
- // equal to, or larger than size of |test_names|). It must also call
- // |test_launcher|'s OnTestFinished method once per every retried test,
- // regardless of its success.
- virtual size_t RetryTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) = 0;
-
- protected:
- virtual ~TestLauncherDelegate();
-};
-
-// An observer of child process lifetime events generated by
-// LaunchChildGTestProcess.
-class ProcessLifetimeObserver {
- public:
- virtual ~ProcessLifetimeObserver() = default;
-
- // Invoked once the child process is started. |handle| is a handle to the
- // child process and |id| is its pid. NOTE: this method is invoked on the
- // thread the process is launched on immediately after it is launched. The
- // caller owns the ProcessHandle.
- virtual void OnLaunched(ProcessHandle handle, ProcessId id) {}
-
- // Invoked when a test process exceeds its runtime, immediately before it is
- // terminated. |command_line| is the command line used to launch the process.
- // NOTE: this method is invoked on the thread the process is launched on.
- virtual void OnTimedOut(const CommandLine& command_line) {}
-
- // Invoked after a child process finishes, reporting the process |exit_code|,
- // child process |elapsed_time|, whether or not the process was terminated as
- // a result of a timeout, and the output of the child (stdout and stderr
- // together). NOTE: this method is invoked on the same thread as
- // LaunchChildGTestProcess.
- virtual void OnCompleted(int exit_code,
- TimeDelta elapsed_time,
- bool was_timeout,
- const std::string& output) {}
-
- protected:
- ProcessLifetimeObserver() = default;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ProcessLifetimeObserver);
-};
-
-// Launches tests using a TestLauncherDelegate.
-class TestLauncher {
- public:
- // Flags controlling behavior of LaunchChildGTestProcess.
- enum LaunchChildGTestProcessFlags {
- // Allows usage of job objects on Windows. Helps properly clean up child
- // processes.
- USE_JOB_OBJECTS = (1 << 0),
-
- // Allows breakaway from job on Windows. May result in some child processes
- // not being properly terminated after launcher dies if these processes
- // fail to cooperate.
- ALLOW_BREAKAWAY_FROM_JOB = (1 << 1),
- };
-
- struct LaunchOptions {
- LaunchOptions();
- LaunchOptions(const LaunchOptions& other);
- ~LaunchOptions();
-
- int flags = 0;
- // These mirror values in base::LaunchOptions, see it for details.
-#if defined(OS_WIN)
- base::LaunchOptions::Inherit inherit_mode =
- base::LaunchOptions::Inherit::kSpecific;
- base::HandlesToInheritVector handles_to_inherit;
-#elif defined(OS_POSIX)
- FileHandleMappingVector fds_to_remap;
-#endif
- };
-
- // Constructor. |parallel_jobs| is the limit of simultaneous parallel test
- // jobs.
- TestLauncher(TestLauncherDelegate* launcher_delegate, size_t parallel_jobs);
- ~TestLauncher();
-
- // Runs the launcher. Must be called at most once.
- bool Run() WARN_UNUSED_RESULT;
-
- // Launches a child process (assumed to be gtest-based binary) using
- // |command_line|. If |wrapper| is not empty, it is prepended to the final
- // command line. |observer|, if not null, is used to convey process lifetime
- // events to the caller. |observer| is destroyed after its OnCompleted
- // method is invoked.
- void LaunchChildGTestProcess(
- const CommandLine& command_line,
- const std::string& wrapper,
- TimeDelta timeout,
- const LaunchOptions& options,
- std::unique_ptr<ProcessLifetimeObserver> observer);
-
- // Called when a test has finished running.
- void OnTestFinished(const TestResult& result);
-
- private:
- bool Init() WARN_UNUSED_RESULT;
-
- // Runs all tests in current iteration.
- void RunTests();
-
- void CombinePositiveTestFilters(std::vector<std::string> filter_a,
- std::vector<std::string> filter_b);
-
- void RunTestIteration();
-
-#if defined(OS_POSIX)
- void OnShutdownPipeReadable();
-#endif
-
- // Saves test results summary as JSON if requested from command line.
- void MaybeSaveSummaryAsJSON(const std::vector<std::string>& additional_tags);
-
- // Called when a test iteration is finished.
- void OnTestIterationFinished();
-
- // Called by the delay timer when no output was made for a while.
- void OnOutputTimeout();
-
- // Make sure we don't accidentally call the wrong methods e.g. on the worker
- // pool thread. Should be the first member so that it's destroyed last: when
- // destroying other members, especially the worker pool, we may check the code
- // is running on the correct thread.
- ThreadChecker thread_checker_;
-
- TestLauncherDelegate* launcher_delegate_;
-
- // Support for outer sharding, just like gtest does.
- int32_t total_shards_; // Total number of outer shards, at least one.
- int32_t shard_index_; // Index of shard the launcher is to run.
-
- int cycles_; // Number of remaining test itreations, or -1 for infinite.
-
- // Test filters (empty means no filter).
- bool has_at_least_one_positive_filter_;
- std::vector<std::string> positive_test_filter_;
- std::vector<std::string> negative_test_filter_;
-
- // Tests to use (cached result of TestLauncherDelegate::GetTests).
- std::vector<TestIdentifier> tests_;
-
- // Number of tests found in this binary.
- size_t test_found_count_;
-
- // Number of tests started in this iteration.
- size_t test_started_count_;
-
- // Number of tests finished in this iteration.
- size_t test_finished_count_;
-
- // Number of tests successfully finished in this iteration.
- size_t test_success_count_;
-
- // Number of tests either timing out or having an unknown result,
- // likely indicating a more systemic problem if widespread.
- size_t test_broken_count_;
-
- // Number of retries in this iteration.
- size_t retry_count_;
-
- // Maximum number of retries per iteration.
- size_t retry_limit_;
-
- // If true will not early exit nor skip retries even if too many tests are
- // broken.
- bool force_run_broken_tests_;
-
- // Tests to retry in this iteration.
- std::set<std::string> tests_to_retry_;
-
- // Result to be returned from Run.
- bool run_result_;
-
- TestResultsTracker results_tracker_;
-
- // Watchdog timer to make sure we do not go without output for too long.
- DelayTimer watchdog_timer_;
-
- // Number of jobs to run in parallel.
- size_t parallel_jobs_;
-
- DISALLOW_COPY_AND_ASSIGN(TestLauncher);
-};
-
-// Return the number of parallel jobs to use, or 0U in case of error.
-size_t NumParallelJobs();
-
-// Extract part from |full_output| that applies to |result|.
-std::string GetTestOutputSnippet(const TestResult& result,
- const std::string& full_output);
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_TEST_LAUNCHER_H_
diff --git a/base/test/launcher/test_launcher_nacl_nonsfi.cc b/base/test/launcher/test_launcher_nacl_nonsfi.cc
deleted file mode 100644
index eeb0d92..0000000
--- a/base/test/launcher/test_launcher_nacl_nonsfi.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright 2015 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 <inttypes.h>
-#include <stdio.h>
-
-#include <string>
-
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/path_service.h"
-#include "base/process/launch.h"
-#include "base/strings/string_piece.h"
-#include "base/strings/string_tokenizer.h"
-#include "base/strings/string_util.h"
-#include "base/sys_info.h"
-#include "base/test/launcher/test_launcher.h"
-#include "base/test/launcher/unit_test_launcher.h"
-#include "base/test/test_switches.h"
-#include "base/test/test_timeouts.h"
-#include "build_config.h"
-
-#if defined(OS_POSIX)
-#include "base/files/file_descriptor_watcher_posix.h"
-#endif
-
-namespace base {
-
-namespace {
-
-const char kHelpFlag[] = "help";
-
-void PrintUsage() {
- fprintf(stdout,
- "Runs tests using the gtest framework, each batch of tests being\n"
- "run in their own process. Supported command-line flags:\n"
- "\n"
- " Common flags:\n"
- " --gtest_filter=...\n"
- " Runs a subset of tests (see --gtest_help for more info).\n"
- "\n"
- " --help\n"
- " Shows this message.\n"
- "\n"
- " Other flags:\n"
- " --test-launcher-retry-limit=N\n"
- " Sets the limit of test retries on failures to N.\n"
- "\n"
- " --test-launcher-summary-output=PATH\n"
- " Saves a JSON machine-readable summary of the run.\n"
- "\n"
- " --test-launcher-print-test-stdio=auto|always|never\n"
- " Controls when full test output is printed.\n"
- " auto means to print it when the test failed.\n"
- "\n"
- " --test-launcher-total-shards=N\n"
- " Sets the total number of shards to N.\n"
- "\n"
- " --test-launcher-shard-index=N\n"
- " Sets the shard index to run to N (from 0 to TOTAL - 1).\n");
- fflush(stdout);
-}
-
-class NonSfiUnitTestPlatformDelegate : public base::UnitTestPlatformDelegate {
- public:
- NonSfiUnitTestPlatformDelegate() = default;
-
- bool Init(const std::string& test_binary) {
- base::FilePath dir_exe;
- if (!PathService::Get(base::DIR_EXE, &dir_exe)) {
- LOG(ERROR) << "Failed to get directory of the current executable.";
- return false;
- }
-
- test_path_ = dir_exe.AppendASCII(test_binary);
- return true;
- }
-
- private:
- bool CreateResultsFile(base::FilePath* path) override {
- if (!base::CreateNewTempDirectory(base::FilePath::StringType(), path))
- return false;
- *path = path->AppendASCII("test_results.xml");
- return true;
- }
-
- bool CreateTemporaryFile(base::FilePath* path) override { return false; }
-
- bool GetTests(std::vector<base::TestIdentifier>* output) override {
- base::FilePath output_file;
- if (!base::CreateTemporaryFile(&output_file)) {
- LOG(ERROR) << "Failed to create a temp file.";
- return false;
- }
-
- base::CommandLine cmd_line(test_path_);
- cmd_line.AppendSwitchPath(switches::kTestLauncherListTests, output_file);
-
- base::LaunchOptions launch_options;
- launch_options.wait = true;
-
- if (!base::LaunchProcess(cmd_line, launch_options).IsValid())
- return false;
-
- return base::ReadTestNamesFromFile(output_file, output);
- }
-
- std::string GetWrapperForChildGTestProcess() override {
- return std::string();
- }
-
- base::CommandLine GetCommandLineForChildGTestProcess(
- const std::vector<std::string>& test_names,
- const base::FilePath& output_file,
- const base::FilePath& flag_file) override {
- base::CommandLine cmd_line(test_path_);
- cmd_line.AppendSwitchPath(
- switches::kTestLauncherOutput, output_file);
- cmd_line.AppendSwitchASCII(
- base::kGTestFilterFlag, base::JoinString(test_names, ":"));
- return cmd_line;
- }
-
- void RelaunchTests(base::TestLauncher* test_launcher,
- const std::vector<std::string>& test_names,
- int launch_flags) override {
- RunUnitTestsBatch(test_launcher, this, test_names, launch_flags);
- }
-
- base::FilePath test_path_;
-};
-
-} // namespace
-
-int TestLauncherNonSfiMain(const std::string& test_binary) {
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(kHelpFlag)) {
- PrintUsage();
- return 0;
- }
-
- base::TimeTicks start_time(base::TimeTicks::Now());
-
- TestTimeouts::Initialize();
-
- base::MessageLoopForIO message_loop;
-#if defined(OS_POSIX)
- FileDescriptorWatcher file_descriptor_watcher(&message_loop);
-#endif
-
- NonSfiUnitTestPlatformDelegate platform_delegate;
- if (!platform_delegate.Init(test_binary)) {
- fprintf(stderr, "Failed to initialize test launcher.\n");
- fflush(stderr);
- return 1;
- }
-
- base::UnitTestLauncherDelegate delegate(&platform_delegate, 10, true);
- base::TestLauncher launcher(&delegate, base::SysInfo::NumberOfProcessors());
- bool success = launcher.Run();
-
- fprintf(stdout, "Tests took %" PRId64 " seconds.\n",
- (base::TimeTicks::Now() - start_time).InSeconds());
- fflush(stdout);
- return success ? 0 : 1;
-}
-
-} // namespace base
diff --git a/base/test/launcher/test_launcher_nacl_nonsfi.h b/base/test/launcher/test_launcher_nacl_nonsfi.h
deleted file mode 100644
index 6cb3785..0000000
--- a/base/test/launcher/test_launcher_nacl_nonsfi.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_LAUNCHER_TEST_LAUNCHER_NACL_NONSFI_H_
-#define BASE_TEST_LAUNCHER_TEST_LAUNCHER_NACL_NONSFI_H_
-
-#include <string>
-
-namespace base {
-
-// Launches the NaCl Non-SFI test binary |test_binary|.
-int TestLauncherNonSfiMain(const std::string& test_binary);
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_TEST_LAUNCHER_NACL_NONSFI_H_
diff --git a/base/test/launcher/test_launcher_tracer.cc b/base/test/launcher/test_launcher_tracer.cc
deleted file mode 100644
index d525df7..0000000
--- a/base/test/launcher/test_launcher_tracer.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2016 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/test/launcher/test_launcher_tracer.h"
-
-#include "base/json/json_file_value_serializer.h"
-#include "base/strings/stringprintf.h"
-#include "base/values.h"
-
-namespace base {
-
-TestLauncherTracer::TestLauncherTracer()
- : trace_start_time_(TimeTicks::Now()) {}
-
-TestLauncherTracer::~TestLauncherTracer() = default;
-
-void TestLauncherTracer::RecordProcessExecution(TimeTicks start_time,
- TimeDelta duration) {
- AutoLock lock(lock_);
-
- Event event;
- event.name = StringPrintf("process #%zu", events_.size());
- event.timestamp = start_time;
- event.duration = duration;
- event.thread_id = PlatformThread::CurrentId();
- events_.push_back(event);
-}
-
-bool TestLauncherTracer::Dump(const FilePath& path) {
- AutoLock lock(lock_);
-
- std::unique_ptr<ListValue> json_events(new ListValue);
- for (const Event& event : events_) {
- std::unique_ptr<DictionaryValue> json_event(new DictionaryValue);
- json_event->SetString("name", event.name);
- json_event->SetString("ph", "X");
- json_event->SetInteger(
- "ts", (event.timestamp - trace_start_time_).InMicroseconds());
- json_event->SetInteger("dur", event.duration.InMicroseconds());
- json_event->SetInteger("tid", event.thread_id);
-
- // Add fake values required by the trace viewer.
- json_event->SetInteger("pid", 0);
-
- json_events->Append(std::move(json_event));
- }
-
- JSONFileValueSerializer serializer(path);
- return serializer.Serialize(*json_events);
-}
-
-} // namespace base
diff --git a/base/test/launcher/test_launcher_tracer.h b/base/test/launcher/test_launcher_tracer.h
deleted file mode 100644
index 58bc1b0..0000000
--- a/base/test/launcher/test_launcher_tracer.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_
-#define BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_
-
-#include <string>
-#include <vector>
-
-#include "base/synchronization/lock.h"
-#include "base/threading/platform_thread.h"
-#include "base/time/time.h"
-
-namespace base {
-
-class FilePath;
-
-// Records traces of test execution, e.g. to analyze performance.
-// Thread safe.
-class TestLauncherTracer {
- public:
- TestLauncherTracer();
- ~TestLauncherTracer();
-
- // Records an event corresponding to test process execution.
- void RecordProcessExecution(TimeTicks start_time, TimeDelta duration);
-
- // Dumps trace data as JSON. Returns true on success.
- bool Dump(const FilePath& path) WARN_UNUSED_RESULT;
-
- private:
- // Simplified version of base::TraceEvent.
- struct Event {
- std::string name; // Displayed name.
- TimeTicks timestamp; // Timestamp when this event began.
- TimeDelta duration; // How long was this event.
- PlatformThreadId thread_id; // Thread ID where event was reported.
- };
-
- // Timestamp when tracing started.
- TimeTicks trace_start_time_;
-
- // Log of trace events.
- std::vector<Event> events_;
-
- // Lock to protect all member variables.
- Lock lock_;
-
- DISALLOW_COPY_AND_ASSIGN(TestLauncherTracer);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_TEST_LAUNCHER_TRACER_H_
diff --git a/base/test/launcher/test_result.cc b/base/test/launcher/test_result.cc
deleted file mode 100644
index 9f37a2b..0000000
--- a/base/test/launcher/test_result.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2013 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/test/launcher/test_result.h"
-
-#include <stddef.h>
-
-#include "base/logging.h"
-
-namespace base {
-
-TestResultPart::TestResultPart() = default;
-TestResultPart::~TestResultPart() = default;
-
-TestResultPart::TestResultPart(const TestResultPart& other) = default;
-TestResultPart::TestResultPart(TestResultPart&& other) = default;
-TestResultPart& TestResultPart::operator=(const TestResultPart& other) =
- default;
-TestResultPart& TestResultPart::operator=(TestResultPart&& other) = default;
-
-// static
-bool TestResultPart::TypeFromString(const std::string& str, Type* type) {
- if (str == "success")
- *type = kSuccess;
- else if (str == "failure")
- *type = kNonFatalFailure;
- else if (str == "fatal_failure")
- *type = kFatalFailure;
- else
- return false;
- return true;
-}
-
-std::string TestResultPart::TypeAsString() const {
- switch (type) {
- case kSuccess:
- return "success";
- case kNonFatalFailure:
- return "failure";
- case kFatalFailure:
- return "fatal_failure";
- default:
- NOTREACHED();
- }
- return "unknown";
-}
-
-TestResult::TestResult() : status(TEST_UNKNOWN) {
-}
-
-TestResult::~TestResult() = default;
-
-TestResult::TestResult(const TestResult& other) = default;
-TestResult::TestResult(TestResult&& other) = default;
-TestResult& TestResult::operator=(const TestResult& other) = default;
-TestResult& TestResult::operator=(TestResult&& other) = default;
-
-std::string TestResult::StatusAsString() const {
- switch (status) {
- case TEST_UNKNOWN:
- return "UNKNOWN";
- case TEST_SUCCESS:
- return "SUCCESS";
- case TEST_FAILURE:
- return "FAILURE";
- case TEST_FAILURE_ON_EXIT:
- return "FAILURE_ON_EXIT";
- case TEST_CRASH:
- return "CRASH";
- case TEST_TIMEOUT:
- return "TIMEOUT";
- case TEST_SKIPPED:
- return "SKIPPED";
- case TEST_EXCESSIVE_OUTPUT:
- return "EXCESSIVE_OUTPUT";
- // Rely on compiler warnings to ensure all possible values are handled.
- }
-
- NOTREACHED();
- return std::string();
-}
-
-std::string TestResult::GetTestName() const {
- size_t dot_pos = full_name.find('.');
- CHECK_NE(dot_pos, std::string::npos);
- return full_name.substr(dot_pos + 1);
-}
-
-std::string TestResult::GetTestCaseName() const {
- size_t dot_pos = full_name.find('.');
- CHECK_NE(dot_pos, std::string::npos);
- return full_name.substr(0, dot_pos);
-}
-
-} // namespace base
diff --git a/base/test/launcher/test_result.h b/base/test/launcher/test_result.h
deleted file mode 100644
index 07338b3..0000000
--- a/base/test/launcher/test_result.h
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_LAUNCHER_TEST_RESULT_H_
-#define BASE_TEST_LAUNCHER_TEST_RESULT_H_
-
-#include <string>
-#include <vector>
-
-#include "base/time/time.h"
-
-namespace base {
-
-// Structure contains result of a single EXPECT/ASSERT/SUCCESS.
-struct TestResultPart {
- enum Type {
- kSuccess, // SUCCESS
- kNonFatalFailure, // EXPECT
- kFatalFailure, // ASSERT
- };
- Type type;
-
- TestResultPart();
- ~TestResultPart();
-
- TestResultPart(const TestResultPart& other);
- TestResultPart(TestResultPart&& other);
- TestResultPart& operator=(const TestResultPart& other);
- TestResultPart& operator=(TestResultPart&& other);
-
- // Convert type to string and back.
- static bool TypeFromString(const std::string& str, Type* type);
- std::string TypeAsString() const;
-
- // Filename and line of EXPECT/ASSERT.
- std::string file_name;
- int line_number;
-
- // Message without stacktrace, etc.
- std::string summary;
-
- // Complete message.
- std::string message;
-};
-
-// Structure containing result of a single test.
-struct TestResult {
- enum Status {
- TEST_UNKNOWN, // Status not set.
- TEST_SUCCESS, // Test passed.
- TEST_FAILURE, // Assertion failure (e.g. EXPECT_TRUE, not DCHECK).
- TEST_FAILURE_ON_EXIT, // Passed but executable exit code was non-zero.
- TEST_TIMEOUT, // Test timed out and was killed.
- TEST_CRASH, // Test crashed (includes CHECK/DCHECK failures).
- TEST_SKIPPED, // Test skipped (not run at all).
- TEST_EXCESSIVE_OUTPUT, // Test exceeded output limit.
- };
-
- TestResult();
- ~TestResult();
-
- TestResult(const TestResult& other);
- TestResult(TestResult&& other);
- TestResult& operator=(const TestResult& other);
- TestResult& operator=(TestResult&& other);
-
- // Returns the test status as string (e.g. for display).
- std::string StatusAsString() const;
-
- // Returns the test name (e.g. "B" for "A.B").
- std::string GetTestName() const;
-
- // Returns the test case name (e.g. "A" for "A.B").
- std::string GetTestCaseName() const;
-
- // Returns true if the test has completed (i.e. the test binary exited
- // normally, possibly with an exit code indicating failure, but didn't crash
- // or time out in the middle of the test).
- bool completed() const {
- return status == TEST_SUCCESS ||
- status == TEST_FAILURE ||
- status == TEST_FAILURE_ON_EXIT ||
- status == TEST_EXCESSIVE_OUTPUT;
- }
-
- // Full name of the test (e.g. "A.B").
- std::string full_name;
-
- Status status;
-
- // Time it took to run the test.
- base::TimeDelta elapsed_time;
-
- // Output of just this test (optional).
- std::string output_snippet;
-
- // Information about failed expectations.
- std::vector<TestResultPart> test_result_parts;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_TEST_RESULT_H_
diff --git a/base/test/launcher/test_results_tracker.cc b/base/test/launcher/test_results_tracker.cc
deleted file mode 100644
index a7e590c..0000000
--- a/base/test/launcher/test_results_tracker.cc
+++ /dev/null
@@ -1,541 +0,0 @@
-// Copyright 2013 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/test/launcher/test_results_tracker.h"
-
-#include <stddef.h>
-
-#include <memory>
-#include <utility>
-
-#include "base/base64.h"
-#include "base/command_line.h"
-#include "base/files/file.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/format_macros.h"
-#include "base/json/json_writer.h"
-#include "base/json/string_escape.h"
-#include "base/logging.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/test/gtest_util.h"
-#include "base/test/launcher/test_launcher.h"
-#include "base/time/time.h"
-#include "base/values.h"
-
-namespace base {
-
-namespace {
-
-// The default output file for XML output.
-const FilePath::CharType kDefaultOutputFile[] = FILE_PATH_LITERAL(
- "test_detail.xml");
-
-// Converts the given epoch time in milliseconds to a date string in the ISO
-// 8601 format, without the timezone information.
-// TODO(xyzzyz): Find a good place in Chromium to put it and refactor all uses
-// to point to it.
-std::string FormatTimeAsIso8601(Time time) {
- Time::Exploded exploded;
- time.UTCExplode(&exploded);
- return StringPrintf("%04d-%02d-%02dT%02d:%02d:%02d",
- exploded.year,
- exploded.month,
- exploded.day_of_month,
- exploded.hour,
- exploded.minute,
- exploded.second);
-}
-
-struct TestSuiteResultsAggregator {
- TestSuiteResultsAggregator()
- : tests(0), failures(0), disabled(0), errors(0) {}
-
- void Add(const TestResult& result) {
- tests++;
- elapsed_time += result.elapsed_time;
-
- switch (result.status) {
- case TestResult::TEST_SUCCESS:
- break;
- case TestResult::TEST_FAILURE:
- failures++;
- break;
- case TestResult::TEST_EXCESSIVE_OUTPUT:
- case TestResult::TEST_FAILURE_ON_EXIT:
- case TestResult::TEST_TIMEOUT:
- case TestResult::TEST_CRASH:
- case TestResult::TEST_UNKNOWN:
- errors++;
- break;
- case TestResult::TEST_SKIPPED:
- disabled++;
- break;
- }
- }
-
- int tests;
- int failures;
- int disabled;
- int errors;
-
- TimeDelta elapsed_time;
-};
-
-} // namespace
-
-TestResultsTracker::TestResultsTracker() : iteration_(-1), out_(nullptr) {}
-
-TestResultsTracker::~TestResultsTracker() {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- if (!out_)
- return;
-
- // Maps test case names to test results.
- typedef std::map<std::string, std::vector<TestResult> > TestCaseMap;
- TestCaseMap test_case_map;
-
- TestSuiteResultsAggregator all_tests_aggregator;
- for (const PerIterationData::ResultsMap::value_type& i
- : per_iteration_data_[iteration_].results) {
- // Use the last test result as the final one.
- TestResult result = i.second.test_results.back();
- test_case_map[result.GetTestCaseName()].push_back(result);
- all_tests_aggregator.Add(result);
- }
-
- fprintf(out_, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- fprintf(out_,
- "<testsuites name=\"AllTests\" tests=\"%d\" failures=\"%d\""
- " disabled=\"%d\" errors=\"%d\" time=\"%.3f\" timestamp=\"%s\">\n",
- all_tests_aggregator.tests, all_tests_aggregator.failures,
- all_tests_aggregator.disabled, all_tests_aggregator.errors,
- all_tests_aggregator.elapsed_time.InSecondsF(),
- FormatTimeAsIso8601(Time::Now()).c_str());
-
- for (const TestCaseMap::value_type& i : test_case_map) {
- const std::string testsuite_name = i.first;
- const std::vector<TestResult>& results = i.second;
-
- TestSuiteResultsAggregator aggregator;
- for (const TestResult& result : results) {
- aggregator.Add(result);
- }
- fprintf(out_,
- " <testsuite name=\"%s\" tests=\"%d\" "
- "failures=\"%d\" disabled=\"%d\" errors=\"%d\" time=\"%.3f\" "
- "timestamp=\"%s\">\n",
- testsuite_name.c_str(), aggregator.tests, aggregator.failures,
- aggregator.disabled, aggregator.errors,
- aggregator.elapsed_time.InSecondsF(),
- FormatTimeAsIso8601(Time::Now()).c_str());
-
- for (const TestResult& result : results) {
- fprintf(out_, " <testcase name=\"%s\" status=\"run\" time=\"%.3f\""
- " classname=\"%s\">\n",
- result.GetTestName().c_str(),
- result.elapsed_time.InSecondsF(),
- result.GetTestCaseName().c_str());
- if (result.status != TestResult::TEST_SUCCESS) {
- // The actual failure message is not propagated up to here, as it's too
- // much work to escape it properly, and in case of failure, almost
- // always one needs to look into full log anyway.
- fprintf(out_, " <failure message=\"\" type=\"\"></failure>\n");
- }
- fprintf(out_, " </testcase>\n");
- }
- fprintf(out_, " </testsuite>\n");
- }
-
- fprintf(out_, "</testsuites>\n");
- fclose(out_);
-}
-
-bool TestResultsTracker::Init(const CommandLine& command_line) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // Prevent initializing twice.
- if (out_) {
- NOTREACHED();
- return false;
- }
-
- if (!command_line.HasSwitch(kGTestOutputFlag))
- return true;
-
- std::string flag = command_line.GetSwitchValueASCII(kGTestOutputFlag);
- size_t colon_pos = flag.find(':');
- FilePath path;
- if (colon_pos != std::string::npos) {
- FilePath flag_path =
- command_line.GetSwitchValuePath(kGTestOutputFlag);
- FilePath::StringType path_string = flag_path.value();
- path = FilePath(path_string.substr(colon_pos + 1));
- // If the given path ends with '/', consider it is a directory.
- // Note: This does NOT check that a directory (or file) actually exists
- // (the behavior is same as what gtest does).
- if (path.EndsWithSeparator()) {
- FilePath executable = command_line.GetProgram().BaseName();
- path = path.Append(executable.ReplaceExtension(
- FilePath::StringType(FILE_PATH_LITERAL("xml"))));
- }
- }
- if (path.value().empty())
- path = FilePath(kDefaultOutputFile);
- FilePath dir_name = path.DirName();
- if (!DirectoryExists(dir_name)) {
- LOG(WARNING) << "The output directory does not exist. "
- << "Creating the directory: " << dir_name.value();
- // Create the directory if necessary (because the gtest does the same).
- if (!CreateDirectory(dir_name)) {
- LOG(ERROR) << "Failed to created directory " << dir_name.value();
- return false;
- }
- }
- out_ = OpenFile(path, "w");
- if (!out_) {
- LOG(ERROR) << "Cannot open output file: "
- << path.value() << ".";
- return false;
- }
-
- return true;
-}
-
-void TestResultsTracker::OnTestIterationStarting() {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // Start with a fresh state for new iteration.
- iteration_++;
- per_iteration_data_.push_back(PerIterationData());
-}
-
-void TestResultsTracker::AddTest(const std::string& test_name) {
- // Record disabled test names without DISABLED_ prefix so that they are easy
- // to compare with regular test names, e.g. before or after disabling.
- all_tests_.insert(TestNameWithoutDisabledPrefix(test_name));
-}
-
-void TestResultsTracker::AddDisabledTest(const std::string& test_name) {
- // Record disabled test names without DISABLED_ prefix so that they are easy
- // to compare with regular test names, e.g. before or after disabling.
- disabled_tests_.insert(TestNameWithoutDisabledPrefix(test_name));
-}
-
-void TestResultsTracker::AddTestLocation(const std::string& test_name,
- const std::string& file,
- int line) {
- test_locations_.insert(std::make_pair(test_name, CodeLocation(file, line)));
-}
-
-void TestResultsTracker::AddTestResult(const TestResult& result) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // Record disabled test names without DISABLED_ prefix so that they are easy
- // to compare with regular test names, e.g. before or after disabling.
- per_iteration_data_[iteration_].results[
- TestNameWithoutDisabledPrefix(result.full_name)].test_results.push_back(
- result);
-}
-
-void TestResultsTracker::PrintSummaryOfCurrentIteration() const {
- TestStatusMap tests_by_status(GetTestStatusMapForCurrentIteration());
-
- PrintTests(tests_by_status[TestResult::TEST_FAILURE].begin(),
- tests_by_status[TestResult::TEST_FAILURE].end(),
- "failed");
- PrintTests(tests_by_status[TestResult::TEST_FAILURE_ON_EXIT].begin(),
- tests_by_status[TestResult::TEST_FAILURE_ON_EXIT].end(),
- "failed on exit");
- PrintTests(tests_by_status[TestResult::TEST_EXCESSIVE_OUTPUT].begin(),
- tests_by_status[TestResult::TEST_EXCESSIVE_OUTPUT].end(),
- "produced excessive output");
- PrintTests(tests_by_status[TestResult::TEST_TIMEOUT].begin(),
- tests_by_status[TestResult::TEST_TIMEOUT].end(),
- "timed out");
- PrintTests(tests_by_status[TestResult::TEST_CRASH].begin(),
- tests_by_status[TestResult::TEST_CRASH].end(),
- "crashed");
- PrintTests(tests_by_status[TestResult::TEST_SKIPPED].begin(),
- tests_by_status[TestResult::TEST_SKIPPED].end(),
- "skipped");
- PrintTests(tests_by_status[TestResult::TEST_UNKNOWN].begin(),
- tests_by_status[TestResult::TEST_UNKNOWN].end(),
- "had unknown result");
-}
-
-void TestResultsTracker::PrintSummaryOfAllIterations() const {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- TestStatusMap tests_by_status(GetTestStatusMapForAllIterations());
-
- fprintf(stdout, "Summary of all test iterations:\n");
- fflush(stdout);
-
- PrintTests(tests_by_status[TestResult::TEST_FAILURE].begin(),
- tests_by_status[TestResult::TEST_FAILURE].end(),
- "failed");
- PrintTests(tests_by_status[TestResult::TEST_FAILURE_ON_EXIT].begin(),
- tests_by_status[TestResult::TEST_FAILURE_ON_EXIT].end(),
- "failed on exit");
- PrintTests(tests_by_status[TestResult::TEST_EXCESSIVE_OUTPUT].begin(),
- tests_by_status[TestResult::TEST_EXCESSIVE_OUTPUT].end(),
- "produced excessive output");
- PrintTests(tests_by_status[TestResult::TEST_TIMEOUT].begin(),
- tests_by_status[TestResult::TEST_TIMEOUT].end(),
- "timed out");
- PrintTests(tests_by_status[TestResult::TEST_CRASH].begin(),
- tests_by_status[TestResult::TEST_CRASH].end(),
- "crashed");
- PrintTests(tests_by_status[TestResult::TEST_SKIPPED].begin(),
- tests_by_status[TestResult::TEST_SKIPPED].end(),
- "skipped");
- PrintTests(tests_by_status[TestResult::TEST_UNKNOWN].begin(),
- tests_by_status[TestResult::TEST_UNKNOWN].end(),
- "had unknown result");
-
- fprintf(stdout, "End of the summary.\n");
- fflush(stdout);
-}
-
-void TestResultsTracker::AddGlobalTag(const std::string& tag) {
- global_tags_.insert(tag);
-}
-
-bool TestResultsTracker::SaveSummaryAsJSON(
- const FilePath& path,
- const std::vector<std::string>& additional_tags) const {
- std::unique_ptr<DictionaryValue> summary_root(new DictionaryValue);
-
- std::unique_ptr<ListValue> global_tags(new ListValue);
- for (const auto& global_tag : global_tags_) {
- global_tags->AppendString(global_tag);
- }
- for (const auto& tag : additional_tags) {
- global_tags->AppendString(tag);
- }
- summary_root->Set("global_tags", std::move(global_tags));
-
- std::unique_ptr<ListValue> all_tests(new ListValue);
- for (const auto& test : all_tests_) {
- all_tests->AppendString(test);
- }
- summary_root->Set("all_tests", std::move(all_tests));
-
- std::unique_ptr<ListValue> disabled_tests(new ListValue);
- for (const auto& disabled_test : disabled_tests_) {
- disabled_tests->AppendString(disabled_test);
- }
- summary_root->Set("disabled_tests", std::move(disabled_tests));
-
- std::unique_ptr<ListValue> per_iteration_data(new ListValue);
-
- for (int i = 0; i <= iteration_; i++) {
- std::unique_ptr<DictionaryValue> current_iteration_data(
- new DictionaryValue);
-
- for (PerIterationData::ResultsMap::const_iterator j =
- per_iteration_data_[i].results.begin();
- j != per_iteration_data_[i].results.end();
- ++j) {
- std::unique_ptr<ListValue> test_results(new ListValue);
-
- for (size_t k = 0; k < j->second.test_results.size(); k++) {
- const TestResult& test_result = j->second.test_results[k];
-
- std::unique_ptr<DictionaryValue> test_result_value(new DictionaryValue);
-
- test_result_value->SetString("status", test_result.StatusAsString());
- test_result_value->SetInteger(
- "elapsed_time_ms",
- static_cast<int>(test_result.elapsed_time.InMilliseconds()));
-
- bool lossless_snippet = false;
- if (IsStringUTF8(test_result.output_snippet)) {
- test_result_value->SetString(
- "output_snippet", test_result.output_snippet);
- lossless_snippet = true;
- } else {
- test_result_value->SetString(
- "output_snippet",
- "<non-UTF-8 snippet, see output_snippet_base64>");
- }
-
- // TODO(phajdan.jr): Fix typo in JSON key (losless -> lossless)
- // making sure not to break any consumers of this data.
- test_result_value->SetBoolean("losless_snippet", lossless_snippet);
-
- // Also include the raw version (base64-encoded so that it can be safely
- // JSON-serialized - there are no guarantees about character encoding
- // of the snippet). This can be very useful piece of information when
- // debugging a test failure related to character encoding.
- std::string base64_output_snippet;
- Base64Encode(test_result.output_snippet, &base64_output_snippet);
- test_result_value->SetString("output_snippet_base64",
- base64_output_snippet);
-
- std::unique_ptr<ListValue> test_result_parts(new ListValue);
- for (const TestResultPart& result_part :
- test_result.test_result_parts) {
- std::unique_ptr<DictionaryValue> result_part_value(
- new DictionaryValue);
- result_part_value->SetString("type", result_part.TypeAsString());
- result_part_value->SetString("file", result_part.file_name);
- result_part_value->SetInteger("line", result_part.line_number);
-
- bool lossless_summary = IsStringUTF8(result_part.summary);
- if (lossless_summary) {
- result_part_value->SetString("summary", result_part.summary);
- } else {
- result_part_value->SetString(
- "summary", "<non-UTF-8 snippet, see summary_base64>");
- }
- result_part_value->SetBoolean("lossless_summary", lossless_summary);
-
- std::string encoded_summary;
- Base64Encode(result_part.summary, &encoded_summary);
- result_part_value->SetString("summary_base64", encoded_summary);
-
- bool lossless_message = IsStringUTF8(result_part.message);
- if (lossless_message) {
- result_part_value->SetString("message", result_part.message);
- } else {
- result_part_value->SetString(
- "message", "<non-UTF-8 snippet, see message_base64>");
- }
- result_part_value->SetBoolean("lossless_message", lossless_message);
-
- std::string encoded_message;
- Base64Encode(result_part.message, &encoded_message);
- result_part_value->SetString("message_base64", encoded_message);
-
- test_result_parts->Append(std::move(result_part_value));
- }
- test_result_value->Set("result_parts", std::move(test_result_parts));
-
- test_results->Append(std::move(test_result_value));
- }
-
- current_iteration_data->SetWithoutPathExpansion(j->first,
- std::move(test_results));
- }
- per_iteration_data->Append(std::move(current_iteration_data));
- }
- summary_root->Set("per_iteration_data", std::move(per_iteration_data));
-
- std::unique_ptr<DictionaryValue> test_locations(new DictionaryValue);
- for (const auto& item : test_locations_) {
- std::string test_name = item.first;
- CodeLocation location = item.second;
- std::unique_ptr<DictionaryValue> location_value(new DictionaryValue);
- location_value->SetString("file", location.file);
- location_value->SetInteger("line", location.line);
- test_locations->SetWithoutPathExpansion(test_name,
- std::move(location_value));
- }
- summary_root->Set("test_locations", std::move(test_locations));
-
- std::string json;
- if (!JSONWriter::Write(*summary_root, &json))
- return false;
-
- File output(path, File::FLAG_CREATE_ALWAYS | File::FLAG_WRITE);
- if (!output.IsValid())
- return false;
-
- int json_size = static_cast<int>(json.size());
- if (output.WriteAtCurrentPos(json.data(), json_size) != json_size) {
- return false;
- }
-
- // File::Flush() will call fsync(). This is important on Fuchsia to ensure
- // that the file is written to the disk - the system running under qemu will
- // shutdown shortly after the test completes. On Fuchsia fsync() times out
- // after 15 seconds. Apparently this may not be enough in some cases,
- // particularly when running net_unittests on buildbots, see
- // https://crbug.com/796318. Try calling fsync() more than once to workaround
- // this issue.
- //
- // TODO(sergeyu): Figure out a better solution.
- int flush_attempts_left = 4;
- while (flush_attempts_left-- > 0) {
- if (output.Flush())
- return true;
- LOG(ERROR) << "fsync() failed when saving test output summary. "
- << ((flush_attempts_left > 0) ? "Retrying." : " Giving up.");
- }
-
- return false;
-}
-
-TestResultsTracker::TestStatusMap
- TestResultsTracker::GetTestStatusMapForCurrentIteration() const {
- TestStatusMap tests_by_status;
- GetTestStatusForIteration(iteration_, &tests_by_status);
- return tests_by_status;
-}
-
-TestResultsTracker::TestStatusMap
- TestResultsTracker::GetTestStatusMapForAllIterations() const {
- TestStatusMap tests_by_status;
- for (int i = 0; i <= iteration_; i++)
- GetTestStatusForIteration(i, &tests_by_status);
- return tests_by_status;
-}
-
-void TestResultsTracker::GetTestStatusForIteration(
- int iteration, TestStatusMap* map) const {
- for (PerIterationData::ResultsMap::const_iterator j =
- per_iteration_data_[iteration].results.begin();
- j != per_iteration_data_[iteration].results.end();
- ++j) {
- // Use the last test result as the final one.
- const TestResult& result = j->second.test_results.back();
- (*map)[result.status].insert(result.full_name);
- }
-}
-
-// Utility function to print a list of test names. Uses iterator to be
-// compatible with different containers, like vector and set.
-template<typename InputIterator>
-void TestResultsTracker::PrintTests(InputIterator first,
- InputIterator last,
- const std::string& description) const {
- size_t count = std::distance(first, last);
- if (count == 0)
- return;
-
- fprintf(stdout,
- "%" PRIuS " test%s %s:\n",
- count,
- count != 1 ? "s" : "",
- description.c_str());
- for (InputIterator it = first; it != last; ++it) {
- const std::string& test_name = *it;
- const auto location_it = test_locations_.find(test_name);
- DCHECK(location_it != test_locations_.end()) << test_name;
- const CodeLocation& location = location_it->second;
- fprintf(stdout, " %s (%s:%d)\n", test_name.c_str(),
- location.file.c_str(), location.line);
- }
- fflush(stdout);
-}
-
-TestResultsTracker::AggregateTestResult::AggregateTestResult() = default;
-
-TestResultsTracker::AggregateTestResult::AggregateTestResult(
- const AggregateTestResult& other) = default;
-
-TestResultsTracker::AggregateTestResult::~AggregateTestResult() = default;
-
-TestResultsTracker::PerIterationData::PerIterationData() = default;
-
-TestResultsTracker::PerIterationData::PerIterationData(
- const PerIterationData& other) = default;
-
-TestResultsTracker::PerIterationData::~PerIterationData() = default;
-
-} // namespace base
diff --git a/base/test/launcher/test_results_tracker.h b/base/test/launcher/test_results_tracker.h
deleted file mode 100644
index d89821d..0000000
--- a/base/test/launcher/test_results_tracker.h
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_
-#define BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_
-
-#include <map>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/test/launcher/test_result.h"
-#include "base/threading/thread_checker.h"
-
-namespace base {
-
-class CommandLine;
-class FilePath;
-
-// A helper class to output results.
-// Note: as currently XML is the only supported format by gtest, we don't
-// check output format (e.g. "xml:" prefix) here and output an XML file
-// unconditionally.
-// Note: we don't output per-test-case or total summary info like
-// total failed_test_count, disabled_test_count, elapsed_time and so on.
-// Only each test (testcase element in the XML) will have the correct
-// failed/disabled/elapsed_time information. Each test won't include
-// detailed failure messages either.
-class TestResultsTracker {
- public:
- TestResultsTracker();
- ~TestResultsTracker();
-
- // Initialize the result tracker. Must be called exactly once before
- // calling any other methods. Returns true on success.
- bool Init(const CommandLine& command_line) WARN_UNUSED_RESULT;
-
- // Called when a test iteration is starting.
- void OnTestIterationStarting();
-
- // Adds |test_name| to the set of discovered tests (this includes all tests
- // present in the executable, not necessarily run).
- void AddTest(const std::string& test_name);
-
- // Adds |test_name| to the set of disabled tests.
- void AddDisabledTest(const std::string& test_name);
-
- // Adds location for the |test_name|.
- void AddTestLocation(const std::string& test_name,
- const std::string& file,
- int line);
-
- // Adds |result| to the stored test results.
- void AddTestResult(const TestResult& result);
-
- // Prints a summary of current test iteration to stdout.
- void PrintSummaryOfCurrentIteration() const;
-
- // Prints a summary of all test iterations (not just the last one) to stdout.
- void PrintSummaryOfAllIterations() const;
-
- // Adds a string tag to the JSON summary. This is intended to indicate
- // conditions that affect the entire test run, as opposed to individual tests.
- void AddGlobalTag(const std::string& tag);
-
- // Saves a JSON summary of all test iterations results to |path|. Adds
- // |additional_tags| to the summary (just for this invocation). Returns
- // true on success.
- bool SaveSummaryAsJSON(
- const FilePath& path,
- const std::vector<std::string>& additional_tags) const WARN_UNUSED_RESULT;
-
- // Map where keys are test result statuses, and values are sets of tests
- // which finished with that status.
- typedef std::map<TestResult::Status, std::set<std::string> > TestStatusMap;
-
- // Returns a test status map (see above) for current test iteration.
- TestStatusMap GetTestStatusMapForCurrentIteration() const;
-
- // Returns a test status map (see above) for all test iterations.
- TestStatusMap GetTestStatusMapForAllIterations() const;
-
- private:
- void GetTestStatusForIteration(int iteration, TestStatusMap* map) const;
-
- template<typename InputIterator>
- void PrintTests(InputIterator first,
- InputIterator last,
- const std::string& description) const;
-
- struct AggregateTestResult {
- AggregateTestResult();
- AggregateTestResult(const AggregateTestResult& other);
- ~AggregateTestResult();
-
- std::vector<TestResult> test_results;
- };
-
- struct PerIterationData {
- PerIterationData();
- PerIterationData(const PerIterationData& other);
- ~PerIterationData();
-
- // Aggregate test results grouped by full test name.
- typedef std::map<std::string, AggregateTestResult> ResultsMap;
- ResultsMap results;
- };
-
- struct CodeLocation {
- CodeLocation(const std::string& f, int l) : file(f), line(l) {
- }
-
- std::string file;
- int line;
- };
-
- ThreadChecker thread_checker_;
-
- // Set of global tags, i.e. strings indicating conditions that apply to
- // the entire test run.
- std::set<std::string> global_tags_;
-
- // Set of all test names discovered in the current executable.
- std::set<std::string> all_tests_;
-
- std::map<std::string, CodeLocation> test_locations_;
-
- // Set of all disabled tests in the current executable.
- std::set<std::string> disabled_tests_;
-
- // Store test results for each iteration.
- std::vector<PerIterationData> per_iteration_data_;
-
- // Index of current iteration (starting from 0). -1 before the first
- // iteration.
- int iteration_;
-
- // File handle of output file (can be NULL if no file).
- FILE* out_;
-
- DISALLOW_COPY_AND_ASSIGN(TestResultsTracker);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_TEST_RESULTS_TRACKER_H_
diff --git a/base/test/launcher/unit_test_launcher.cc b/base/test/launcher/unit_test_launcher.cc
deleted file mode 100644
index 230ecc3..0000000
--- a/base/test/launcher/unit_test_launcher.cc
+++ /dev/null
@@ -1,750 +0,0 @@
-// Copyright 2013 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/test/launcher/unit_test_launcher.h"
-
-#include <map>
-#include <memory>
-#include <utility>
-
-#include "base/base_switches.h"
-#include "base/bind.h"
-#include "base/callback_helpers.h"
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/debug/debugger.h"
-#include "base/files/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/format_macros.h"
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/sequence_checker.h"
-#include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-#include "base/sys_info.h"
-#include "base/test/gtest_xml_util.h"
-#include "base/test/launcher/test_launcher.h"
-#include "base/test/test_switches.h"
-#include "base/test/test_timeouts.h"
-#include "base/third_party/dynamic_annotations/dynamic_annotations.h"
-#include "base/threading/thread_checker.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#if defined(OS_POSIX)
-#include "base/files/file_descriptor_watcher_posix.h"
-#endif
-
-namespace base {
-
-namespace {
-
-// This constant controls how many tests are run in a single batch by default.
-const size_t kDefaultTestBatchLimit = 10;
-
-const char kHelpFlag[] = "help";
-
-// Flag to run all tests in a single process.
-const char kSingleProcessTestsFlag[] = "single-process-tests";
-
-void PrintUsage() {
- fprintf(stdout,
- "Runs tests using the gtest framework, each batch of tests being\n"
- "run in their own process. Supported command-line flags:\n"
- "\n"
- " Common flags:\n"
- " --gtest_filter=...\n"
- " Runs a subset of tests (see --gtest_help for more info).\n"
- "\n"
- " --help\n"
- " Shows this message.\n"
- "\n"
- " --gtest_help\n"
- " Shows the gtest help message.\n"
- "\n"
- " --test-launcher-jobs=N\n"
- " Sets the number of parallel test jobs to N.\n"
- "\n"
- " --single-process-tests\n"
- " Runs the tests and the launcher in the same process. Useful\n"
- " for debugging a specific test in a debugger.\n"
- "\n"
- " Other flags:\n"
- " --test-launcher-filter-file=PATH\n"
- " Like --gtest_filter, but read the test filter from PATH.\n"
- " One pattern per line; lines starting with '-' are exclusions.\n"
- " See also //testing/buildbot/filters/README.md file.\n"
- "\n"
- " --test-launcher-batch-limit=N\n"
- " Sets the limit of test batch to run in a single process to N.\n"
- "\n"
- " --test-launcher-debug-launcher\n"
- " Disables autodetection of debuggers and similar tools,\n"
- " making it possible to use them to debug launcher itself.\n"
- "\n"
- " --test-launcher-retry-limit=N\n"
- " Sets the limit of test retries on failures to N.\n"
- "\n"
- " --test-launcher-summary-output=PATH\n"
- " Saves a JSON machine-readable summary of the run.\n"
- "\n"
- " --test-launcher-print-test-stdio=auto|always|never\n"
- " Controls when full test output is printed.\n"
- " auto means to print it when the test failed.\n"
- "\n"
- " --test-launcher-test-part-results-limit=N\n"
- " Sets the limit of failed EXPECT/ASSERT entries in the xml and\n"
- " JSON outputs per test to N (default N=10). Negative value \n"
- " will disable this limit.\n"
- "\n"
- " --test-launcher-total-shards=N\n"
- " Sets the total number of shards to N.\n"
- "\n"
- " --test-launcher-shard-index=N\n"
- " Sets the shard index to run to N (from 0 to TOTAL - 1).\n");
- fflush(stdout);
-}
-
-class DefaultUnitTestPlatformDelegate : public UnitTestPlatformDelegate {
- public:
- DefaultUnitTestPlatformDelegate() = default;
-
- private:
- // UnitTestPlatformDelegate:
- bool GetTests(std::vector<TestIdentifier>* output) override {
- *output = GetCompiledInTests();
- return true;
- }
-
- bool CreateResultsFile(base::FilePath* path) override {
- if (!CreateNewTempDirectory(FilePath::StringType(), path))
- return false;
- *path = path->AppendASCII("test_results.xml");
- return true;
- }
-
- bool CreateTemporaryFile(base::FilePath* path) override {
- if (!temp_dir_.IsValid() && !temp_dir_.CreateUniqueTempDir())
- return false;
- return CreateTemporaryFileInDir(temp_dir_.GetPath(), path);
- }
-
- CommandLine GetCommandLineForChildGTestProcess(
- const std::vector<std::string>& test_names,
- const base::FilePath& output_file,
- const base::FilePath& flag_file) override {
- CommandLine new_cmd_line(*CommandLine::ForCurrentProcess());
-
- CHECK(base::PathExists(flag_file));
-
- std::string long_flags(
- std::string("--") + kGTestFilterFlag + "=" +
- JoinString(test_names, ":"));
- CHECK_EQ(static_cast<int>(long_flags.size()),
- WriteFile(flag_file, long_flags.data(),
- static_cast<int>(long_flags.size())));
-
- new_cmd_line.AppendSwitchPath(switches::kTestLauncherOutput, output_file);
- new_cmd_line.AppendSwitchPath(kGTestFlagfileFlag, flag_file);
- new_cmd_line.AppendSwitch(kSingleProcessTestsFlag);
-
- return new_cmd_line;
- }
-
- std::string GetWrapperForChildGTestProcess() override {
- return std::string();
- }
-
- void RelaunchTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names,
- int launch_flags) override {
- // Relaunch requested tests in parallel, but only use single
- // test per batch for more precise results (crashes, etc).
- for (const std::string& test_name : test_names) {
- std::vector<std::string> batch;
- batch.push_back(test_name);
- RunUnitTestsBatch(test_launcher, this, batch, launch_flags);
- }
- }
-
- ScopedTempDir temp_dir_;
-
- DISALLOW_COPY_AND_ASSIGN(DefaultUnitTestPlatformDelegate);
-};
-
-bool GetSwitchValueAsInt(const std::string& switch_name, int* result) {
- if (!CommandLine::ForCurrentProcess()->HasSwitch(switch_name))
- return true;
-
- std::string switch_value =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switch_name);
- if (!StringToInt(switch_value, result) || *result < 0) {
- LOG(ERROR) << "Invalid value for " << switch_name << ": " << switch_value;
- return false;
- }
-
- return true;
-}
-
-int LaunchUnitTestsInternal(RunTestSuiteCallback run_test_suite,
- size_t parallel_jobs,
- int default_batch_limit,
- bool use_job_objects,
- OnceClosure gtest_init) {
-#if defined(OS_ANDROID)
- // We can't easily fork on Android, just run the test suite directly.
- return std::move(run_test_suite).Run();
-#else
- bool force_single_process = false;
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherDebugLauncher)) {
- fprintf(stdout, "Forcing test launcher debugging mode.\n");
- fflush(stdout);
- } else {
- if (base::debug::BeingDebugged()) {
- fprintf(stdout,
- "Debugger detected, switching to single process mode.\n"
- "Pass --test-launcher-debug-launcher to debug the launcher "
- "itself.\n");
- fflush(stdout);
- force_single_process = true;
- }
- }
-
- if (CommandLine::ForCurrentProcess()->HasSwitch(kGTestHelpFlag) ||
- CommandLine::ForCurrentProcess()->HasSwitch(kGTestListTestsFlag) ||
- CommandLine::ForCurrentProcess()->HasSwitch(kSingleProcessTestsFlag) ||
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestChildProcess) ||
- force_single_process) {
- return std::move(run_test_suite).Run();
- }
-#endif
-
- if (CommandLine::ForCurrentProcess()->HasSwitch(kHelpFlag)) {
- PrintUsage();
- return 0;
- }
-
- TimeTicks start_time(TimeTicks::Now());
-
- std::move(gtest_init).Run();
- TestTimeouts::Initialize();
-
- int batch_limit = default_batch_limit;
- if (!GetSwitchValueAsInt(switches::kTestLauncherBatchLimit, &batch_limit))
- return 1;
-
- fprintf(stdout,
- "IMPORTANT DEBUGGING NOTE: batches of tests are run inside their\n"
- "own process. For debugging a test inside a debugger, use the\n"
- "--gtest_filter=<your_test_name> flag along with\n"
- "--single-process-tests.\n");
- fflush(stdout);
-
- MessageLoopForIO message_loop;
-#if defined(OS_POSIX)
- FileDescriptorWatcher file_descriptor_watcher(&message_loop);
-#endif
-
- DefaultUnitTestPlatformDelegate platform_delegate;
- UnitTestLauncherDelegate delegate(
- &platform_delegate, batch_limit, use_job_objects);
- TestLauncher launcher(&delegate, parallel_jobs);
- bool success = launcher.Run();
-
- fprintf(stdout, "Tests took %" PRId64 " seconds.\n",
- (TimeTicks::Now() - start_time).InSeconds());
- fflush(stdout);
-
- return (success ? 0 : 1);
-}
-
-void InitGoogleTestChar(int* argc, char** argv) {
- testing::InitGoogleTest(argc, argv);
-}
-
-#if defined(OS_WIN)
-void InitGoogleTestWChar(int* argc, wchar_t** argv) {
- testing::InitGoogleTest(argc, argv);
-}
-#endif // defined(OS_WIN)
-
-// Interprets test results and reports to the test launcher. Returns true
-// on success.
-bool ProcessTestResults(
- TestLauncher* test_launcher,
- const std::vector<std::string>& test_names,
- const base::FilePath& output_file,
- const std::string& output,
- int exit_code,
- bool was_timeout,
- std::vector<std::string>* tests_to_relaunch) {
- std::vector<TestResult> test_results;
- bool crashed = false;
- bool have_test_results =
- ProcessGTestOutput(output_file, &test_results, &crashed);
-
- bool called_any_callback = false;
-
- if (have_test_results) {
- // TODO(phajdan.jr): Check for duplicates and mismatches between
- // the results we got from XML file and tests we intended to run.
- std::map<std::string, TestResult> results_map;
- for (size_t i = 0; i < test_results.size(); i++)
- results_map[test_results[i].full_name] = test_results[i];
-
- bool had_interrupted_test = false;
-
- // Results to be reported back to the test launcher.
- std::vector<TestResult> final_results;
-
- for (size_t i = 0; i < test_names.size(); i++) {
- if (ContainsKey(results_map, test_names[i])) {
- TestResult test_result = results_map[test_names[i]];
- if (test_result.status == TestResult::TEST_CRASH) {
- had_interrupted_test = true;
-
- if (was_timeout) {
- // Fix up the test status: we forcibly kill the child process
- // after the timeout, so from XML results it looks just like
- // a crash.
- test_result.status = TestResult::TEST_TIMEOUT;
- }
- } else if (test_result.status == TestResult::TEST_SUCCESS ||
- test_result.status == TestResult::TEST_FAILURE) {
- // We run multiple tests in a batch with a timeout applied
- // to the entire batch. It is possible that with other tests
- // running quickly some tests take longer than the per-test timeout.
- // For consistent handling of tests independent of order and other
- // factors, mark them as timing out.
- if (test_result.elapsed_time >
- TestTimeouts::test_launcher_timeout()) {
- test_result.status = TestResult::TEST_TIMEOUT;
- }
- }
- test_result.output_snippet = GetTestOutputSnippet(test_result, output);
- final_results.push_back(test_result);
- } else if (had_interrupted_test) {
- tests_to_relaunch->push_back(test_names[i]);
- } else {
- // TODO(phajdan.jr): Explicitly pass the info that the test didn't
- // run for a mysterious reason.
- LOG(ERROR) << "no test result for " << test_names[i];
- TestResult test_result;
- test_result.full_name = test_names[i];
- test_result.status = TestResult::TEST_UNKNOWN;
- test_result.output_snippet = GetTestOutputSnippet(test_result, output);
- final_results.push_back(test_result);
- }
- }
-
- // TODO(phajdan.jr): Handle the case where processing XML output
- // indicates a crash but none of the test results is marked as crashing.
-
- if (final_results.empty())
- return false;
-
- bool has_non_success_test = false;
- for (size_t i = 0; i < final_results.size(); i++) {
- if (final_results[i].status != TestResult::TEST_SUCCESS) {
- has_non_success_test = true;
- break;
- }
- }
-
- if (!has_non_success_test && exit_code != 0) {
- // This is a bit surprising case: all tests are marked as successful,
- // but the exit code was not zero. This can happen e.g. under memory
- // tools that report leaks this way. Mark all tests as a failure on exit,
- // and for more precise info they'd need to be retried serially.
- for (size_t i = 0; i < final_results.size(); i++)
- final_results[i].status = TestResult::TEST_FAILURE_ON_EXIT;
- }
-
- for (size_t i = 0; i < final_results.size(); i++) {
- // Fix the output snippet after possible changes to the test result.
- final_results[i].output_snippet =
- GetTestOutputSnippet(final_results[i], output);
- test_launcher->OnTestFinished(final_results[i]);
- called_any_callback = true;
- }
- } else {
- fprintf(stdout,
- "Failed to get out-of-band test success data, "
- "dumping full stdio below:\n%s\n",
- output.c_str());
- fflush(stdout);
-
- // We do not have reliable details about test results (parsing test
- // stdout is known to be unreliable).
- if (test_names.size() == 1) {
- // There is only one test. Try to determine status by exit code.
- const std::string& test_name = test_names.front();
- TestResult test_result;
- test_result.full_name = test_name;
-
- if (was_timeout) {
- test_result.status = TestResult::TEST_TIMEOUT;
- } else if (exit_code != 0) {
- test_result.status = TestResult::TEST_FAILURE;
- } else {
- // It's strange case when test executed successfully,
- // but we failed to read machine-readable report for it.
- test_result.status = TestResult::TEST_UNKNOWN;
- }
-
- test_launcher->OnTestFinished(test_result);
- called_any_callback = true;
- } else {
- // There is more than one test. Retry them individually.
- for (const std::string& test_name : test_names)
- tests_to_relaunch->push_back(test_name);
- }
- }
-
- return called_any_callback;
-}
-
-class UnitTestProcessLifetimeObserver : public ProcessLifetimeObserver {
- public:
- ~UnitTestProcessLifetimeObserver() override {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- }
-
- TestLauncher* test_launcher() { return test_launcher_; }
- UnitTestPlatformDelegate* platform_delegate() { return platform_delegate_; }
- const std::vector<std::string>& test_names() { return test_names_; }
- int launch_flags() { return launch_flags_; }
- const FilePath& output_file() { return output_file_; }
- const FilePath& flag_file() { return flag_file_; }
-
- protected:
- UnitTestProcessLifetimeObserver(TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags,
- const FilePath& output_file,
- const FilePath& flag_file)
- : ProcessLifetimeObserver(),
- test_launcher_(test_launcher),
- platform_delegate_(platform_delegate),
- test_names_(test_names),
- launch_flags_(launch_flags),
- output_file_(output_file),
- flag_file_(flag_file) {}
-
- SEQUENCE_CHECKER(sequence_checker_);
-
- private:
- TestLauncher* const test_launcher_;
- UnitTestPlatformDelegate* const platform_delegate_;
- const std::vector<std::string> test_names_;
- const int launch_flags_;
- const FilePath output_file_;
- const FilePath flag_file_;
-
- DISALLOW_COPY_AND_ASSIGN(UnitTestProcessLifetimeObserver);
-};
-
-class ParallelUnitTestProcessLifetimeObserver
- : public UnitTestProcessLifetimeObserver {
- public:
- ParallelUnitTestProcessLifetimeObserver(
- TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags,
- const FilePath& output_file,
- const FilePath& flag_file)
- : UnitTestProcessLifetimeObserver(test_launcher,
- platform_delegate,
- test_names,
- launch_flags,
- output_file,
- flag_file) {}
- ~ParallelUnitTestProcessLifetimeObserver() override = default;
-
- private:
- // ProcessLifetimeObserver:
- void OnCompleted(int exit_code,
- TimeDelta elapsed_time,
- bool was_timeout,
- const std::string& output) override;
-
- DISALLOW_COPY_AND_ASSIGN(ParallelUnitTestProcessLifetimeObserver);
-};
-
-void ParallelUnitTestProcessLifetimeObserver::OnCompleted(
- int exit_code,
- TimeDelta elapsed_time,
- bool was_timeout,
- const std::string& output) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- std::vector<std::string> tests_to_relaunch;
- ProcessTestResults(test_launcher(), test_names(), output_file(), output,
- exit_code, was_timeout, &tests_to_relaunch);
-
- if (!tests_to_relaunch.empty()) {
- platform_delegate()->RelaunchTests(test_launcher(), tests_to_relaunch,
- launch_flags());
- }
-
- // The temporary file's directory is also temporary.
- DeleteFile(output_file().DirName(), true);
- if (!flag_file().empty())
- DeleteFile(flag_file(), false);
-}
-
-class SerialUnitTestProcessLifetimeObserver
- : public UnitTestProcessLifetimeObserver {
- public:
- SerialUnitTestProcessLifetimeObserver(
- TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags,
- const FilePath& output_file,
- const FilePath& flag_file,
- std::vector<std::string>&& next_test_names)
- : UnitTestProcessLifetimeObserver(test_launcher,
- platform_delegate,
- test_names,
- launch_flags,
- output_file,
- flag_file),
- next_test_names_(std::move(next_test_names)) {}
- ~SerialUnitTestProcessLifetimeObserver() override = default;
-
- private:
- // ProcessLifetimeObserver:
- void OnCompleted(int exit_code,
- TimeDelta elapsed_time,
- bool was_timeout,
- const std::string& output) override;
-
- std::vector<std::string> next_test_names_;
-
- DISALLOW_COPY_AND_ASSIGN(SerialUnitTestProcessLifetimeObserver);
-};
-
-void SerialUnitTestProcessLifetimeObserver::OnCompleted(
- int exit_code,
- TimeDelta elapsed_time,
- bool was_timeout,
- const std::string& output) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
- std::vector<std::string> tests_to_relaunch;
- bool called_any_callbacks =
- ProcessTestResults(test_launcher(), test_names(), output_file(), output,
- exit_code, was_timeout, &tests_to_relaunch);
-
- // There is only one test, there cannot be other tests to relaunch
- // due to a crash.
- DCHECK(tests_to_relaunch.empty());
-
- // There is only one test, we should have called back with its result.
- DCHECK(called_any_callbacks);
-
- // The temporary file's directory is also temporary.
- DeleteFile(output_file().DirName(), true);
-
- if (!flag_file().empty())
- DeleteFile(flag_file(), false);
-
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- BindOnce(&RunUnitTestsSerially, test_launcher(), platform_delegate(),
- std::move(next_test_names_), launch_flags()));
-}
-
-} // namespace
-
-int LaunchUnitTests(int argc,
- char** argv,
- RunTestSuiteCallback run_test_suite) {
- CommandLine::Init(argc, argv);
- size_t parallel_jobs = NumParallelJobs();
- if (parallel_jobs == 0U) {
- return 1;
- }
- return LaunchUnitTestsInternal(std::move(run_test_suite), parallel_jobs,
- kDefaultTestBatchLimit, true,
- BindOnce(&InitGoogleTestChar, &argc, argv));
-}
-
-int LaunchUnitTestsSerially(int argc,
- char** argv,
- RunTestSuiteCallback run_test_suite) {
- CommandLine::Init(argc, argv);
- return LaunchUnitTestsInternal(std::move(run_test_suite), 1U,
- kDefaultTestBatchLimit, true,
- BindOnce(&InitGoogleTestChar, &argc, argv));
-}
-
-int LaunchUnitTestsWithOptions(int argc,
- char** argv,
- size_t parallel_jobs,
- int default_batch_limit,
- bool use_job_objects,
- RunTestSuiteCallback run_test_suite) {
- CommandLine::Init(argc, argv);
- return LaunchUnitTestsInternal(std::move(run_test_suite), parallel_jobs,
- default_batch_limit, use_job_objects,
- BindOnce(&InitGoogleTestChar, &argc, argv));
-}
-
-#if defined(OS_WIN)
-int LaunchUnitTests(int argc,
- wchar_t** argv,
- bool use_job_objects,
- RunTestSuiteCallback run_test_suite) {
- // Windows CommandLine::Init ignores argv anyway.
- CommandLine::Init(argc, NULL);
- size_t parallel_jobs = NumParallelJobs();
- if (parallel_jobs == 0U) {
- return 1;
- }
- return LaunchUnitTestsInternal(std::move(run_test_suite), parallel_jobs,
- kDefaultTestBatchLimit, use_job_objects,
- BindOnce(&InitGoogleTestWChar, &argc, argv));
-}
-#endif // defined(OS_WIN)
-
-void RunUnitTestsSerially(
- TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags) {
- if (test_names.empty())
- return;
-
- // Create a dedicated temporary directory to store the xml result data
- // per run to ensure clean state and make it possible to launch multiple
- // processes in parallel.
- FilePath output_file;
- CHECK(platform_delegate->CreateResultsFile(&output_file));
- FilePath flag_file;
- platform_delegate->CreateTemporaryFile(&flag_file);
-
- auto observer = std::make_unique<SerialUnitTestProcessLifetimeObserver>(
- test_launcher, platform_delegate,
- std::vector<std::string>(1, test_names.back()), launch_flags, output_file,
- flag_file,
- std::vector<std::string>(test_names.begin(), test_names.end() - 1));
-
- CommandLine cmd_line(platform_delegate->GetCommandLineForChildGTestProcess(
- observer->test_names(), output_file, flag_file));
-
- TestLauncher::LaunchOptions launch_options;
- launch_options.flags = launch_flags;
- test_launcher->LaunchChildGTestProcess(
- cmd_line, platform_delegate->GetWrapperForChildGTestProcess(),
- TestTimeouts::test_launcher_timeout(), launch_options,
- std::move(observer));
-}
-
-void RunUnitTestsBatch(
- TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags) {
- if (test_names.empty())
- return;
-
- // Create a dedicated temporary directory to store the xml result data
- // per run to ensure clean state and make it possible to launch multiple
- // processes in parallel.
- FilePath output_file;
- CHECK(platform_delegate->CreateResultsFile(&output_file));
- FilePath flag_file;
- platform_delegate->CreateTemporaryFile(&flag_file);
-
- auto observer = std::make_unique<ParallelUnitTestProcessLifetimeObserver>(
- test_launcher, platform_delegate, test_names, launch_flags, output_file,
- flag_file);
-
- CommandLine cmd_line(platform_delegate->GetCommandLineForChildGTestProcess(
- test_names, output_file, flag_file));
-
- // Adjust the timeout depending on how many tests we're running
- // (note that e.g. the last batch of tests will be smaller).
- // TODO(phajdan.jr): Consider an adaptive timeout, which can change
- // depending on how many tests ran and how many remain.
- // Note: do NOT parse child's stdout to do that, it's known to be
- // unreliable (e.g. buffering issues can mix up the output).
- TimeDelta timeout = test_names.size() * TestTimeouts::test_launcher_timeout();
-
- TestLauncher::LaunchOptions options;
- options.flags = launch_flags;
- test_launcher->LaunchChildGTestProcess(
- cmd_line, platform_delegate->GetWrapperForChildGTestProcess(), timeout,
- options, std::move(observer));
-}
-
-UnitTestLauncherDelegate::UnitTestLauncherDelegate(
- UnitTestPlatformDelegate* platform_delegate,
- size_t batch_limit,
- bool use_job_objects)
- : platform_delegate_(platform_delegate),
- batch_limit_(batch_limit),
- use_job_objects_(use_job_objects) {
-}
-
-UnitTestLauncherDelegate::~UnitTestLauncherDelegate() {
- DCHECK(thread_checker_.CalledOnValidThread());
-}
-
-bool UnitTestLauncherDelegate::GetTests(std::vector<TestIdentifier>* output) {
- DCHECK(thread_checker_.CalledOnValidThread());
- return platform_delegate_->GetTests(output);
-}
-
-bool UnitTestLauncherDelegate::ShouldRunTest(const std::string& test_case_name,
- const std::string& test_name) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- // There is no additional logic to disable specific tests.
- return true;
-}
-
-size_t UnitTestLauncherDelegate::RunTests(
- TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- int launch_flags = use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0;
-
- std::vector<std::string> batch;
- for (size_t i = 0; i < test_names.size(); i++) {
- batch.push_back(test_names[i]);
-
- // Use 0 to indicate unlimited batch size.
- if (batch.size() >= batch_limit_ && batch_limit_ != 0) {
- RunUnitTestsBatch(test_launcher, platform_delegate_, batch, launch_flags);
- batch.clear();
- }
- }
-
- RunUnitTestsBatch(test_launcher, platform_delegate_, batch, launch_flags);
-
- return test_names.size();
-}
-
-size_t UnitTestLauncherDelegate::RetryTests(
- TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) {
- ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- BindOnce(&RunUnitTestsSerially, test_launcher, platform_delegate_,
- test_names,
- use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0));
- return test_names.size();
-}
-
-} // namespace base
diff --git a/base/test/launcher/unit_test_launcher.h b/base/test/launcher/unit_test_launcher.h
deleted file mode 100644
index 4e3d314..0000000
--- a/base/test/launcher/unit_test_launcher.h
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_
-#define BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_
-
-#include <stddef.h>
-
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/test/launcher/test_launcher.h"
-#include "build_config.h"
-
-namespace base {
-
-// Callback that runs a test suite and returns exit code.
-using RunTestSuiteCallback = OnceCallback<int(void)>;
-
-// Launches unit tests in given test suite. Returns exit code.
-int LaunchUnitTests(int argc, char** argv, RunTestSuiteCallback run_test_suite);
-
-// Same as above, but always runs tests serially.
-int LaunchUnitTestsSerially(int argc,
- char** argv,
- RunTestSuiteCallback run_test_suite);
-
-// Launches unit tests in given test suite. Returns exit code.
-// |parallel_jobs| is the number of parallel test jobs.
-// |default_batch_limit| is the default size of test batch
-// (use 0 to disable batching).
-// |use_job_objects| determines whether to use job objects.
-int LaunchUnitTestsWithOptions(int argc,
- char** argv,
- size_t parallel_jobs,
- int default_batch_limit,
- bool use_job_objects,
- RunTestSuiteCallback run_test_suite);
-
-#if defined(OS_WIN)
-// Launches unit tests in given test suite. Returns exit code.
-// |use_job_objects| determines whether to use job objects.
-int LaunchUnitTests(int argc,
- wchar_t** argv,
- bool use_job_objects,
- RunTestSuiteCallback run_test_suite);
-#endif // defined(OS_WIN)
-
-// Delegate to abstract away platform differences for unit tests.
-class UnitTestPlatformDelegate {
- public:
- // Called to get names of tests available for running. The delegate
- // must put the result in |output| and return true on success.
- virtual bool GetTests(std::vector<TestIdentifier>* output) = 0;
-
- // Called to create a temporary for storing test results. The delegate
- // must put the resulting path in |path| and return true on success.
- virtual bool CreateResultsFile(base::FilePath* path) = 0;
-
- // Called to create a new temporary file. The delegate must put the resulting
- // path in |path| and return true on success.
- virtual bool CreateTemporaryFile(base::FilePath* path) = 0;
-
- // Returns command line for child GTest process based on the command line
- // of current process. |test_names| is a vector of test full names
- // (e.g. "A.B"), |output_file| is path to the GTest XML output file.
- virtual CommandLine GetCommandLineForChildGTestProcess(
- const std::vector<std::string>& test_names,
- const base::FilePath& output_file,
- const base::FilePath& flag_file) = 0;
-
- // Returns wrapper to use for child GTest process. Empty string means
- // no wrapper.
- virtual std::string GetWrapperForChildGTestProcess() = 0;
-
- // Relaunch tests, e.g. after a crash.
- virtual void RelaunchTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names,
- int launch_flags) = 0;
-
- protected:
- ~UnitTestPlatformDelegate() = default;
-};
-
-// Runs tests serially, each in its own process.
-void RunUnitTestsSerially(TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags);
-
-// Runs tests in batches (each batch in its own process).
-void RunUnitTestsBatch(TestLauncher* test_launcher,
- UnitTestPlatformDelegate* platform_delegate,
- const std::vector<std::string>& test_names,
- int launch_flags);
-
-// Test launcher delegate for unit tests (mostly to support batching).
-class UnitTestLauncherDelegate : public TestLauncherDelegate {
- public:
- UnitTestLauncherDelegate(UnitTestPlatformDelegate* delegate,
- size_t batch_limit,
- bool use_job_objects);
- ~UnitTestLauncherDelegate() override;
-
- private:
- // TestLauncherDelegate:
- bool GetTests(std::vector<TestIdentifier>* output) override;
- bool ShouldRunTest(const std::string& test_case_name,
- const std::string& test_name) override;
- size_t RunTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) override;
- size_t RetryTests(TestLauncher* test_launcher,
- const std::vector<std::string>& test_names) override;
-
- ThreadChecker thread_checker_;
-
- UnitTestPlatformDelegate* platform_delegate_;
-
- // Maximum number of tests to run in a single batch.
- size_t batch_limit_;
-
- // Determines whether we use job objects on Windows.
- bool use_job_objects_;
-
- DISALLOW_COPY_AND_ASSIGN(UnitTestLauncherDelegate);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_LAUNCHER_UNIT_TEST_LAUNCHER_H_
diff --git a/base/test/launcher/unit_test_launcher_nacl_nonsfi.cc b/base/test/launcher/unit_test_launcher_nacl_nonsfi.cc
deleted file mode 100644
index 237a3da..0000000
--- a/base/test/launcher/unit_test_launcher_nacl_nonsfi.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2015 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/test/launcher/unit_test_launcher.h"
-
-#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/test/gtest_util.h"
-#include "base/test/gtest_xml_unittest_result_printer.h"
-#include "base/test/test_switches.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-int LaunchUnitTests(int argc,
- char** argv,
- RunTestSuiteCallback run_test_suite) {
- CHECK(CommandLine::InitializedForCurrentProcess() ||
- CommandLine::Init(argc, argv));
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kTestLauncherListTests)) {
- // Dump all test list into a file.
- FilePath list_path(
- command_line->GetSwitchValuePath(switches::kTestLauncherListTests));
- if (!WriteCompiledInTestsToFile(list_path)) {
- LOG(ERROR) << "Failed to write list of tests.";
- return 1;
- }
-
- // Successfully done.
- return 0;
- }
-
- // Register XML output printer, if --test-launcher-output flag is set.
- if (command_line->HasSwitch(switches::kTestLauncherOutput)) {
- FilePath output_path = command_line->GetSwitchValuePath(
- switches::kTestLauncherOutput);
- if (PathExists(output_path)) {
- LOG(WARNING) << "Test launcher output path exists. Do not override";
- } else {
- XmlUnitTestResultPrinter* printer = new XmlUnitTestResultPrinter;
- CHECK(printer->Initialize(output_path));
- testing::UnitTest::GetInstance()->listeners().Append(printer);
- }
- }
-
- return std::move(run_test_suite).Run();
-}
-
-} // namespace base
diff --git a/base/test/malloc_wrapper.cc b/base/test/malloc_wrapper.cc
deleted file mode 100644
index eb280a3..0000000
--- a/base/test/malloc_wrapper.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 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 "malloc_wrapper.h"
-
-#include <stdlib.h>
-
-void* MallocWrapper(size_t size) {
- return malloc(size);
-}
diff --git a/base/test/malloc_wrapper.h b/base/test/malloc_wrapper.h
deleted file mode 100644
index d06228d..0000000
--- a/base/test/malloc_wrapper.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_MALLOC_WRAPPER_H_
-#define BASE_TEST_MALLOC_WRAPPER_H_
-
-#include <stddef.h>
-
-// BASE_EXPORT depends on COMPONENT_BUILD.
-// This will always be a separate shared library, so don't use BASE_EXPORT here.
-#if defined(WIN32)
-#define MALLOC_WRAPPER_EXPORT __declspec(dllexport)
-#else
-#define MALLOC_WRAPPER_EXPORT __attribute__((visibility("default")))
-#endif // defined(WIN32)
-
-// Calls malloc directly.
-MALLOC_WRAPPER_EXPORT void* MallocWrapper(size_t size);
-
-#endif // BASE_TEST_MALLOC_WRAPPER_H_
diff --git a/base/test/mock_callback.h b/base/test/mock_callback.h
deleted file mode 100644
index 7ac4d34..0000000
--- a/base/test/mock_callback.h
+++ /dev/null
@@ -1,366 +0,0 @@
-// This file was GENERATED by command:
-// pump.py mock_callback.h.pump
-// DO NOT EDIT BY HAND!!!
-
-// Copyright 2017 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.
-
-// Analogous to GMock's built-in MockFunction, but for base::Callback instead of
-// std::function. It takes the full callback type as a parameter, so that it can
-// support both OnceCallback and RepeatingCallback.
-//
-// Use:
-// using FooCallback = base::Callback<int(std::string)>;
-//
-// TEST(FooTest, RunsCallbackWithBarArgument) {
-// base::MockCallback<FooCallback> callback;
-// EXPECT_CALL(callback, Run("bar")).WillOnce(Return(1));
-// Foo(callback.Get());
-// }
-//
-// Can be used with StrictMock and NiceMock. Caller must ensure that it outlives
-// any base::Callback obtained from it.
-
-#ifndef BASE_TEST_MOCK_CALLBACK_H_
-#define BASE_TEST_MOCK_CALLBACK_H_
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/macros.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace base {
-
-// clang-format off
-
-template <typename F>
-class MockCallback;
-
-template <typename R>
-class MockCallback<Callback<R()>> {
- public:
- MockCallback() = default;
- MOCK_METHOD0_T(Run, R());
-
- Callback<R()> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R>
-class MockCallback<OnceCallback<R()>> {
- public:
- MockCallback() = default;
- MOCK_METHOD0_T(Run, R());
-
- OnceCallback<R()> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1>
-class MockCallback<Callback<R(A1)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD1_T(Run, R(A1));
-
- Callback<R(A1)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1>
-class MockCallback<OnceCallback<R(A1)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD1_T(Run, R(A1));
-
- OnceCallback<R(A1)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2>
-class MockCallback<Callback<R(A1, A2)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD2_T(Run, R(A1, A2));
-
- Callback<R(A1, A2)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2>
-class MockCallback<OnceCallback<R(A1, A2)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD2_T(Run, R(A1, A2));
-
- OnceCallback<R(A1, A2)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3>
-class MockCallback<Callback<R(A1, A2, A3)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD3_T(Run, R(A1, A2, A3));
-
- Callback<R(A1, A2, A3)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3>
-class MockCallback<OnceCallback<R(A1, A2, A3)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD3_T(Run, R(A1, A2, A3));
-
- OnceCallback<R(A1, A2, A3)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4>
-class MockCallback<Callback<R(A1, A2, A3, A4)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD4_T(Run, R(A1, A2, A3, A4));
-
- Callback<R(A1, A2, A3, A4)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD4_T(Run, R(A1, A2, A3, A4));
-
- OnceCallback<R(A1, A2, A3, A4)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD5_T(Run, R(A1, A2, A3, A4, A5));
-
- Callback<R(A1, A2, A3, A4, A5)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD5_T(Run, R(A1, A2, A3, A4, A5));
-
- OnceCallback<R(A1, A2, A3, A4, A5)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5, A6)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD6_T(Run, R(A1, A2, A3, A4, A5, A6));
-
- Callback<R(A1, A2, A3, A4, A5, A6)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5, A6)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD6_T(Run, R(A1, A2, A3, A4, A5, A6));
-
- OnceCallback<R(A1, A2, A3, A4, A5, A6)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5, A6, A7)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD7_T(Run, R(A1, A2, A3, A4, A5, A6, A7));
-
- Callback<R(A1, A2, A3, A4, A5, A6, A7)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5, A6, A7)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD7_T(Run, R(A1, A2, A3, A4, A5, A6, A7));
-
- OnceCallback<R(A1, A2, A3, A4, A5, A6, A7)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5, A6, A7, A8)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD8_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8));
-
- Callback<R(A1, A2, A3, A4, A5, A6, A7, A8)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD8_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8));
-
- OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8, typename A9>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD9_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8, A9));
-
- Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8, typename A9>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD9_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8, A9));
-
- OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8, typename A9,
- typename A10>
-class MockCallback<Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD10_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10));
-
- Callback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R, typename A1, typename A2, typename A3, typename A4,
- typename A5, typename A6, typename A7, typename A8, typename A9,
- typename A10>
-class MockCallback<OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)>> {
- public:
- MockCallback() = default;
- MOCK_METHOD10_T(Run, R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10));
-
- OnceCallback<R(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-// clang-format on
-
-} // namespace base
-
-#endif // BASE_TEST_MOCK_CALLBACK_H_
diff --git a/base/test/mock_callback.h.pump b/base/test/mock_callback.h.pump
deleted file mode 100644
index 3372789..0000000
--- a/base/test/mock_callback.h.pump
+++ /dev/null
@@ -1,85 +0,0 @@
-$$ This is a pump file for generating file templates. Pump is a python
-$$ script that is part of the Google Test suite of utilities. Description
-$$ can be found here:
-$$
-$$ https://github.com/google/googletest/blob/master/googletest/docs/PumpManual.md
-$$
-$$ MAX_ARITY controls the number of arguments that MockCallback supports.
-$$ It is choosen to match the number GMock supports.
-$var MAX_ARITY = 10
-$$
-// Copyright 2017 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.
-
-// Analogous to GMock's built-in MockFunction, but for base::Callback instead of
-// std::function. It takes the full callback type as a parameter, so that it can
-// support both OnceCallback and RepeatingCallback.
-//
-// Use:
-// using FooCallback = base::Callback<int(std::string)>;
-//
-// TEST(FooTest, RunsCallbackWithBarArgument) {
-// base::MockCallback<FooCallback> callback;
-// EXPECT_CALL(callback, Run("bar")).WillOnce(Return(1));
-// Foo(callback.Get());
-// }
-//
-// Can be used with StrictMock and NiceMock. Caller must ensure that it outlives
-// any base::Callback obtained from it.
-
-#ifndef BASE_TEST_MOCK_CALLBACK_H_
-#define BASE_TEST_MOCK_CALLBACK_H_
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/macros.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace base {
-
-// clang-format off
-
-template <typename F>
-class MockCallback;
-
-$range i 0..MAX_ARITY
-$for i [[
-$range j 1..i
-$var run_type = [[R($for j, [[A$j]])]]
-
-template <typename R$for j [[, typename A$j]]>
-class MockCallback<Callback<$run_type>> {
- public:
- MockCallback() = default;
- MOCK_METHOD$(i)_T(Run, $run_type);
-
- Callback<$run_type> Get() {
- return Bind(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-template <typename R$for j [[, typename A$j]]>
-class MockCallback<OnceCallback<$run_type>> {
- public:
- MockCallback() = default;
- MOCK_METHOD$(i)_T(Run, $run_type);
-
- OnceCallback<$run_type> Get() {
- return BindOnce(&MockCallback::Run, Unretained(this));
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCallback);
-};
-
-]]
-
-// clang-format on
-
-} // namespace base
-
-#endif // BASE_TEST_MOCK_CALLBACK_H_
diff --git a/base/test/mock_chrome_application_mac.h b/base/test/mock_chrome_application_mac.h
deleted file mode 100644
index ffa3080..0000000
--- a/base/test/mock_chrome_application_mac.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef BASE_TEST_MOCK_CHROME_APPLICATION_MAC_H_
-#define BASE_TEST_MOCK_CHROME_APPLICATION_MAC_H_
-
-#if defined(__OBJC__)
-
-#import <AppKit/AppKit.h>
-
-#include "base/mac/scoped_sending_event.h"
-#include "base/message_loop/message_pump_mac.h"
-
-// A basic implementation of CrAppProtocol and
-// CrAppControlProtocol. This can be used in tests that need an
-// NSApplication and use a runloop, or which need a ScopedSendingEvent
-// when handling a nested event loop.
-@interface MockCrApp : NSApplication<CrAppProtocol,
- CrAppControlProtocol> {
- @private
- BOOL handlingSendEvent_;
-}
-@end
-
-#endif
-
-// To be used to instantiate MockCrApp from C++ code.
-namespace mock_cr_app {
-void RegisterMockCrApp();
-} // namespace mock_cr_app
-
-#endif // BASE_TEST_MOCK_CHROME_APPLICATION_MAC_H_
diff --git a/base/test/mock_chrome_application_mac.mm b/base/test/mock_chrome_application_mac.mm
deleted file mode 100644
index 0890553..0000000
--- a/base/test/mock_chrome_application_mac.mm
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2011 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/test/mock_chrome_application_mac.h"
-
-#include "base/auto_reset.h"
-#include "base/logging.h"
-
-@implementation MockCrApp
-
-+ (NSApplication*)sharedApplication {
- NSApplication* app = [super sharedApplication];
- DCHECK([app conformsToProtocol:@protocol(CrAppControlProtocol)])
- << "Existing NSApp (class " << [[app className] UTF8String]
- << ") does not conform to required protocol.";
- DCHECK(base::MessagePumpMac::UsingCrApp())
- << "MessagePumpMac::Create() was called before "
- << "+[MockCrApp sharedApplication]";
- return app;
-}
-
-- (void)sendEvent:(NSEvent*)event {
- base::AutoReset<BOOL> scoper(&handlingSendEvent_, YES);
- [super sendEvent:event];
-}
-
-- (void)setHandlingSendEvent:(BOOL)handlingSendEvent {
- handlingSendEvent_ = handlingSendEvent;
-}
-
-- (BOOL)isHandlingSendEvent {
- return handlingSendEvent_;
-}
-
-@end
-
-namespace mock_cr_app {
-
-void RegisterMockCrApp() {
- [MockCrApp sharedApplication];
-}
-
-} // namespace mock_cr_app
diff --git a/base/test/mock_devices_changed_observer.cc b/base/test/mock_devices_changed_observer.cc
deleted file mode 100644
index 9fc57cd..0000000
--- a/base/test/mock_devices_changed_observer.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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/test/mock_devices_changed_observer.h"
-
-namespace base {
-
-MockDevicesChangedObserver::MockDevicesChangedObserver() = default;
-
-MockDevicesChangedObserver::~MockDevicesChangedObserver() = default;
-
-} // namespace base
diff --git a/base/test/mock_devices_changed_observer.h b/base/test/mock_devices_changed_observer.h
deleted file mode 100644
index 0734fb4..0000000
--- a/base/test/mock_devices_changed_observer.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_MOCK_DEVICES_CHANGED_OBSERVER_H_
-#define BASE_TEST_MOCK_DEVICES_CHANGED_OBSERVER_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/system_monitor/system_monitor.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace base {
-
-class MockDevicesChangedObserver
- : public base::SystemMonitor::DevicesChangedObserver {
- public:
- MockDevicesChangedObserver();
- ~MockDevicesChangedObserver() override;
-
- MOCK_METHOD1(OnDevicesChanged,
- void(base::SystemMonitor::DeviceType device_type));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockDevicesChangedObserver);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_MOCK_DEVICES_CHANGED_OBSERVER_H_
diff --git a/base/test/mock_entropy_provider.cc b/base/test/mock_entropy_provider.cc
deleted file mode 100644
index f3fd2a4..0000000
--- a/base/test/mock_entropy_provider.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2015 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/test/mock_entropy_provider.h"
-
-namespace base {
-
-MockEntropyProvider::MockEntropyProvider() : entropy_value_(0.5) {}
-MockEntropyProvider::MockEntropyProvider(double entropy_value)
- : entropy_value_(entropy_value) {}
-MockEntropyProvider::~MockEntropyProvider() = default;
-
-double MockEntropyProvider::GetEntropyForTrial(
- const std::string& trial_name,
- uint32_t randomization_seed) const {
- return entropy_value_;
-}
-
-} // namespace base
diff --git a/base/test/mock_entropy_provider.h b/base/test/mock_entropy_provider.h
deleted file mode 100644
index ca2b4bc..0000000
--- a/base/test/mock_entropy_provider.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_MOCK_ENTROPY_PROVIDER_H_
-#define BASE_TEST_MOCK_ENTROPY_PROVIDER_H_
-
-#include <stdint.h>
-
-#include "base/metrics/field_trial.h"
-
-namespace base {
-
-class MockEntropyProvider : public base::FieldTrial::EntropyProvider {
- public:
- MockEntropyProvider();
- explicit MockEntropyProvider(double entropy_value);
- ~MockEntropyProvider() override;
-
- // base::FieldTrial::EntropyProvider:
- double GetEntropyForTrial(const std::string& trial_name,
- uint32_t randomization_seed) const override;
-
- private:
- double entropy_value_;
-
- DISALLOW_COPY_AND_ASSIGN(MockEntropyProvider);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_MOCK_ENTROPY_PROVIDER_H_
diff --git a/base/test/mock_log.cc b/base/test/mock_log.cc
deleted file mode 100644
index a09000d..0000000
--- a/base/test/mock_log.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2015 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/test/mock_log.h"
-
-namespace base {
-namespace test {
-
-// static
-MockLog* MockLog::g_instance_ = nullptr;
-Lock MockLog::g_lock;
-
-MockLog::MockLog() : is_capturing_logs_(false) {
-}
-
-MockLog::~MockLog() {
- if (is_capturing_logs_) {
- StopCapturingLogs();
- }
-}
-
-void MockLog::StartCapturingLogs() {
- AutoLock scoped_lock(g_lock);
-
- // We don't use CHECK(), which can generate a new LOG message, and
- // thus can confuse MockLog objects or other registered
- // LogSinks.
- RAW_CHECK(!is_capturing_logs_);
- RAW_CHECK(!g_instance_);
-
- is_capturing_logs_ = true;
- g_instance_ = this;
- previous_handler_ = logging::GetLogMessageHandler();
- logging::SetLogMessageHandler(LogMessageHandler);
-}
-
-void MockLog::StopCapturingLogs() {
- AutoLock scoped_lock(g_lock);
-
- // We don't use CHECK(), which can generate a new LOG message, and
- // thus can confuse MockLog objects or other registered
- // LogSinks.
- RAW_CHECK(is_capturing_logs_);
- RAW_CHECK(g_instance_ == this);
-
- is_capturing_logs_ = false;
- logging::SetLogMessageHandler(previous_handler_);
- g_instance_ = nullptr;
-}
-
-// static
-bool MockLog::LogMessageHandler(int severity,
- const char* file,
- int line,
- size_t message_start,
- const std::string& str) {
- // gMock guarantees thread-safety for calling a mocked method
- // (https://github.com/google/googlemock/blob/master/googlemock/docs/CookBook.md#using-google-mock-and-threads)
- // but we also need to make sure that Start/StopCapturingLogs are synchronized
- // with LogMessageHandler.
- AutoLock scoped_lock(g_lock);
-
- return g_instance_->Log(severity, file, line, message_start, str);
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/mock_log.h b/base/test/mock_log.h
deleted file mode 100644
index cda2fcd..0000000
--- a/base/test/mock_log.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_MOCK_LOG_H_
-#define BASE_TEST_MOCK_LOG_H_
-
-#include <stddef.h>
-
-#include <string>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/synchronization/lock.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace base {
-namespace test {
-
-// A MockLog object intercepts LOG() messages issued during its lifespan. Using
-// this together with gMock, it's very easy to test how a piece of code calls
-// LOG(). The typical usage:
-//
-// TEST(FooTest, LogsCorrectly) {
-// MockLog log;
-//
-// // We expect the WARNING "Something bad!" exactly twice.
-// EXPECT_CALL(log, Log(WARNING, _, "Something bad!"))
-// .Times(2);
-//
-// // We allow foo.cc to call LOG(INFO) any number of times.
-// EXPECT_CALL(log, Log(INFO, HasSubstr("/foo.cc"), _))
-// .Times(AnyNumber());
-//
-// log.StartCapturingLogs(); // Call this after done setting expectations.
-// Foo(); // Exercises the code under test.
-// }
-//
-// CAVEAT: base/logging does not allow a thread to call LOG() again when it's
-// already inside a LOG() call. Doing so will cause a deadlock. Therefore,
-// it's the user's responsibility to not call LOG() in an action triggered by
-// MockLog::Log(). You may call RAW_LOG() instead.
-class MockLog {
- public:
- // Creates a MockLog object that is not capturing logs. If it were to start
- // to capture logs, it could be a problem if some other threads already exist
- // and are logging, as the user hasn't had a chance to set up expectation on
- // this object yet (calling a mock method before setting the expectation is
- // UNDEFINED behavior).
- MockLog();
-
- // When the object is destructed, it stops intercepting logs.
- ~MockLog();
-
- // Starts log capturing if the object isn't already doing so.
- // Otherwise crashes.
- void StartCapturingLogs();
-
- // Stops log capturing if the object is capturing logs. Otherwise crashes.
- void StopCapturingLogs();
-
- // Log method is invoked for every log message before it's sent to other log
- // destinations (if any). The method should return true to signal that it
- // handled the message and the message should not be sent to other log
- // destinations.
- MOCK_METHOD5(Log,
- bool(int severity,
- const char* file,
- int line,
- size_t message_start,
- const std::string& str));
-
- private:
- // The currently active mock log.
- static MockLog* g_instance_;
-
- // Lock protecting access to g_instance_.
- static Lock g_lock;
-
- // Static function which is set as the logging message handler.
- // Called once for each message.
- static bool LogMessageHandler(int severity,
- const char* file,
- int line,
- size_t message_start,
- const std::string& str);
-
- // True if this object is currently capturing logs.
- bool is_capturing_logs_;
-
- // The previous handler to restore when the MockLog is destroyed.
- logging::LogMessageHandlerFunction previous_handler_;
-
- DISALLOW_COPY_AND_ASSIGN(MockLog);
-};
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_MOCK_LOG_H_
diff --git a/base/test/move_only_int.h b/base/test/move_only_int.h
deleted file mode 100644
index 6e90983..0000000
--- a/base/test/move_only_int.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef BASE_TEST_MOVE_ONLY_INT_H_
-#define BASE_TEST_MOVE_ONLY_INT_H_
-
-#include "base/macros.h"
-
-namespace base {
-
-// A move-only class that holds an integer. This is designed for testing
-// containers. See also CopyOnlyInt.
-class MoveOnlyInt {
- public:
- explicit MoveOnlyInt(int data = 1) : data_(data) {}
- MoveOnlyInt(MoveOnlyInt&& other) : data_(other.data_) { other.data_ = 0; }
- ~MoveOnlyInt() { data_ = 0; }
-
- MoveOnlyInt& operator=(MoveOnlyInt&& other) {
- data_ = other.data_;
- other.data_ = 0;
- return *this;
- }
-
- friend bool operator==(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return lhs.data_ == rhs.data_;
- }
-
- friend bool operator!=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return !operator==(lhs, rhs);
- }
-
- friend bool operator<(const MoveOnlyInt& lhs, int rhs) {
- return lhs.data_ < rhs;
- }
-
- friend bool operator<(int lhs, const MoveOnlyInt& rhs) {
- return lhs < rhs.data_;
- }
-
- friend bool operator<(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return lhs.data_ < rhs.data_;
- }
-
- friend bool operator>(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return rhs < lhs;
- }
-
- friend bool operator<=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return !(rhs < lhs);
- }
-
- friend bool operator>=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
- return !(lhs < rhs);
- }
-
- int data() const { return data_; }
-
- private:
- volatile int data_;
-
- DISALLOW_COPY_AND_ASSIGN(MoveOnlyInt);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_MOVE_ONLY_INT_H_
diff --git a/base/test/multiprocess_test.cc b/base/test/multiprocess_test.cc
deleted file mode 100644
index 7bc26e3..0000000
--- a/base/test/multiprocess_test.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// 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/test/multiprocess_test.h"
-
-#include "base/base_switches.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/threading/thread_restrictions.h"
-#include "build_config.h"
-
-namespace base {
-
-#if !defined(OS_ANDROID)
-Process SpawnMultiProcessTestChild(const std::string& procname,
- const CommandLine& base_command_line,
- const LaunchOptions& options) {
- CommandLine command_line(base_command_line);
- // TODO(viettrungluu): See comment above |MakeCmdLine()| in the header file.
- // This is a temporary hack, since |MakeCmdLine()| has to provide a full
- // command line.
- if (!command_line.HasSwitch(switches::kTestChildProcess))
- command_line.AppendSwitchASCII(switches::kTestChildProcess, procname);
-
- return LaunchProcess(command_line, options);
-}
-
-bool WaitForMultiprocessTestChildExit(const Process& process,
- TimeDelta timeout,
- int* exit_code) {
- return process.WaitForExitWithTimeout(timeout, exit_code);
-}
-
-bool TerminateMultiProcessTestChild(const Process& process,
- int exit_code,
- bool wait) {
- return process.Terminate(exit_code, wait);
-}
-
-#endif // !defined(OS_ANDROID)
-
-CommandLine GetMultiProcessTestChildBaseCommandLine() {
- base::ScopedAllowBlockingForTesting allow_blocking;
- CommandLine cmd_line = *CommandLine::ForCurrentProcess();
- cmd_line.SetProgram(MakeAbsoluteFilePath(cmd_line.GetProgram()));
- return cmd_line;
-}
-
-// MultiProcessTest ------------------------------------------------------------
-
-MultiProcessTest::MultiProcessTest() = default;
-
-Process MultiProcessTest::SpawnChild(const std::string& procname) {
- LaunchOptions options;
-#if defined(OS_WIN)
- options.start_hidden = true;
-#endif
- return SpawnChildWithOptions(procname, options);
-}
-
-Process MultiProcessTest::SpawnChildWithOptions(const std::string& procname,
- const LaunchOptions& options) {
- return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options);
-}
-
-CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) {
- CommandLine command_line = GetMultiProcessTestChildBaseCommandLine();
- command_line.AppendSwitchASCII(switches::kTestChildProcess, procname);
- return command_line;
-}
-
-} // namespace base
diff --git a/base/test/multiprocess_test.h b/base/test/multiprocess_test.h
deleted file mode 100644
index 3fc0b61..0000000
--- a/base/test/multiprocess_test.h
+++ /dev/null
@@ -1,146 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_MULTIPROCESS_TEST_H_
-#define BASE_TEST_MULTIPROCESS_TEST_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/process/launch.h"
-#include "base/process/process.h"
-#include "build_config.h"
-#include "testing/platform_test.h"
-
-namespace base {
-
-class CommandLine;
-
-// Helpers to spawn a child for a multiprocess test and execute a designated
-// function. Use these when you already have another base class for your test
-// fixture, but you want (some) of your tests to be multiprocess (otherwise you
-// may just want to derive your fixture from |MultiProcessTest|, below).
-//
-// Use these helpers as follows:
-//
-// TEST_F(MyTest, ATest) {
-// CommandLine command_line(
-// base::GetMultiProcessTestChildBaseCommandLine());
-// // Maybe add our own switches to |command_line|....
-//
-// LaunchOptions options;
-// // Maybe set some options (e.g., |start_hidden| on Windows)....
-//
-// // Start a child process and run |a_test_func|.
-// base::Process test_child_process =
-// base::SpawnMultiProcessTestChild("a_test_func", command_line,
-// options);
-//
-// // Do stuff involving |test_child_process| and the child process....
-//
-// int rv = -1;
-// ASSERT_TRUE(base::WaitForMultiprocessTestChildExit(test_child_process,
-// TestTimeouts::action_timeout(), &rv));
-// EXPECT_EQ(0, rv);
-// }
-//
-// // Note: |MULTIPROCESS_TEST_MAIN()| is defined in
-// // testing/multi_process_function_list.h.
-// MULTIPROCESS_TEST_MAIN(a_test_func) {
-// // Code here runs in a child process....
-// return 0;
-// }
-//
-// If you need to terminate the child process, use the
-// TerminateMultiProcessTestChild method to ensure that test will work on
-// Android.
-
-// Spawns a child process and executes the function |procname| declared using
-// |MULTIPROCESS_TEST_MAIN()| or |MULTIPROCESS_TEST_MAIN_WITH_SETUP()|.
-// |command_line| should be as provided by
-// |GetMultiProcessTestChildBaseCommandLine()| (below), possibly with arguments
-// added. Note: On Windows, you probably want to set |options.start_hidden|.
-Process SpawnMultiProcessTestChild(const std::string& procname,
- const CommandLine& command_line,
- const LaunchOptions& options);
-
-// Gets the base command line for |SpawnMultiProcessTestChild()|. To this, you
-// may add any flags needed for your child process.
-CommandLine GetMultiProcessTestChildBaseCommandLine();
-
-// Waits for the child process to exit. Returns true if the process exited
-// within |timeout| and sets |exit_code| if non null.
-bool WaitForMultiprocessTestChildExit(const Process& process,
- TimeDelta timeout,
- int* exit_code);
-
-// Terminates |process| with |exit_code|. If |wait| is true, this call blocks
-// until the process actually terminates.
-bool TerminateMultiProcessTestChild(const Process& process,
- int exit_code,
- bool wait);
-
-// MultiProcessTest ------------------------------------------------------------
-
-// A MultiProcessTest is a test class which makes it easier to
-// write a test which requires code running out of process.
-//
-// To create a multiprocess test simply follow these steps:
-//
-// 1) Derive your test from MultiProcessTest. Example:
-//
-// class MyTest : public MultiProcessTest {
-// };
-//
-// TEST_F(MyTest, TestCaseName) {
-// ...
-// }
-//
-// 2) Create a mainline function for the child processes and include
-// testing/multiprocess_func_list.h.
-// See the declaration of the MULTIPROCESS_TEST_MAIN macro
-// in that file for an example.
-// 3) Call SpawnChild("foo"), where "foo" is the name of
-// the function you wish to run in the child processes.
-// That's it!
-class MultiProcessTest : public PlatformTest {
- public:
- MultiProcessTest();
-
- protected:
- // Run a child process.
- // 'procname' is the name of a function which the child will
- // execute. It must be exported from this library in order to
- // run.
- //
- // Example signature:
- // extern "C" int __declspec(dllexport) FooBar() {
- // // do client work here
- // }
- //
- // Returns the child process.
- Process SpawnChild(const std::string& procname);
-
- // Run a child process using the given launch options.
- //
- // Note: On Windows, you probably want to set |options.start_hidden|.
- Process SpawnChildWithOptions(const std::string& procname,
- const LaunchOptions& options);
-
- // Set up the command line used to spawn the child process.
- // Override this to add things to the command line (calling this first in the
- // override).
- // Note that currently some tests rely on this providing a full command line,
- // which they then use directly with |LaunchProcess()|.
- // TODO(viettrungluu): Remove this and add a virtual
- // |ModifyChildCommandLine()|; make the two divergent uses more sane.
- virtual CommandLine MakeCmdLine(const std::string& procname);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MultiProcessTest);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_MULTIPROCESS_TEST_H_
diff --git a/base/test/native_library_test_utils.cc b/base/test/native_library_test_utils.cc
deleted file mode 100644
index adcb1b0..0000000
--- a/base/test/native_library_test_utils.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2016 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/test/native_library_test_utils.h"
-
-namespace {
-
-int g_static_value = 0;
-
-} // namespace
-
-extern "C" {
-
-int g_native_library_exported_value = 0;
-
-int NativeLibraryTestIncrement() { return ++g_static_value; }
-
-} // extern "C"
diff --git a/base/test/native_library_test_utils.h b/base/test/native_library_test_utils.h
deleted file mode 100644
index c6c46ff..0000000
--- a/base/test/native_library_test_utils.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_NATIVE_LIBRARY_TEST_UTILS_H_
-#define BASE_TEST_NATIVE_LIBRARY_TEST_UTILS_H_
-
-#include "build_config.h"
-
-#if defined(OS_WIN)
-#define NATIVE_LIBRARY_TEST_ALWAYS_EXPORT __declspec(dllexport)
-#else
-#define NATIVE_LIBRARY_TEST_ALWAYS_EXPORT __attribute__((visibility("default")))
-#endif
-
-extern "C" {
-
-extern NATIVE_LIBRARY_TEST_ALWAYS_EXPORT int g_native_library_exported_value;
-
-// A function which increments an internal counter value and returns its value.
-// The first call returns 1, then 2, etc.
-NATIVE_LIBRARY_TEST_ALWAYS_EXPORT int NativeLibraryTestIncrement();
-
-} // extern "C"
-
-#endif // BASE_TEST_NATIVE_LIBRARY_TEST_UTILS_H_
diff --git a/base/test/null_task_runner.cc b/base/test/null_task_runner.cc
deleted file mode 100644
index dfa26fa..0000000
--- a/base/test/null_task_runner.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// 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/test/null_task_runner.h"
-
-namespace base {
-
-NullTaskRunner::NullTaskRunner() = default;
-
-NullTaskRunner::~NullTaskRunner() = default;
-
-bool NullTaskRunner::PostDelayedTask(const Location& from_here,
- OnceClosure task,
- base::TimeDelta delay) {
- return false;
-}
-
-bool NullTaskRunner::PostNonNestableDelayedTask(const Location& from_here,
- OnceClosure task,
- base::TimeDelta delay) {
- return false;
-}
-
-bool NullTaskRunner::RunsTasksInCurrentSequence() const {
- return true;
-}
-
-} // namespace base
diff --git a/base/test/null_task_runner.h b/base/test/null_task_runner.h
deleted file mode 100644
index c11ab6b..0000000
--- a/base/test/null_task_runner.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_NULL_TASK_RUNNER_H_
-#define BASE_TEST_NULL_TASK_RUNNER_H_
-
-#include "base/callback.h"
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/single_thread_task_runner.h"
-
-namespace base {
-
-// Helper class for tests that need to provide an implementation of a
-// *TaskRunner class but don't actually care about tasks being run.
-
-class NullTaskRunner : public base::SingleThreadTaskRunner {
- public:
- NullTaskRunner();
-
- bool PostDelayedTask(const Location& from_here,
- base::OnceClosure task,
- base::TimeDelta delay) override;
- bool PostNonNestableDelayedTask(const Location& from_here,
- base::OnceClosure task,
- base::TimeDelta delay) override;
- // Always returns true to avoid triggering DCHECKs.
- bool RunsTasksInCurrentSequence() const override;
-
- protected:
- ~NullTaskRunner() override;
-
- DISALLOW_COPY_AND_ASSIGN(NullTaskRunner);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_NULL_TASK_RUNNER_H_
diff --git a/base/test/perf_log.cc b/base/test/perf_log.cc
deleted file mode 100644
index 9212f4b..0000000
--- a/base/test/perf_log.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2013 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/test/perf_log.h"
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-
-namespace base {
-
-static FILE* perf_log_file = nullptr;
-
-bool InitPerfLog(const FilePath& log_file) {
- if (perf_log_file) {
- // trying to initialize twice
- NOTREACHED();
- return false;
- }
-
- perf_log_file = OpenFile(log_file, "w");
- return perf_log_file != nullptr;
-}
-
-void FinalizePerfLog() {
- if (!perf_log_file) {
- // trying to cleanup without initializing
- NOTREACHED();
- return;
- }
- base::CloseFile(perf_log_file);
-}
-
-void LogPerfResult(const char* test_name, double value, const char* units) {
- if (!perf_log_file) {
- NOTREACHED();
- return;
- }
-
- fprintf(perf_log_file, "%s\t%g\t%s\n", test_name, value, units);
- printf("%s\t%g\t%s\n", test_name, value, units);
- fflush(stdout);
-}
-
-} // namespace base
diff --git a/base/test/perf_log.h b/base/test/perf_log.h
deleted file mode 100644
index 5d6ed9f..0000000
--- a/base/test/perf_log.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_PERF_LOG_H_
-#define BASE_TEST_PERF_LOG_H_
-
-namespace base {
-
-class FilePath;
-
-// Initializes and finalizes the perf log. These functions should be
-// called at the beginning and end (respectively) of running all the
-// performance tests. The init function returns true on success.
-bool InitPerfLog(const FilePath& log_path);
-void FinalizePerfLog();
-
-// Writes to the perf result log the given 'value' resulting from the
-// named 'test'. The units are to aid in reading the log by people.
-void LogPerfResult(const char* test_name, double value, const char* units);
-
-} // namespace base
-
-#endif // BASE_TEST_PERF_LOG_H_
diff --git a/base/test/perf_test_suite.cc b/base/test/perf_test_suite.cc
deleted file mode 100644
index e789883..0000000
--- a/base/test/perf_test_suite.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2010 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/test/perf_test_suite.h"
-
-#include "base/command_line.h"
-#include "base/debug/debugger.h"
-#include "base/files/file_path.h"
-#include "base/path_service.h"
-#include "base/process/launch.h"
-#include "base/strings/string_util.h"
-#include "base/test/perf_log.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-PerfTestSuite::PerfTestSuite(int argc, char** argv) : TestSuite(argc, argv) {}
-
-void PerfTestSuite::Initialize() {
- TestSuite::Initialize();
-
- // Initialize the perf timer log
- FilePath log_path =
- CommandLine::ForCurrentProcess()->GetSwitchValuePath("log-file");
- if (log_path.empty()) {
- PathService::Get(FILE_EXE, &log_path);
-#if defined(OS_ANDROID) || defined(OS_FUCHSIA)
- base::FilePath tmp_dir;
- PathService::Get(base::DIR_CACHE, &tmp_dir);
- log_path = tmp_dir.Append(log_path.BaseName());
-#endif
- log_path = log_path.ReplaceExtension(FILE_PATH_LITERAL("log"));
- log_path = log_path.InsertBeforeExtension(FILE_PATH_LITERAL("_perf"));
- }
- ASSERT_TRUE(InitPerfLog(log_path));
-
- // Raise to high priority to have more precise measurements. Since we don't
- // aim at 1% precision, it is not necessary to run at realtime level.
- if (!debug::BeingDebugged())
- RaiseProcessToHighPriority();
-}
-
-void PerfTestSuite::Shutdown() {
- TestSuite::Shutdown();
- FinalizePerfLog();
-}
-
-} // namespace base
diff --git a/base/test/perf_test_suite.h b/base/test/perf_test_suite.h
deleted file mode 100644
index 52528f0..0000000
--- a/base/test/perf_test_suite.h
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef BASE_TEST_PERF_TEST_SUITE_H_
-#define BASE_TEST_PERF_TEST_SUITE_H_
-
-#include "base/test/test_suite.h"
-
-namespace base {
-
-class PerfTestSuite : public TestSuite {
- public:
- PerfTestSuite(int argc, char** argv);
-
- void Initialize() override;
- void Shutdown() override;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_PERF_TEST_SUITE_H_
diff --git a/base/test/perf_time_logger.cc b/base/test/perf_time_logger.cc
deleted file mode 100644
index c05ba51..0000000
--- a/base/test/perf_time_logger.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2013 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/test/perf_time_logger.h"
-
-#include "base/test/perf_log.h"
-
-namespace base {
-
-PerfTimeLogger::PerfTimeLogger(const char* test_name)
- : logged_(false), test_name_(test_name) {}
-
-PerfTimeLogger::~PerfTimeLogger() {
- if (!logged_)
- Done();
-}
-
-void PerfTimeLogger::Done() {
- // we use a floating-point millisecond value because it is more
- // intuitive than microseconds and we want more precision than
- // integer milliseconds
- LogPerfResult(test_name_.c_str(), timer_.Elapsed().InMillisecondsF(), "ms");
- logged_ = true;
-}
-
-} // namespace base
diff --git a/base/test/perf_time_logger.h b/base/test/perf_time_logger.h
deleted file mode 100644
index a5f3e8a..0000000
--- a/base/test/perf_time_logger.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_PERF_TIME_LOGGER_H_
-#define BASE_TEST_PERF_TIME_LOGGER_H_
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/timer/elapsed_timer.h"
-
-namespace base {
-
-// Automates calling LogPerfResult for the common case where you want
-// to measure the time that something took. Call Done() when the test
-// is complete if you do extra work after the test or there are stack
-// objects with potentially expensive constructors. Otherwise, this
-// class with automatically log on destruction.
-class PerfTimeLogger {
- public:
- explicit PerfTimeLogger(const char* test_name);
- ~PerfTimeLogger();
-
- void Done();
-
- private:
- bool logged_;
- std::string test_name_;
- ElapsedTimer timer_;
-
- DISALLOW_COPY_AND_ASSIGN(PerfTimeLogger);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_PERF_TIME_LOGGER_H_
diff --git a/base/test/power_monitor_test_base.cc b/base/test/power_monitor_test_base.cc
deleted file mode 100644
index 8c5ba86..0000000
--- a/base/test/power_monitor_test_base.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2013 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/test/power_monitor_test_base.h"
-
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_current.h"
-#include "base/power_monitor/power_monitor.h"
-#include "base/power_monitor/power_monitor_source.h"
-#include "base/run_loop.h"
-
-namespace base {
-
-PowerMonitorTestSource::PowerMonitorTestSource()
- : test_on_battery_power_(false) {
- DCHECK(MessageLoopCurrent::Get())
- << "PowerMonitorTestSource requires a MessageLoop.";
-}
-
-PowerMonitorTestSource::~PowerMonitorTestSource() = default;
-
-void PowerMonitorTestSource::GeneratePowerStateEvent(bool on_battery_power) {
- test_on_battery_power_ = on_battery_power;
- ProcessPowerEvent(POWER_STATE_EVENT);
- RunLoop().RunUntilIdle();
-}
-
-void PowerMonitorTestSource::GenerateSuspendEvent() {
- ProcessPowerEvent(SUSPEND_EVENT);
- RunLoop().RunUntilIdle();
-}
-
-void PowerMonitorTestSource::GenerateResumeEvent() {
- ProcessPowerEvent(RESUME_EVENT);
- RunLoop().RunUntilIdle();
-}
-
-bool PowerMonitorTestSource::IsOnBatteryPowerImpl() {
- return test_on_battery_power_;
-};
-
-PowerMonitorTestObserver::PowerMonitorTestObserver()
- : last_power_state_(false),
- power_state_changes_(0),
- suspends_(0),
- resumes_(0) {
-}
-
-PowerMonitorTestObserver::~PowerMonitorTestObserver() = default;
-
-// PowerObserver callbacks.
-void PowerMonitorTestObserver::OnPowerStateChange(bool on_battery_power) {
- last_power_state_ = on_battery_power;
- power_state_changes_++;
-}
-
-void PowerMonitorTestObserver::OnSuspend() {
- suspends_++;
-}
-
-void PowerMonitorTestObserver::OnResume() {
- resumes_++;
-}
-
-} // namespace base
diff --git a/base/test/power_monitor_test_base.h b/base/test/power_monitor_test_base.h
deleted file mode 100644
index 037670a..0000000
--- a/base/test/power_monitor_test_base.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_POWER_MONITOR_TEST_BASE_H_
-#define BASE_TEST_POWER_MONITOR_TEST_BASE_H_
-
-#include "base/power_monitor/power_monitor.h"
-#include "base/power_monitor/power_monitor_source.h"
-
-namespace base {
-
-class PowerMonitorTestSource : public PowerMonitorSource {
- public:
- PowerMonitorTestSource();
- ~PowerMonitorTestSource() override;
-
- void GeneratePowerStateEvent(bool on_battery_power);
- void GenerateSuspendEvent();
- void GenerateResumeEvent();
-
- protected:
- bool IsOnBatteryPowerImpl() override;
-
- bool test_on_battery_power_;
-};
-
-class PowerMonitorTestObserver : public PowerObserver {
- public:
- PowerMonitorTestObserver();
- ~PowerMonitorTestObserver() override;
-
- // PowerObserver callbacks.
- void OnPowerStateChange(bool on_battery_power) override;
- void OnSuspend() override;
- void OnResume() override;
-
- // Test status counts.
- bool last_power_state() { return last_power_state_; }
- int power_state_changes() { return power_state_changes_; }
- int suspends() { return suspends_; }
- int resumes() { return resumes_; }
-
- private:
- bool last_power_state_; // Last power state we were notified of.
- int power_state_changes_; // Count of OnPowerStateChange notifications.
- int suspends_; // Count of OnSuspend notifications.
- int resumes_; // Count of OnResume notifications.
-};
-
-} // namespace base
-
-#endif // BASE_TEST_POWER_MONITOR_TEST_BASE_H_
diff --git a/base/test/run_all_base_unittests.cc b/base/test/run_all_base_unittests.cc
deleted file mode 100644
index 5d44604..0000000
--- a/base/test/run_all_base_unittests.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2016 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/bind.h"
-#include "base/test/launcher/unit_test_launcher.h"
-#include "base/test/test_suite.h"
-#include "build_config.h"
-
-int main(int argc, char** argv) {
- base::TestSuite test_suite(argc, argv);
- return base::LaunchUnitTests(
- argc, argv,
- base::Bind(&base::TestSuite::Run, base::Unretained(&test_suite)));
-}
diff --git a/base/test/run_all_perftests.cc b/base/test/run_all_perftests.cc
deleted file mode 100644
index 6e38109..0000000
--- a/base/test/run_all_perftests.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// 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/test/perf_test_suite.h"
-
-int main(int argc, char** argv) {
- return base::PerfTestSuite(argc, argv).Run();
-}
diff --git a/base/test/run_all_unittests.cc b/base/test/run_all_unittests.cc
deleted file mode 100644
index dd5a0ad..0000000
--- a/base/test/run_all_unittests.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// 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/bind.h"
-#include "base/test/launcher/unit_test_launcher.h"
-#include "base/test/test_suite.h"
-#include "build_config.h"
-
-int main(int argc, char** argv) {
- base::TestSuite test_suite(argc, argv);
- return base::LaunchUnitTests(
- argc, argv,
- base::BindOnce(&base::TestSuite::Run, base::Unretained(&test_suite)));
-}
diff --git a/base/test/scoped_command_line.cc b/base/test/scoped_command_line.cc
deleted file mode 100644
index c74d243..0000000
--- a/base/test/scoped_command_line.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2016 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/test/scoped_command_line.h"
-
-namespace base {
-namespace test {
-
-ScopedCommandLine::ScopedCommandLine()
- : original_command_line_(*base::CommandLine::ForCurrentProcess()) {}
-
-ScopedCommandLine::~ScopedCommandLine() {
- *base::CommandLine::ForCurrentProcess() = original_command_line_;
-}
-
-CommandLine* ScopedCommandLine::GetProcessCommandLine() {
- return base::CommandLine::ForCurrentProcess();
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/scoped_command_line.h b/base/test/scoped_command_line.h
deleted file mode 100644
index dea0c6a..0000000
--- a/base/test/scoped_command_line.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_SCOPED_COMMAND_LINE_H_
-#define BASE_TEST_SCOPED_COMMAND_LINE_H_
-
-#include "base/command_line.h"
-
-namespace base {
-namespace test {
-
-// Helper class to restore the original command line at the end of the scope.
-// NOTE: In most unit tests, the command line is automatically restored per
-// test, so this class is not necessary if the command line applies to
-// the entire single test.
-class ScopedCommandLine final {
- public:
- ScopedCommandLine();
- ~ScopedCommandLine();
-
- // Gets the command line for the current process.
- // NOTE: Do not name this GetCommandLine as this will conflict with Windows's
- // GetCommandLine and get renamed to GetCommandLineW.
- CommandLine* GetProcessCommandLine();
-
- private:
- const CommandLine original_command_line_;
-};
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_COMMAND_LINE_H_
diff --git a/base/test/scoped_environment_variable_override.cc b/base/test/scoped_environment_variable_override.cc
deleted file mode 100644
index 4b7b387..0000000
--- a/base/test/scoped_environment_variable_override.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 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/test/scoped_environment_variable_override.h"
-
-#include "base/environment.h"
-
-namespace base {
-namespace test {
-
-ScopedEnvironmentVariableOverride::ScopedEnvironmentVariableOverride(
- const std::string& variable_name,
- const std::string& value)
- : environment_(Environment::Create()),
- variable_name_(variable_name),
- overridden_(false),
- was_set_(false) {
- was_set_ = environment_->GetVar(variable_name, &old_value_);
- overridden_ = environment_->SetVar(variable_name, value);
-}
-
-ScopedEnvironmentVariableOverride::~ScopedEnvironmentVariableOverride() {
- if (overridden_) {
- if (was_set_)
- environment_->SetVar(variable_name_, old_value_);
- else
- environment_->UnSetVar(variable_name_);
- }
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/scoped_environment_variable_override.h b/base/test/scoped_environment_variable_override.h
deleted file mode 100644
index b05b5f9..0000000
--- a/base/test/scoped_environment_variable_override.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef BASE_TEST_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
-#define BASE_TEST_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
-
-#include <memory>
-#include <string>
-
-namespace base {
-
-class Environment;
-
-namespace test {
-
-// Helper class to override |variable_name| environment variable to |value| for
-// the lifetime of this class. Upon destruction, the previous value is restored.
-class ScopedEnvironmentVariableOverride final {
- public:
- ScopedEnvironmentVariableOverride(const std::string& variable_name,
- const std::string& value);
- ~ScopedEnvironmentVariableOverride();
-
- base::Environment* GetEnv() { return environment_.get(); }
- bool IsOverridden() { return overridden_; }
- bool WasSet() { return was_set_; }
-
- private:
- std::unique_ptr<Environment> environment_;
- std::string variable_name_;
- bool overridden_;
- bool was_set_;
- std::string old_value_;
-};
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_ENVIRONMENT_VARIABLE_OVERRIDE_H_
diff --git a/base/test/scoped_feature_list.cc b/base/test/scoped_feature_list.cc
deleted file mode 100644
index 7106c44..0000000
--- a/base/test/scoped_feature_list.cc
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright 2016 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/test/scoped_feature_list.h"
-
-#include <algorithm>
-#include <utility>
-#include <vector>
-
-#include "base/memory/ptr_util.h"
-#include "base/metrics/field_trial_param_associator.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-namespace test {
-
-namespace {
-
-std::vector<StringPiece> GetFeatureVector(
- const std::vector<Feature>& features) {
- std::vector<StringPiece> output;
- for (const Feature& feature : features) {
- output.push_back(feature.name);
- }
-
- return output;
-}
-
-// Extracts a feature name from a feature state string. For example, given
-// the input "*MyLovelyFeature<SomeFieldTrial", returns "MyLovelyFeature".
-StringPiece GetFeatureName(StringPiece feature) {
- StringPiece feature_name = feature;
-
- // Remove default info.
- if (feature_name.starts_with("*"))
- feature_name = feature_name.substr(1);
-
- // Remove field_trial info.
- std::size_t index = feature_name.find("<");
- if (index != std::string::npos)
- feature_name = feature_name.substr(0, index);
-
- return feature_name;
-}
-
-struct Features {
- std::vector<StringPiece> enabled_feature_list;
- std::vector<StringPiece> disabled_feature_list;
-};
-
-// Merges previously-specified feature overrides with those passed into one of
-// the Init() methods. |features| should be a list of features previously
-// overridden to be in the |override_state|. |merged_features| should contain
-// the enabled and disabled features passed into the Init() method, plus any
-// overrides merged as a result of previous calls to this function.
-void OverrideFeatures(const std::string& features,
- FeatureList::OverrideState override_state,
- Features* merged_features) {
- std::vector<StringPiece> features_list =
- SplitStringPiece(features, ",", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
- for (StringPiece feature : features_list) {
- StringPiece feature_name = GetFeatureName(feature);
-
- if (ContainsValue(merged_features->enabled_feature_list, feature_name) ||
- ContainsValue(merged_features->disabled_feature_list, feature_name))
- continue;
-
- if (override_state == FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE) {
- merged_features->enabled_feature_list.push_back(feature);
- } else {
- DCHECK_EQ(override_state,
- FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE);
- merged_features->disabled_feature_list.push_back(feature);
- }
- }
-}
-
-} // namespace
-
-ScopedFeatureList::ScopedFeatureList() = default;
-
-ScopedFeatureList::~ScopedFeatureList() {
- if (field_trial_override_)
- base::FieldTrialParamAssociator::GetInstance()->ClearParamsForTesting(
- field_trial_override_->trial_name(),
- field_trial_override_->group_name());
-
- FeatureList::ClearInstanceForTesting();
- if (original_feature_list_)
- FeatureList::RestoreInstanceForTesting(std::move(original_feature_list_));
-}
-
-void ScopedFeatureList::Init() {
- std::unique_ptr<FeatureList> feature_list(new FeatureList);
- feature_list->InitializeFromCommandLine(std::string(), std::string());
- InitWithFeatureList(std::move(feature_list));
-}
-
-void ScopedFeatureList::InitWithFeatureList(
- std::unique_ptr<FeatureList> feature_list) {
- DCHECK(!original_feature_list_);
- original_feature_list_ = FeatureList::ClearInstanceForTesting();
- FeatureList::SetInstance(std::move(feature_list));
-}
-
-void ScopedFeatureList::InitFromCommandLine(
- const std::string& enable_features,
- const std::string& disable_features) {
- std::unique_ptr<FeatureList> feature_list(new FeatureList);
- feature_list->InitializeFromCommandLine(enable_features, disable_features);
- InitWithFeatureList(std::move(feature_list));
-}
-
-void ScopedFeatureList::InitWithFeatures(
- const std::vector<Feature>& enabled_features,
- const std::vector<Feature>& disabled_features) {
- InitWithFeaturesAndFieldTrials(enabled_features, {}, disabled_features);
-}
-
-void ScopedFeatureList::InitAndEnableFeature(const Feature& feature) {
- InitWithFeaturesAndFieldTrials({feature}, {}, {});
-}
-
-void ScopedFeatureList::InitAndEnableFeatureWithFieldTrialOverride(
- const Feature& feature,
- FieldTrial* trial) {
- InitWithFeaturesAndFieldTrials({feature}, {trial}, {});
-}
-
-void ScopedFeatureList::InitAndDisableFeature(const Feature& feature) {
- InitWithFeaturesAndFieldTrials({}, {}, {feature});
-}
-
-void ScopedFeatureList::InitWithFeatureState(const Feature& feature,
- bool enabled) {
- if (enabled) {
- InitAndEnableFeature(feature);
- } else {
- InitAndDisableFeature(feature);
- }
-}
-
-void ScopedFeatureList::InitWithFeaturesAndFieldTrials(
- const std::vector<Feature>& enabled_features,
- const std::vector<FieldTrial*>& trials_for_enabled_features,
- const std::vector<Feature>& disabled_features) {
- DCHECK_LE(trials_for_enabled_features.size(), enabled_features.size());
-
- Features merged_features;
- merged_features.enabled_feature_list = GetFeatureVector(enabled_features);
- merged_features.disabled_feature_list = GetFeatureVector(disabled_features);
-
- FeatureList* feature_list = FeatureList::GetInstance();
-
- // |current_enabled_features| and |current_disabled_features| must declare out
- // of if scope to avoid them out of scope before JoinString calls because
- // |merged_features| may contains StringPiece which holding pointer points to
- // |current_enabled_features| and |current_disabled_features|.
- std::string current_enabled_features;
- std::string current_disabled_features;
- if (feature_list) {
- FeatureList::GetInstance()->GetFeatureOverrides(¤t_enabled_features,
- ¤t_disabled_features);
- OverrideFeatures(current_enabled_features,
- FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE,
- &merged_features);
- OverrideFeatures(current_disabled_features,
- FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE,
- &merged_features);
- }
-
- // Add the field trial overrides. This assumes that |enabled_features| are at
- // the begining of |merged_features.enabled_feature_list|, in the same order.
- std::vector<FieldTrial*>::const_iterator trial_it =
- trials_for_enabled_features.begin();
- auto feature_it = merged_features.enabled_feature_list.begin();
- std::vector<std::unique_ptr<std::string>> features_with_trial;
- features_with_trial.reserve(trials_for_enabled_features.size());
- while (trial_it != trials_for_enabled_features.end()) {
- features_with_trial.push_back(std::make_unique<std::string>(
- feature_it->as_string() + "<" + (*trial_it)->trial_name()));
- // |features_with_trial| owns the string, and feature_it points to it.
- *feature_it = *(features_with_trial.back());
- ++trial_it;
- ++feature_it;
- }
-
- std::string enabled = JoinString(merged_features.enabled_feature_list, ",");
- std::string disabled = JoinString(merged_features.disabled_feature_list, ",");
- InitFromCommandLine(enabled, disabled);
-}
-
-void ScopedFeatureList::InitAndEnableFeatureWithParameters(
- const Feature& feature,
- const std::map<std::string, std::string>& feature_parameters) {
- if (!FieldTrialList::IsGlobalSetForTesting()) {
- field_trial_list_ = std::make_unique<base::FieldTrialList>(nullptr);
- }
-
- // TODO(crbug.com/794021) Remove this unique field trial name hack when there
- // is a cleaner solution.
- // Ensure that each call to this method uses a distinct field trial name.
- // Otherwise, nested calls might fail due to the shared FieldTrialList
- // already having the field trial registered.
- static int num_calls = 0;
- ++num_calls;
- std::string kTrialName =
- "scoped_feature_list_trial_name" + base::NumberToString(num_calls);
- std::string kTrialGroup = "scoped_feature_list_trial_group";
-
- field_trial_override_ =
- base::FieldTrialList::CreateFieldTrial(kTrialName, kTrialGroup);
- DCHECK(field_trial_override_);
- FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams(
- kTrialName, kTrialGroup, feature_parameters);
- InitAndEnableFeatureWithFieldTrialOverride(feature,
- field_trial_override_.get());
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/scoped_feature_list.h b/base/test/scoped_feature_list.h
deleted file mode 100644
index d87b2d8..0000000
--- a/base/test/scoped_feature_list.h
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_SCOPED_FEATURE_LIST_H_
-#define BASE_TEST_SCOPED_FEATURE_LIST_H_
-
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/feature_list.h"
-#include "base/memory/ref_counted.h"
-#include "base/metrics/field_trial.h"
-
-namespace base {
-namespace test {
-
-// ScopedFeatureList resets the global FeatureList instance to a new empty
-// instance and restores the original instance upon destruction.
-// Note: Re-using the same object is not allowed. To reset the feature
-// list and initialize it anew, destroy an existing scoped list and init
-// a new one.
-//
-// ScopedFeatureList needs to be initialized (via one of Init... methods)
-// before running code that inspects the state of features. In practice this
-// means:
-// - In browser tests, one of Init... methods should be called from the
-// overriden ::testing::Test::SetUp method. For example:
-// void SetUp() override {
-// scoped_feature_list_.InitAndEnableFeature(features::kMyFeatureHere);
-// InProcessBrowserTest::SetUp();
-// }
-class ScopedFeatureList final {
- public:
- ScopedFeatureList();
- ~ScopedFeatureList();
-
- // WARNING: This method will reset any globally configured features to their
- // default values, which can hide feature interaction bugs. Please use
- // sparingly. https://crbug.com/713390
- // Initializes and registers a FeatureList instance with no overrides.
- void Init();
-
- // WARNING: This method will reset any globally configured features to their
- // default values, which can hide feature interaction bugs. Please use
- // sparingly. https://crbug.com/713390
- // Initializes and registers the given FeatureList instance.
- void InitWithFeatureList(std::unique_ptr<FeatureList> feature_list);
-
- // WARNING: This method will reset any globally configured features to their
- // default values, which can hide feature interaction bugs. Please use
- // sparingly. https://crbug.com/713390
- // Initializes and registers a FeatureList instance with only the given
- // enabled and disabled features (comma-separated names).
- void InitFromCommandLine(const std::string& enable_features,
- const std::string& disable_features);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with the given enabled and disabled features.
- // Any feature overrides already present in the global FeatureList will
- // continue to apply, unless they conflict with the overrides passed into this
- // method. This is important for testing potentially unexpected feature
- // interactions.
- void InitWithFeatures(const std::vector<Feature>& enabled_features,
- const std::vector<Feature>& disabled_features);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with single enabled feature.
- void InitAndEnableFeature(const Feature& feature);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with single enabled feature and associated field
- // trial parameters.
- // Note: this creates a scoped global field trial list if there is not
- // currently one.
- void InitAndEnableFeatureWithParameters(
- const Feature& feature,
- const std::map<std::string, std::string>& feature_parameters);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with single disabled feature.
- void InitAndDisableFeature(const Feature& feature);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overriden with a single feature either enabled or
- // disabled depending on |enabled|.
- void InitWithFeatureState(const Feature& feature, bool enabled);
-
- private:
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with the given enabled and disabled features.
- // Any feature overrides already present in the global FeatureList will
- // continue to apply, unless they conflict with the overrides passed into this
- // method.
- // Field trials will apply to the enabled features, in the same order. The
- // number of trials must be less (or equal) than the number of enabled
- // features.
- // Trials are expected to outlive the ScopedFeatureList.
- void InitWithFeaturesAndFieldTrials(
- const std::vector<Feature>& enabled_features,
- const std::vector<FieldTrial*>& trials_for_enabled_features,
- const std::vector<Feature>& disabled_features);
-
- // Initializes and registers a FeatureList instance based on present
- // FeatureList and overridden with single enabled feature and associated field
- // trial override.
- // |trial| is expected to outlive the ScopedFeatureList.
- void InitAndEnableFeatureWithFieldTrialOverride(const Feature& feature,
- FieldTrial* trial);
-
- std::unique_ptr<FeatureList> original_feature_list_;
- scoped_refptr<FieldTrial> field_trial_override_;
- std::unique_ptr<base::FieldTrialList> field_trial_list_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedFeatureList);
-};
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_FEATURE_LIST_H_
diff --git a/base/test/scoped_locale.cc b/base/test/scoped_locale.cc
deleted file mode 100644
index c018284..0000000
--- a/base/test/scoped_locale.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2011 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/test/scoped_locale.h"
-
-#include <locale.h>
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-ScopedLocale::ScopedLocale(const std::string& locale) {
- prev_locale_ = setlocale(LC_ALL, nullptr);
- EXPECT_TRUE(setlocale(LC_ALL, locale.c_str()) != nullptr)
- << "Failed to set locale: " << locale;
-}
-
-ScopedLocale::~ScopedLocale() {
- EXPECT_STREQ(prev_locale_.c_str(), setlocale(LC_ALL, prev_locale_.c_str()));
-}
-
-} // namespace base
diff --git a/base/test/scoped_locale.h b/base/test/scoped_locale.h
deleted file mode 100644
index ef64e98..0000000
--- a/base/test/scoped_locale.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef BASE_TEST_SCOPED_LOCALE_H_
-#define BASE_TEST_SCOPED_LOCALE_H_
-
-#include <string>
-
-#include "base/macros.h"
-
-namespace base {
-
-// Sets the given |locale| on construction, and restores the previous locale
-// on destruction.
-class ScopedLocale {
- public:
- explicit ScopedLocale(const std::string& locale);
- ~ScopedLocale();
-
- private:
- std::string prev_locale_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedLocale);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_LOCALE_H_
diff --git a/base/test/scoped_mock_time_message_loop_task_runner.cc b/base/test/scoped_mock_time_message_loop_task_runner.cc
deleted file mode 100644
index 8e855e5..0000000
--- a/base/test/scoped_mock_time_message_loop_task_runner.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2015 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/test/scoped_mock_time_message_loop_task_runner.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop_current.h"
-#include "base/run_loop.h"
-#include "base/test/test_pending_task.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-
-namespace base {
-
-ScopedMockTimeMessageLoopTaskRunner::ScopedMockTimeMessageLoopTaskRunner()
- : task_runner_(new TestMockTimeTaskRunner),
- previous_task_runner_(ThreadTaskRunnerHandle::Get()) {
- DCHECK(MessageLoopCurrent::Get());
- // To ensure that we process any initialization tasks posted to the
- // MessageLoop by a test fixture before replacing its TaskRunner.
- RunLoop().RunUntilIdle();
- MessageLoopCurrent::Get()->SetTaskRunner(task_runner_);
-}
-
-ScopedMockTimeMessageLoopTaskRunner::~ScopedMockTimeMessageLoopTaskRunner() {
- DCHECK(previous_task_runner_->RunsTasksInCurrentSequence());
- DCHECK_EQ(task_runner_, ThreadTaskRunnerHandle::Get());
- for (auto& pending_task : task_runner_->TakePendingTasks()) {
- previous_task_runner_->PostDelayedTask(
- pending_task.location, std::move(pending_task.task),
- pending_task.GetTimeToRun() - task_runner_->NowTicks());
- }
- MessageLoopCurrent::Get()->SetTaskRunner(std::move(previous_task_runner_));
-}
-
-} // namespace base
diff --git a/base/test/scoped_mock_time_message_loop_task_runner.h b/base/test/scoped_mock_time_message_loop_task_runner.h
deleted file mode 100644
index 2a034ee..0000000
--- a/base/test/scoped_mock_time_message_loop_task_runner.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_
-#define BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/test/test_mock_time_task_runner.h"
-
-namespace base {
-
-class SingleThreadTaskRunner;
-
-// A scoped wrapper around TestMockTimeTaskRunner that replaces
-// MessageLoopCurrent::Get()'s task runner (and consequently
-// ThreadTaskRunnerHandle) with a TestMockTimeTaskRunner and resets it back at
-// the end of its scope.
-//
-// Note: RunLoop() will not work in the scope of a
-// ScopedMockTimeMessageLoopTaskRunner, the underlying TestMockTimeTaskRunner's
-// methods must be used instead to pump tasks.
-//
-// DEPRECATED: Use a TestMockTimeTaskRunner::Type::kBoundToThread instead of a
-// MessageLoop + ScopedMockTimeMessageLoopTaskRunner.
-// TODO(gab): Remove usage of this API and delete it.
-class ScopedMockTimeMessageLoopTaskRunner {
- public:
- ScopedMockTimeMessageLoopTaskRunner();
- ~ScopedMockTimeMessageLoopTaskRunner();
-
- TestMockTimeTaskRunner* task_runner() { return task_runner_.get(); }
- TestMockTimeTaskRunner* operator->() { return task_runner_.get(); }
-
- private:
- const scoped_refptr<TestMockTimeTaskRunner> task_runner_;
- scoped_refptr<SingleThreadTaskRunner> previous_task_runner_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedMockTimeMessageLoopTaskRunner);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_MOCK_TIME_MESSAGE_LOOP_TASK_RUNNER_H_
diff --git a/base/test/scoped_path_override.cc b/base/test/scoped_path_override.cc
deleted file mode 100644
index b8cfd4a..0000000
--- a/base/test/scoped_path_override.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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/test/scoped_path_override.h"
-
-#include "base/logging.h"
-#include "base/path_service.h"
-
-namespace base {
-
-ScopedPathOverride::ScopedPathOverride(int key) : key_(key) {
- bool result = temp_dir_.CreateUniqueTempDir();
- CHECK(result);
- result = PathService::Override(key, temp_dir_.GetPath());
- CHECK(result);
-}
-
-ScopedPathOverride::ScopedPathOverride(int key, const base::FilePath& dir)
- : key_(key) {
- bool result = PathService::Override(key, dir);
- CHECK(result);
-}
-
-ScopedPathOverride::ScopedPathOverride(int key,
- const FilePath& path,
- bool is_absolute,
- bool create)
- : key_(key) {
- bool result =
- PathService::OverrideAndCreateIfNeeded(key, path, is_absolute, create);
- CHECK(result);
-}
-
-ScopedPathOverride::~ScopedPathOverride() {
- bool result = PathService::RemoveOverride(key_);
- CHECK(result) << "The override seems to have been removed already!";
-}
-
-} // namespace base
diff --git a/base/test/scoped_path_override.h b/base/test/scoped_path_override.h
deleted file mode 100644
index f589149..0000000
--- a/base/test/scoped_path_override.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_SCOPED_PATH_OVERRIDE_H_
-#define BASE_TEST_SCOPED_PATH_OVERRIDE_H_
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/macros.h"
-
-namespace base {
-
-class FilePath;
-
-// Sets a path override on construction, and removes it when the object goes out
-// of scope. This class is intended to be used by tests that need to override
-// paths to ensure their overrides are properly handled and reverted when the
-// scope of the test is left.
-class ScopedPathOverride {
- public:
- // Contructor that initializes the override to a scoped temp directory.
- explicit ScopedPathOverride(int key);
-
- // Constructor that would use a path provided by the user.
- ScopedPathOverride(int key, const FilePath& dir);
-
- // See PathService::OverrideAndCreateIfNeeded.
- ScopedPathOverride(int key,
- const FilePath& path,
- bool is_absolute,
- bool create);
- ~ScopedPathOverride();
-
- private:
- int key_;
- ScopedTempDir temp_dir_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedPathOverride);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_SCOPED_PATH_OVERRIDE_H_
diff --git a/base/test/sequenced_task_runner_test_template.cc b/base/test/sequenced_task_runner_test_template.cc
deleted file mode 100644
index de68492..0000000
--- a/base/test/sequenced_task_runner_test_template.cc
+++ /dev/null
@@ -1,269 +0,0 @@
-// 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/test/sequenced_task_runner_test_template.h"
-
-#include <ostream>
-
-#include "base/location.h"
-
-namespace base {
-
-namespace internal {
-
-TaskEvent::TaskEvent(int i, Type type)
- : i(i), type(type) {
-}
-
-SequencedTaskTracker::SequencedTaskTracker()
- : next_post_i_(0),
- task_end_count_(0),
- task_end_cv_(&lock_) {
-}
-
-void SequencedTaskTracker::PostWrappedNonNestableTask(
- SequencedTaskRunner* task_runner,
- const Closure& task) {
- AutoLock event_lock(lock_);
- const int post_i = next_post_i_++;
- Closure wrapped_task = Bind(&SequencedTaskTracker::RunTask, this,
- task, post_i);
- task_runner->PostNonNestableTask(FROM_HERE, wrapped_task);
- TaskPosted(post_i);
-}
-
-void SequencedTaskTracker::PostWrappedNestableTask(
- SequencedTaskRunner* task_runner,
- const Closure& task) {
- AutoLock event_lock(lock_);
- const int post_i = next_post_i_++;
- Closure wrapped_task = Bind(&SequencedTaskTracker::RunTask, this,
- task, post_i);
- task_runner->PostTask(FROM_HERE, wrapped_task);
- TaskPosted(post_i);
-}
-
-void SequencedTaskTracker::PostWrappedDelayedNonNestableTask(
- SequencedTaskRunner* task_runner,
- const Closure& task,
- TimeDelta delay) {
- AutoLock event_lock(lock_);
- const int post_i = next_post_i_++;
- Closure wrapped_task = Bind(&SequencedTaskTracker::RunTask, this,
- task, post_i);
- task_runner->PostNonNestableDelayedTask(FROM_HERE, wrapped_task, delay);
- TaskPosted(post_i);
-}
-
-void SequencedTaskTracker::PostNonNestableTasks(
- SequencedTaskRunner* task_runner,
- int task_count) {
- for (int i = 0; i < task_count; ++i) {
- PostWrappedNonNestableTask(task_runner, Closure());
- }
-}
-
-void SequencedTaskTracker::RunTask(const Closure& task, int task_i) {
- TaskStarted(task_i);
- if (!task.is_null())
- task.Run();
- TaskEnded(task_i);
-}
-
-void SequencedTaskTracker::TaskPosted(int i) {
- // Caller must own |lock_|.
- events_.push_back(TaskEvent(i, TaskEvent::POST));
-}
-
-void SequencedTaskTracker::TaskStarted(int i) {
- AutoLock lock(lock_);
- events_.push_back(TaskEvent(i, TaskEvent::START));
-}
-
-void SequencedTaskTracker::TaskEnded(int i) {
- AutoLock lock(lock_);
- events_.push_back(TaskEvent(i, TaskEvent::END));
- ++task_end_count_;
- task_end_cv_.Signal();
-}
-
-const std::vector<TaskEvent>&
-SequencedTaskTracker::GetTaskEvents() const {
- return events_;
-}
-
-void SequencedTaskTracker::WaitForCompletedTasks(int count) {
- AutoLock lock(lock_);
- while (task_end_count_ < count)
- task_end_cv_.Wait();
-}
-
-SequencedTaskTracker::~SequencedTaskTracker() = default;
-
-void PrintTo(const TaskEvent& event, std::ostream* os) {
- *os << "(i=" << event.i << ", type=";
- switch (event.type) {
- case TaskEvent::POST: *os << "POST"; break;
- case TaskEvent::START: *os << "START"; break;
- case TaskEvent::END: *os << "END"; break;
- }
- *os << ")";
-}
-
-namespace {
-
-// Returns the task ordinals for the task event type |type| in the order that
-// they were recorded.
-std::vector<int> GetEventTypeOrder(const std::vector<TaskEvent>& events,
- TaskEvent::Type type) {
- std::vector<int> tasks;
- std::vector<TaskEvent>::const_iterator event;
- for (event = events.begin(); event != events.end(); ++event) {
- if (event->type == type)
- tasks.push_back(event->i);
- }
- return tasks;
-}
-
-// Returns all task events for task |task_i|.
-std::vector<TaskEvent::Type> GetEventsForTask(
- const std::vector<TaskEvent>& events,
- int task_i) {
- std::vector<TaskEvent::Type> task_event_orders;
- std::vector<TaskEvent>::const_iterator event;
- for (event = events.begin(); event != events.end(); ++event) {
- if (event->i == task_i)
- task_event_orders.push_back(event->type);
- }
- return task_event_orders;
-}
-
-// Checks that the task events for each task in |events| occur in the order
-// {POST, START, END}, and that there is only one instance of each event type
-// per task.
-::testing::AssertionResult CheckEventOrdersForEachTask(
- const std::vector<TaskEvent>& events,
- int task_count) {
- std::vector<TaskEvent::Type> expected_order;
- expected_order.push_back(TaskEvent::POST);
- expected_order.push_back(TaskEvent::START);
- expected_order.push_back(TaskEvent::END);
-
- // This is O(n^2), but it runs fast enough currently so is not worth
- // optimizing.
- for (int i = 0; i < task_count; ++i) {
- const std::vector<TaskEvent::Type> task_events =
- GetEventsForTask(events, i);
- if (task_events != expected_order) {
- return ::testing::AssertionFailure()
- << "Events for task " << i << " are out of order; expected: "
- << ::testing::PrintToString(expected_order) << "; actual: "
- << ::testing::PrintToString(task_events);
- }
- }
- return ::testing::AssertionSuccess();
-}
-
-// Checks that no two tasks were running at the same time. I.e. the only
-// events allowed between the START and END of a task are the POSTs of other
-// tasks.
-::testing::AssertionResult CheckNoTaskRunsOverlap(
- const std::vector<TaskEvent>& events) {
- // If > -1, we're currently inside a START, END pair.
- int current_task_i = -1;
-
- std::vector<TaskEvent>::const_iterator event;
- for (event = events.begin(); event != events.end(); ++event) {
- bool spurious_event_found = false;
-
- if (current_task_i == -1) { // Not inside a START, END pair.
- switch (event->type) {
- case TaskEvent::POST:
- break;
- case TaskEvent::START:
- current_task_i = event->i;
- break;
- case TaskEvent::END:
- spurious_event_found = true;
- break;
- }
-
- } else { // Inside a START, END pair.
- bool interleaved_task_detected = false;
-
- switch (event->type) {
- case TaskEvent::POST:
- if (event->i == current_task_i)
- spurious_event_found = true;
- break;
- case TaskEvent::START:
- interleaved_task_detected = true;
- break;
- case TaskEvent::END:
- if (event->i != current_task_i)
- interleaved_task_detected = true;
- else
- current_task_i = -1;
- break;
- }
-
- if (interleaved_task_detected) {
- return ::testing::AssertionFailure()
- << "Found event " << ::testing::PrintToString(*event)
- << " between START and END events for task " << current_task_i
- << "; event dump: " << ::testing::PrintToString(events);
- }
- }
-
- if (spurious_event_found) {
- const int event_i = event - events.begin();
- return ::testing::AssertionFailure()
- << "Spurious event " << ::testing::PrintToString(*event)
- << " at position " << event_i << "; event dump: "
- << ::testing::PrintToString(events);
- }
- }
-
- return ::testing::AssertionSuccess();
-}
-
-} // namespace
-
-::testing::AssertionResult CheckNonNestableInvariants(
- const std::vector<TaskEvent>& events,
- int task_count) {
- const std::vector<int> post_order =
- GetEventTypeOrder(events, TaskEvent::POST);
- const std::vector<int> start_order =
- GetEventTypeOrder(events, TaskEvent::START);
- const std::vector<int> end_order =
- GetEventTypeOrder(events, TaskEvent::END);
-
- if (start_order != post_order) {
- return ::testing::AssertionFailure()
- << "Expected START order (which equals actual POST order): \n"
- << ::testing::PrintToString(post_order)
- << "\n Actual START order:\n"
- << ::testing::PrintToString(start_order);
- }
-
- if (end_order != post_order) {
- return ::testing::AssertionFailure()
- << "Expected END order (which equals actual POST order): \n"
- << ::testing::PrintToString(post_order)
- << "\n Actual END order:\n"
- << ::testing::PrintToString(end_order);
- }
-
- const ::testing::AssertionResult result =
- CheckEventOrdersForEachTask(events, task_count);
- if (!result)
- return result;
-
- return CheckNoTaskRunsOverlap(events);
-}
-
-} // namespace internal
-
-} // namespace base
diff --git a/base/test/sequenced_task_runner_test_template.h b/base/test/sequenced_task_runner_test_template.h
deleted file mode 100644
index a510030..0000000
--- a/base/test/sequenced_task_runner_test_template.h
+++ /dev/null
@@ -1,350 +0,0 @@
-// 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.
-
-// SequencedTaskRunnerTest defines tests that implementations of
-// SequencedTaskRunner should pass in order to be conformant.
-// See task_runner_test_template.h for a description of how to use the
-// constructs in this file; these work the same.
-
-#ifndef BASE_TEST_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_
-#define BASE_TEST_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_
-
-#include <cstddef>
-#include <iosfwd>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/sequenced_task_runner.h"
-#include "base/synchronization/condition_variable.h"
-#include "base/synchronization/lock.h"
-#include "base/time/time.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-namespace internal {
-
-struct TaskEvent {
- enum Type { POST, START, END };
- TaskEvent(int i, Type type);
- int i;
- Type type;
-};
-
-// Utility class used in the tests below.
-class SequencedTaskTracker : public RefCountedThreadSafe<SequencedTaskTracker> {
- public:
- SequencedTaskTracker();
-
- // Posts the non-nestable task |task|, and records its post event.
- void PostWrappedNonNestableTask(SequencedTaskRunner* task_runner,
- const Closure& task);
-
- // Posts the nestable task |task|, and records its post event.
- void PostWrappedNestableTask(SequencedTaskRunner* task_runner,
- const Closure& task);
-
- // Posts the delayed non-nestable task |task|, and records its post event.
- void PostWrappedDelayedNonNestableTask(SequencedTaskRunner* task_runner,
- const Closure& task,
- TimeDelta delay);
-
- // Posts |task_count| non-nestable tasks.
- void PostNonNestableTasks(SequencedTaskRunner* task_runner, int task_count);
-
- const std::vector<TaskEvent>& GetTaskEvents() const;
-
- // Returns after the tracker observes a total of |count| task completions.
- void WaitForCompletedTasks(int count);
-
- private:
- friend class RefCountedThreadSafe<SequencedTaskTracker>;
-
- ~SequencedTaskTracker();
-
- // A task which runs |task|, recording the start and end events.
- void RunTask(const Closure& task, int task_i);
-
- // Records a post event for task |i|. The owner is expected to be holding
- // |lock_| (unlike |TaskStarted| and |TaskEnded|).
- void TaskPosted(int i);
-
- // Records a start event for task |i|.
- void TaskStarted(int i);
-
- // Records a end event for task |i|.
- void TaskEnded(int i);
-
- // Protects events_, next_post_i_, task_end_count_ and task_end_cv_.
- Lock lock_;
-
- // The events as they occurred for each task (protected by lock_).
- std::vector<TaskEvent> events_;
-
- // The ordinal to be used for the next task-posting task (protected by
- // lock_).
- int next_post_i_;
-
- // The number of task end events we've received.
- int task_end_count_;
- ConditionVariable task_end_cv_;
-
- DISALLOW_COPY_AND_ASSIGN(SequencedTaskTracker);
-};
-
-void PrintTo(const TaskEvent& event, std::ostream* os);
-
-// Checks the non-nestable task invariants for all tasks in |events|.
-//
-// The invariants are:
-// 1) Events started and ended in the same order that they were posted.
-// 2) Events for an individual tasks occur in the order {POST, START, END},
-// and there is only one instance of each event type for a task.
-// 3) The only events between a task's START and END events are the POSTs of
-// other tasks. I.e. tasks were run sequentially, not interleaved.
-::testing::AssertionResult CheckNonNestableInvariants(
- const std::vector<TaskEvent>& events,
- int task_count);
-
-} // namespace internal
-
-template <typename TaskRunnerTestDelegate>
-class SequencedTaskRunnerTest : public testing::Test {
- protected:
- SequencedTaskRunnerTest()
- : task_tracker_(new internal::SequencedTaskTracker()) {}
-
- const scoped_refptr<internal::SequencedTaskTracker> task_tracker_;
- TaskRunnerTestDelegate delegate_;
-};
-
-TYPED_TEST_CASE_P(SequencedTaskRunnerTest);
-
-// This test posts N non-nestable tasks in sequence, and expects them to run
-// in FIFO order, with no part of any two tasks' execution
-// overlapping. I.e. that each task starts only after the previously-posted
-// one has finished.
-TYPED_TEST_P(SequencedTaskRunnerTest, SequentialNonNestable) {
- const int kTaskCount = 1000;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- this->task_tracker_->PostWrappedNonNestableTask(
- task_runner.get(),
- Bind(&PlatformThread::Sleep, TimeDelta::FromSeconds(1)));
- for (int i = 1; i < kTaskCount; ++i) {
- this->task_tracker_->PostWrappedNonNestableTask(task_runner.get(),
- Closure());
- }
-
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-// This test posts N nestable tasks in sequence. It has the same expectations
-// as SequentialNonNestable because even though the tasks are nestable, they
-// will not be run nestedly in this case.
-TYPED_TEST_P(SequencedTaskRunnerTest, SequentialNestable) {
- const int kTaskCount = 1000;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- this->task_tracker_->PostWrappedNestableTask(
- task_runner.get(),
- Bind(&PlatformThread::Sleep, TimeDelta::FromSeconds(1)));
- for (int i = 1; i < kTaskCount; ++i) {
- this->task_tracker_->PostWrappedNestableTask(task_runner.get(), Closure());
- }
-
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-// This test posts non-nestable tasks in order of increasing delay, and checks
-// that that the tasks are run in FIFO order and that there is no execution
-// overlap whatsoever between any two tasks.
-TYPED_TEST_P(SequencedTaskRunnerTest, SequentialDelayedNonNestable) {
- const int kTaskCount = 20;
- const int kDelayIncrementMs = 50;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- for (int i = 0; i < kTaskCount; ++i) {
- this->task_tracker_->PostWrappedDelayedNonNestableTask(
- task_runner.get(), Closure(),
- TimeDelta::FromMilliseconds(kDelayIncrementMs * i));
- }
-
- this->task_tracker_->WaitForCompletedTasks(kTaskCount);
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-// This test posts a fast, non-nestable task from within each of a number of
-// slow, non-nestable tasks and checks that they all run in the sequence they
-// were posted in and that there is no execution overlap whatsoever.
-TYPED_TEST_P(SequencedTaskRunnerTest, NonNestablePostFromNonNestableTask) {
- const int kParentCount = 10;
- const int kChildrenPerParent = 10;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- for (int i = 0; i < kParentCount; ++i) {
- Closure task = Bind(
- &internal::SequencedTaskTracker::PostNonNestableTasks,
- this->task_tracker_,
- RetainedRef(task_runner),
- kChildrenPerParent);
- this->task_tracker_->PostWrappedNonNestableTask(task_runner.get(), task);
- }
-
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(
- this->task_tracker_->GetTaskEvents(),
- kParentCount * (kChildrenPerParent + 1)));
-}
-
-// This test posts two tasks with the same delay, and checks that the tasks are
-// run in the order in which they were posted.
-//
-// NOTE: This is actually an approximate test since the API only takes a
-// "delay" parameter, so we are not exactly simulating two tasks that get
-// posted at the exact same time. It would be nice if the API allowed us to
-// specify the desired run time.
-TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTasksSameDelay) {
- const int kTaskCount = 2;
- const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- this->task_tracker_->PostWrappedDelayedNonNestableTask(task_runner.get(),
- Closure(), kDelay);
- this->task_tracker_->PostWrappedDelayedNonNestableTask(task_runner.get(),
- Closure(), kDelay);
- this->task_tracker_->WaitForCompletedTasks(kTaskCount);
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-// This test posts a normal task and a delayed task, and checks that the
-// delayed task runs after the normal task even if the normal task takes
-// a long time to run.
-TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterLongTask) {
- const int kTaskCount = 2;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- this->task_tracker_->PostWrappedNonNestableTask(
- task_runner.get(),
- base::Bind(&PlatformThread::Sleep, TimeDelta::FromMilliseconds(50)));
- this->task_tracker_->PostWrappedDelayedNonNestableTask(
- task_runner.get(), Closure(), TimeDelta::FromMilliseconds(10));
- this->task_tracker_->WaitForCompletedTasks(kTaskCount);
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-// Test that a pile of normal tasks and a delayed task run in the
-// time-to-run order.
-TYPED_TEST_P(SequencedTaskRunnerTest, DelayedTaskAfterManyLongTasks) {
- const int kTaskCount = 11;
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- for (int i = 0; i < kTaskCount - 1; i++) {
- this->task_tracker_->PostWrappedNonNestableTask(
- task_runner.get(),
- base::Bind(&PlatformThread::Sleep, TimeDelta::FromMilliseconds(50)));
- }
- this->task_tracker_->PostWrappedDelayedNonNestableTask(
- task_runner.get(), Closure(), TimeDelta::FromMilliseconds(10));
- this->task_tracker_->WaitForCompletedTasks(kTaskCount);
- this->delegate_.StopTaskRunner();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
-}
-
-
-// TODO(francoisk777@gmail.com) Add a test, similiar to the above, which runs
-// some tasked nestedly (which should be implemented in the test
-// delegate). Also add, to the the test delegate, a predicate which checks
-// whether the implementation supports nested tasks.
-//
-
-// The SequencedTaskRunnerTest test case verifies behaviour that is expected
-// from a sequenced task runner in order to be conformant.
-REGISTER_TYPED_TEST_CASE_P(SequencedTaskRunnerTest,
- SequentialNonNestable,
- SequentialNestable,
- SequentialDelayedNonNestable,
- NonNestablePostFromNonNestableTask,
- DelayedTasksSameDelay,
- DelayedTaskAfterLongTask,
- DelayedTaskAfterManyLongTasks);
-
-template <typename TaskRunnerTestDelegate>
-class SequencedTaskRunnerDelayedTest
- : public SequencedTaskRunnerTest<TaskRunnerTestDelegate> {};
-
-TYPED_TEST_CASE_P(SequencedTaskRunnerDelayedTest);
-
-// This test posts a delayed task, and checks that the task is run later than
-// the specified time.
-TYPED_TEST_P(SequencedTaskRunnerDelayedTest, DelayedTaskBasic) {
- const int kTaskCount = 1;
- const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
-
- this->delegate_.StartTaskRunner();
- const scoped_refptr<SequencedTaskRunner> task_runner =
- this->delegate_.GetTaskRunner();
-
- Time time_before_run = Time::Now();
- this->task_tracker_->PostWrappedDelayedNonNestableTask(task_runner.get(),
- Closure(), kDelay);
- this->task_tracker_->WaitForCompletedTasks(kTaskCount);
- this->delegate_.StopTaskRunner();
- Time time_after_run = Time::Now();
-
- EXPECT_TRUE(CheckNonNestableInvariants(this->task_tracker_->GetTaskEvents(),
- kTaskCount));
- EXPECT_LE(kDelay, time_after_run - time_before_run);
-}
-
-// SequencedTaskRunnerDelayedTest tests that the |delay| parameter of
-// is used to actually wait for |delay| ms before executing the task.
-// This is not mandatory for a SequencedTaskRunner to be compliant.
-REGISTER_TYPED_TEST_CASE_P(SequencedTaskRunnerDelayedTest, DelayedTaskBasic);
-
-} // namespace base
-
-#endif // BASE_TEST_SEQUENCED_TASK_RUNNER_TEST_TEMPLATE_H_
diff --git a/base/test/simple_test_clock.cc b/base/test/simple_test_clock.cc
deleted file mode 100644
index 7486d79..0000000
--- a/base/test/simple_test_clock.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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/test/simple_test_clock.h"
-
-namespace base {
-
-SimpleTestClock::SimpleTestClock() = default;
-
-SimpleTestClock::~SimpleTestClock() = default;
-
-Time SimpleTestClock::Now() const {
- AutoLock lock(lock_);
- return now_;
-}
-
-void SimpleTestClock::Advance(TimeDelta delta) {
- AutoLock lock(lock_);
- now_ += delta;
-}
-
-void SimpleTestClock::SetNow(Time now) {
- AutoLock lock(lock_);
- now_ = now;
-}
-
-} // namespace base
diff --git a/base/test/simple_test_clock.h b/base/test/simple_test_clock.h
deleted file mode 100644
index 0cbcf08..0000000
--- a/base/test/simple_test_clock.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_SIMPLE_TEST_CLOCK_H_
-#define BASE_TEST_SIMPLE_TEST_CLOCK_H_
-
-#include "base/compiler_specific.h"
-#include "base/synchronization/lock.h"
-#include "base/time/clock.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// SimpleTestClock is a Clock implementation that gives control over
-// the returned Time objects. All methods may be called from any
-// thread.
-class SimpleTestClock : public Clock {
- public:
- // Starts off with a clock set to Time().
- SimpleTestClock();
- ~SimpleTestClock() override;
-
- Time Now() const override;
-
- // Advances the clock by |delta|.
- void Advance(TimeDelta delta);
-
- // Sets the clock to the given time.
- void SetNow(Time now);
-
- private:
- // Protects |now_|.
- mutable Lock lock_;
-
- Time now_;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_SIMPLE_TEST_CLOCK_H_
diff --git a/base/test/simple_test_tick_clock.cc b/base/test/simple_test_tick_clock.cc
deleted file mode 100644
index 7ee3401..0000000
--- a/base/test/simple_test_tick_clock.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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/test/simple_test_tick_clock.h"
-
-#include "base/logging.h"
-
-namespace base {
-
-SimpleTestTickClock::SimpleTestTickClock() = default;
-
-SimpleTestTickClock::~SimpleTestTickClock() = default;
-
-TimeTicks SimpleTestTickClock::NowTicks() const {
- AutoLock lock(lock_);
- return now_ticks_;
-}
-
-void SimpleTestTickClock::Advance(TimeDelta delta) {
- AutoLock lock(lock_);
- DCHECK(delta >= TimeDelta());
- now_ticks_ += delta;
-}
-
-void SimpleTestTickClock::SetNowTicks(TimeTicks ticks) {
- AutoLock lock(lock_);
- now_ticks_ = ticks;
-}
-
-} // namespace base
diff --git a/base/test/simple_test_tick_clock.h b/base/test/simple_test_tick_clock.h
deleted file mode 100644
index 923eba4..0000000
--- a/base/test/simple_test_tick_clock.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_SIMPLE_TEST_TICK_CLOCK_H_
-#define BASE_TEST_SIMPLE_TEST_TICK_CLOCK_H_
-
-#include "base/compiler_specific.h"
-#include "base/synchronization/lock.h"
-#include "base/time/tick_clock.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// SimpleTestTickClock is a TickClock implementation that gives
-// control over the returned TimeTicks objects. All methods may be
-// called from any thread.
-class SimpleTestTickClock : public TickClock {
- public:
- // Starts off with a clock set to TimeTicks().
- SimpleTestTickClock();
- ~SimpleTestTickClock() override;
-
- TimeTicks NowTicks() const override;
-
- // Advances the clock by |delta|, which must not be negative.
- void Advance(TimeDelta delta);
-
- // Sets the clock to the given time.
- void SetNowTicks(TimeTicks ticks);
-
- private:
- // Protects |now_ticks_|.
- mutable Lock lock_;
-
- TimeTicks now_ticks_;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_SIMPLE_TEST_TICK_CLOCK_H_
diff --git a/base/test/task_runner_test_template.cc b/base/test/task_runner_test_template.cc
deleted file mode 100644
index fe70247..0000000
--- a/base/test/task_runner_test_template.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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/test/task_runner_test_template.h"
-
-namespace base {
-
-namespace test {
-
-TaskTracker::TaskTracker() : task_runs_(0), task_runs_cv_(&lock_) {}
-
-TaskTracker::~TaskTracker() = default;
-
-Closure TaskTracker::WrapTask(const Closure& task, int i) {
- return Bind(&TaskTracker::RunTask, this, task, i);
-}
-
-void TaskTracker::RunTask(const Closure& task, int i) {
- AutoLock lock(lock_);
- if (!task.is_null()) {
- task.Run();
- }
- ++task_run_counts_[i];
- ++task_runs_;
- task_runs_cv_.Signal();
-}
-
-std::map<int, int> TaskTracker::GetTaskRunCounts() const {
- AutoLock lock(lock_);
- return task_run_counts_;
-}
-
-void TaskTracker::WaitForCompletedTasks(int count) {
- AutoLock lock(lock_);
- while (task_runs_ < count)
- task_runs_cv_.Wait();
-}
-
-void ExpectRunsTasksInCurrentSequence(bool expected_value,
- TaskRunner* task_runner) {
- EXPECT_EQ(expected_value, task_runner->RunsTasksInCurrentSequence());
-}
-
-} // namespace test
-
-} // namespace base
diff --git a/base/test/task_runner_test_template.h b/base/test/task_runner_test_template.h
deleted file mode 100644
index 4670522..0000000
--- a/base/test/task_runner_test_template.h
+++ /dev/null
@@ -1,230 +0,0 @@
-// 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.
-
-// This file defines tests that implementations of TaskRunner should
-// pass in order to be conformant, as well as test cases for optional behavior.
-// Here's how you use it to test your implementation.
-//
-// Say your class is called MyTaskRunner. Then you need to define a
-// class called MyTaskRunnerTestDelegate in my_task_runner_unittest.cc
-// like this:
-//
-// class MyTaskRunnerTestDelegate {
-// public:
-// // Tasks posted to the task runner after this and before
-// // StopTaskRunner() is called is called should run successfully.
-// void StartTaskRunner() {
-// ...
-// }
-//
-// // Should return the task runner implementation. Only called
-// // after StartTaskRunner and before StopTaskRunner.
-// scoped_refptr<MyTaskRunner> GetTaskRunner() {
-// ...
-// }
-//
-// // Stop the task runner and make sure all tasks posted before
-// // this is called are run. Caveat: delayed tasks are not run,
- // they're simply deleted.
-// void StopTaskRunner() {
-// ...
-// }
-// };
-//
-// The TaskRunnerTest test harness will have a member variable of
-// this delegate type and will call its functions in the various
-// tests.
-//
-// Then you simply #include this file as well as gtest.h and add the
-// following statement to my_task_runner_unittest.cc:
-//
-// INSTANTIATE_TYPED_TEST_CASE_P(
-// MyTaskRunner, TaskRunnerTest, MyTaskRunnerTestDelegate);
-//
-// Easy!
-//
-// The optional test harnesses TaskRunnerAffinityTest can be
-// instanciated in the same way, using the same delegate:
-//
-// INSTANTIATE_TYPED_TEST_CASE_P(
-// MyTaskRunner, TaskRunnerAffinityTest, MyTaskRunnerTestDelegate);
-
-
-#ifndef BASE_TEST_TASK_RUNNER_TEST_TEMPLATE_H_
-#define BASE_TEST_TASK_RUNNER_TEST_TEMPLATE_H_
-
-#include <cstddef>
-#include <map>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/single_thread_task_runner.h"
-#include "base/synchronization/condition_variable.h"
-#include "base/synchronization/lock.h"
-#include "base/task_runner.h"
-#include "base/threading/thread.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-namespace test {
-
-// Utility class that keeps track of how many times particular tasks
-// are run.
-class TaskTracker : public RefCountedThreadSafe<TaskTracker> {
- public:
- TaskTracker();
-
- // Returns a closure that runs the given task and increments the run
- // count of |i| by one. |task| may be null. It is guaranteed that
- // only one task wrapped by a given tracker will be run at a time.
- Closure WrapTask(const Closure& task, int i);
-
- std::map<int, int> GetTaskRunCounts() const;
-
- // Returns after the tracker observes a total of |count| task completions.
- void WaitForCompletedTasks(int count);
-
- private:
- friend class RefCountedThreadSafe<TaskTracker>;
-
- ~TaskTracker();
-
- void RunTask(const Closure& task, int i);
-
- mutable Lock lock_;
- std::map<int, int> task_run_counts_;
- int task_runs_;
- ConditionVariable task_runs_cv_;
-
- DISALLOW_COPY_AND_ASSIGN(TaskTracker);
-};
-
-} // namespace test
-
-template <typename TaskRunnerTestDelegate>
-class TaskRunnerTest : public testing::Test {
- protected:
- TaskRunnerTest() : task_tracker_(new test::TaskTracker()) {}
-
- const scoped_refptr<test::TaskTracker> task_tracker_;
- TaskRunnerTestDelegate delegate_;
-};
-
-TYPED_TEST_CASE_P(TaskRunnerTest);
-
-// We can't really test much, since TaskRunner provides very few
-// guarantees.
-
-// Post a bunch of tasks to the task runner. They should all
-// complete.
-TYPED_TEST_P(TaskRunnerTest, Basic) {
- std::map<int, int> expected_task_run_counts;
-
- this->delegate_.StartTaskRunner();
- scoped_refptr<TaskRunner> task_runner = this->delegate_.GetTaskRunner();
- // Post each ith task i+1 times.
- for (int i = 0; i < 20; ++i) {
- const Closure& ith_task = this->task_tracker_->WrapTask(Closure(), i);
- for (int j = 0; j < i + 1; ++j) {
- task_runner->PostTask(FROM_HERE, ith_task);
- ++expected_task_run_counts[i];
- }
- }
- this->delegate_.StopTaskRunner();
-
- EXPECT_EQ(expected_task_run_counts,
- this->task_tracker_->GetTaskRunCounts());
-}
-
-// Post a bunch of delayed tasks to the task runner. They should all
-// complete.
-TYPED_TEST_P(TaskRunnerTest, Delayed) {
- std::map<int, int> expected_task_run_counts;
- int expected_total_tasks = 0;
-
- this->delegate_.StartTaskRunner();
- scoped_refptr<TaskRunner> task_runner = this->delegate_.GetTaskRunner();
- // Post each ith task i+1 times with delays from 0-i.
- for (int i = 0; i < 20; ++i) {
- const Closure& ith_task = this->task_tracker_->WrapTask(Closure(), i);
- for (int j = 0; j < i + 1; ++j) {
- task_runner->PostDelayedTask(
- FROM_HERE, ith_task, base::TimeDelta::FromMilliseconds(j));
- ++expected_task_run_counts[i];
- ++expected_total_tasks;
- }
- }
- this->task_tracker_->WaitForCompletedTasks(expected_total_tasks);
- this->delegate_.StopTaskRunner();
-
- EXPECT_EQ(expected_task_run_counts,
- this->task_tracker_->GetTaskRunCounts());
-}
-
-// The TaskRunnerTest test case verifies behaviour that is expected from a
-// task runner in order to be conformant.
-REGISTER_TYPED_TEST_CASE_P(TaskRunnerTest, Basic, Delayed);
-
-namespace test {
-
-// Calls RunsTasksInCurrentSequence() on |task_runner| and expects it to
-// equal |expected_value|.
-void ExpectRunsTasksInCurrentSequence(bool expected_value,
- TaskRunner* task_runner);
-
-} // namespace test
-
-template <typename TaskRunnerTestDelegate>
-class TaskRunnerAffinityTest : public TaskRunnerTest<TaskRunnerTestDelegate> {};
-
-TYPED_TEST_CASE_P(TaskRunnerAffinityTest);
-
-// Post a bunch of tasks to the task runner as well as to a separate
-// thread, each checking the value of RunsTasksInCurrentSequence(),
-// which should return true for the tasks posted on the task runner
-// and false for the tasks posted on the separate thread.
-TYPED_TEST_P(TaskRunnerAffinityTest, RunsTasksInCurrentSequence) {
- std::map<int, int> expected_task_run_counts;
-
- Thread thread("Non-task-runner thread");
- ASSERT_TRUE(thread.Start());
- this->delegate_.StartTaskRunner();
-
- scoped_refptr<TaskRunner> task_runner = this->delegate_.GetTaskRunner();
- // Post each ith task i+1 times on the task runner and i+1 times on
- // the non-task-runner thread.
- for (int i = 0; i < 20; ++i) {
- const Closure& ith_task_runner_task = this->task_tracker_->WrapTask(
- Bind(&test::ExpectRunsTasksInCurrentSequence, true,
- base::RetainedRef(task_runner)),
- i);
- const Closure& ith_non_task_runner_task = this->task_tracker_->WrapTask(
- Bind(&test::ExpectRunsTasksInCurrentSequence, false,
- base::RetainedRef(task_runner)),
- i);
- for (int j = 0; j < i + 1; ++j) {
- task_runner->PostTask(FROM_HERE, ith_task_runner_task);
- thread.task_runner()->PostTask(FROM_HERE, ith_non_task_runner_task);
- expected_task_run_counts[i] += 2;
- }
- }
-
- this->delegate_.StopTaskRunner();
- thread.Stop();
-
- EXPECT_EQ(expected_task_run_counts,
- this->task_tracker_->GetTaskRunCounts());
-}
-
-// TaskRunnerAffinityTest tests that the TaskRunner implementation
-// can determine if tasks will never be run on a specific thread.
-REGISTER_TYPED_TEST_CASE_P(TaskRunnerAffinityTest, RunsTasksInCurrentSequence);
-
-} // namespace base
-
-#endif // BASE_TEST_TASK_RUNNER_TEST_TEMPLATE_H_
diff --git a/base/test/test_child_process.cc b/base/test/test_child_process.cc
deleted file mode 100644
index ce15856..0000000
--- a/base/test/test_child_process.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2018 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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Simple testing command, used to exercise child process launcher calls.
-//
-// Usage:
-// echo_test_helper [-x exit_code] arg0 arg1 arg2...
-// Prints arg0..n to stdout with space delimiters between args,
-// returning "exit_code" if -x is specified.
-//
-// echo_test_helper -e env_var
-// Prints the environmental variable |env_var| to stdout.
-int main(int argc, char** argv) {
- if (strcmp(argv[1], "-e") == 0) {
- if (argc != 3) {
- return 1;
- }
-
- const char* env = getenv(argv[2]);
- if (env != NULL) {
- printf("%s", env);
- }
- } else {
- int return_code = 0;
- int start_idx = 1;
-
- if (strcmp(argv[1], "-x") == 0) {
- return_code = atoi(argv[2]);
- start_idx = 3;
- }
-
- for (int i = start_idx; i < argc; ++i) {
- printf((i < argc - 1 ? "%s " : "%s"), argv[i]);
- }
-
- return return_code;
- }
-}
diff --git a/base/test/test_discardable_memory_allocator.cc b/base/test/test_discardable_memory_allocator.cc
deleted file mode 100644
index a9bd097..0000000
--- a/base/test/test_discardable_memory_allocator.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2015 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/test/test_discardable_memory_allocator.h"
-
-#include <cstdint>
-#include <cstring>
-
-#include "base/logging.h"
-#include "base/memory/discardable_memory.h"
-#include "base/memory/ptr_util.h"
-
-namespace base {
-namespace {
-
-class DiscardableMemoryImpl : public DiscardableMemory {
- public:
- explicit DiscardableMemoryImpl(size_t size)
- : data_(new uint8_t[size]), size_(size) {}
-
- // Overridden from DiscardableMemory:
- bool Lock() override {
- DCHECK(!is_locked_);
- is_locked_ = true;
- return false;
- }
-
- void Unlock() override {
- DCHECK(is_locked_);
- is_locked_ = false;
- // Force eviction to catch clients not correctly checking the return value
- // of Lock().
- memset(data_.get(), 0, size_);
- }
-
- void* data() const override {
- DCHECK(is_locked_);
- return data_.get();
- }
-
- trace_event::MemoryAllocatorDump* CreateMemoryAllocatorDump(
- const char* name,
- trace_event::ProcessMemoryDump* pmd) const override {
- return nullptr;
- }
-
- private:
- bool is_locked_ = true;
- std::unique_ptr<uint8_t[]> data_;
- size_t size_;
-};
-
-} // namespace
-
-std::unique_ptr<DiscardableMemory>
-TestDiscardableMemoryAllocator::AllocateLockedDiscardableMemory(size_t size) {
- return std::make_unique<DiscardableMemoryImpl>(size);
-}
-
-} // namespace base
diff --git a/base/test/test_discardable_memory_allocator.h b/base/test/test_discardable_memory_allocator.h
deleted file mode 100644
index 87436e3..0000000
--- a/base/test/test_discardable_memory_allocator.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_TEST_DISCARDABLE_MEMORY_ALLOCATOR_H_
-#define BASE_TEST_TEST_DISCARDABLE_MEMORY_ALLOCATOR_H_
-
-#include <stddef.h>
-
-#include "base/macros.h"
-#include "base/memory/discardable_memory_allocator.h"
-
-namespace base {
-
-// TestDiscardableMemoryAllocator is a simple DiscardableMemoryAllocator
-// implementation that can be used for testing. It allocates one-shot
-// DiscardableMemory instances backed by heap memory.
-class TestDiscardableMemoryAllocator : public DiscardableMemoryAllocator {
- public:
- constexpr TestDiscardableMemoryAllocator() = default;
-
- // Overridden from DiscardableMemoryAllocator:
- std::unique_ptr<DiscardableMemory> AllocateLockedDiscardableMemory(
- size_t size) override;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestDiscardableMemoryAllocator);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_DISCARDABLE_MEMORY_ALLOCATOR_H_
diff --git a/base/test/test_file_util.cc b/base/test/test_file_util.cc
deleted file mode 100644
index 8dafc58..0000000
--- a/base/test/test_file_util.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2013 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/test/test_file_util.h"
-
-#include "base/test/test_timeouts.h"
-#include "base/threading/platform_thread.h"
-
-namespace base {
-
-bool EvictFileFromSystemCacheWithRetry(const FilePath& path) {
- const int kCycles = 10;
- const TimeDelta kDelay = TestTimeouts::action_timeout() / kCycles;
- for (int i = 0; i < kCycles; i++) {
- if (EvictFileFromSystemCache(path))
- return true;
- PlatformThread::Sleep(kDelay);
- }
- return false;
-}
-
-} // namespace base
diff --git a/base/test/test_file_util.h b/base/test/test_file_util.h
deleted file mode 100644
index f167ca7..0000000
--- a/base/test/test_file_util.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_FILE_UTIL_H_
-#define BASE_TEST_TEST_FILE_UTIL_H_
-
-// File utility functions used only by tests.
-
-#include <stddef.h>
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "build_config.h"
-
-#if defined(OS_ANDROID)
-#include <jni.h>
-#endif
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-
-namespace base {
-
-class FilePath;
-
-// Clear a specific file from the system cache like EvictFileFromSystemCache,
-// but on failure it will sleep and retry. On the Windows buildbots, eviction
-// can fail if the file is marked in use, and this will throw off timings that
-// rely on uncached files.
-bool EvictFileFromSystemCacheWithRetry(const FilePath& file);
-
-// Wrapper over base::Delete. On Windows repeatedly invokes Delete in case
-// of failure to workaround Windows file locking semantics. Returns true on
-// success.
-bool DieFileDie(const FilePath& file, bool recurse);
-
-// Clear a specific file from the system cache. After this call, trying
-// to access this file will result in a cold load from the hard drive.
-bool EvictFileFromSystemCache(const FilePath& file);
-
-#if defined(OS_WIN)
-// Deny |permission| on the file |path| for the current user. |permission| is an
-// ACCESS_MASK structure which is defined in
-// https://msdn.microsoft.com/en-us/library/windows/desktop/aa374892.aspx
-// Refer to https://msdn.microsoft.com/en-us/library/aa822867.aspx for a list of
-// possible values.
-bool DenyFilePermission(const FilePath& path, DWORD permission);
-#endif // defined(OS_WIN)
-
-// For testing, make the file unreadable or unwritable.
-// In POSIX, this does not apply to the root user.
-bool MakeFileUnreadable(const FilePath& path) WARN_UNUSED_RESULT;
-bool MakeFileUnwritable(const FilePath& path) WARN_UNUSED_RESULT;
-
-// Saves the current permissions for a path, and restores it on destruction.
-class FilePermissionRestorer {
- public:
- explicit FilePermissionRestorer(const FilePath& path);
- ~FilePermissionRestorer();
-
- private:
- const FilePath path_;
- void* info_; // The opaque stored permission information.
- size_t length_; // The length of the stored permission information.
-
- DISALLOW_COPY_AND_ASSIGN(FilePermissionRestorer);
-};
-
-#if defined(OS_ANDROID)
-// Insert an image file into the MediaStore, and retrieve the content URI for
-// testing purpose.
-FilePath InsertImageIntoMediaStore(const FilePath& path);
-#endif // defined(OS_ANDROID)
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_FILE_UTIL_H_
diff --git a/base/test/test_file_util_linux.cc b/base/test/test_file_util_linux.cc
deleted file mode 100644
index cf8b056..0000000
--- a/base/test/test_file_util_linux.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2011 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/test/test_file_util.h"
-
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#if defined(OS_ANDROID)
-#include <asm/unistd.h>
-#include <errno.h>
-#include <linux/fadvise.h>
-#include <sys/syscall.h>
-#endif
-
-#include "base/files/file_path.h"
-#include "base/files/scoped_file.h"
-
-namespace base {
-
-// Inconveniently, the NDK doesn't provide for posix_fadvise
-// until native API level = 21, which we don't use yet, so provide a wrapper, at
-// least on ARM32
-#if defined(OS_ANDROID) && __ANDROID_API__ < 21
-
-namespace {
-int posix_fadvise(int fd, off_t offset, off_t len, int advice) {
-#if defined(ARCH_CPU_ARMEL)
- // Note that the syscall argument order on ARM is different from the C
- // function; this is helpfully documented in the Linux posix_fadvise manpage.
- return syscall(__NR_arm_fadvise64_64, fd, advice,
- 0, // Upper 32-bits for offset
- offset,
- 0, // Upper 32-bits for length
- len);
-#endif
- NOTIMPLEMENTED();
- return ENOSYS;
-}
-
-} // namespace
-
-#endif // OS_ANDROID
-
-bool EvictFileFromSystemCache(const FilePath& file) {
- ScopedFD fd(open(file.value().c_str(), O_RDONLY));
- if (!fd.is_valid())
- return false;
- if (fdatasync(fd.get()) != 0)
- return false;
- if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
- return false;
- return true;
-}
-
-} // namespace base
diff --git a/base/test/test_file_util_mac.cc b/base/test/test_file_util_mac.cc
deleted file mode 100644
index 174a31d..0000000
--- a/base/test/test_file_util_mac.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2011 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/test/test_file_util.h"
-
-#include <sys/mman.h>
-#include <errno.h>
-#include <stdint.h>
-
-#include "base/files/file_util.h"
-#include "base/files/memory_mapped_file.h"
-#include "base/logging.h"
-
-namespace base {
-
-bool EvictFileFromSystemCache(const FilePath& file) {
- // There aren't any really direct ways to purge a file from the UBC. From
- // talking with Amit Singh, the safest is to mmap the file with MAP_FILE (the
- // default) + MAP_SHARED, then do an msync to invalidate the memory. The next
- // open should then have to load the file from disk.
-
- int64_t length;
- if (!GetFileSize(file, &length)) {
- DLOG(ERROR) << "failed to get size of " << file.value();
- return false;
- }
-
- // When a file is empty, we do not need to evict it from cache.
- // In fact, an attempt to map it to memory will result in error.
- if (length == 0) {
- DLOG(WARNING) << "file size is zero, will not attempt to map to memory";
- return true;
- }
-
- MemoryMappedFile mapped_file;
- if (!mapped_file.Initialize(file)) {
- DLOG(WARNING) << "failed to memory map " << file.value();
- return false;
- }
-
- if (msync(const_cast<uint8_t*>(mapped_file.data()), mapped_file.length(),
- MS_INVALIDATE) != 0) {
- DLOG(WARNING) << "failed to invalidate memory map of " << file.value()
- << ", errno: " << errno;
- return false;
- }
-
- return true;
-}
-
-} // namespace base
diff --git a/base/test/test_file_util_posix.cc b/base/test/test_file_util_posix.cc
deleted file mode 100644
index 2082709..0000000
--- a/base/test/test_file_util_posix.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// 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/test/test_file_util.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <string>
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "build_config.h"
-
-namespace base {
-
-namespace {
-
-// Deny |permission| on the file |path|.
-bool DenyFilePermission(const FilePath& path, mode_t permission) {
- struct stat stat_buf;
- if (stat(path.value().c_str(), &stat_buf) != 0)
- return false;
- stat_buf.st_mode &= ~permission;
-
- int rv = HANDLE_EINTR(chmod(path.value().c_str(), stat_buf.st_mode));
- return rv == 0;
-}
-
-// Gets a blob indicating the permission information for |path|.
-// |length| is the length of the blob. Zero on failure.
-// Returns the blob pointer, or NULL on failure.
-void* GetPermissionInfo(const FilePath& path, size_t* length) {
- DCHECK(length);
- *length = 0;
-
- struct stat stat_buf;
- if (stat(path.value().c_str(), &stat_buf) != 0)
- return nullptr;
-
- *length = sizeof(mode_t);
- mode_t* mode = new mode_t;
- *mode = stat_buf.st_mode & ~S_IFMT; // Filter out file/path kind.
-
- return mode;
-}
-
-// Restores the permission information for |path|, given the blob retrieved
-// using |GetPermissionInfo()|.
-// |info| is the pointer to the blob.
-// |length| is the length of the blob.
-// Either |info| or |length| may be NULL/0, in which case nothing happens.
-bool RestorePermissionInfo(const FilePath& path, void* info, size_t length) {
- if (!info || (length == 0))
- return false;
-
- DCHECK_EQ(sizeof(mode_t), length);
- mode_t* mode = reinterpret_cast<mode_t*>(info);
-
- int rv = HANDLE_EINTR(chmod(path.value().c_str(), *mode));
-
- delete mode;
-
- return rv == 0;
-}
-
-} // namespace
-
-bool DieFileDie(const FilePath& file, bool recurse) {
- // There is no need to workaround Windows problems on POSIX.
- // Just pass-through.
- return DeleteFile(file, recurse);
-}
-
-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
-bool EvictFileFromSystemCache(const FilePath& file) {
- // There doesn't seem to be a POSIX way to cool the disk cache.
- NOTIMPLEMENTED();
- return false;
-}
-#endif
-
-bool MakeFileUnreadable(const FilePath& path) {
- return DenyFilePermission(path, S_IRUSR | S_IRGRP | S_IROTH);
-}
-
-bool MakeFileUnwritable(const FilePath& path) {
- return DenyFilePermission(path, S_IWUSR | S_IWGRP | S_IWOTH);
-}
-
-FilePermissionRestorer::FilePermissionRestorer(const FilePath& path)
- : path_(path), info_(nullptr), length_(0) {
- info_ = GetPermissionInfo(path_, &length_);
- DCHECK(info_ != nullptr);
- DCHECK_NE(0u, length_);
-}
-
-FilePermissionRestorer::~FilePermissionRestorer() {
- if (!RestorePermissionInfo(path_, info_, length_))
- NOTREACHED();
-}
-
-} // namespace base
diff --git a/base/test/test_file_util_win.cc b/base/test/test_file_util_win.cc
deleted file mode 100644
index da596bb..0000000
--- a/base/test/test_file_util_win.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-// 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/test/test_file_util.h"
-
-#include <aclapi.h>
-#include <shlwapi.h>
-#include <stddef.h>
-#include <wchar.h>
-#include <windows.h>
-
-#include <memory>
-#include <vector>
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_split.h"
-#include "base/threading/platform_thread.h"
-#include "base/win/scoped_handle.h"
-
-namespace base {
-
-namespace {
-
-struct PermissionInfo {
- PSECURITY_DESCRIPTOR security_descriptor;
- ACL dacl;
-};
-
-// Gets a blob indicating the permission information for |path|.
-// |length| is the length of the blob. Zero on failure.
-// Returns the blob pointer, or NULL on failure.
-void* GetPermissionInfo(const FilePath& path, size_t* length) {
- DCHECK(length != NULL);
- *length = 0;
- PACL dacl = NULL;
- PSECURITY_DESCRIPTOR security_descriptor;
- if (GetNamedSecurityInfo(const_cast<wchar_t*>(path.value().c_str()),
- SE_FILE_OBJECT,
- DACL_SECURITY_INFORMATION, NULL, NULL, &dacl,
- NULL, &security_descriptor) != ERROR_SUCCESS) {
- return NULL;
- }
- DCHECK(dacl != NULL);
-
- *length = sizeof(PSECURITY_DESCRIPTOR) + dacl->AclSize;
- PermissionInfo* info = reinterpret_cast<PermissionInfo*>(new char[*length]);
- info->security_descriptor = security_descriptor;
- memcpy(&info->dacl, dacl, dacl->AclSize);
-
- return info;
-}
-
-// Restores the permission information for |path|, given the blob retrieved
-// using |GetPermissionInfo()|.
-// |info| is the pointer to the blob.
-// |length| is the length of the blob.
-// Either |info| or |length| may be NULL/0, in which case nothing happens.
-bool RestorePermissionInfo(const FilePath& path, void* info, size_t length) {
- if (!info || !length)
- return false;
-
- PermissionInfo* perm = reinterpret_cast<PermissionInfo*>(info);
-
- DWORD rc = SetNamedSecurityInfo(const_cast<wchar_t*>(path.value().c_str()),
- SE_FILE_OBJECT, DACL_SECURITY_INFORMATION,
- NULL, NULL, &perm->dacl, NULL);
- LocalFree(perm->security_descriptor);
-
- char* char_array = reinterpret_cast<char*>(info);
- delete [] char_array;
-
- return rc == ERROR_SUCCESS;
-}
-
-std::unique_ptr<wchar_t[]> ToCStr(const std::basic_string<wchar_t>& str) {
- size_t size = str.size() + 1;
- std::unique_ptr<wchar_t[]> ptr = std::make_unique<wchar_t[]>(size);
- wcsncpy(ptr.get(), str.c_str(), size);
- return ptr;
-}
-
-} // namespace
-
-bool DieFileDie(const FilePath& file, bool recurse) {
- // It turns out that to not induce flakiness a long timeout is needed.
- const int kIterations = 25;
- const TimeDelta kTimeout = TimeDelta::FromSeconds(10) / kIterations;
-
- if (!PathExists(file))
- return true;
-
- // Sometimes Delete fails, so try a few more times. Divide the timeout
- // into short chunks, so that if a try succeeds, we won't delay the test
- // for too long.
- for (int i = 0; i < kIterations; ++i) {
- if (DeleteFile(file, recurse))
- return true;
- PlatformThread::Sleep(kTimeout);
- }
- return false;
-}
-
-bool EvictFileFromSystemCache(const FilePath& file) {
- base::win::ScopedHandle file_handle(
- CreateFile(file.value().c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL,
- OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL));
- if (!file_handle.IsValid())
- return false;
-
- // Re-write the file time information to trigger cache eviction for the file.
- // This function previously overwrote the entire file without buffering, but
- // local experimentation validates this simplified and *much* faster approach:
- // [1] Sysinternals RamMap no longer lists these files as cached afterwards.
- // [2] Telemetry performance test startup.cold.blank_page reports sane values.
- BY_HANDLE_FILE_INFORMATION bhi = {0};
- CHECK(::GetFileInformationByHandle(file_handle.Get(), &bhi));
- CHECK(::SetFileTime(file_handle.Get(), &bhi.ftCreationTime,
- &bhi.ftLastAccessTime, &bhi.ftLastWriteTime));
- return true;
-}
-
-// Deny |permission| on the file |path|, for the current user.
-bool DenyFilePermission(const FilePath& path, DWORD permission) {
- PACL old_dacl;
- PSECURITY_DESCRIPTOR security_descriptor;
-
- std::unique_ptr<TCHAR[]> path_ptr = ToCStr(path.value());
- if (GetNamedSecurityInfo(path_ptr.get(), SE_FILE_OBJECT,
- DACL_SECURITY_INFORMATION, nullptr, nullptr,
- &old_dacl, nullptr,
- &security_descriptor) != ERROR_SUCCESS) {
- return false;
- }
-
- std::unique_ptr<TCHAR[]> current_user = ToCStr(std::wstring(L"CURRENT_USER"));
- EXPLICIT_ACCESS new_access = {
- permission,
- DENY_ACCESS,
- 0,
- {nullptr, NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_NAME, TRUSTEE_IS_USER,
- current_user.get()}};
-
- PACL new_dacl;
- if (SetEntriesInAcl(1, &new_access, old_dacl, &new_dacl) != ERROR_SUCCESS) {
- LocalFree(security_descriptor);
- return false;
- }
-
- DWORD rc = SetNamedSecurityInfo(path_ptr.get(), SE_FILE_OBJECT,
- DACL_SECURITY_INFORMATION, nullptr, nullptr,
- new_dacl, nullptr);
- LocalFree(security_descriptor);
- LocalFree(new_dacl);
-
- return rc == ERROR_SUCCESS;
-}
-
-bool MakeFileUnreadable(const FilePath& path) {
- return DenyFilePermission(path, GENERIC_READ);
-}
-
-bool MakeFileUnwritable(const FilePath& path) {
- return DenyFilePermission(path, GENERIC_WRITE);
-}
-
-FilePermissionRestorer::FilePermissionRestorer(const FilePath& path)
- : path_(path), info_(NULL), length_(0) {
- info_ = GetPermissionInfo(path_, &length_);
- DCHECK(info_ != NULL);
- DCHECK_NE(0u, length_);
-}
-
-FilePermissionRestorer::~FilePermissionRestorer() {
- if (!RestorePermissionInfo(path_, info_, length_))
- NOTREACHED();
-}
-
-} // namespace base
diff --git a/base/test/test_io_thread.cc b/base/test/test_io_thread.cc
deleted file mode 100644
index 1b20658..0000000
--- a/base/test/test_io_thread.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2013 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/test/test_io_thread.h"
-
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-
-namespace base {
-
-TestIOThread::TestIOThread(Mode mode)
- : io_thread_("test_io_thread"), io_thread_started_(false) {
- switch (mode) {
- case kAutoStart:
- Start();
- return;
- case kManualStart:
- return;
- }
- CHECK(false) << "Invalid mode";
-}
-
-TestIOThread::~TestIOThread() {
- Stop();
-}
-
-void TestIOThread::Start() {
- CHECK(!io_thread_started_);
- io_thread_started_ = true;
- CHECK(io_thread_.StartWithOptions(
- base::Thread::Options(base::MessageLoop::TYPE_IO, 0)));
-}
-
-void TestIOThread::Stop() {
- // Note: It's okay to call |Stop()| even if the thread isn't running.
- io_thread_.Stop();
- io_thread_started_ = false;
-}
-
-void TestIOThread::PostTask(const Location& from_here, base::OnceClosure task) {
- task_runner()->PostTask(from_here, std::move(task));
-}
-
-} // namespace base
diff --git a/base/test/test_io_thread.h b/base/test/test_io_thread.h
deleted file mode 100644
index a55a063..0000000
--- a/base/test/test_io_thread.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef BASE_TEST_TEST_IO_THREAD_H_
-#define BASE_TEST_TEST_IO_THREAD_H_
-
-#include "base/callback_forward.h"
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/task_runner.h"
-#include "base/threading/thread.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// Create and run an IO thread with a MessageLoop, and
-// making the MessageLoop accessible from its client.
-// It also provides some ideomatic API like PostTaskAndWait().
-//
-// This API is not thread-safe:
-// - Start()/Stop() should only be called from the main (creation) thread.
-// - PostTask()/message_loop()/task_runner() are also safe to call from the
-// underlying thread itself (to post tasks from other threads: get the
-// task_runner() from the main thread first, it is then safe to pass _it_
-// around).
-class TestIOThread {
- public:
- enum Mode { kAutoStart, kManualStart };
- explicit TestIOThread(Mode mode);
- // Stops the I/O thread if necessary.
- ~TestIOThread();
-
- // After Stop(), Start() may be called again to start a new I/O thread.
- // Stop() may be called even when the I/O thread is not started.
- void Start();
- void Stop();
-
- // Post |task| to the IO thread.
- void PostTask(const Location& from_here, base::OnceClosure task);
-
- base::MessageLoopForIO* message_loop() {
- return static_cast<base::MessageLoopForIO*>(io_thread_.message_loop());
- }
-
- scoped_refptr<SingleThreadTaskRunner> task_runner() {
- return message_loop()->task_runner();
- }
-
- private:
- base::Thread io_thread_;
- bool io_thread_started_;
-
- DISALLOW_COPY_AND_ASSIGN(TestIOThread);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_IO_THREAD_H_
diff --git a/base/test/test_message_loop.cc b/base/test/test_message_loop.cc
deleted file mode 100644
index bd3610f..0000000
--- a/base/test/test_message_loop.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2016 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/run_loop.h"
-#include "base/test/test_message_loop.h"
-
-namespace base {
-
-TestMessageLoop::TestMessageLoop() = default;
-
-TestMessageLoop::TestMessageLoop(MessageLoop::Type type) : loop_(type) {}
-
-TestMessageLoop::~TestMessageLoop() {
- RunLoop().RunUntilIdle();
-}
-
-} // namespace base
diff --git a/base/test/test_message_loop.h b/base/test/test_message_loop.h
deleted file mode 100644
index 9c0aed8..0000000
--- a/base/test/test_message_loop.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2016 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.
-
-#ifndef BASE_TEST_TEST_MESSAGE_LOOP_H_
-#define BASE_TEST_TEST_MESSAGE_LOOP_H_
-
-#include "base/message_loop/message_loop.h"
-
-namespace base {
-
-// TestMessageLoop is a convenience class for unittests that need to create a
-// message loop without a real thread backing it. For most tests,
-// it is sufficient to just instantiate TestMessageLoop as a member variable.
-//
-// TestMessageLoop will attempt to drain the underlying MessageLoop on
-// destruction for clean teardown of tests.
-class TestMessageLoop {
- public:
- TestMessageLoop();
- explicit TestMessageLoop(MessageLoop::Type type);
- ~TestMessageLoop();
-
- const scoped_refptr<SingleThreadTaskRunner>& task_runner() {
- return loop_.task_runner();
- }
-
- private:
- MessageLoop loop_;
-};
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_MESSAGE_LOOP_H_
diff --git a/base/test/test_reg_util_win.cc b/base/test/test_reg_util_win.cc
deleted file mode 100644
index 9ce4ad1..0000000
--- a/base/test/test_reg_util_win.cc
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2011 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/test/test_reg_util_win.h"
-
-#include <stdint.h>
-
-#include "base/guid.h"
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#include <windows.h>
-
-namespace registry_util {
-
-namespace {
-
-const wchar_t kTimestampDelimiter[] = L"$";
-const wchar_t kTempTestKeyPath[] = L"Software\\Chromium\\TempTestKeys";
-
-void DeleteStaleTestKeys(const base::Time& now,
- const base::string16& test_key_root) {
- base::win::RegKey test_root_key;
- if (test_root_key.Open(HKEY_CURRENT_USER,
- test_key_root.c_str(),
- KEY_ALL_ACCESS) != ERROR_SUCCESS) {
- // This will occur on first-run, but is harmless.
- return;
- }
-
- base::win::RegistryKeyIterator iterator_test_root_key(HKEY_CURRENT_USER,
- test_key_root.c_str());
- for (; iterator_test_root_key.Valid(); ++iterator_test_root_key) {
- base::string16 key_name = iterator_test_root_key.Name();
- std::vector<base::string16> tokens = base::SplitString(
- key_name, kTimestampDelimiter, base::KEEP_WHITESPACE,
- base::SPLIT_WANT_NONEMPTY);
- if (tokens.empty())
- continue;
- int64_t key_name_as_number = 0;
-
- if (!base::StringToInt64(tokens[0], &key_name_as_number)) {
- test_root_key.DeleteKey(key_name.c_str());
- continue;
- }
-
- base::Time key_time = base::Time::FromInternalValue(key_name_as_number);
- base::TimeDelta age = now - key_time;
-
- if (age > base::TimeDelta::FromHours(24))
- test_root_key.DeleteKey(key_name.c_str());
- }
-}
-
-base::string16 GenerateTempKeyPath(const base::string16& test_key_root,
- const base::Time& timestamp) {
- base::string16 key_path = test_key_root;
- key_path += L"\\" + base::Int64ToString16(timestamp.ToInternalValue());
- key_path += kTimestampDelimiter + base::ASCIIToUTF16(base::GenerateGUID());
-
- return key_path;
-}
-
-} // namespace
-
-RegistryOverrideManager::ScopedRegistryKeyOverride::ScopedRegistryKeyOverride(
- HKEY override,
- const base::string16& key_path)
- : override_(override), key_path_(key_path) {}
-
-RegistryOverrideManager::
- ScopedRegistryKeyOverride::~ScopedRegistryKeyOverride() {
- ::RegOverridePredefKey(override_, NULL);
- base::win::RegKey(HKEY_CURRENT_USER, L"", KEY_QUERY_VALUE)
- .DeleteKey(key_path_.c_str());
-}
-
-RegistryOverrideManager::RegistryOverrideManager()
- : timestamp_(base::Time::Now()), test_key_root_(kTempTestKeyPath) {
- DeleteStaleTestKeys(timestamp_, test_key_root_);
-}
-
-RegistryOverrideManager::RegistryOverrideManager(
- const base::Time& timestamp,
- const base::string16& test_key_root)
- : timestamp_(timestamp), test_key_root_(test_key_root) {
- DeleteStaleTestKeys(timestamp_, test_key_root_);
-}
-
-RegistryOverrideManager::~RegistryOverrideManager() {}
-
-void RegistryOverrideManager::OverrideRegistry(HKEY override) {
- OverrideRegistry(override, nullptr);
-}
-
-void RegistryOverrideManager::OverrideRegistry(HKEY override,
- base::string16* override_path) {
- base::string16 key_path = GenerateTempKeyPath(test_key_root_, timestamp_);
-
- base::win::RegKey temp_key;
- ASSERT_EQ(ERROR_SUCCESS, temp_key.Create(HKEY_CURRENT_USER, key_path.c_str(),
- KEY_ALL_ACCESS));
- ASSERT_EQ(ERROR_SUCCESS, ::RegOverridePredefKey(override, temp_key.Handle()));
-
- overrides_.push_back(
- std::make_unique<ScopedRegistryKeyOverride>(override, key_path));
- if (override_path)
- override_path->assign(key_path);
-}
-
-base::string16 GenerateTempKeyPath() {
- return GenerateTempKeyPath(base::string16(kTempTestKeyPath),
- base::Time::Now());
-}
-
-} // namespace registry_util
diff --git a/base/test/test_reg_util_win.h b/base/test/test_reg_util_win.h
deleted file mode 100644
index d74028a..0000000
--- a/base/test/test_reg_util_win.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef BASE_TEST_TEST_REG_UTIL_WIN_H_
-#define BASE_TEST_TEST_REG_UTIL_WIN_H_
-
-// Registry utility functions used only by tests.
-#include <memory>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/strings/string16.h"
-#include "base/time/time.h"
-#include "base/win/registry.h"
-
-namespace registry_util {
-
-// Allows a test to easily override registry hives so that it can start from a
-// known good state, or make sure to not leave any side effects once the test
-// completes. This supports parallel tests. All the overrides are scoped to the
-// lifetime of the override manager. Destroy the manager to undo the overrides.
-//
-// Overridden hives use keys stored at, for instance:
-// HKCU\Software\Chromium\TempTestKeys\
-// 13028145911617809$02AB211C-CF73-478D-8D91-618E11998AED
-// The key path are comprises of:
-// - The test key root, HKCU\Software\Chromium\TempTestKeys\
-// - The base::Time::ToInternalValue of the creation time. This is used to
-// delete stale keys left over from crashed tests.
-// - A GUID used for preventing name collisions (although unlikely) between
-// two RegistryOverrideManagers created with the same timestamp.
-class RegistryOverrideManager {
- public:
- RegistryOverrideManager();
- ~RegistryOverrideManager();
-
- // Override the given registry hive using a randomly generated temporary key.
- // Multiple overrides to the same hive are not supported and lead to undefined
- // behavior.
- // Optional return of the registry override path.
- // Calls to these functions must be wrapped in ASSERT_NO_FATAL_FAILURE to
- // ensure that tests do not proceeed in case of failure to override.
- void OverrideRegistry(HKEY override);
- void OverrideRegistry(HKEY override, base::string16* override_path);
-
- private:
- friend class RegistryOverrideManagerTest;
-
- // Keeps track of one override.
- class ScopedRegistryKeyOverride {
- public:
- ScopedRegistryKeyOverride(HKEY override, const base::string16& key_path);
- ~ScopedRegistryKeyOverride();
-
- private:
- HKEY override_;
- base::string16 key_path_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedRegistryKeyOverride);
- };
-
- // Used for testing only.
- RegistryOverrideManager(const base::Time& timestamp,
- const base::string16& test_key_root);
-
- base::Time timestamp_;
- base::string16 guid_;
-
- base::string16 test_key_root_;
- std::vector<std::unique_ptr<ScopedRegistryKeyOverride>> overrides_;
-
- DISALLOW_COPY_AND_ASSIGN(RegistryOverrideManager);
-};
-
-// Generates a temporary key path that will be eventually deleted
-// automatically if the process crashes.
-base::string16 GenerateTempKeyPath();
-
-} // namespace registry_util
-
-#endif // BASE_TEST_TEST_REG_UTIL_WIN_H_
diff --git a/base/test/test_shared_library.cc b/base/test/test_shared_library.cc
deleted file mode 100644
index 99c0467..0000000
--- a/base/test/test_shared_library.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2016 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/test/native_library_test_utils.h"
-
-extern "C" {
-
-int NATIVE_LIBRARY_TEST_ALWAYS_EXPORT GetExportedValue() {
- return g_native_library_exported_value;
-}
-
-void NATIVE_LIBRARY_TEST_ALWAYS_EXPORT SetExportedValue(int value) {
- g_native_library_exported_value = value;
-}
-
-// A test function used only to verify basic dynamic symbol resolution.
-int NATIVE_LIBRARY_TEST_ALWAYS_EXPORT GetSimpleTestValue() {
- return 5;
-}
-
-// When called by |NativeLibraryTest.LoadLibraryPreferOwnSymbols|, this should
-// forward to the local definition of NativeLibraryTestIncrement(), even though
-// the test module also links in the native_library_test_utils source library
-// which exports it.
-int NATIVE_LIBRARY_TEST_ALWAYS_EXPORT GetIncrementValue() {
- return NativeLibraryTestIncrement();
-}
-
-} // extern "C"
diff --git a/base/test/test_shared_memory_util.cc b/base/test/test_shared_memory_util.cc
deleted file mode 100644
index 5cde5b1..0000000
--- a/base/test/test_shared_memory_util.cc
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2017 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/test/test_shared_memory_util.h"
-
-#include <gtest/gtest.h>
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base/logging.h"
-#include "build_config.h"
-
-#if defined(OS_POSIX) && !defined(OS_NACL)
-#include <errno.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <unistd.h>
-#endif
-
-#if defined(OS_FUCHSIA)
-#include <zircon/process.h>
-#include <zircon/rights.h>
-#include <zircon/syscalls.h>
-#endif
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
-#include <mach/mach_vm.h>
-#endif
-
-#if defined(OS_WIN)
-#include <aclapi.h>
-#endif
-
-namespace base {
-
-#if !defined(OS_NACL)
-
-static const size_t kDataSize = 1024;
-
-// Common routine used with Posix file descriptors. Check that shared memory
-// file descriptor |fd| does not allow writable mappings. Return true on
-// success, false otherwise.
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
-static bool CheckReadOnlySharedMemoryFdPosix(int fd) {
-// Note that the error on Android is EPERM, unlike other platforms where
-// it will be EACCES.
-#if defined(OS_ANDROID)
- const int kExpectedErrno = EPERM;
-#else
- const int kExpectedErrno = EACCES;
-#endif
- errno = 0;
- void* address =
- mmap(nullptr, kDataSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- const bool success = (address != nullptr) && (address != MAP_FAILED);
- if (success) {
- LOG(ERROR) << "mmap() should have failed!";
- munmap(address, kDataSize); // Cleanup.
- return false;
- }
- if (errno != kExpectedErrno) {
- LOG(ERROR) << "Expected mmap() to return " << kExpectedErrno
- << " but returned " << errno << ": " << strerror(errno) << "\n";
- return false;
- }
- return true;
-}
-#endif // OS_POSIX && !OS_FUCHSIA
-
-#if defined(OS_FUCHSIA)
-// Fuchsia specific implementation.
-bool CheckReadOnlySharedMemoryFuchsiaHandle(zx_handle_t handle) {
- const uint32_t flags = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE;
- uintptr_t addr;
- const zx_handle_t root = zx_vmar_root_self();
- const zx_status_t status =
- zx_vmar_map(root, 0, handle, 0U, kDataSize, flags, &addr);
- if (status == ZX_OK) {
- LOG(ERROR) << "zx_vmar_map() should have failed!";
- zx_vmar_unmap(root, addr, kDataSize);
- return false;
- }
- if (status != ZX_ERR_ACCESS_DENIED) {
- LOG(ERROR) << "Expected zx_vmar_map() to return " << ZX_ERR_ACCESS_DENIED
- << " (ZX_ERR_ACCESS_DENIED) but returned " << status << "\n";
- return false;
- }
- return true;
-}
-
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
-bool CheckReadOnlySharedMemoryMachPort(mach_port_t memory_object) {
- mach_vm_address_t memory;
- const kern_return_t kr = mach_vm_map(
- mach_task_self(), &memory, kDataSize, 0, VM_FLAGS_ANYWHERE, memory_object,
- 0, FALSE, VM_PROT_READ | VM_PROT_WRITE,
- VM_PROT_READ | VM_PROT_WRITE | VM_PROT_IS_MASK, VM_INHERIT_NONE);
- if (kr == KERN_SUCCESS) {
- LOG(ERROR) << "mach_vm_map() should have failed!";
- mach_vm_deallocate(mach_task_self(), memory, kDataSize); // Cleanup.
- return false;
- }
- return true;
-}
-
-#elif defined(OS_WIN)
-bool CheckReadOnlySharedMemoryWindowsHandle(HANDLE handle) {
- void* memory =
- MapViewOfFile(handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, kDataSize);
- if (memory != nullptr) {
- LOG(ERROR) << "MapViewOfFile() should have failed!";
- UnmapViewOfFile(memory);
- return false;
- }
- return true;
-}
-#endif
-
-bool CheckReadOnlySharedMemoryHandleForTesting(SharedMemoryHandle handle) {
-#if defined(OS_MACOSX) && !defined(OS_IOS)
- // For OSX, the code has to deal with both POSIX and MACH handles.
- if (handle.type_ == SharedMemoryHandle::POSIX)
- return CheckReadOnlySharedMemoryFdPosix(handle.file_descriptor_.fd);
- else
- return CheckReadOnlySharedMemoryMachPort(handle.memory_object_);
-#elif defined(OS_FUCHSIA)
- return CheckReadOnlySharedMemoryFuchsiaHandle(handle.GetHandle());
-#elif defined(OS_WIN)
- return CheckReadOnlySharedMemoryWindowsHandle(handle.GetHandle());
-#else
- return CheckReadOnlySharedMemoryFdPosix(handle.GetHandle());
-#endif
-}
-
-bool CheckReadOnlyPlatformSharedMemoryRegionForTesting(
- subtle::PlatformSharedMemoryRegion region) {
- if (region.GetMode() != subtle::PlatformSharedMemoryRegion::Mode::kReadOnly) {
- LOG(ERROR) << "Expected region mode is "
- << static_cast<int>(
- subtle::PlatformSharedMemoryRegion::Mode::kReadOnly)
- << " but actual is " << static_cast<int>(region.GetMode());
- return false;
- }
-
-#if defined(OS_MACOSX) && !defined(OS_IOS)
- return CheckReadOnlySharedMemoryMachPort(region.GetPlatformHandle());
-#elif defined(OS_FUCHSIA)
- return CheckReadOnlySharedMemoryFuchsiaHandle(region.GetPlatformHandle());
-#elif defined(OS_WIN)
- return CheckReadOnlySharedMemoryWindowsHandle(region.GetPlatformHandle());
-#elif defined(OS_ANDROID)
- return CheckReadOnlySharedMemoryFdPosix(region.GetPlatformHandle());
-#else
- return CheckReadOnlySharedMemoryFdPosix(region.GetPlatformHandle().fd);
-#endif
-}
-
-#endif // !OS_NACL
-
-WritableSharedMemoryMapping MapForTesting(
- subtle::PlatformSharedMemoryRegion* region) {
- return MapAtForTesting(region, 0, region->GetSize());
-}
-
-WritableSharedMemoryMapping MapAtForTesting(
- subtle::PlatformSharedMemoryRegion* region,
- off_t offset,
- size_t size) {
- void* memory = nullptr;
- size_t mapped_size = 0;
- if (!region->MapAt(offset, size, &memory, &mapped_size))
- return {};
-
- return WritableSharedMemoryMapping(memory, size, mapped_size,
- region->GetGUID());
-}
-
-template <>
-std::pair<ReadOnlySharedMemoryRegion, WritableSharedMemoryMapping>
-CreateMappedRegion(size_t size) {
- MappedReadOnlyRegion mapped_region = ReadOnlySharedMemoryRegion::Create(size);
- return {std::move(mapped_region.region), std::move(mapped_region.mapping)};
-}
-
-} // namespace base
diff --git a/base/test/test_shared_memory_util.h b/base/test/test_shared_memory_util.h
deleted file mode 100644
index d89f11d..0000000
--- a/base/test/test_shared_memory_util.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2017 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.
-
-#ifndef BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_
-#define BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_
-
-#include "base/memory/platform_shared_memory_region.h"
-#include "base/memory/read_only_shared_memory_region.h"
-#include "base/memory/shared_memory_handle.h"
-#include "base/memory/shared_memory_mapping.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-// Check that the shared memory |handle| cannot be used to perform
-// a writable mapping with low-level system APIs like mmap(). Return true
-// in case of success (i.e. writable mappings are _not_ allowed), or false
-// otherwise.
-bool CheckReadOnlySharedMemoryHandleForTesting(SharedMemoryHandle handle);
-
-bool CheckReadOnlyPlatformSharedMemoryRegionForTesting(
- subtle::PlatformSharedMemoryRegion region);
-
-// Creates a scoped mapping from a PlatformSharedMemoryRegion. It's useful for
-// PlatformSharedMemoryRegion testing to not leak mapped memory.
-// WritableSharedMemoryMapping is used for wrapping because it has max
-// capabilities but the actual permission depends on the |region|'s mode.
-// This must not be used in production where PlatformSharedMemoryRegion should
-// be wrapped with {Writable,Unsafe,ReadOnly}SharedMemoryRegion.
-WritableSharedMemoryMapping MapAtForTesting(
- subtle::PlatformSharedMemoryRegion* region,
- off_t offset,
- size_t size);
-
-WritableSharedMemoryMapping MapForTesting(
- subtle::PlatformSharedMemoryRegion* region);
-
-template <typename SharedMemoryRegionType>
-std::pair<SharedMemoryRegionType, WritableSharedMemoryMapping>
-CreateMappedRegion(size_t size) {
- SharedMemoryRegionType region = SharedMemoryRegionType::Create(size);
- WritableSharedMemoryMapping mapping = region.Map();
- return {std::move(region), std::move(mapping)};
-}
-
-// Template specialization of CreateMappedRegion<>() for
-// the ReadOnlySharedMemoryRegion. We need this because
-// ReadOnlySharedMemoryRegion::Create() has a different return type.
-template <>
-std::pair<ReadOnlySharedMemoryRegion, WritableSharedMemoryMapping>
-CreateMappedRegion(size_t size);
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_SHARED_MEMORY_UTIL_H_
diff --git a/base/test/test_shortcut_win.cc b/base/test/test_shortcut_win.cc
deleted file mode 100644
index 70cb35b..0000000
--- a/base/test/test_shortcut_win.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-// 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/test/test_shortcut_win.h"
-
-#include <windows.h>
-#include <objbase.h>
-#include <shlobj.h>
-#include <propkey.h>
-#include <wrl/client.h>
-
-#include "base/files/file_path.h"
-#include "base/strings/string16.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/win/scoped_propvariant.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-namespace win {
-
-void ValidatePathsAreEqual(const base::FilePath& expected_path,
- const base::FilePath& actual_path) {
- wchar_t long_expected_path_chars[MAX_PATH] = {0};
- wchar_t long_actual_path_chars[MAX_PATH] = {0};
-
- // If |expected_path| is empty confirm immediately that |actual_path| is also
- // empty.
- if (expected_path.empty()) {
- EXPECT_TRUE(actual_path.empty());
- return;
- }
-
- // Proceed with LongPathName matching which will also confirm the paths exist.
- EXPECT_NE(0U, ::GetLongPathName(
- expected_path.value().c_str(), long_expected_path_chars, MAX_PATH))
- << "Failed to get LongPathName of " << expected_path.value();
- EXPECT_NE(0U, ::GetLongPathName(
- actual_path.value().c_str(), long_actual_path_chars, MAX_PATH))
- << "Failed to get LongPathName of " << actual_path.value();
-
- base::FilePath long_expected_path(long_expected_path_chars);
- base::FilePath long_actual_path(long_actual_path_chars);
- EXPECT_FALSE(long_expected_path.empty());
- EXPECT_FALSE(long_actual_path.empty());
-
- EXPECT_EQ(long_expected_path, long_actual_path);
-}
-
-void ValidateShortcut(const base::FilePath& shortcut_path,
- const ShortcutProperties& properties) {
- Microsoft::WRL::ComPtr<IShellLink> i_shell_link;
- Microsoft::WRL::ComPtr<IPersistFile> i_persist_file;
-
- wchar_t read_target[MAX_PATH] = {0};
- wchar_t read_working_dir[MAX_PATH] = {0};
- wchar_t read_arguments[MAX_PATH] = {0};
- wchar_t read_description[MAX_PATH] = {0};
- wchar_t read_icon[MAX_PATH] = {0};
- int read_icon_index = 0;
-
- HRESULT hr;
-
- // Initialize the shell interfaces.
- EXPECT_TRUE(SUCCEEDED(hr = ::CoCreateInstance(CLSID_ShellLink, NULL,
- CLSCTX_INPROC_SERVER,
- IID_PPV_ARGS(&i_shell_link))));
- if (FAILED(hr))
- return;
-
- EXPECT_TRUE(
- SUCCEEDED(hr = i_shell_link.CopyTo(i_persist_file.GetAddressOf())));
- if (FAILED(hr))
- return;
-
- // Load the shortcut.
- EXPECT_TRUE(SUCCEEDED(hr = i_persist_file->Load(
- shortcut_path.value().c_str(), 0))) << "Failed to load shortcut at "
- << shortcut_path.value();
- if (FAILED(hr))
- return;
-
- if (properties.options & ShortcutProperties::PROPERTIES_TARGET) {
- EXPECT_TRUE(SUCCEEDED(
- i_shell_link->GetPath(read_target, MAX_PATH, NULL, SLGP_SHORTPATH)));
- ValidatePathsAreEqual(properties.target, base::FilePath(read_target));
- }
-
- if (properties.options & ShortcutProperties::PROPERTIES_WORKING_DIR) {
- EXPECT_TRUE(SUCCEEDED(
- i_shell_link->GetWorkingDirectory(read_working_dir, MAX_PATH)));
- ValidatePathsAreEqual(properties.working_dir,
- base::FilePath(read_working_dir));
- }
-
- if (properties.options & ShortcutProperties::PROPERTIES_ARGUMENTS) {
- EXPECT_TRUE(SUCCEEDED(
- i_shell_link->GetArguments(read_arguments, MAX_PATH)));
- EXPECT_EQ(properties.arguments, read_arguments);
- }
-
- if (properties.options & ShortcutProperties::PROPERTIES_DESCRIPTION) {
- EXPECT_TRUE(SUCCEEDED(
- i_shell_link->GetDescription(read_description, MAX_PATH)));
- EXPECT_EQ(properties.description, read_description);
- }
-
- if (properties.options & ShortcutProperties::PROPERTIES_ICON) {
- EXPECT_TRUE(SUCCEEDED(
- i_shell_link->GetIconLocation(read_icon, MAX_PATH, &read_icon_index)));
- ValidatePathsAreEqual(properties.icon, base::FilePath(read_icon));
- EXPECT_EQ(properties.icon_index, read_icon_index);
- }
-
- Microsoft::WRL::ComPtr<IPropertyStore> property_store;
- EXPECT_TRUE(
- SUCCEEDED(hr = i_shell_link.CopyTo(property_store.GetAddressOf())));
- if (FAILED(hr))
- return;
-
- if (properties.options & ShortcutProperties::PROPERTIES_APP_ID) {
- ScopedPropVariant pv_app_id;
- EXPECT_EQ(S_OK, property_store->GetValue(PKEY_AppUserModel_ID,
- pv_app_id.Receive()));
- switch (pv_app_id.get().vt) {
- case VT_EMPTY:
- EXPECT_TRUE(properties.app_id.empty());
- break;
- case VT_LPWSTR:
- EXPECT_EQ(properties.app_id, pv_app_id.get().pwszVal);
- break;
- default:
- ADD_FAILURE() << "Unexpected variant type: " << pv_app_id.get().vt;
- }
- }
-
- if (properties.options & ShortcutProperties::PROPERTIES_DUAL_MODE) {
- ScopedPropVariant pv_dual_mode;
- EXPECT_EQ(S_OK, property_store->GetValue(PKEY_AppUserModel_IsDualMode,
- pv_dual_mode.Receive()));
- switch (pv_dual_mode.get().vt) {
- case VT_EMPTY:
- EXPECT_FALSE(properties.dual_mode);
- break;
- case VT_BOOL:
- EXPECT_EQ(properties.dual_mode,
- static_cast<bool>(pv_dual_mode.get().boolVal));
- break;
- default:
- ADD_FAILURE() << "Unexpected variant type: " << pv_dual_mode.get().vt;
- }
- }
-}
-
-} // namespace win
-} // namespace base
diff --git a/base/test/test_shortcut_win.h b/base/test/test_shortcut_win.h
deleted file mode 100644
index b828e8b..0000000
--- a/base/test/test_shortcut_win.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_SHORTCUT_WIN_H_
-#define BASE_TEST_TEST_SHORTCUT_WIN_H_
-
-#include "base/files/file_path.h"
-#include "base/win/shortcut.h"
-
-// Windows shortcut functions used only by tests.
-
-namespace base {
-namespace win {
-
-// Validates |actual_path|'s LongPathName case-insensitively matches
-// |expected_path|'s LongPathName.
-void ValidatePathsAreEqual(const base::FilePath& expected_path,
- const base::FilePath& actual_path);
-
-// Validates that a shortcut exists at |shortcut_path| with the expected
-// |properties|.
-// Logs gtest failures on failed verifications.
-void ValidateShortcut(const FilePath& shortcut_path,
- const ShortcutProperties& properties);
-
-} // namespace win
-} // namespace base
-
-#endif // BASE_TEST_TEST_SHORTCUT_WIN_H_
diff --git a/base/test/test_simple_task_runner.cc b/base/test/test_simple_task_runner.cc
deleted file mode 100644
index 91c6861..0000000
--- a/base/test/test_simple_task_runner.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// 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/test/test_simple_task_runner.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/threading/thread_task_runner_handle.h"
-
-namespace base {
-
-TestSimpleTaskRunner::TestSimpleTaskRunner() = default;
-
-TestSimpleTaskRunner::~TestSimpleTaskRunner() = default;
-
-bool TestSimpleTaskRunner::PostDelayedTask(const Location& from_here,
- OnceClosure task,
- TimeDelta delay) {
- AutoLock auto_lock(lock_);
- pending_tasks_.push_back(TestPendingTask(from_here, std::move(task),
- TimeTicks(), delay,
- TestPendingTask::NESTABLE));
- return true;
-}
-
-bool TestSimpleTaskRunner::PostNonNestableDelayedTask(const Location& from_here,
- OnceClosure task,
- TimeDelta delay) {
- AutoLock auto_lock(lock_);
- pending_tasks_.push_back(TestPendingTask(from_here, std::move(task),
- TimeTicks(), delay,
- TestPendingTask::NON_NESTABLE));
- return true;
-}
-
-// TODO(gab): Use SequenceToken here to differentiate between tasks running in
-// the scope of this TestSimpleTaskRunner and other task runners sharing this
-// thread. http://crbug.com/631186
-bool TestSimpleTaskRunner::RunsTasksInCurrentSequence() const {
- return thread_ref_ == PlatformThread::CurrentRef();
-}
-
-base::circular_deque<TestPendingTask> TestSimpleTaskRunner::TakePendingTasks() {
- AutoLock auto_lock(lock_);
- return std::move(pending_tasks_);
-}
-
-size_t TestSimpleTaskRunner::NumPendingTasks() const {
- AutoLock auto_lock(lock_);
- return pending_tasks_.size();
-}
-
-bool TestSimpleTaskRunner::HasPendingTask() const {
- AutoLock auto_lock(lock_);
- return !pending_tasks_.empty();
-}
-
-base::TimeDelta TestSimpleTaskRunner::NextPendingTaskDelay() const {
- AutoLock auto_lock(lock_);
- return pending_tasks_.front().GetTimeToRun() - base::TimeTicks();
-}
-
-base::TimeDelta TestSimpleTaskRunner::FinalPendingTaskDelay() const {
- AutoLock auto_lock(lock_);
- return pending_tasks_.back().GetTimeToRun() - base::TimeTicks();
-}
-
-void TestSimpleTaskRunner::ClearPendingTasks() {
- AutoLock auto_lock(lock_);
- pending_tasks_.clear();
-}
-
-void TestSimpleTaskRunner::RunPendingTasks() {
- DCHECK(RunsTasksInCurrentSequence());
-
- // Swap with a local variable to avoid re-entrancy problems.
- base::circular_deque<TestPendingTask> tasks_to_run;
- {
- AutoLock auto_lock(lock_);
- tasks_to_run.swap(pending_tasks_);
- }
-
- // Multiple test task runners can share the same thread for determinism in
- // unit tests. Make sure this TestSimpleTaskRunner's tasks run in its scope.
- ScopedClosureRunner undo_override;
- if (!ThreadTaskRunnerHandle::IsSet() ||
- ThreadTaskRunnerHandle::Get() != this) {
- undo_override = ThreadTaskRunnerHandle::OverrideForTesting(this);
- }
-
- for (auto& task : tasks_to_run)
- std::move(task.task).Run();
-}
-
-void TestSimpleTaskRunner::RunUntilIdle() {
- while (HasPendingTask())
- RunPendingTasks();
-}
-
-} // namespace base
diff --git a/base/test/test_simple_task_runner.h b/base/test/test_simple_task_runner.h
deleted file mode 100644
index bff8ee5..0000000
--- a/base/test/test_simple_task_runner.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_SIMPLE_TASK_RUNNER_H_
-#define BASE_TEST_TEST_SIMPLE_TASK_RUNNER_H_
-
-#include "base/callback.h"
-#include "base/compiler_specific.h"
-#include "base/containers/circular_deque.h"
-#include "base/macros.h"
-#include "base/single_thread_task_runner.h"
-#include "base/synchronization/lock.h"
-#include "base/test/test_pending_task.h"
-#include "base/threading/platform_thread.h"
-
-namespace base {
-
-class TimeDelta;
-
-// TestSimpleTaskRunner is a simple TaskRunner implementation that can
-// be used for testing. It implements SingleThreadTaskRunner as that
-// interface implements SequencedTaskRunner, which in turn implements
-// TaskRunner, so TestSimpleTaskRunner can be passed in to a function
-// that accepts any *TaskRunner object.
-//
-// TestSimpleTaskRunner has the following properties which make it simple:
-//
-// - Tasks are simply stored in a queue in FIFO order, ignoring delay
-// and nestability.
-// - Tasks aren't guaranteed to be destroyed immediately after
-// they're run.
-//
-// However, TestSimpleTaskRunner allows for reentrancy, in that it
-// handles the running of tasks that in turn call back into itself
-// (e.g., to post more tasks).
-//
-// Note that, like any TaskRunner, TestSimpleTaskRunner is
-// ref-counted.
-class TestSimpleTaskRunner : public SingleThreadTaskRunner {
- public:
- TestSimpleTaskRunner();
-
- // SingleThreadTaskRunner implementation.
- bool PostDelayedTask(const Location& from_here,
- OnceClosure task,
- TimeDelta delay) override;
- bool PostNonNestableDelayedTask(const Location& from_here,
- OnceClosure task,
- TimeDelta delay) override;
-
- bool RunsTasksInCurrentSequence() const override;
-
- base::circular_deque<TestPendingTask> TakePendingTasks();
- size_t NumPendingTasks() const;
- bool HasPendingTask() const;
- base::TimeDelta NextPendingTaskDelay() const;
- base::TimeDelta FinalPendingTaskDelay() const;
-
- // Clears the queue of pending tasks without running them.
- void ClearPendingTasks();
-
- // Runs each current pending task in order and clears the queue. Tasks posted
- // by the tasks that run within this call do not run within this call. Can
- // only be called on the thread that created this TestSimpleTaskRunner.
- void RunPendingTasks();
-
- // Runs pending tasks until the queue is empty. Can only be called on the
- // thread that created this TestSimpleTaskRunner.
- void RunUntilIdle();
-
- protected:
- ~TestSimpleTaskRunner() override;
-
- private:
- // Thread on which this was instantiated.
- const PlatformThreadRef thread_ref_ = PlatformThread::CurrentRef();
-
- // Synchronizes access to |pending_tasks_|.
- mutable Lock lock_;
-
- base::circular_deque<TestPendingTask> pending_tasks_;
-
- DISALLOW_COPY_AND_ASSIGN(TestSimpleTaskRunner);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_SIMPLE_TASK_RUNNER_H_
diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
deleted file mode 100644
index 3bbb983..0000000
--- a/base/test/test_suite.cc
+++ /dev/null
@@ -1,484 +0,0 @@
-// 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/test/test_suite.h"
-
-#include <signal.h>
-
-#include <memory>
-
-#include "base/at_exit.h"
-#include "base/base_paths.h"
-#include "base/base_switches.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/debug/debugger.h"
-#include "base/debug/profiler.h"
-#include "base/debug/stack_trace.h"
-#include "base/feature_list.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/i18n/icu_util.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ptr_util.h"
-#include "base/path_service.h"
-#include "base/process/launch.h"
-#include "base/process/memory.h"
-#include "base/test/gtest_xml_unittest_result_printer.h"
-#include "base/test/gtest_xml_util.h"
-#include "base/test/icu_test_util.h"
-#include "base/test/launcher/unit_test_launcher.h"
-#include "base/test/multiprocess_test.h"
-#include "base/test/test_switches.h"
-#include "base/test/test_timeouts.h"
-#include "base/time/time.h"
-#include "build_config.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/multiprocess_func_list.h"
-
-#if defined(OS_MACOSX)
-#include "base/mac/scoped_nsautorelease_pool.h"
-#if defined(OS_IOS)
-#include "base/test/test_listener_ios.h"
-#endif // OS_IOS
-#endif // OS_MACOSX
-
-#if !defined(OS_WIN)
-#include "base/i18n/rtl.h"
-#if !defined(OS_IOS)
-#include "base/strings/string_util.h"
-#include "third_party/icu/source/common/unicode/uloc.h"
-#endif
-#endif
-
-#if defined(OS_ANDROID)
-#include "base/test/test_support_android.h"
-#endif
-
-#if defined(OS_IOS)
-#include "base/test/test_support_ios.h"
-#endif
-
-#if defined(OS_LINUX)
-#include "base/test/fontconfig_util_linux.h"
-#endif
-
-namespace base {
-
-namespace {
-
-class MaybeTestDisabler : public testing::EmptyTestEventListener {
- public:
- void OnTestStart(const testing::TestInfo& test_info) override {
- ASSERT_FALSE(TestSuite::IsMarkedMaybe(test_info))
- << "Probably the OS #ifdefs don't include all of the necessary "
- "platforms.\nPlease ensure that no tests have the MAYBE_ prefix "
- "after the code is preprocessed.";
- }
-};
-
-class TestClientInitializer : public testing::EmptyTestEventListener {
- public:
- TestClientInitializer()
- : old_command_line_(CommandLine::NO_PROGRAM) {
- }
-
- void OnTestStart(const testing::TestInfo& test_info) override {
- old_command_line_ = *CommandLine::ForCurrentProcess();
- }
-
- void OnTestEnd(const testing::TestInfo& test_info) override {
- *CommandLine::ForCurrentProcess() = old_command_line_;
- }
-
- private:
- CommandLine old_command_line_;
-
- DISALLOW_COPY_AND_ASSIGN(TestClientInitializer);
-};
-
-std::string GetProfileName() {
- static const char kDefaultProfileName[] = "test-profile-{pid}";
- CR_DEFINE_STATIC_LOCAL(std::string, profile_name, ());
- if (profile_name.empty()) {
- const base::CommandLine& command_line =
- *base::CommandLine::ForCurrentProcess();
- if (command_line.HasSwitch(switches::kProfilingFile))
- profile_name = command_line.GetSwitchValueASCII(switches::kProfilingFile);
- else
- profile_name = std::string(kDefaultProfileName);
- }
- return profile_name;
-}
-
-void InitializeLogging() {
-#if defined(OS_ANDROID)
- InitAndroidTestLogging();
-#else
- FilePath exe;
- PathService::Get(FILE_EXE, &exe);
- FilePath log_filename = exe.ReplaceExtension(FILE_PATH_LITERAL("log"));
- logging::LoggingSettings settings;
- settings.logging_dest = logging::LOG_TO_ALL;
- settings.log_file = log_filename.value().c_str();
- settings.delete_old = logging::DELETE_OLD_LOG_FILE;
- logging::InitLogging(settings);
- // We want process and thread IDs because we may have multiple processes.
- // Note: temporarily enabled timestamps in an effort to catch bug 6361.
- logging::SetLogItems(true, true, true, true);
-#endif // !defined(OS_ANDROID)
-}
-
-} // namespace
-
-int RunUnitTestsUsingBaseTestSuite(int argc, char **argv) {
- TestSuite test_suite(argc, argv);
- return LaunchUnitTests(argc, argv,
- Bind(&TestSuite::Run, Unretained(&test_suite)));
-}
-
-TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) {
- PreInitialize();
- InitializeFromCommandLine(argc, argv);
- // Logging must be initialized before any thread has a chance to call logging
- // functions.
- InitializeLogging();
-}
-
-#if defined(OS_WIN)
-TestSuite::TestSuite(int argc, wchar_t** argv)
- : initialized_command_line_(false) {
- PreInitialize();
- InitializeFromCommandLine(argc, argv);
- // Logging must be initialized before any thread has a chance to call logging
- // functions.
- InitializeLogging();
-}
-#endif // defined(OS_WIN)
-
-TestSuite::~TestSuite() {
- if (initialized_command_line_)
- CommandLine::Reset();
-}
-
-void TestSuite::InitializeFromCommandLine(int argc, char** argv) {
- initialized_command_line_ = CommandLine::Init(argc, argv);
- testing::InitGoogleTest(&argc, argv);
- testing::InitGoogleMock(&argc, argv);
-
-#if defined(OS_IOS)
- InitIOSRunHook(this, argc, argv);
-#endif
-}
-
-#if defined(OS_WIN)
-void TestSuite::InitializeFromCommandLine(int argc, wchar_t** argv) {
- // Windows CommandLine::Init ignores argv anyway.
- initialized_command_line_ = CommandLine::Init(argc, NULL);
- testing::InitGoogleTest(&argc, argv);
- testing::InitGoogleMock(&argc, argv);
-}
-#endif // defined(OS_WIN)
-
-void TestSuite::PreInitialize() {
-#if defined(OS_WIN)
- testing::GTEST_FLAG(catch_exceptions) = false;
-#endif
- EnableTerminationOnHeapCorruption();
-#if defined(OS_LINUX) && defined(USE_AURA)
- // When calling native char conversion functions (e.g wrctomb) we need to
- // have the locale set. In the absence of such a call the "C" locale is the
- // default. In the gtk code (below) gtk_init() implicitly sets a locale.
- setlocale(LC_ALL, "");
-#endif // defined(OS_LINUX) && defined(USE_AURA)
-
- // On Android, AtExitManager is created in
- // testing/android/native_test_wrapper.cc before main() is called.
-#if !defined(OS_ANDROID)
- at_exit_manager_.reset(new AtExitManager);
-#endif
-
- // Don't add additional code to this function. Instead add it to
- // Initialize(). See bug 6436.
-}
-
-
-// static
-bool TestSuite::IsMarkedMaybe(const testing::TestInfo& test) {
- return strncmp(test.name(), "MAYBE_", 6) == 0;
-}
-
-void TestSuite::CatchMaybeTests() {
- testing::TestEventListeners& listeners =
- testing::UnitTest::GetInstance()->listeners();
- listeners.Append(new MaybeTestDisabler);
-}
-
-void TestSuite::ResetCommandLine() {
- testing::TestEventListeners& listeners =
- testing::UnitTest::GetInstance()->listeners();
- listeners.Append(new TestClientInitializer);
-}
-
-void TestSuite::AddTestLauncherResultPrinter() {
- // Only add the custom printer if requested.
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherOutput)) {
- return;
- }
-
- FilePath output_path(CommandLine::ForCurrentProcess()->GetSwitchValuePath(
- switches::kTestLauncherOutput));
-
- // Do not add the result printer if output path already exists. It's an
- // indicator there is a process printing to that file, and we're likely
- // its child. Do not clobber the results in that case.
- if (PathExists(output_path)) {
- LOG(WARNING) << "Test launcher output path " << output_path.AsUTF8Unsafe()
- << " exists. Not adding test launcher result printer.";
- return;
- }
-
- printer_ = new XmlUnitTestResultPrinter;
- CHECK(printer_->Initialize(output_path));
- testing::TestEventListeners& listeners =
- testing::UnitTest::GetInstance()->listeners();
- listeners.Append(printer_);
-}
-
-// Don't add additional code to this method. Instead add it to
-// Initialize(). See bug 6436.
-int TestSuite::Run() {
-#if defined(OS_IOS)
- RunTestsFromIOSApp();
-#endif
-
-#if defined(OS_MACOSX)
- mac::ScopedNSAutoreleasePool scoped_pool;
-#endif
-
- Initialize();
- std::string client_func =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kTestChildProcess);
-
- // Check to see if we are being run as a client process.
- if (!client_func.empty())
- return multi_process_function_list::InvokeChildProcessTest(client_func);
-#if defined(OS_IOS)
- test_listener_ios::RegisterTestEndListener();
-#endif
-
- int result = RUN_ALL_TESTS();
-
-#if defined(OS_MACOSX)
- // This MUST happen before Shutdown() since Shutdown() tears down
- // objects (such as NotificationService::current()) that Cocoa
- // objects use to remove themselves as observers.
- scoped_pool.Recycle();
-#endif
-
- Shutdown();
-
- return result;
-}
-
-void TestSuite::UnitTestAssertHandler(const char* file,
- int line,
- const base::StringPiece summary,
- const base::StringPiece stack_trace) {
-#if defined(OS_ANDROID)
- // Correlating test stdio with logcat can be difficult, so we emit this
- // helpful little hint about what was running. Only do this for Android
- // because other platforms don't separate out the relevant logs in the same
- // way.
- const ::testing::TestInfo* const test_info =
- ::testing::UnitTest::GetInstance()->current_test_info();
- if (test_info) {
- LOG(ERROR) << "Currently running: " << test_info->test_case_name() << "."
- << test_info->name();
- fflush(stderr);
- }
-#endif // defined(OS_ANDROID)
-
- // XmlUnitTestResultPrinter inherits gtest format, where assert has summary
- // and message. In GTest, summary is just a logged text, and message is a
- // logged text, concatenated with stack trace of assert.
- // Concatenate summary and stack_trace here, to pass it as a message.
- if (printer_) {
- const std::string summary_str = summary.as_string();
- const std::string stack_trace_str = summary_str + stack_trace.as_string();
- printer_->OnAssert(file, line, summary_str, stack_trace_str);
- }
-
- // The logging system actually prints the message before calling the assert
- // handler. Just exit now to avoid printing too many stack traces.
- _exit(1);
-}
-
-#if defined(OS_WIN)
-namespace {
-
-// Disable optimizations to prevent function folding or other transformations
-// that will make the call stacks on failures more confusing.
-#pragma optimize("", off)
-// Handlers for invalid parameter, pure call, and abort. They generate a
-// breakpoint to ensure that we get a call stack on these failures.
-void InvalidParameter(const wchar_t* expression,
- const wchar_t* function,
- const wchar_t* file,
- unsigned int line,
- uintptr_t reserved) {
- // CRT printed message is sufficient.
- __debugbreak();
- _exit(1);
-}
-
-void PureCall() {
- fprintf(stderr, "Pure-virtual function call. Terminating.\n");
- __debugbreak();
- _exit(1);
-}
-
-void AbortHandler(int signal) {
- // Print EOL after the CRT abort message.
- fprintf(stderr, "\n");
- __debugbreak();
-}
-#pragma optimize("", on)
-
-} // namespace
-#endif
-
-void TestSuite::SuppressErrorDialogs() {
-#if defined(OS_WIN)
- UINT new_flags = SEM_FAILCRITICALERRORS |
- SEM_NOGPFAULTERRORBOX |
- SEM_NOOPENFILEERRORBOX;
-
- // Preserve existing error mode, as discussed at
- // http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx
- UINT existing_flags = SetErrorMode(new_flags);
- SetErrorMode(existing_flags | new_flags);
-
-#if defined(_DEBUG)
- // Suppress the "Debug Assertion Failed" dialog.
- // TODO(hbono): remove this code when gtest has it.
- // http://groups.google.com/d/topic/googletestframework/OjuwNlXy5ac/discussion
- _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
- _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
- _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
- _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
-#endif // defined(_DEBUG)
-
- // See crbug.com/783040 for test code to trigger all of these failures.
- _set_invalid_parameter_handler(InvalidParameter);
- _set_purecall_handler(PureCall);
- signal(SIGABRT, AbortHandler);
-#endif // defined(OS_WIN)
-}
-
-void TestSuite::Initialize() {
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
-#if !defined(OS_IOS)
- if (command_line->HasSwitch(switches::kWaitForDebugger)) {
- debug::WaitForDebugger(60, true);
- }
-#endif
- // Set up a FeatureList instance, so that code using that API will not hit a
- // an error that it's not set. It will be cleared automatically.
- // TestFeatureForBrowserTest1 and TestFeatureForBrowserTest2 used in
- // ContentBrowserTestScopedFeatureListTest to ensure ScopedFeatureList keeps
- // features from command line.
- std::string enabled =
- command_line->GetSwitchValueASCII(switches::kEnableFeatures);
- std::string disabled =
- command_line->GetSwitchValueASCII(switches::kDisableFeatures);
- enabled += ",TestFeatureForBrowserTest1";
- disabled += ",TestFeatureForBrowserTest2";
- scoped_feature_list_.InitFromCommandLine(enabled, disabled);
-
- // The enable-features and disable-features flags were just slurped into a
- // FeatureList, so remove them from the command line. Tests should enable and
- // disable features via the ScopedFeatureList API rather than command-line
- // flags.
- CommandLine new_command_line(command_line->GetProgram());
- CommandLine::SwitchMap switches = command_line->GetSwitches();
-
- switches.erase(switches::kEnableFeatures);
- switches.erase(switches::kDisableFeatures);
-
- for (const auto& iter : switches)
- new_command_line.AppendSwitchNative(iter.first, iter.second);
-
- *CommandLine::ForCurrentProcess() = new_command_line;
-
-#if defined(OS_IOS)
- InitIOSTestMessageLoop();
-#endif // OS_IOS
-
-#if defined(OS_ANDROID)
- InitAndroidTestMessageLoop();
-#endif // else defined(OS_ANDROID)
-
- CHECK(debug::EnableInProcessStackDumping());
-#if defined(OS_WIN)
- RouteStdioToConsole(true);
- // Make sure we run with high resolution timer to minimize differences
- // between production code and test code.
- Time::EnableHighResolutionTimer(true);
-#endif // defined(OS_WIN)
-
- // In some cases, we do not want to see standard error dialogs.
- if (!debug::BeingDebugged() &&
- !command_line->HasSwitch("show-error-dialogs")) {
- SuppressErrorDialogs();
- debug::SetSuppressDebugUI(true);
- assert_handler_ = std::make_unique<logging::ScopedLogAssertHandler>(
- base::Bind(&TestSuite::UnitTestAssertHandler, base::Unretained(this)));
- }
-
- base::test::InitializeICUForTesting();
-
- // On the Mac OS X command line, the default locale is *_POSIX. In Chromium,
- // the locale is set via an OS X locale API and is never *_POSIX.
- // Some tests (such as those involving word break iterator) will behave
- // differently and fail if we use *POSIX locale. Setting it to en_US here
- // does not affect tests that explicitly overrides the locale for testing.
- // This can be an issue on all platforms other than Windows.
- // TODO(jshin): Should we set the locale via an OS X locale API here?
-#if !defined(OS_WIN)
-#if defined(OS_IOS)
- i18n::SetICUDefaultLocale("en_US");
-#else
- std::string default_locale(uloc_getDefault());
- if (EndsWith(default_locale, "POSIX", CompareCase::INSENSITIVE_ASCII))
- i18n::SetICUDefaultLocale("en_US");
-#endif
-#endif
-
-#if defined(OS_LINUX)
- // TODO(thomasanderson): Call TearDownFontconfig() in Shutdown(). It would
- // currently crash because of leaked FcFontSet's in font_fallback_linux.cc.
- SetUpFontconfig();
-#endif
-
- CatchMaybeTests();
- ResetCommandLine();
- AddTestLauncherResultPrinter();
-
- TestTimeouts::Initialize();
-
- trace_to_file_.BeginTracingFromCommandLineOptions();
-
- base::debug::StartProfiling(GetProfileName());
-}
-
-void TestSuite::Shutdown() {
- base::debug::StopProfiling();
-}
-
-} // namespace base
diff --git a/base/test/test_suite.h b/base/test/test_suite.h
deleted file mode 100644
index 3547acf..0000000
--- a/base/test/test_suite.h
+++ /dev/null
@@ -1,103 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_SUITE_H_
-#define BASE_TEST_TEST_SUITE_H_
-
-// Defines a basic test suite framework for running gtest based tests. You can
-// instantiate this class in your main function and call its Run method to run
-// any gtest based tests that are linked into your executable.
-
-#include <memory>
-#include <string>
-
-#include "base/at_exit.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/test/scoped_feature_list.h"
-#include "base/test/trace_to_file.h"
-#include "build_config.h"
-
-namespace testing {
-class TestInfo;
-}
-
-namespace base {
-
-class XmlUnitTestResultPrinter;
-
-// Instantiates TestSuite, runs it and returns exit code.
-int RunUnitTestsUsingBaseTestSuite(int argc, char **argv);
-
-class TestSuite {
- public:
- // Match function used by the GetTestCount method.
- typedef bool (*TestMatch)(const testing::TestInfo&);
-
- TestSuite(int argc, char** argv);
-#if defined(OS_WIN)
- TestSuite(int argc, wchar_t** argv);
-#endif // defined(OS_WIN)
- virtual ~TestSuite();
-
- // Returns true if the test is marked as "MAYBE_".
- // When using different prefixes depending on platform, we use MAYBE_ and
- // preprocessor directives to replace MAYBE_ with the target prefix.
- static bool IsMarkedMaybe(const testing::TestInfo& test);
-
- void CatchMaybeTests();
-
- void ResetCommandLine();
-
- void AddTestLauncherResultPrinter();
-
- int Run();
-
- protected:
- // By default fatal log messages (e.g. from DCHECKs) result in error dialogs
- // which gum up buildbots. Use a minimalistic assert handler which just
- // terminates the process.
- void UnitTestAssertHandler(const char* file,
- int line,
- const base::StringPiece summary,
- const base::StringPiece stack_trace);
-
- // Disable crash dialogs so that it doesn't gum up the buildbot
- virtual void SuppressErrorDialogs();
-
- // Override these for custom initialization and shutdown handling. Use these
- // instead of putting complex code in your constructor/destructor.
-
- virtual void Initialize();
- virtual void Shutdown();
-
- // Make sure that we setup an AtExitManager so Singleton objects will be
- // destroyed.
- std::unique_ptr<base::AtExitManager> at_exit_manager_;
-
- private:
- void InitializeFromCommandLine(int argc, char** argv);
-#if defined(OS_WIN)
- void InitializeFromCommandLine(int argc, wchar_t** argv);
-#endif // defined(OS_WIN)
-
- // Basic initialization for the test suite happens here.
- void PreInitialize();
-
- test::TraceToFile trace_to_file_;
-
- bool initialized_command_line_;
-
- test::ScopedFeatureList scoped_feature_list_;
-
- XmlUnitTestResultPrinter* printer_ = nullptr;
-
- std::unique_ptr<logging::ScopedLogAssertHandler> assert_handler_;
-
- DISALLOW_COPY_AND_ASSIGN(TestSuite);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_TEST_SUITE_H_
diff --git a/base/test/test_switches.cc b/base/test/test_switches.cc
deleted file mode 100644
index a35bdd8..0000000
--- a/base/test/test_switches.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-// 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/test/test_switches.h"
-
-// Maximum number of tests to run in a single batch.
-const char switches::kTestLauncherBatchLimit[] = "test-launcher-batch-limit";
-
-// Sets defaults desirable for the continuous integration bots, e.g. parallel
-// test execution and test retries.
-const char switches::kTestLauncherBotMode[] =
- "test-launcher-bot-mode";
-
-// Makes it possible to debug the launcher itself. By default the launcher
-// automatically switches to single process mode when it detects presence
-// of debugger.
-const char switches::kTestLauncherDebugLauncher[] =
- "test-launcher-debug-launcher";
-
-// Force running all requested tests and retries even if too many test errors
-// occur.
-const char switches::kTestLauncherForceRunBrokenTests[] =
- "test-launcher-force-run-broken-tests";
-
-// Path to file containing test filter (one pattern per line).
-const char switches::kTestLauncherFilterFile[] = "test-launcher-filter-file";
-
-// Whether the test launcher should launch in "interactive mode", which disables
-// timeouts (and may have other effects for specific test types).
-const char switches::kTestLauncherInteractive[] = "test-launcher-interactive";
-
-// Number of parallel test launcher jobs.
-const char switches::kTestLauncherJobs[] = "test-launcher-jobs";
-
-// Path to list of compiled in tests.
-const char switches::kTestLauncherListTests[] = "test-launcher-list-tests";
-
-// Path to test results file in our custom test launcher format.
-const char switches::kTestLauncherOutput[] = "test-launcher-output";
-
-// Maximum number of times to retry a test after failure.
-const char switches::kTestLauncherRetryLimit[] = "test-launcher-retry-limit";
-
-// Path to test results file with all the info from the test launcher.
-const char switches::kTestLauncherSummaryOutput[] =
- "test-launcher-summary-output";
-
-// Flag controlling when test stdio is displayed as part of the launcher's
-// standard output.
-const char switches::kTestLauncherPrintTestStdio[] =
- "test-launcher-print-test-stdio";
-
-// Print a writable path and exit (for internal use).
-const char switches::kTestLauncherPrintWritablePath[] =
- "test-launcher-print-writable-path";
-
-// Index of the test shard to run, starting from 0 (first shard) to total shards
-// minus one (last shard).
-const char switches::kTestLauncherShardIndex[] =
- "test-launcher-shard-index";
-
-// Limit of test part results in the output. Default limit is 10.
-// Negative value will completely disable limit.
-const char switches::kTestLauncherTestPartResultsLimit[] =
- "test-launcher-test-part-results-limit";
-
-// Total number of shards. Must be the same for all shards.
-const char switches::kTestLauncherTotalShards[] =
- "test-launcher-total-shards";
-
-// Time (in milliseconds) that the tests should wait before timing out.
-const char switches::kTestLauncherTimeout[] = "test-launcher-timeout";
-
-// Path where to save a trace of test launcher's execution.
-const char switches::kTestLauncherTrace[] = "test-launcher-trace";
-
-// TODO(phajdan.jr): Clean up the switch names.
-const char switches::kTestTinyTimeout[] = "test-tiny-timeout";
-const char switches::kUiTestActionTimeout[] = "ui-test-action-timeout";
-const char switches::kUiTestActionMaxTimeout[] = "ui-test-action-max-timeout";
diff --git a/base/test/test_switches.h b/base/test/test_switches.h
deleted file mode 100644
index 6baba30..0000000
--- a/base/test/test_switches.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_SWITCHES_H_
-#define BASE_TEST_TEST_SWITCHES_H_
-
-namespace switches {
-
-// All switches in alphabetical order. The switches should be documented
-// alongside the definition of their values in the .cc file.
-extern const char kTestLauncherBatchLimit[];
-extern const char kTestLauncherBotMode[];
-extern const char kTestLauncherDebugLauncher[];
-extern const char kTestLauncherForceRunBrokenTests[];
-extern const char kTestLauncherFilterFile[];
-extern const char kTestLauncherInteractive[];
-extern const char kTestLauncherJobs[];
-extern const char kTestLauncherListTests[];
-extern const char kTestLauncherOutput[];
-extern const char kTestLauncherRetryLimit[];
-extern const char kTestLauncherSummaryOutput[];
-extern const char kTestLauncherPrintTestStdio[];
-extern const char kTestLauncherPrintWritablePath[];
-extern const char kTestLauncherShardIndex[];
-extern const char kTestLauncherTestPartResultsLimit[];
-extern const char kTestLauncherTotalShards[];
-extern const char kTestLauncherTimeout[];
-extern const char kTestLauncherTrace[];
-extern const char kTestTinyTimeout[];
-extern const char kUiTestActionTimeout[];
-extern const char kUiTestActionMaxTimeout[];
-
-} // namespace switches
-
-#endif // BASE_TEST_TEST_SWITCHES_H_
diff --git a/base/test/test_timeouts.cc b/base/test/test_timeouts.cc
deleted file mode 100644
index 4c8b4ab..0000000
--- a/base/test/test_timeouts.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) 2011 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/test/test_timeouts.h"
-
-#include <algorithm>
-
-#include "base/command_line.h"
-#include "base/debug/debugger.h"
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/test/test_switches.h"
-#include "build_config.h"
-
-namespace {
-
-// Sets value to the greatest of:
-// 1) value's current value multiplied by kTimeoutMultiplier (assuming
-// InitializeTimeout is called only once per value).
-// 2) min_value.
-// 3) the numerical value given by switch_name on the command line multiplied
-// by kTimeoutMultiplier.
-void InitializeTimeout(const char* switch_name, int min_value, int* value) {
- DCHECK(value);
- int command_line_timeout = 0;
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(switch_name)) {
- std::string string_value(base::CommandLine::ForCurrentProcess()->
- GetSwitchValueASCII(switch_name));
- if (!base::StringToInt(string_value, &command_line_timeout)) {
- LOG(FATAL) << "Timeout value \"" << string_value << "\" was parsed as "
- << command_line_timeout;
- }
- }
-
-#if defined(MEMORY_SANITIZER)
- // ASan/TSan/MSan instrument each memory access. This may slow the execution
- // down significantly.
- // For MSan the slowdown depends heavily on the value of msan_track_origins
- // build flag. The multiplier below corresponds to msan_track_origins = 1.
- constexpr int kTimeoutMultiplier = 6;
-#elif defined(ADDRESS_SANITIZER) && defined(OS_WIN)
- // ASan/Win has not been optimized yet, give it a higher
- // timeout multiplier. See http://crbug.com/412471
- constexpr int kTimeoutMultiplier = 3;
-#elif defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER)
- constexpr int kTimeoutMultiplier = 2;
-#else
- constexpr int kTimeoutMultiplier = 1;
-#endif
-
- *value = std::max(std::max(*value, command_line_timeout) * kTimeoutMultiplier,
- min_value);
-}
-
-} // namespace
-
-// static
-bool TestTimeouts::initialized_ = false;
-
-// The timeout values should increase in the order they appear in this block.
-// static
-int TestTimeouts::tiny_timeout_ms_ = 100;
-int TestTimeouts::action_timeout_ms_ = 10000;
-#ifndef NDEBUG
-int TestTimeouts::action_max_timeout_ms_ = 45000;
-#else
-int TestTimeouts::action_max_timeout_ms_ = 30000;
-#endif // NDEBUG
-
-int TestTimeouts::test_launcher_timeout_ms_ = 45000;
-
-// static
-void TestTimeouts::Initialize() {
- DCHECK(!initialized_);
- initialized_ = true;
-
- if (base::debug::BeingDebugged()) {
- fprintf(stdout,
- "Detected presence of a debugger, running without test timeouts.\n");
- }
-
- // Note that these timeouts MUST be initialized in the correct order as
- // per the CHECKS below.
-
- InitializeTimeout(switches::kTestTinyTimeout, 0, &tiny_timeout_ms_);
-
- // All timeouts other than the "tiny" one should be set to very large values
- // when in a debugger or when run interactively, so that tests will not get
- // auto-terminated. By setting the UI test action timeout to at least this
- // value, we guarantee the subsequent timeouts will be this large also.
- // Setting the "tiny" timeout to a large value as well would make some tests
- // hang (because it's used as a task-posting delay). In particular this
- // causes problems for some iOS device tests, which are always run inside a
- // debugger (thus BeingDebugged() is true even on the bots).
- int min_ui_test_action_timeout = tiny_timeout_ms_;
- if (base::debug::BeingDebugged() ||
- base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestLauncherInteractive)) {
- constexpr int kVeryLargeTimeoutMs = 100'000'000;
- min_ui_test_action_timeout = kVeryLargeTimeoutMs;
- }
-
- InitializeTimeout(switches::kUiTestActionTimeout, min_ui_test_action_timeout,
- &action_timeout_ms_);
- InitializeTimeout(switches::kUiTestActionMaxTimeout, action_timeout_ms_,
- &action_max_timeout_ms_);
-
- // Test launcher timeout is independent from anything above action timeout.
- InitializeTimeout(switches::kTestLauncherTimeout, action_timeout_ms_,
- &test_launcher_timeout_ms_);
-
- // The timeout values should be increasing in the right order.
- CHECK_LE(tiny_timeout_ms_, action_timeout_ms_);
- CHECK_LE(action_timeout_ms_, action_max_timeout_ms_);
- CHECK_LE(action_timeout_ms_, test_launcher_timeout_ms_);
-}
diff --git a/base/test/test_timeouts.h b/base/test/test_timeouts.h
deleted file mode 100644
index 71983ed..0000000
--- a/base/test/test_timeouts.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_TEST_TIMEOUTS_H_
-#define BASE_TEST_TEST_TIMEOUTS_H_
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/time/time.h"
-
-// Returns common timeouts to use in tests. Makes it possible to adjust
-// the timeouts for different environments (like TSan).
-class TestTimeouts {
- public:
- // Initializes the timeouts. Non thread-safe. Should be called exactly once
- // by the test suite.
- static void Initialize();
-
- // Timeout for actions that are expected to finish "almost instantly". This
- // is used in various tests to post delayed tasks and usually functions more
- // like a delay value than a timeout.
- static base::TimeDelta tiny_timeout() {
- DCHECK(initialized_);
- return base::TimeDelta::FromMilliseconds(tiny_timeout_ms_);
- }
-
- // Timeout to wait for something to happen. If you are not sure
- // which timeout to use, this is the one you want.
- static base::TimeDelta action_timeout() {
- DCHECK(initialized_);
- return base::TimeDelta::FromMilliseconds(action_timeout_ms_);
- }
-
- // Timeout longer than the above, but still suitable to use
- // multiple times in a single test. Use if the timeout above
- // is not sufficient.
- static base::TimeDelta action_max_timeout() {
- DCHECK(initialized_);
- return base::TimeDelta::FromMilliseconds(action_max_timeout_ms_);
- }
-
- // Timeout for a single test launched used built-in test launcher.
- // Do not use outside of the test launcher.
- static base::TimeDelta test_launcher_timeout() {
- DCHECK(initialized_);
- return base::TimeDelta::FromMilliseconds(test_launcher_timeout_ms_);
- }
-
- private:
- static bool initialized_;
-
- static int tiny_timeout_ms_;
- static int action_timeout_ms_;
- static int action_max_timeout_ms_;
- static int test_launcher_timeout_ms_;
-
- DISALLOW_IMPLICIT_CONSTRUCTORS(TestTimeouts);
-};
-
-#endif // BASE_TEST_TEST_TIMEOUTS_H_
diff --git a/base/test/thread_test_helper.cc b/base/test/thread_test_helper.cc
deleted file mode 100644
index f3ca780..0000000
--- a/base/test/thread_test_helper.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2011 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/test/thread_test_helper.h"
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/threading/thread_restrictions.h"
-
-namespace base {
-
-ThreadTestHelper::ThreadTestHelper(
- scoped_refptr<SequencedTaskRunner> target_sequence)
- : test_result_(false),
- target_sequence_(std::move(target_sequence)),
- done_event_(WaitableEvent::ResetPolicy::AUTOMATIC,
- WaitableEvent::InitialState::NOT_SIGNALED) {}
-
-bool ThreadTestHelper::Run() {
- if (!target_sequence_->PostTask(
- FROM_HERE, base::BindOnce(&ThreadTestHelper::RunOnSequence, this))) {
- return false;
- }
- base::ThreadRestrictions::ScopedAllowWait allow_wait;
- done_event_.Wait();
- return test_result_;
-}
-
-void ThreadTestHelper::RunTest() { set_test_result(true); }
-
-ThreadTestHelper::~ThreadTestHelper() = default;
-
-void ThreadTestHelper::RunOnSequence() {
- RunTest();
- done_event_.Signal();
-}
-
-} // namespace base
diff --git a/base/test/thread_test_helper.h b/base/test/thread_test_helper.h
deleted file mode 100644
index 935e7ef..0000000
--- a/base/test/thread_test_helper.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) 2011 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.
-
-#ifndef BASE_TEST_THREAD_TEST_HELPER_H_
-#define BASE_TEST_THREAD_TEST_HELPER_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/sequenced_task_runner.h"
-#include "base/synchronization/waitable_event.h"
-
-namespace base {
-
-// Helper class that executes code on a given target sequence/thread while
-// blocking on the invoking sequence/thread. To use, derive from this class and
-// overwrite RunTest. An alternative use of this class is to use it directly. It
-// will then block until all pending tasks on a given sequence/thread have been
-// executed.
-class ThreadTestHelper : public RefCountedThreadSafe<ThreadTestHelper> {
- public:
- explicit ThreadTestHelper(scoped_refptr<SequencedTaskRunner> target_sequence);
-
- // True if RunTest() was successfully executed on the target sequence.
- bool Run() WARN_UNUSED_RESULT;
-
- virtual void RunTest();
-
- protected:
- friend class RefCountedThreadSafe<ThreadTestHelper>;
-
- virtual ~ThreadTestHelper();
-
- // Use this method to store the result of RunTest().
- void set_test_result(bool test_result) { test_result_ = test_result; }
-
- private:
- void RunOnSequence();
-
- bool test_result_;
- scoped_refptr<SequencedTaskRunner> target_sequence_;
- WaitableEvent done_event_;
-
- DISALLOW_COPY_AND_ASSIGN(ThreadTestHelper);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_THREAD_TEST_HELPER_H_
diff --git a/base/test/trace_to_file.cc b/base/test/trace_to_file.cc
deleted file mode 100644
index 17aa80b..0000000
--- a/base/test/trace_to_file.cc
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (c) 2014 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/test/trace_to_file.h"
-
-#include "base/base_switches.h"
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/memory/ref_counted_memory.h"
-#include "base/run_loop.h"
-#include "base/trace_event/trace_buffer.h"
-#include "base/trace_event/trace_log.h"
-
-namespace base {
-namespace test {
-
-TraceToFile::TraceToFile() : started_(false) {
-}
-
-TraceToFile::~TraceToFile() {
- EndTracingIfNeeded();
-}
-
-void TraceToFile::BeginTracingFromCommandLineOptions() {
- DCHECK(CommandLine::InitializedForCurrentProcess());
- DCHECK(!started_);
-
- if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kTraceToFile))
- return;
-
- // Empty filter (i.e. just --trace-to-file) turns into default categories in
- // TraceEventImpl
- std::string filter = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kTraceToFile);
-
- FilePath path;
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kTraceToFileName)) {
- path = FilePath(CommandLine::ForCurrentProcess()
- ->GetSwitchValuePath(switches::kTraceToFileName));
- } else {
- path = FilePath(FILE_PATH_LITERAL("trace.json"));
- }
-
- BeginTracing(path, filter);
-}
-
-void TraceToFile::BeginTracing(const FilePath& path,
- const std::string& categories) {
- DCHECK(!started_);
- started_ = true;
- path_ = path;
- WriteFileHeader();
-
- trace_event::TraceLog::GetInstance()->SetEnabled(
- trace_event::TraceConfig(categories, trace_event::RECORD_UNTIL_FULL),
- trace_event::TraceLog::RECORDING_MODE);
-}
-
-void TraceToFile::WriteFileHeader() {
- const char str[] = "{\"traceEvents\": [";
- WriteFile(path_, str, static_cast<int>(strlen(str)));
-}
-
-void TraceToFile::AppendFileFooter() {
- const char str[] = "]}";
- AppendToFile(path_, str, static_cast<int>(strlen(str)));
-}
-
-void TraceToFile::TraceOutputCallback(const std::string& data) {
- bool ret = AppendToFile(path_, data.c_str(), static_cast<int>(data.size()));
- DCHECK(ret);
-}
-
-static void OnTraceDataCollected(
- Closure quit_closure,
- trace_event::TraceResultBuffer* buffer,
- const scoped_refptr<RefCountedString>& json_events_str,
- bool has_more_events) {
- buffer->AddFragment(json_events_str->data());
- if (!has_more_events)
- quit_closure.Run();
-}
-
-void TraceToFile::EndTracingIfNeeded() {
- if (!started_)
- return;
- started_ = false;
-
- trace_event::TraceLog::GetInstance()->SetDisabled();
-
- trace_event::TraceResultBuffer buffer;
- buffer.SetOutputCallback(
- Bind(&TraceToFile::TraceOutputCallback, Unretained(this)));
-
- RunLoop run_loop;
- trace_event::TraceLog::GetInstance()->Flush(
- Bind(&OnTraceDataCollected, run_loop.QuitClosure(), Unretained(&buffer)));
- run_loop.Run();
-
- AppendFileFooter();
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/trace_to_file.h b/base/test/trace_to_file.h
deleted file mode 100644
index 4308736..0000000
--- a/base/test/trace_to_file.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2014 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.
-
-#ifndef BASE_TEST_TRACE_TO_FILE_H_
-#define BASE_TEST_TRACE_TO_FILE_H_
-
-#include "base/files/file_path.h"
-
-namespace base {
-namespace test {
-
-class TraceToFile {
- public:
- TraceToFile();
- ~TraceToFile();
-
- void BeginTracingFromCommandLineOptions();
- void BeginTracing(const base::FilePath& path, const std::string& categories);
- void EndTracingIfNeeded();
-
- private:
- void WriteFileHeader();
- void AppendFileFooter();
-
- void TraceOutputCallback(const std::string& data);
-
- base::FilePath path_;
- bool started_;
-};
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_TRACE_TO_FILE_H_
diff --git a/base/test/user_action_tester.cc b/base/test/user_action_tester.cc
deleted file mode 100644
index 6c3de39..0000000
--- a/base/test/user_action_tester.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2015 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/test/user_action_tester.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/test/test_simple_task_runner.h"
-
-namespace base {
-
-UserActionTester::UserActionTester()
- : task_runner_(new base::TestSimpleTaskRunner),
- action_callback_(
- base::Bind(&UserActionTester::OnUserAction, base::Unretained(this))) {
- base::SetRecordActionTaskRunner(task_runner_);
- base::AddActionCallback(action_callback_);
-}
-
-UserActionTester::~UserActionTester() {
- base::RemoveActionCallback(action_callback_);
-}
-
-int UserActionTester::GetActionCount(const std::string& user_action) const {
- UserActionCountMap::const_iterator iter = count_map_.find(user_action);
- return iter == count_map_.end() ? 0 : iter->second;
-}
-
-void UserActionTester::ResetCounts() {
- count_map_.clear();
-}
-
-void UserActionTester::OnUserAction(const std::string& user_action) {
- ++(count_map_[user_action]);
-}
-
-} // namespace base
diff --git a/base/test/user_action_tester.h b/base/test/user_action_tester.h
deleted file mode 100644
index 88bc632..0000000
--- a/base/test/user_action_tester.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2015 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.
-
-#ifndef BASE_TEST_USER_ACTION_TESTER_H_
-#define BASE_TEST_USER_ACTION_TESTER_H_
-
-#include <map>
-#include <string>
-
-#include "base/macros.h"
-#include "base/metrics/user_metrics.h"
-
-namespace base {
-
-// This class observes and collects user action notifications that are sent
-// by the tests, so that they can be examined afterwards for correctness.
-// Note: This class is NOT thread-safe.
-class UserActionTester {
- public:
- UserActionTester();
- ~UserActionTester();
-
- // Returns the number of times the given |user_action| occurred.
- int GetActionCount(const std::string& user_action) const;
-
- // Resets all user action counts to 0.
- void ResetCounts();
-
- private:
- typedef std::map<std::string, int> UserActionCountMap;
-
- // The callback that is notified when a user actions occurs.
- void OnUserAction(const std::string& user_action);
-
- // A map that tracks the number of times a user action has occurred.
- UserActionCountMap count_map_;
-
- // A test task runner used by user metrics.
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
- // The callback that is added to the global action callback list.
- base::ActionCallback action_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(UserActionTester);
-};
-
-} // namespace base
-
-#endif // BASE_TEST_USER_ACTION_TESTER_H_
diff --git a/base/test/values_test_util.cc b/base/test/values_test_util.cc
deleted file mode 100644
index a65c2c0..0000000
--- a/base/test/values_test_util.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-// 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/test/values_test_util.h"
-
-#include <memory>
-
-#include "base/json/json_reader.h"
-#include "base/memory/ptr_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/values.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-void ExpectDictBooleanValue(bool expected_value,
- const DictionaryValue& value,
- const std::string& key) {
- bool boolean_value = false;
- EXPECT_TRUE(value.GetBoolean(key, &boolean_value)) << key;
- EXPECT_EQ(expected_value, boolean_value) << key;
-}
-
-void ExpectDictDictionaryValue(const DictionaryValue& expected_value,
- const DictionaryValue& value,
- const std::string& key) {
- const DictionaryValue* dict_value = nullptr;
- EXPECT_TRUE(value.GetDictionary(key, &dict_value)) << key;
- EXPECT_EQ(expected_value, *dict_value) << key;
-}
-
-void ExpectDictIntegerValue(int expected_value,
- const DictionaryValue& value,
- const std::string& key) {
- int integer_value = 0;
- EXPECT_TRUE(value.GetInteger(key, &integer_value)) << key;
- EXPECT_EQ(expected_value, integer_value) << key;
-}
-
-void ExpectDictListValue(const ListValue& expected_value,
- const DictionaryValue& value,
- const std::string& key) {
- const ListValue* list_value = nullptr;
- EXPECT_TRUE(value.GetList(key, &list_value)) << key;
- EXPECT_EQ(expected_value, *list_value) << key;
-}
-
-void ExpectDictStringValue(const std::string& expected_value,
- const DictionaryValue& value,
- const std::string& key) {
- std::string string_value;
- EXPECT_TRUE(value.GetString(key, &string_value)) << key;
- EXPECT_EQ(expected_value, string_value) << key;
-}
-
-void ExpectStringValue(const std::string& expected_str, const Value& actual) {
- EXPECT_EQ(Value::Type::STRING, actual.type());
- EXPECT_EQ(expected_str, actual.GetString());
-}
-
-namespace test {
-
-std::unique_ptr<Value> ParseJson(base::StringPiece json) {
- std::string error_msg;
- std::unique_ptr<Value> result = base::JSONReader::ReadAndReturnError(
- json, base::JSON_ALLOW_TRAILING_COMMAS, nullptr, &error_msg);
- if (!result) {
- ADD_FAILURE() << "Failed to parse \"" << json << "\": " << error_msg;
- result = std::make_unique<Value>();
- }
- return result;
-}
-
-} // namespace test
-} // namespace base
diff --git a/base/test/values_test_util.h b/base/test/values_test_util.h
deleted file mode 100644
index 02ebca1..0000000
--- a/base/test/values_test_util.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// 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.
-
-#ifndef BASE_TEST_VALUES_TEST_UTIL_H_
-#define BASE_TEST_VALUES_TEST_UTIL_H_
-
-#include <memory>
-#include <string>
-
-#include "base/strings/string_piece.h"
-
-namespace base {
-class DictionaryValue;
-class ListValue;
-class Value;
-
-// All the functions below expect that the value for the given key in
-// the given dictionary equals the given expected value.
-
-void ExpectDictBooleanValue(bool expected_value,
- const DictionaryValue& value,
- const std::string& key);
-
-void ExpectDictDictionaryValue(const DictionaryValue& expected_value,
- const DictionaryValue& value,
- const std::string& key);
-
-void ExpectDictIntegerValue(int expected_value,
- const DictionaryValue& value,
- const std::string& key);
-
-void ExpectDictListValue(const ListValue& expected_value,
- const DictionaryValue& value,
- const std::string& key);
-
-void ExpectDictStringValue(const std::string& expected_value,
- const DictionaryValue& value,
- const std::string& key);
-
-void ExpectStringValue(const std::string& expected_str, const Value& actual);
-
-namespace test {
-
-// Parses |json| as JSON, allowing trailing commas, and returns the
-// resulting value. If the json fails to parse, causes an EXPECT
-// failure and returns the Null Value (but never a NULL pointer).
-std::unique_ptr<Value> ParseJson(base::StringPiece json);
-
-} // namespace test
-} // namespace base
-
-#endif // BASE_TEST_VALUES_TEST_UTIL_H_