diff options
| author | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2013-04-10 04:29:33 +0000 | 
|---|---|---|
| committer | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2013-04-10 04:29:33 +0000 | 
| commit | 0fac83390adaf4e80ddee5bc3747079be4234c27 (patch) | |
| tree | 9576c03fc16f432d003ec2b7a5a42a0e21a95b42 /test | |
| parent | c97e3001cdf459f07527bf1ede338722ca7a5cd4 (diff) | |
| download | googletest-0fac83390adaf4e80ddee5bc3747079be4234c27.tar.gz googletest-0fac83390adaf4e80ddee5bc3747079be4234c27.tar.bz2 googletest-0fac83390adaf4e80ddee5bc3747079be4234c27.zip  | |
prints type/value parameters when listing tests
Diffstat (limited to 'test')
| -rwxr-xr-x | test/gtest_list_tests_unittest.py | 92 | ||||
| -rw-r--r-- | test/gtest_list_tests_unittest_.cc | 78 | 
2 files changed, 136 insertions, 34 deletions
diff --git a/test/gtest_list_tests_unittest.py b/test/gtest_list_tests_unittest.py index ce8c3ef0..925b09d9 100755 --- a/test/gtest_list_tests_unittest.py +++ b/test/gtest_list_tests_unittest.py @@ -40,6 +40,7 @@ Google Test) the command line flags.  __author__ = 'phanna@google.com (Patrick Hanna)'  import gtest_test_utils +import re  # Constants. @@ -52,38 +53,63 @@ EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')  # The expected output when running gtest_list_tests_unittest_ with  # --gtest_list_tests -EXPECTED_OUTPUT_NO_FILTER = """FooDeathTest. +EXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\.    Test1 -Foo. +Foo\.    Bar1    Bar2    DISABLED_Bar3 -Abc. +Abc\.    Xyz    Def -FooBar. +FooBar\.    Baz -FooTest. +FooTest\.    Test1    DISABLED_Test2    Test3 -""" +TypedTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. +  TestA +  TestB +TypedTest/1\.  # TypeParam = int\s*\* +  TestA +  TestB +TypedTest/2\.  # TypeParam = .*MyArray<bool,\s*42> +  TestA +  TestB +My/TypeParamTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. +  TestA +  TestB +My/TypeParamTest/1\.  # TypeParam = int\s*\* +  TestA +  TestB +My/TypeParamTest/2\.  # TypeParam = .*MyArray<bool,\s*42> +  TestA +  TestB +MyInstantiation/ValueParamTest\. +  TestA/0  # GetParam\(\) = one line +  TestA/1  # GetParam\(\) = two\\nlines +  TestA/2  # GetParam\(\) = a very\\nlo{241}\.\.\. +  TestB/0  # GetParam\(\) = one line +  TestB/1  # GetParam\(\) = two\\nlines +  TestB/2  # GetParam\(\) = a very\\nlo{241}\.\.\. +""")  # The expected output when running gtest_list_tests_unittest_ with  # --gtest_list_tests and --gtest_filter=Foo*. -EXPECTED_OUTPUT_FILTER_FOO = """FooDeathTest. +EXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\.    Test1 -Foo. +Foo\.    Bar1    Bar2    DISABLED_Bar3 -FooBar. +FooBar\.    Baz -FooTest. +FooTest\.    Test1    DISABLED_Test2    Test3 -""" +""")  # Utilities. @@ -100,19 +126,18 @@ def Run(args):  class GTestListTestsUnitTest(gtest_test_utils.TestCase):    """Tests using the --gtest_list_tests flag to list all tests.""" -  def RunAndVerify(self, flag_value, expected_output, other_flag): +  def RunAndVerify(self, flag_value, expected_output_re, other_flag):      """Runs gtest_list_tests_unittest_ and verifies that it prints      the correct tests.      Args: -      flag_value:       value of the --gtest_list_tests flag; -                        None if the flag should not be present. - -      expected_output:  the expected output after running command; - -      other_flag:       a different flag to be passed to command -                        along with gtest_list_tests; -                        None if the flag should not be present. +      flag_value:         value of the --gtest_list_tests flag; +                          None if the flag should not be present. +      expected_output_re: regular expression that matches the expected +                          output after running command; +      other_flag:         a different flag to be passed to command +                          along with gtest_list_tests; +                          None if the flag should not be present.      """      if flag_value is None: @@ -132,36 +157,41 @@ class GTestListTestsUnitTest(gtest_test_utils.TestCase):      output = Run(args) -    msg = ('when %s is %s, the output of "%s" is "%s".' % -           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)) - -    if expected_output is not None: -      self.assert_(output == expected_output, msg) +    if expected_output_re: +      self.assert_( +          expected_output_re.match(output), +          ('when %s is %s, the output of "%s" is "%s",\n' +           'which does not match regex "%s"' % +           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, +            expected_output_re.pattern)))      else: -      self.assert_(output != EXPECTED_OUTPUT_NO_FILTER, msg) +      self.assert_( +          not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), +          ('when %s is %s, the output of "%s" is "%s"'% +           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)))    def testDefaultBehavior(self):      """Tests the behavior of the default mode."""      self.RunAndVerify(flag_value=None, -                      expected_output=None, +                      expected_output_re=None,                        other_flag=None)    def testFlag(self):      """Tests using the --gtest_list_tests flag."""      self.RunAndVerify(flag_value='0', -                      expected_output=None, +                      expected_output_re=None,                        other_flag=None)      self.RunAndVerify(flag_value='1', -                      expected_output=EXPECTED_OUTPUT_NO_FILTER, +                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,                        other_flag=None)    def testOverrideNonFilterFlags(self):      """Tests that --gtest_list_tests overrides the non-filter flags."""      self.RunAndVerify(flag_value='1', -                      expected_output=EXPECTED_OUTPUT_NO_FILTER, +                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,                        other_flag='--gtest_break_on_failure')    def testWithFilterFlags(self): @@ -169,7 +199,7 @@ class GTestListTestsUnitTest(gtest_test_utils.TestCase):      --gtest_filter flag."""      self.RunAndVerify(flag_value='1', -                      expected_output=EXPECTED_OUTPUT_FILTER_FOO, +                      expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE,                        other_flag='--gtest_filter=Foo*') diff --git a/test/gtest_list_tests_unittest_.cc b/test/gtest_list_tests_unittest_.cc index 2b1d0780..907c176b 100644 --- a/test/gtest_list_tests_unittest_.cc +++ b/test/gtest_list_tests_unittest_.cc @@ -40,8 +40,6 @@  #include "gtest/gtest.h" -namespace { -  // Several different test cases and tests that will be listed.  TEST(Foo, Bar1) {  } @@ -76,7 +74,81 @@ TEST_F(FooTest, Test3) {  TEST(FooDeathTest, Test1) {  } -}  // namespace +// A group of value-parameterized tests. + +class MyType { + public: +  explicit MyType(const std::string& a_value) : value_(a_value) {} + +  const std::string& value() const { return value_; } + + private: +  std::string value_; +}; + +// Teaches Google Test how to print a MyType. +void PrintTo(const MyType& x, std::ostream* os) { +  *os << x.value(); +} + +class ValueParamTest : public testing::TestWithParam<MyType> { +}; + +TEST_P(ValueParamTest, TestA) { +} + +TEST_P(ValueParamTest, TestB) { +} + +INSTANTIATE_TEST_CASE_P( +    MyInstantiation, ValueParamTest, +    testing::Values(MyType("one line"), +                    MyType("two\nlines"), +                    MyType("a very\nloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong line")));  // NOLINT + +// A group of typed tests. + +// A deliberately long type name for testing the line-truncating +// behavior when printing a type parameter. +class VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName {  // NOLINT +}; + +template <typename T> +class TypedTest : public testing::Test { +}; + +template <typename T, int kSize> +class MyArray { +}; + +typedef testing::Types<VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName,  // NOLINT +                       int*, MyArray<bool, 42> > MyTypes; + +TYPED_TEST_CASE(TypedTest, MyTypes); + +TYPED_TEST(TypedTest, TestA) { +} + +TYPED_TEST(TypedTest, TestB) { +} + +// A group of type-parameterized tests. + +template <typename T> +class TypeParamTest : public testing::Test { +}; + +TYPED_TEST_CASE_P(TypeParamTest); + +TYPED_TEST_P(TypeParamTest, TestA) { +} + +TYPED_TEST_P(TypeParamTest, TestB) { +} + +REGISTER_TYPED_TEST_CASE_P(TypeParamTest, TestA, TestB); + +INSTANTIATE_TYPED_TEST_CASE_P(My, TypeParamTest, MyTypes);  int main(int argc, char **argv) {    ::testing::InitGoogleTest(&argc, argv);  | 
