From f63e2a14a21aa0528e692d2d5ce1d8e53dfa5742 Mon Sep 17 00:00:00 2001
From: misterg <misterg@google.com>
Date: Tue, 1 Aug 2017 14:36:29 -0400
Subject: [PATCH] WIP

---
 .gitignore                              |   2 +
 BUILD.bazel                             | 292 ++++++++++++++++++++++++
 WORKSPACE                               |   1 +
 googletest/samples/sample10_unittest.cc |   3 +-
 googletest/samples/sample1_unittest.cc  |   9 +-
 googletest/samples/sample2_unittest.cc  |   3 +-
 googletest/samples/sample3_unittest.cc  |   8 +-
 googletest/samples/sample4_unittest.cc  |   3 +-
 googletest/samples/sample5_unittest.cc  |   4 +-
 googletest/samples/sample6_unittest.cc  |   3 +-
 googletest/samples/sample7_unittest.cc  |  20 +-
 googletest/samples/sample8_unittest.cc  |   3 +-
 googletest/samples/sample9_unittest.cc  |   3 +-
 13 files changed, 326 insertions(+), 28 deletions(-)
 create mode 100644 BUILD.bazel
 create mode 100644 WORKSPACE

diff --git a/.gitignore b/.gitignore
index 74e7466a..6c1b18f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
 # Ignore CI build directory
 build/
 xcuserdata
