github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/test/gmock_test.cc (about)

     1  // Copyright 2008, Google Inc.
     2  // All rights reserved.
     3  //
     4  // Redistribution and use in source and binary forms, with or without
     5  // modification, are permitted provided that the following conditions are
     6  // met:
     7  //
     8  //     * Redistributions of source code must retain the above copyright
     9  // notice, this list of conditions and the following disclaimer.
    10  //     * Redistributions in binary form must reproduce the above
    11  // copyright notice, this list of conditions and the following disclaimer
    12  // in the documentation and/or other materials provided with the
    13  // distribution.
    14  //     * Neither the name of Google Inc. nor the names of its
    15  // contributors may be used to endorse or promote products derived from
    16  // this software without specific prior written permission.
    17  //
    18  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    19  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    20  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    21  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    22  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    23  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    24  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    25  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    26  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    27  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    28  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    29  //
    30  // Author: wan@google.com (Zhanyong Wan)
    31  
    32  // Google Mock - a framework for writing C++ mock classes.
    33  //
    34  // This file tests code in gmock.cc.
    35  
    36  #include "gmock/gmock.h"
    37  
    38  #include <string>
    39  #include "gtest/gtest.h"
    40  
    41  using testing::GMOCK_FLAG(verbose);
    42  using testing::InitGoogleMock;
    43  using testing::internal::g_init_gtest_count;
    44  
    45  // Verifies that calling InitGoogleMock() on argv results in new_argv,
    46  // and the gmock_verbose flag's value is set to expected_gmock_verbose.
    47  template <typename Char, int M, int N>
    48  void TestInitGoogleMock(const Char* (&argv)[M], const Char* (&new_argv)[N],
    49                          const ::std::string& expected_gmock_verbose) {
    50    const ::std::string old_verbose = GMOCK_FLAG(verbose);
    51  
    52    int argc = M;
    53    InitGoogleMock(&argc, const_cast<Char**>(argv));
    54    ASSERT_EQ(N, argc) << "The new argv has wrong number of elements.";
    55  
    56    for (int i = 0; i < N; i++) {
    57      EXPECT_STREQ(new_argv[i], argv[i]);
    58    }
    59  
    60    EXPECT_EQ(expected_gmock_verbose, GMOCK_FLAG(verbose).c_str());
    61    GMOCK_FLAG(verbose) = old_verbose;  // Restores the gmock_verbose flag.
    62  }
    63  
    64  TEST(InitGoogleMockTest, ParsesInvalidCommandLine) {
    65    const char* argv[] = {
    66      NULL
    67    };
    68  
    69    const char* new_argv[] = {
    70      NULL
    71    };
    72  
    73    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
    74  }
    75  
    76  TEST(InitGoogleMockTest, ParsesEmptyCommandLine) {
    77    const char* argv[] = {
    78      "foo.exe",
    79      NULL
    80    };
    81  
    82    const char* new_argv[] = {
    83      "foo.exe",
    84      NULL
    85    };
    86  
    87    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
    88  }
    89  
    90  TEST(InitGoogleMockTest, ParsesSingleFlag) {
    91    const char* argv[] = {
    92      "foo.exe",
    93      "--gmock_verbose=info",
    94      NULL
    95    };
    96  
    97    const char* new_argv[] = {
    98      "foo.exe",
    99      NULL
   100    };
   101  
   102    TestInitGoogleMock(argv, new_argv, "info");
   103  }
   104  
   105  TEST(InitGoogleMockTest, ParsesUnrecognizedFlag) {
   106    const char* argv[] = {
   107      "foo.exe",
   108      "--non_gmock_flag=blah",
   109      NULL
   110    };
   111  
   112    const char* new_argv[] = {
   113      "foo.exe",
   114      "--non_gmock_flag=blah",
   115      NULL
   116    };
   117  
   118    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
   119  }
   120  
   121  TEST(InitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
   122    const char* argv[] = {
   123      "foo.exe",
   124      "--non_gmock_flag=blah",
   125      "--gmock_verbose=error",
   126      NULL
   127    };
   128  
   129    const char* new_argv[] = {
   130      "foo.exe",
   131      "--non_gmock_flag=blah",
   132      NULL
   133    };
   134  
   135    TestInitGoogleMock(argv, new_argv, "error");
   136  }
   137  
   138  TEST(InitGoogleMockTest, CallsInitGoogleTest) {
   139    const int old_init_gtest_count = g_init_gtest_count;
   140    const char* argv[] = {
   141      "foo.exe",
   142      "--non_gmock_flag=blah",
   143      "--gmock_verbose=error",
   144      NULL
   145    };
   146  
   147    const char* new_argv[] = {
   148      "foo.exe",
   149      "--non_gmock_flag=blah",
   150      NULL
   151    };
   152  
   153    TestInitGoogleMock(argv, new_argv, "error");
   154    EXPECT_EQ(old_init_gtest_count + 1, g_init_gtest_count);
   155  }
   156  
   157  TEST(WideInitGoogleMockTest, ParsesInvalidCommandLine) {
   158    const wchar_t* argv[] = {
   159      NULL
   160    };
   161  
   162    const wchar_t* new_argv[] = {
   163      NULL
   164    };
   165  
   166    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
   167  }
   168  
   169  TEST(WideInitGoogleMockTest, ParsesEmptyCommandLine) {
   170    const wchar_t* argv[] = {
   171      L"foo.exe",
   172      NULL
   173    };
   174  
   175    const wchar_t* new_argv[] = {
   176      L"foo.exe",
   177      NULL
   178    };
   179  
   180    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
   181  }
   182  
   183  TEST(WideInitGoogleMockTest, ParsesSingleFlag) {
   184    const wchar_t* argv[] = {
   185      L"foo.exe",
   186      L"--gmock_verbose=info",
   187      NULL
   188    };
   189  
   190    const wchar_t* new_argv[] = {
   191      L"foo.exe",
   192      NULL
   193    };
   194  
   195    TestInitGoogleMock(argv, new_argv, "info");
   196  }
   197  
   198  TEST(WideInitGoogleMockTest, ParsesUnrecognizedFlag) {
   199    const wchar_t* argv[] = {
   200      L"foo.exe",
   201      L"--non_gmock_flag=blah",
   202      NULL
   203    };
   204  
   205    const wchar_t* new_argv[] = {
   206      L"foo.exe",
   207      L"--non_gmock_flag=blah",
   208      NULL
   209    };
   210  
   211    TestInitGoogleMock(argv, new_argv, GMOCK_FLAG(verbose));
   212  }
   213  
   214  TEST(WideInitGoogleMockTest, ParsesGoogleMockFlagAndUnrecognizedFlag) {
   215    const wchar_t* argv[] = {
   216      L"foo.exe",
   217      L"--non_gmock_flag=blah",
   218      L"--gmock_verbose=error",
   219      NULL
   220    };
   221  
   222    const wchar_t* new_argv[] = {
   223      L"foo.exe",
   224      L"--non_gmock_flag=blah",
   225      NULL
   226    };
   227  
   228    TestInitGoogleMock(argv, new_argv, "error");
   229  }
   230  
   231  TEST(WideInitGoogleMockTest, CallsInitGoogleTest) {
   232    const int old_init_gtest_count = g_init_gtest_count;
   233    const wchar_t* argv[] = {
   234      L"foo.exe",
   235      L"--non_gmock_flag=blah",
   236      L"--gmock_verbose=error",
   237      NULL
   238    };
   239  
   240    const wchar_t* new_argv[] = {
   241      L"foo.exe",
   242      L"--non_gmock_flag=blah",
   243      NULL
   244    };
   245  
   246    TestInitGoogleMock(argv, new_argv, "error");
   247    EXPECT_EQ(old_init_gtest_count + 1, g_init_gtest_count);
   248  }
   249  
   250  // Makes sure Google Mock flags can be accessed in code.
   251  TEST(FlagTest, IsAccessibleInCode) {
   252    bool dummy = testing::GMOCK_FLAG(catch_leaked_mocks) &&
   253        testing::GMOCK_FLAG(verbose) == "";
   254    (void)dummy;  // Avoids the "unused local variable" warning.
   255  }