OLD | NEW |
(Empty) | |
| 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 dummy = dummy; // Avoids the "unused local variable" warning. |
| 255 } |
OLD | NEW |