+cmake-build-debug/
+.idea/
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 00000000..50a6aca3
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,292 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])
+
+config_setting(
+    name = "win",
+    values = {"cpu": "x64_windows_msvc"},
+)
+
+cc_library(
+    name = "gmock",
+    srcs = glob(
+        include = [
+            "googlemock/src/*.cc",
+            "googlemock/include/gmock/**/*.h",
+        ],
+        exclude = [
+            "googlemock/src/gmock-all.cc",
+        ],
+    ),
+    hdrs = glob([
+        "googlemock/include/gmock/*.h",
+    ]),
+    includes = [
+        "googlemock",
+        "googlemock/include",
+    ],
+    linkopts = select({
+        ":win": [],
+        "//conditions:default": ["-pthread"],
+    }),
+    deps = [
+        ":gtest",
+    ],
+)
+
+cc_library(
+    name = "gtest",
+    srcs = glob(
+        include = [
+            "googletest/src/*.cc",
+            "googletest/src/*.h",
+            "googletest/include/gtest/**/*.h",
+        ],
+        exclude = [
+            "googletest/src/gtest-all.cc",
+            "googletest/src/gtest_main.cc",
+        ],
+    ),
+    hdrs = glob([
+        "googletest/include/gtest/*.h",
+    ]),
+    copts = select(
+        {
+            ":win": [],
+            "//conditions:default": ["-pthread"],
+        },
+    ),
+    includes = [
+        "googletest",
+        "googletest/include",
+    ],
+    linkopts = select({
+        ":win": [],
+        "//conditions:default": [
+            "-pthread",
+        ],
+    }),
+)
+
+cc_library(
+    name = "gtest_main",
+    srcs = glob(
+        include = [
+            "googletest/src/gtest_main.cc",
+        ],
+    ),
+    hdrs = glob([
+        "googletest/include/gtest/*.h",
+        "googletest/include/gtest/**/*.h",
+    ]),
+    includes = [
+        "googletest",
+        "googletest/include",
+    ],
+    deps = [":gmock"],
+)
+
+"""googletest own tests """
+
+#on windows exclude gtest-tuple.h and gtest-tuple_test.cc
+filegroup(
+    name = "win_only_test_files",
+    srcs = glob(
+        include = [
+            "googletest/test/gtest-*.cc",
+            "googletest/test/*.h",
+            "googletest/include/gtest/**/*.h",
+        ],
+        exclude = [
+            "googletest/src/gtest-unittest-api_test.cc",
+            "googletest/include/gtest/internal/gtest-tuple.h",
+            "googletest/test/gtest-tuple_test.cc",
+            "googletest/src/gtest-all.cc",
+            "googletest/test/gtest_all_test.cc",
+            "googletest/test/gtest-death-test_ex_test.cc",
+            "googletest/test/gtest-listener_test.cc",
+            "googletest/test/gtest-unittest-api_test.cc",
+            "googletest/test/gtest-param-test_test.cc",
+        ],
+    ),
+)
+
+filegroup(
+    name = "default_test_files",
+    srcs = glob(
+        include = [
+            "googletest/test/gtest-*.cc",
+            "googletest/test/*.h",
+            "googletest/include/gtest/**/*.h",
+        ],
+        exclude = [
+            "googletest/src/gtest-unittest-api_test.cc",
+            "googletest/src/gtest-all.cc",
+            "googletest/test/gtest_all_test.cc",
+            "googletest/test/gtest-death-test_ex_test.cc",
+            "googletest/test/gtest-listener_test.cc",
+            "googletest/test/gtest-unittest-api_test.cc",
+            "googletest/test/gtest-param-test_test.cc",
+        ],
+    ),
+)
+
+cc_test(
+    name = "gtest_all_test",
+    size = "small",
+    srcs = select({
+        ":win": [":win_only_test_files"],
+        "//conditions:default": [":default_test_files"],
+    }),
+    copts = select({
+        ":win": ["-DGTEST_USE_OWN_TR1_TUPLE=0"],
+        "//conditions:default": ["-DGTEST_USE_OWN_TR1_TUPLE=1"],
+    }),
+    includes = [
+        "googletest",
+        "googletest/include",
+        "googletest/include/internal",
+        "googletest/test",
+    ],
+    linkopts = select({
+        ":win": [],
+        "//conditions:default": [
+            "-pthread",
+        ],
+    }),
+    deps = [":gtest_main"],
+)
+
+""" these googletest tests have their own main()"""
+
+cc_test(
+    name = "gtest-death-test",
+    size = "small",
+    srcs = [
+        "googletest/test/gtest-death-test_ex_test.cc",
+    ],
+    copts = [
+        "-DGTEST_ENABLE_CATCH_EXCEPTIONS_=1",
+    ],
+    deps = [
+        ":gtest_main",
+    ],
+)
+
+cc_test(
+    name = "gtest-listener_test",
+    size = "small",
+    srcs = [
+        "googletest/test/gtest-listener_test.cc",
+    ],
+    deps = [
+        ":gtest_main",
+    ],
+)
+
+cc_test(
+    name = "gtest-unittest-api_test",
+    size = "small",
+    srcs = [
+        "googletest/test/gtest-unittest-api_test.cc",
+    ],
+    deps = [
+        ":gtest_main",
+    ],
+)
+
+cc_test(
+    name = "gtest-param-test_test",
+    size = "small",
+    srcs = [
+        "googletest/test/gtest-param-test2_test.cc",
+        "googletest/test/gtest-param-test_test.cc",
+        "googletest/test/gtest-param-test_test.h",
+    ],
+    deps = [
+        ":gtest_main",
+    ],
+)
+
+""" googletest samples"""
+
+cc_library(
+    name = "googletest_sample_lib",
+    srcs = [
+        "googletest/samples/sample1.cc",
+        "googletest/samples/sample2.cc",
+        "googletest/samples/sample4.cc",
+    ],
+    hdrs = [
+        "googletest/samples/prime_tables.h",
+        "googletest/samples/sample1.h",
+        "googletest/samples/sample2.h",
+        "googletest/samples/sample3-inl.h",
+        "googletest/samples/sample4.h",
+    ],
+    deps = ["gtest"],
+)
+
+cc_test(
+    name = "googletest_samples",
+    size = "small",
+    srcs = glob(
+        include = [
+            "googletest/samples/sample*.cc",
+            "googletest/samples/sample*.h",
+        ],
+        exclude = [
+            "googletest/samples/sample1.cc",
+            "googletest/samples/sample2.cc",
+            "googletest/samples/sample4.cc",
+            "googletest/samples/prime_tables.h",
+            "googletest/samples/sample1.h",
+            "googletest/samples/sample2.h",
+            "googletest/samples/sample3-inl.h",
+            "googletest/samples/sample4.h",
+            "googletest/samples/sample9_unittest.cc",
+            "googletest/samples/sample10_unittest.cc",
+        ],
+    ),
+    includes = [
+        "googletest/samples",
+    ],
+    deps = [
+        ":googletest_sample_lib",
+        ":gtest_main",
+    ],
+)
+
+""" googletest samples 9 and 10 have their own main()"""
+
+cc_test(
+    name = "googletest_sample9",
+    size = "small",
+    srcs = glob(
+        include = [
+            "googletest/samples/sample9_unittest.cc",
+        ],
+    ),
+    includes = [
+        "googletest/samples",
+    ],
+    deps = [
+        ":gtest",
+    ],
+)
+
+cc_test(
+    name = "googletest_sample10",
+    size = "small",
+    srcs = glob(
+        include = [
+            "googletest/samples/sample10_unittest.cc",
+        ],
+    ),
+    includes = [
+        "googletest/samples",
+    ],
+    deps = [
+        ":gtest",
+    ],
+)
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 00000000..eb50f4ee
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1 @@
+workspace(name = "com_google_googletest")
\ No newline at end of file
diff --git a/googletest/samples/sample10_unittest.cc b/googletest/samples/sample10_unittest.cc
index 0051cd5d..6ddb24b8 100644
--- a/googletest/samples/sample10_unittest.cc
+++ b/googletest/samples/sample10_unittest.cc
@@ -35,7 +35,7 @@
 #include <stdlib.h>
 
 #include "gtest/gtest.h"
