Merge branch 'master' of https://github.com/google/googletest
This commit is contained in:
		
						commit
						d1beec4023
					
				@ -181,6 +181,7 @@ divided into several categories:
 | 
			
		||||
|`Ne(value)`           |`argument != value`|
 | 
			
		||||
|`IsNull()`            |`argument` is a `NULL` pointer (raw or smart).|
 | 
			
		||||
|`NotNull()`           |`argument` is a non-null pointer (raw or smart).|
 | 
			
		||||
|`Optional(m)`         |`argument` is `optional<>` that contains a value matching `m`.|
 | 
			
		||||
|`VariantWith<T>(m)`   |`argument` is `variant<>` that holds the alternative of type T with a value matching `m`.|
 | 
			
		||||
|`Ref(variable)`       |`argument` is a reference to `variable`.|
 | 
			
		||||
|`TypedEq<type>(value)`|`argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded.|
 | 
			
		||||
 | 
			
		||||
@ -1598,7 +1598,7 @@ class FunctionMockerBase : public UntypedFunctionMockerBase {
 | 
			
		||||
    // const_cast is required since in C++98 we still pass ArgumentTuple around
 | 
			
		||||
    // by const& instead of rvalue reference.
 | 
			
		||||
    void* untyped_args = const_cast<void*>(static_cast<const void*>(&args));
 | 
			
		||||
    scoped_ptr<ResultHolder> holder(
 | 
			
		||||
    std::unique_ptr<ResultHolder> holder(
 | 
			
		||||
        DownCast_<ResultHolder*>(this->UntypedInvokeWith(untyped_args)));
 | 
			
		||||
    return holder->Unwrap();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -145,10 +145,8 @@ using testing::internal::FormatMatcherDescription;
 | 
			
		||||
using testing::internal::IsReadableTypeName;
 | 
			
		||||
using testing::internal::MatchMatrix;
 | 
			
		||||
using testing::internal::RE;
 | 
			
		||||
using testing::internal::scoped_ptr;
 | 
			
		||||
using testing::internal::StreamMatchResultListener;
 | 
			
		||||
using testing::internal::Strings;
 | 
			
		||||
using testing::internal::scoped_ptr;
 | 
			
		||||
using testing::internal::string;
 | 
			
		||||
 | 
			
		||||
// For testing ExplainMatchResultTo().
 | 
			
		||||
 | 
			
		||||
@ -48,6 +48,7 @@
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
 | 
			
		||||
 | 
			
		||||
#include <limits>
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
 | 
			
		||||
@ -224,7 +225,7 @@ class GTEST_API_ Message {
 | 
			
		||||
#endif  // GTEST_OS_SYMBIAN
 | 
			
		||||
 | 
			
		||||
  // We'll hold the text streamed to this object here.
 | 
			
		||||
  const internal::scoped_ptr< ::std::stringstream> ss_;
 | 
			
		||||
  const std::unique_ptr< ::std::stringstream> ss_;
 | 
			
		||||
 | 
			
		||||
  // We declare (but don't implement) this to prevent the compiler
 | 
			
		||||
  // from implementing the assignment operator.
 | 
			
		||||
 | 
			
		||||
@ -53,6 +53,7 @@
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_H_
 | 
			
		||||
 | 
			
		||||
#include <limits>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <ostream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
@ -361,7 +362,7 @@ class GTEST_API_ AssertionResult {
 | 
			
		||||
  // construct is not satisfied with the predicate's outcome.
 | 
			
		||||
  // Referenced via a pointer to avoid taking too much stack frame space
 | 
			
		||||
  // with test assertions.
 | 
			
		||||
  internal::scoped_ptr< ::std::string> message_;
 | 
			
		||||
  std::unique_ptr< ::std::string> message_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Makes a successful assertion result.
 | 
			
		||||
@ -493,7 +494,7 @@ class GTEST_API_ Test {
 | 
			
		||||
  // internal method to avoid clashing with names used in user TESTs.
 | 
			
		||||
  void DeleteSelf_() { delete this; }
 | 
			
		||||
 | 
			
		||||
  const internal::scoped_ptr< GTEST_FLAG_SAVER_ > gtest_flag_saver_;
 | 
			
		||||
  const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;
 | 
			
		||||
 | 
			
		||||
  // Often a user misspells SetUp() as Setup() and spends a long time
 | 
			
		||||
  // wondering why it is never called by Google Test.  The declaration of
 | 
			
		||||
@ -796,10 +797,10 @@ class GTEST_API_ TestInfo {
 | 
			
		||||
  const std::string name_;               // Test name
 | 
			
		||||
  // Name of the parameter type, or NULL if this is not a typed or a
 | 
			
		||||
  // type-parameterized test.
 | 
			
		||||
  const internal::scoped_ptr<const ::std::string> type_param_;
 | 
			
		||||
  const std::unique_ptr<const ::std::string> type_param_;
 | 
			
		||||
  // Text representation of the value parameter, or NULL if this is not a
 | 
			
		||||
  // value-parameterized test.
 | 
			
		||||
  const internal::scoped_ptr<const ::std::string> value_param_;
 | 
			
		||||
  const std::unique_ptr<const ::std::string> value_param_;
 | 
			
		||||
  internal::CodeLocation location_;
 | 
			
		||||
  const internal::TypeId fixture_class_id_;   // ID of the test fixture class
 | 
			
		||||
  bool should_run_;                 // True iff this test should run
 | 
			
		||||
@ -983,7 +984,7 @@ class GTEST_API_ TestCase {
 | 
			
		||||
  std::string name_;
 | 
			
		||||
  // Name of the parameter type, or NULL if this is not a typed or a
 | 
			
		||||
  // type-parameterized test.
 | 
			
		||||
  const internal::scoped_ptr<const ::std::string> type_param_;
 | 
			
		||||
  const std::unique_ptr<const ::std::string> type_param_;
 | 
			
		||||
  // The vector of TestInfos in their original order.  It owns the
 | 
			
		||||
  // elements in the vector.
 | 
			
		||||
  std::vector<TestInfo*> test_info_list_;
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,7 @@
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
@ -196,7 +197,7 @@ GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
 | 
			
		||||
      goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__);                      \
 | 
			
		||||
    }                                                                        \
 | 
			
		||||
    if (gtest_dt != nullptr) {                                               \
 | 
			
		||||
      ::testing::internal::scoped_ptr< ::testing::internal::DeathTest>       \
 | 
			
		||||
      std::unique_ptr< ::testing::internal::DeathTest>       \
 | 
			
		||||
          gtest_dt_ptr(gtest_dt);                                            \
 | 
			
		||||
      switch (gtest_dt->AssumeRole()) {                                      \
 | 
			
		||||
        case ::testing::internal::DeathTest::OVERSEE_TEST:                   \
 | 
			
		||||
 | 
			
		||||
@ -154,7 +154,7 @@ class ParamIterator {
 | 
			
		||||
 private:
 | 
			
		||||
  friend class ParamGenerator<T>;
 | 
			
		||||
  explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {}
 | 
			
		||||
  scoped_ptr<ParamIteratorInterface<T> > impl_;
 | 
			
		||||
  std::unique_ptr<ParamIteratorInterface<T> > impl_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ParamGeneratorInterface<T> is the binary interface to access generators
 | 
			
		||||
@ -354,9 +354,9 @@ class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {
 | 
			
		||||
    // A cached value of *iterator_. We keep it here to allow access by
 | 
			
		||||
    // pointer in the wrapping iterator's operator->().
 | 
			
		||||
    // value_ needs to be mutable to be accessed in Current().
 | 
			
		||||
    // Use of scoped_ptr helps manage cached value's lifetime,
 | 
			
		||||
    // Use of std::unique_ptr helps manage cached value's lifetime,
 | 
			
		||||
    // which is bound by the lifespan of the iterator itself.
 | 
			
		||||
    mutable scoped_ptr<const T> value_;
 | 
			
		||||
    mutable std::unique_ptr<const T> value_;
 | 
			
		||||
  };  // class ValuesInIteratorRangeGenerator::Iterator
 | 
			
		||||
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
@ -602,7 +602,7 @@ class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
 | 
			
		||||
 | 
			
		||||
    const std::string test_case_base_name;
 | 
			
		||||
    const std::string test_base_name;
 | 
			
		||||
    const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
 | 
			
		||||
    const std::unique_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
 | 
			
		||||
  };
 | 
			
		||||
  using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo> >;
 | 
			
		||||
  // Records data received from INSTANTIATE_TEST_CASE_P macros:
 | 
			
		||||
 | 
			
		||||
@ -212,8 +212,6 @@
 | 
			
		||||
//   IteratorTraits - partial implementation of std::iterator_traits, which
 | 
			
		||||
//                    is not available in libCstd when compiled with Sun C++.
 | 
			
		||||
//
 | 
			
		||||
// Smart pointers:
 | 
			
		||||
//   scoped_ptr     - as in TR2.
 | 
			
		||||
//
 | 
			
		||||
// Regular expressions:
 | 
			
		||||
//   RE             - a simple regular expression class using the POSIX
 | 
			
		||||
@ -253,9 +251,11 @@
 | 
			
		||||
 | 
			
		||||
#include <ctype.h>   // for isspace, etc
 | 
			
		||||
#include <stddef.h>  // for ptrdiff_t
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32_WCE
 | 
			
		||||
# include <sys/types.h>
 | 
			
		||||
# include <sys/stat.h>
 | 
			
		||||
@ -1010,48 +1010,6 @@ typedef ::std::wstring wstring;
 | 
			
		||||
// returns 'condition'.
 | 
			
		||||
GTEST_API_ bool IsTrue(bool condition);
 | 
			
		||||
 | 
			
		||||
// Defines scoped_ptr.
 | 
			
		||||
 | 
			
		||||
// This implementation of scoped_ptr is PARTIAL - it only contains
 | 
			
		||||
// enough stuff to satisfy Google Test's need.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class scoped_ptr {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef T element_type;
 | 
			
		||||
 | 
			
		||||
  explicit scoped_ptr(T* p = nullptr) : ptr_(p) {}
 | 
			
		||||
  ~scoped_ptr() { reset(); }
 | 
			
		||||
 | 
			
		||||
  T& operator*() const { return *ptr_; }
 | 
			
		||||
  T* operator->() const { return ptr_; }
 | 
			
		||||
  T* get() const { return ptr_; }
 | 
			
		||||
 | 
			
		||||
  T* release() {
 | 
			
		||||
    T* const ptr = ptr_;
 | 
			
		||||
    ptr_ = nullptr;
 | 
			
		||||
    return ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void reset(T* p = nullptr) {
 | 
			
		||||
    if (p != ptr_) {
 | 
			
		||||
      if (IsTrue(sizeof(T) > 0)) {  // Makes sure T is a complete type.
 | 
			
		||||
        delete ptr_;
 | 
			
		||||
      }
 | 
			
		||||
      ptr_ = p;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  friend void swap(scoped_ptr& a, scoped_ptr& b) {
 | 
			
		||||
    using std::swap;
 | 
			
		||||
    swap(a.ptr_, b.ptr_);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  T* ptr_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Defines RE.
 | 
			
		||||
 | 
			
		||||
#if GTEST_USES_PCRE
 | 
			
		||||
@ -1845,7 +1803,7 @@ class ThreadLocal : public ThreadLocalBase {
 | 
			
		||||
    GTEST_DISALLOW_COPY_AND_ASSIGN_(InstanceValueHolderFactory);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  scoped_ptr<ValueHolderFactory> default_factory_;
 | 
			
		||||
  std::unique_ptr<ValueHolderFactory> default_factory_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
 | 
			
		||||
};
 | 
			
		||||
@ -2056,7 +2014,7 @@ class GTEST_API_ ThreadLocal {
 | 
			
		||||
 | 
			
		||||
  // A key pthreads uses for looking up per-thread values.
 | 
			
		||||
  const pthread_key_t key_;
 | 
			
		||||
  scoped_ptr<ValueHolderFactory> default_factory_;
 | 
			
		||||
  std::unique_ptr<ValueHolderFactory> default_factory_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -70,6 +70,7 @@
 | 
			
		||||
#  include <lib/zx/process.h>
 | 
			
		||||
#  include <zircon/processargs.h>
 | 
			
		||||
#  include <zircon/syscalls.h>
 | 
			
		||||
#  include <zircon/syscalls/policy.h>
 | 
			
		||||
#  include <zircon/syscalls/port.h>
 | 
			
		||||
# endif  // GTEST_OS_FUCHSIA
 | 
			
		||||
 | 
			
		||||
@ -821,8 +822,9 @@ class FuchsiaDeathTest : public DeathTestImpl {
 | 
			
		||||
      : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {}
 | 
			
		||||
 | 
			
		||||
  // All of these virtual functions are inherited from DeathTest.
 | 
			
		||||
  virtual int Wait();
 | 
			
		||||
  virtual TestRole AssumeRole();
 | 
			
		||||
  int Wait() override;
 | 
			
		||||
  TestRole AssumeRole() override;
 | 
			
		||||
  std::string GetErrorLogs() override;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // The name of the file in which the death test is located.
 | 
			
		||||
@ -1022,19 +1024,29 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() {
 | 
			
		||||
  add_stderr_action->fd.local_fd = stderr_producer_fd;
 | 
			
		||||
  add_stderr_action->fd.target_fd = STDERR_FILENO;
 | 
			
		||||
 | 
			
		||||
  // Spawn the child process.
 | 
			
		||||
  status = fdio_spawn_etc(
 | 
			
		||||
      ZX_HANDLE_INVALID, FDIO_SPAWN_CLONE_ALL, args.Argv()[0], args.Argv(),
 | 
			
		||||
      nullptr, 2, spawn_actions, child_process_.reset_and_get_address(),
 | 
			
		||||
      nullptr);
 | 
			
		||||
  // Create a child job.
 | 
			
		||||
  zx_handle_t child_job = ZX_HANDLE_INVALID;
 | 
			
		||||
  status = zx_job_create(zx_job_default(), 0, & child_job);
 | 
			
		||||
  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);
 | 
			
		||||
  zx_policy_basic_t policy;
 | 
			
		||||
  policy.condition = ZX_POL_NEW_ANY;
 | 
			
		||||
  policy.policy = ZX_POL_ACTION_ALLOW;
 | 
			
		||||
  status = zx_job_set_policy(
 | 
			
		||||
      child_job, ZX_JOB_POL_RELATIVE, ZX_JOB_POL_BASIC, &policy, 1);
 | 
			
		||||
  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);
 | 
			
		||||
 | 
			
		||||
  // Create an exception port and attach it to the |child_process_|, to allow
 | 
			
		||||
  // Create an exception port and attach it to the |child_job|, to allow
 | 
			
		||||
  // us to suppress the system default exception handler from firing.
 | 
			
		||||
  status = zx::port::create(0, &port_);
 | 
			
		||||
  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);
 | 
			
		||||
  status = child_process_.bind_exception_port(
 | 
			
		||||
      port_, 0 /* key */, 0 /*options */);
 | 
			
		||||
  status = zx_task_bind_exception_port(
 | 
			
		||||
      child_job, port_.get(), 0 /* key */, 0 /*options */);
 | 
			
		||||
  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);
 | 
			
		||||
 | 
			
		||||
  // Spawn the child process.
 | 
			
		||||
  status = fdio_spawn_etc(
 | 
			
		||||
      child_job, FDIO_SPAWN_CLONE_ALL, args.Argv()[0], args.Argv(), nullptr,
 | 
			
		||||
      2, spawn_actions, child_process_.reset_and_get_address(), nullptr);
 | 
			
		||||
  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);
 | 
			
		||||
 | 
			
		||||
  set_spawned(true);
 | 
			
		||||
 | 
			
		||||
@ -42,6 +42,7 @@
 | 
			
		||||
#include <string.h>  // For memmove.
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
@ -913,8 +914,8 @@ class GTEST_API_ UnitTestImpl {
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
  // The decomposed components of the gtest_internal_run_death_test flag,
 | 
			
		||||
  // parsed when RUN_ALL_TESTS is called.
 | 
			
		||||
  internal::scoped_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;
 | 
			
		||||
  internal::scoped_ptr<internal::DeathTestFactory> death_test_factory_;
 | 
			
		||||
  std::unique_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;
 | 
			
		||||
  std::unique_ptr<internal::DeathTestFactory> death_test_factory_;
 | 
			
		||||
#endif  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
  // A per-thread stack of traces created by the SCOPED_TRACE() macro.
 | 
			
		||||
@ -1174,7 +1175,7 @@ class StreamingListener : public EmptyTestEventListener {
 | 
			
		||||
 | 
			
		||||
  std::string FormatBool(bool value) { return value ? "1" : "0"; }
 | 
			
		||||
 | 
			
		||||
  const scoped_ptr<AbstractSocketWriter> socket_writer_;
 | 
			
		||||
  const std::unique_ptr<AbstractSocketWriter> socket_writer_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener);
 | 
			
		||||
};  // class StreamingListener
 | 
			
		||||
 | 
			
		||||
@ -410,14 +410,14 @@ class ThreadWithParamSupport : public ThreadWithParamBase {
 | 
			
		||||
        : runnable_(runnable),
 | 
			
		||||
          thread_can_start_(thread_can_start) {
 | 
			
		||||
    }
 | 
			
		||||
    scoped_ptr<Runnable> runnable_;
 | 
			
		||||
    std::unique_ptr<Runnable> runnable_;
 | 
			
		||||
    // Does not own.
 | 
			
		||||
    Notification* thread_can_start_;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  static DWORD WINAPI ThreadMain(void* ptr) {
 | 
			
		||||
    // Transfers ownership.
 | 
			
		||||
    scoped_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr));
 | 
			
		||||
    std::unique_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr));
 | 
			
		||||
    if (param->thread_can_start_ != nullptr)
 | 
			
		||||
      param->thread_can_start_->WaitForNotification();
 | 
			
		||||
    param->runnable_->Run();
 | 
			
		||||
 | 
			
		||||
@ -524,8 +524,7 @@ class DeathTestAndMultiThreadsTest : public testing::Test {
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  SpawnThreadNotifications notifications_;
 | 
			
		||||
  testing::internal::scoped_ptr<ThreadWithParam<SpawnThreadNotifications*> >
 | 
			
		||||
      thread_;
 | 
			
		||||
  std::unique_ptr<ThreadWithParam<SpawnThreadNotifications*> > thread_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_IS_THREADSAFE
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@
 | 
			
		||||
#endif  // GTEST_OS_MAC
 | 
			
		||||
 | 
			
		||||
#include <list>
 | 
			
		||||
#include <memory>
 | 
			
		||||
#include <utility>  // For std::pair and std::make_pair.
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
@ -218,14 +219,6 @@ TEST(IteratorTraitsTest, WorksForPointerToConst) {
 | 
			
		||||
      IteratorTraits<const void* const*>::value_type>();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tests that the element_type typedef is available in scoped_ptr and refers
 | 
			
		||||
// to the parameter type.
 | 
			
		||||
TEST(ScopedPtrTest, DefinesElementType) {
 | 
			
		||||
  StaticAssertTypeEq<int, ::testing::internal::scoped_ptr<int>::element_type>();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FIXME: Implement THE REST of scoped_ptr tests.
 | 
			
		||||
 | 
			
		||||
TEST(GtestCheckSyntaxTest, BehavesLikeASingleStatement) {
 | 
			
		||||
  if (AlwaysFalse())
 | 
			
		||||
    GTEST_CHECK_(false) << "This should never be executed; "
 | 
			
		||||
@ -1095,7 +1088,7 @@ TEST(MutexTest, OnlyOneThreadCanLockAtATime) {
 | 
			
		||||
  typedef ThreadWithParam<pair<AtomicCounterWithMutex*, int> > ThreadType;
 | 
			
		||||
  const int kCycleCount = 20;
 | 
			
		||||
  const int kThreadCount = 7;
 | 
			
		||||
  scoped_ptr<ThreadType> counting_threads[kThreadCount];
 | 
			
		||||
  std::unique_ptr<ThreadType> counting_threads[kThreadCount];
 | 
			
		||||
  Notification threads_can_start;
 | 
			
		||||
  // Creates and runs kThreadCount threads that increment locked_counter
 | 
			
		||||
  // kCycleCount times each.
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,6 @@ using ::testing::Test;
 | 
			
		||||
using ::testing::TestEventListeners;
 | 
			
		||||
using ::testing::TestInfo;
 | 
			
		||||
using ::testing::UnitTest;
 | 
			
		||||
using ::testing::internal::scoped_ptr;
 | 
			
		||||
 | 
			
		||||
// The test methods are empty, as the sole purpose of this program is
 | 
			
		||||
// to print the test names before/after shuffling.
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,6 @@ namespace {
 | 
			
		||||
using internal::Notification;
 | 
			
		||||
using internal::TestPropertyKeyIs;
 | 
			
		||||
using internal::ThreadWithParam;
 | 
			
		||||
using internal::scoped_ptr;
 | 
			
		||||
 | 
			
		||||
// In order to run tests in this file, for platforms where Google Test is
 | 
			
		||||
// thread safe, implement ThreadWithParam. See the description of its API
 | 
			
		||||
@ -119,7 +118,7 @@ void CheckTestFailureCount(int expected_failures) {
 | 
			
		||||
// concurrently.
 | 
			
		||||
TEST(StressTest, CanUseScopedTraceAndAssertionsInManyThreads) {
 | 
			
		||||
  {
 | 
			
		||||
    scoped_ptr<ThreadWithParam<int> > threads[kThreadCount];
 | 
			
		||||
    std::unique_ptr<ThreadWithParam<int> > threads[kThreadCount];
 | 
			
		||||
    Notification threads_can_start;
 | 
			
		||||
    for (int i = 0; i != kThreadCount; i++)
 | 
			
		||||
      threads[i].reset(new ThreadWithParam<int>(&ManyAsserts,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user