17ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Copyright 2008 Google Inc. 27ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// All Rights Reserved. 37ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 47ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Redistribution and use in source and binary forms, with or without 57ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// modification, are permitted provided that the following conditions are 67ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// met: 77ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 87ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions of source code must retain the above copyright 97ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// notice, this list of conditions and the following disclaimer. 107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Redistributions in binary form must reproduce the above 117ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// copyright notice, this list of conditions and the following disclaimer 127ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// in the documentation and/or other materials provided with the 137ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// distribution. 147ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// * Neither the name of Google Inc. nor the names of its 157ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// contributors may be used to endorse or promote products derived from 167ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// this software without specific prior written permission. 177ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 187ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 197ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 207ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 217ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 227ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 237ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 247ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 257ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 267ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 277ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 287ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 297ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// 307ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Author: wan@google.com (Zhanyong Wan) 317ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 32b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest-typed-test.h" 33b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad#include "gtest/gtest.h" 347ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 357ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace testing { 367ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmannamespace internal { 377ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 38e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer#if GTEST_HAS_TYPED_TEST_P 397ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 4057240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// Skips to the first non-space char in str. Returns an empty string if str 4157240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer// contains only whitespace characters. 4257240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramerstatic const char* SkipSpaces(const char* str) { 43b33f8e3e55932d0e15a686ef0c598da8dbc37acdJay Foad while (IsSpace(*str)) 4457240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer str++; 4557240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer return str; 4657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer} 4757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 487ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// Verifies that registered_tests match the test names in 497ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// defined_test_names_; returns registered_tests if successful, or 507ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman// aborts the program otherwise. 517ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukmanconst char* TypedTestCasePState::VerifyRegisteredTestNames( 527ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const char* file, int line, const char* registered_tests) { 537ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman typedef ::std::set<const char*>::const_iterator DefinedTestIter; 547ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman registered_ = true; 557ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 5657240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // Skip initial whitespace in registered_tests since some 5757240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer // preprocessors prefix stringizied literals with whitespace. 5857240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer registered_tests = SkipSpaces(registered_tests); 5957240ff6e2252f8986f6e47e4010bc52fbae25d1Benjamin Kramer 607ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman Message errors; 617ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ::std::set<String> tests; 627ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman for (const char* names = registered_tests; names != NULL; 637ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman names = SkipComma(names)) { 647ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const String name = GetPrefixUntilComma(names); 657ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (tests.count(name) != 0) { 667ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman errors << "Test " << name << " is listed more than once.\n"; 677ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman continue; 687ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 697ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 707ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman bool found = false; 717ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman for (DefinedTestIter it = defined_test_names_.begin(); 727ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman it != defined_test_names_.end(); 737ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++it) { 747ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (name == *it) { 757ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman found = true; 767ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman break; 777ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 787ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 797ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 807ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (found) { 817ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman tests.insert(name); 827ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } else { 837ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman errors << "No test named " << name 847ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman << " can be found in this test case.\n"; 857ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 867ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 877ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 887ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman for (DefinedTestIter it = defined_test_names_.begin(); 897ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman it != defined_test_names_.end(); 907ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman ++it) { 917ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (tests.count(*it) == 0) { 927ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman errors << "You forgot to list test " << *it << ".\n"; 937ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 947ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 957ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 967ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman const String& errors_str = errors.GetString(); 977ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman if (errors_str != "") { 987ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(), 997ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman errors_str.c_str()); 100e4b9c93fc1b531fe0cfe25a042f6b81c1e7c15c0Benjamin Kramer fflush(stderr); 101190f8ee25a6977ac6eb71b816498df42f17ad9a7Benjamin Kramer posix::Abort(); 1027ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman } 1037ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1047ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman return registered_tests; 1057ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} 1067ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1077ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman#endif // GTEST_HAS_TYPED_TEST_P 1087ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman 1097ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace internal 1107ae6ff442a26212a0cc4c1929b8b0a105dc988e4Misha Brukman} // namespace testing 111