-
+namespace {
 using ::testing::EmptyTestEventListener;
 using ::testing::InitGoogleTest;
 using ::testing::Test;
@@ -142,3 +142,4 @@ int main(int argc, char **argv) {
   }
   return RUN_ALL_TESTS();
 }
+}  // namespace
\ No newline at end of file
diff --git a/googletest/samples/sample1_unittest.cc b/googletest/samples/sample1_unittest.cc
index aefc4f1d..861eff9d 100644
--- a/googletest/samples/sample1_unittest.cc
+++ b/googletest/samples/sample1_unittest.cc
@@ -46,7 +46,7 @@
 #include <limits.h>
 #include "sample1.h"
 #include "gtest/gtest.h"
-
+namespace {
 
 // Step 2. Use the TEST macro to define your tests.
 //
@@ -72,7 +72,6 @@
 //
 // </TechnicalDetails>
 
-
 // Tests Factorial().
 
 // Tests factorial of negative numbers.
@@ -100,9 +99,7 @@ TEST(FactorialTest, Negative) {
 }
 
 // Tests factorial of 0.
-TEST(FactorialTest, Zero) {
-  EXPECT_EQ(1, Factorial(0));
-}
+TEST(FactorialTest, Zero) { EXPECT_EQ(1, Factorial(0)); }
 
 // Tests factorial of positive numbers.
 TEST(FactorialTest, Positive) {
@@ -112,7 +109,6 @@ TEST(FactorialTest, Positive) {
   EXPECT_EQ(40320, Factorial(8));
 }
 
-
 // Tests IsPrime()
 
 // Tests negative input.
@@ -139,6 +135,7 @@ TEST(IsPrimeTest, Positive) {
   EXPECT_FALSE(IsPrime(6));
   EXPECT_TRUE(IsPrime(23));
 }
+}  // namespace
 
 // Step 3. Call RUN_ALL_TESTS() in main().
 //
diff --git a/googletest/samples/sample2_unittest.cc b/googletest/samples/sample2_unittest.cc
index 4fa19b71..826f2d42 100644
--- a/googletest/samples/sample2_unittest.cc
+++ b/googletest/samples/sample2_unittest.cc
@@ -42,7 +42,7 @@
 
 #include "sample2.h"
 #include "gtest/gtest.h"
-
+namespace {
 // In this example, we test the MyString class (a simple string).
 
 // Tests the default c'tor.
@@ -107,3 +107,4 @@ TEST(MyString, Set) {
   s.Set(NULL);
   EXPECT_STREQ(NULL, s.c_string());
 }
+}  // namespace
\ No newline at end of file
diff --git a/googletest/samples/sample3_unittest.cc b/googletest/samples/sample3_unittest.cc
index bf3877d0..18da0b30 100644
--- a/googletest/samples/sample3_unittest.cc
+++ b/googletest/samples/sample3_unittest.cc
@@ -67,7 +67,7 @@
 #include "gtest/gtest.h"
 
 // To use a test fixture, derive a class from testing::Test.
-class QueueTest : public testing::Test {
+class QueueTestSmpl3 : public testing::Test {
  protected:  // You should make the members protected s.t. they can be
              // accessed from sub-classes.
 
@@ -120,13 +120,13 @@ class QueueTest : public testing::Test {
 // instead of TEST.
 
 // Tests the default c'tor.
-TEST_F(QueueTest, DefaultConstructor) {
+TEST_F(QueueTestSmpl3, DefaultConstructor) {
   // You can access data in the test fixture here.
   EXPECT_EQ(0u, q0_.Size());
 }
 
 // Tests Dequeue().
-TEST_F(QueueTest, Dequeue) {
+TEST_F(QueueTestSmpl3, Dequeue) {
   int * n = q0_.Dequeue();
   EXPECT_TRUE(n == NULL);
 
@@ -144,7 +144,7 @@ TEST_F(QueueTest, Dequeue) {
 }
 
 // Tests the Queue::Map() function.
-TEST_F(QueueTest, Map) {
+TEST_F(QueueTestSmpl3, Map) {
   MapTester(&q0_);
   MapTester(&q1_);
   MapTester(&q2_);
diff --git a/googletest/samples/sample4_unittest.cc b/googletest/samples/sample4_unittest.cc
index fa5afc7d..2d13a8b1 100644
--- a/googletest/samples/sample4_unittest.cc
+++ b/googletest/samples/sample4_unittest.cc
@@ -31,7 +31,7 @@
 
 #include "gtest/gtest.h"
 #include "sample4.h"
-
+namespace {
 // Tests the Increment() method.
 TEST(Counter, Increment) {
   Counter c;
@@ -43,3 +43,4 @@ TEST(Counter, Increment) {
   EXPECT_EQ(1, c.Increment());
   EXPECT_EQ(2, c.Increment());
 }
+}  // namespace
\ No newline at end of file
diff --git a/googletest/samples/sample5_unittest.cc b/googletest/samples/sample5_unittest.cc
index 43d8e577..30999307 100644
--- a/googletest/samples/sample5_unittest.cc
+++ b/googletest/samples/sample5_unittest.cc
@@ -49,7 +49,7 @@
 #include "sample3-inl.h"
 #include "gtest/gtest.h"
 #include "sample1.h"
-
+namespace {
 // In this sample, we want to ensure that every test finishes within
 // ~5 seconds.  If a test takes longer to run, we consider it a
 // failure.
@@ -191,7 +191,7 @@ TEST_F(QueueTest, Dequeue) {
   EXPECT_EQ(1u, q2_.Size());
   delete n;
 }
-
+}  // namespace
 // If necessary, you can derive further test fixtures from a derived
 // fixture itself.  For example, you can derive another fixture from
 // QueueTest.  Google Test imposes no limit on how deep the hierarchy
diff --git a/googletest/samples/sample6_unittest.cc b/googletest/samples/sample6_unittest.cc
index 8f2036a5..7b603a2c 100644
--- a/googletest/samples/sample6_unittest.cc
+++ b/googletest/samples/sample6_unittest.cc
@@ -36,7 +36,7 @@
 #include "prime_tables.h"
 
 #include "gtest/gtest.h"
-
+namespace {
 // First, we define some factory functions for creating instances of
 // the implementations.  You may be able to skip this step if all your
 // implementations can be constructed the same way.
@@ -222,3 +222,4 @@ INSTANTIATE_TYPED_TEST_CASE_P(OnTheFlyAndPreCalculated,    // Instance name
                               PrimeTableImplementations);  // Type list
 
 #endif  // GTEST_HAS_TYPED_TEST_P
+}  // namespace
\ No newline at end of file
diff --git a/googletest/samples/sample7_unittest.cc b/googletest/samples/sample7_unittest.cc
index 1b651a21..44f534bd 100644
--- a/googletest/samples/sample7_unittest.cc
+++ b/googletest/samples/sample7_unittest.cc
@@ -39,7 +39,7 @@
 #include "prime_tables.h"
 
 #include "gtest/gtest.h"
-
+namespace {
 #if GTEST_HAS_PARAM_TEST
 
 using ::testing::TestWithParam;
@@ -65,9 +65,9 @@ PrimeTable* CreatePreCalculatedPrimeTable() {
 // can refer to the test parameter by GetParam().  In this case, the test
 // parameter is a factory function which we call in fixture's SetUp() to
 // create and store an instance of PrimeTable.
-class PrimeTableTest : public TestWithParam<CreatePrimeTableFunc*> {
+class PrimeTableTestSmpl7 : public TestWithParam<CreatePrimeTableFunc*> {
  public:
-  virtual ~PrimeTableTest() { delete table_; }
+  virtual ~PrimeTableTestSmpl7() { delete table_; }
   virtual void SetUp() { table_ = (*GetParam())(); }
   virtual void TearDown() {
     delete table_;
@@ -78,7 +78,7 @@ class PrimeTableTest : public TestWithParam<CreatePrimeTableFunc*> {
   PrimeTable* table_;
 };
 
-TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {
+TEST_P(PrimeTableTestSmpl7, ReturnsFalseForNonPrimes) {
   EXPECT_FALSE(table_->IsPrime(-5));
   EXPECT_FALSE(table_->IsPrime(0));
   EXPECT_FALSE(table_->IsPrime(1));
@@ -87,7 +87,7 @@ TEST_P(PrimeTableTest, ReturnsFalseForNonPrimes) {
   EXPECT_FALSE(table_->IsPrime(100));
 }
 
-TEST_P(PrimeTableTest, ReturnsTrueForPrimes) {
+TEST_P(PrimeTableTestSmpl7, ReturnsTrueForPrimes) {
   EXPECT_TRUE(table_->IsPrime(2));
   EXPECT_TRUE(table_->IsPrime(3));
   EXPECT_TRUE(table_->IsPrime(5));
@@ -96,7 +96,7 @@ TEST_P(PrimeTableTest, ReturnsTrueForPrimes) {
   EXPECT_TRUE(table_->IsPrime(131));
 }
 
-TEST_P(PrimeTableTest, CanGetNextPrime) {
+TEST_P(PrimeTableTestSmpl7, CanGetNextPrime) {
   EXPECT_EQ(2, table_->GetNextPrime(0));
   EXPECT_EQ(3, table_->GetNextPrime(2));
   EXPECT_EQ(5, table_->GetNextPrime(3));
@@ -112,10 +112,9 @@ TEST_P(PrimeTableTest, CanGetNextPrime) {
 //
 // Here, we instantiate our tests with a list of two PrimeTable object
 // factory functions:
-INSTANTIATE_TEST_CASE_P(
-    OnTheFlyAndPreCalculated,
-    PrimeTableTest,
-    Values(&CreateOnTheFlyPrimeTable, &CreatePreCalculatedPrimeTable<1000>));
+INSTANTIATE_TEST_CASE_P(OnTheFlyAndPreCalculated, PrimeTableTestSmpl7,
+                        Values(&CreateOnTheFlyPrimeTable,
+                               &CreatePreCalculatedPrimeTable<1000>));
 
 #else
 
@@ -128,3 +127,4 @@ INSTANTIATE_TEST_CASE_P(
 TEST(DummyTest, ValueParameterizedTestsAreNotSupportedOnThisPlatform) {}
 
 #endif  // GTEST_HAS_PARAM_TEST
+}
\ No newline at end of file
diff --git a/googletest/samples/sample8_unittest.cc b/googletest/samples/sample8_unittest.cc
index 72743340..4ce96673 100644
--- a/googletest/samples/sample8_unittest.cc
+++ b/googletest/samples/sample8_unittest.cc
@@ -37,7 +37,7 @@
 #include "prime_tables.h"
 
 #include "gtest/gtest.h"
-
+namespace {
 #if GTEST_HAS_COMBINE
 
 // Suppose we want to introduce a new, improved implementation of PrimeTable
@@ -171,3 +171,4 @@ INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters,
 TEST(DummyTest, CombineIsNotSupportedOnThisPlatform) {}
 
 #endif  // GTEST_HAS_COMBINE
+}
\ No newline at end of file
diff --git a/googletest/samples/sample9_unittest.cc b/googletest/samples/sample9_unittest.cc
index b2e2079b..87ddca76 100644
--- a/googletest/samples/sample9_unittest.cc
+++ b/googletest/samples/sample9_unittest.cc
@@ -35,7 +35,7 @@
 #include <stdio.h>
 
 #include "gtest/gtest.h"
-
+namespace {
 using ::testing::EmptyTestEventListener;
 using ::testing::InitGoogleTest;
 using ::testing::Test;
@@ -158,3 +158,4 @@ int main(int argc, char **argv) {
 
   return ret_val;
 }
+}  // namespace
\ No newline at end of file