Add default implementation of quiche_test.h

Note that since this uses quic_flags_list.h, it is currently not possible to build this inside google3.  I did run Copybara and test the result manually.

PiperOrigin-RevId: 449026859
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 2a2bb10..855c33d 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -1399,10 +1399,12 @@
     "common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc",
 ]
 default_platform_impl_test_support_hdrs = [
+    "common/platform/default/quiche_platform_impl/quiche_test_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
     "common/platform/default/quiche_platform_impl/quiche_thread_impl.h",
 ]
 default_platform_impl_test_support_srcs = [
+    "common/platform/default/quiche_platform_impl/quiche_test_impl.cc",
     "common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc",
 ]
 load_balancer_hdrs = [
diff --git a/build/source_list.gni b/build/source_list.gni
index 9f1ee66..37b047d 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -1399,10 +1399,12 @@
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc",
 ]
 default_platform_impl_test_support_hdrs = [
+    "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h",
 ]
 default_platform_impl_test_support_srcs = [
+    "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc",
     "src/quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc",
 ]
 load_balancer_hdrs = [
diff --git a/build/source_list.json b/build/source_list.json
index 72b7055..ab942c5 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -1398,10 +1398,12 @@
     "quiche/common/platform/default/quiche_platform_impl/quiche_file_utils_impl.cc"
   ],
   "default_platform_impl_test_support_hdrs": [
+    "quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.h",
     "quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h"
   ],
   "default_platform_impl_test_support_srcs": [
+    "quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc",
     "quiche/common/platform/default/quiche_platform_impl/quiche_test_loopback_impl.cc"
   ],
   "load_balancer_hdrs": [
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc b/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc
new file mode 100644
index 0000000..7aba507
--- /dev/null
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc
@@ -0,0 +1,25 @@
+// Copyright 2022 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 "quiche_platform_impl/quiche_test_impl.h"
+
+#include "quiche/common/platform/api/quiche_flags.h"
+
+QuicheFlagSaverImpl::QuicheFlagSaverImpl() {
+#define QUIC_FLAG(flag, value) saved_##flag##_ = flag;
+#include "quiche/quic/core/quic_flags_list.h"
+#undef QUIC_FLAG
+#define QUIC_PROTOCOL_FLAG(type, flag, ...) saved_##flag##_ = FLAGS_##flag;
+#include "quiche/quic/core/quic_protocol_flags_list.h"
+#undef QUIC_PROTOCOL_FLAG
+}
+
+QuicheFlagSaverImpl::~QuicheFlagSaverImpl() {
+#define QUIC_FLAG(flag, value) flag = saved_##flag##_;
+#include "quiche/quic/core/quic_flags_list.h"  // NOLINT
+#undef QUIC_FLAG
+#define QUIC_PROTOCOL_FLAG(type, flag, ...) FLAGS_##flag = saved_##flag##_;
+#include "quiche/quic/core/quic_protocol_flags_list.h"  // NOLINT
+#undef QUIC_PROTOCOL_FLAG
+}
diff --git a/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h b/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h
new file mode 100644
index 0000000..258b862
--- /dev/null
+++ b/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h
@@ -0,0 +1,56 @@
+// Copyright 2022 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 QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_TEST_IMPL_H_
+#define QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_TEST_IMPL_H_
+
+#include "gmock/gmock.h"
+#include "gtest/gtest-spi.h"
+#include "gtest/gtest.h"
+
+#define EXPECT_QUICHE_DEBUG_DEATH_IMPL(condition, message) \
+  EXPECT_DEBUG_DEATH(condition, message)
+
+#define QUICHE_TEST_DISABLED_IN_CHROME_IMPL(name) name
+#define QUICHE_SLOW_TEST_IMPL(test) test
+
+class QuicheFlagSaverImpl {
+ public:
+  QuicheFlagSaverImpl();
+  ~QuicheFlagSaverImpl();
+
+ private:
+#define QUIC_FLAG(flag, value) bool saved_##flag##_;
+#include "quiche/quic/core/quic_flags_list.h"
+#undef QUIC_FLAG
+
+#define QUIC_PROTOCOL_FLAG(type, flag, ...) type saved_##flag##_;
+#include "quiche/quic/core/quic_protocol_flags_list.h"
+#undef QUIC_PROTOCOL_FLAG
+};
+
+class ScopedEnvironmentForThreadsImpl {};
+
+namespace quiche::test {
+
+class QuicheTestImpl : public ::testing::Test {
+ private:
+  QuicheFlagSaverImpl saver_;
+};
+
+template <class T>
+class QuicheTestWithParamImpl : public ::testing::TestWithParam<T> {
+ private:
+  QuicheFlagSaverImpl saver_;
+};
+
+inline std::string QuicheGetCommonSourcePathImpl() { return "quiche/common"; }
+
+}  // namespace quiche::test
+
+inline std::string QuicheGetTestMemoryCachePathImpl() {
+  return "quiche/quic/test_tools/quic_http_response_cache_data";
+}
+
+#endif  // QUICHE_COMMON_PLATFORM_DEFAULT_QUICHE_PLATFORM_IMPL_QUICHE_TEST_IMPL_H_