diff options
author | kosak <kosak@google.com> | 2015-01-08 02:48:08 (GMT) |
---|---|---|
committer | kosak <kosak@google.com> | 2015-01-08 02:48:08 (GMT) |
commit | 8e838ce0fd145431b433f534c71bdb7f5d6b11ac (patch) | |
tree | 1e4823d9b0396e2cc0c6240824e4e12f6a41a08c | |
parent | 6b817803104b30d5951c652a1427492db116a490 (diff) | |
download | googletest-8e838ce0fd145431b433f534c71bdb7f5d6b11ac.zip googletest-8e838ce0fd145431b433f534c71bdb7f5d6b11ac.tar.gz googletest-8e838ce0fd145431b433f534c71bdb7f5d6b11ac.tar.bz2 |
Adding support to gmock_gen for nested templates.
-rwxr-xr-x | scripts/generator/cpp/ast.py | 7 | ||||
-rwxr-xr-x | scripts/generator/cpp/gmock_class_test.py | 36 | ||||
-rwxr-xr-x | scripts/generator/cpp/tokenize.py | 2 |
3 files changed, 41 insertions, 4 deletions
diff --git a/scripts/generator/cpp/ast.py b/scripts/generator/cpp/ast.py index 201bf3a..11cbe91 100755 --- a/scripts/generator/cpp/ast.py +++ b/scripts/generator/cpp/ast.py @@ -496,9 +496,10 @@ class TypeConverter(object): else: names.append(t.name) name = ''.join(names) - result.append(Type(name_tokens[0].start, name_tokens[-1].end, - name, templated_types, modifiers, - reference, pointer, array)) + if name_tokens: + result.append(Type(name_tokens[0].start, name_tokens[-1].end, + name, templated_types, modifiers, + reference, pointer, array)) del name_tokens[:] i = 0 diff --git a/scripts/generator/cpp/gmock_class_test.py b/scripts/generator/cpp/gmock_class_test.py index 27eb86c..018f90a 100755 --- a/scripts/generator/cpp/gmock_class_test.py +++ b/scripts/generator/cpp/gmock_class_test.py @@ -407,6 +407,42 @@ void()); self.assertEqualIgnoreLeadingWhitespace( expected, self.GenerateMocks(source)) + def testTemplateInATemplateTypedef(self): + source = """ +class Test { + public: + typedef std::vector<std::list<int>> FooType; + virtual void Bar(const FooType& test_arg); +}; +""" + expected = """\ +class MockTest : public Test { +public: +MOCK_METHOD1(Bar, +void(const FooType& test_arg)); +}; +""" + self.assertEqualIgnoreLeadingWhitespace( + expected, self.GenerateMocks(source)) + + def testTemplateInATemplateTypedefWithComma(self): + source = """ +class Test { + public: + typedef std::function<void( + const vector<std::list<int>>&, int> FooType; + virtual void Bar(const FooType& test_arg); +}; +""" + expected = """\ +class MockTest : public Test { +public: +MOCK_METHOD1(Bar, +void(const FooType& test_arg)); +}; +""" + self.assertEqualIgnoreLeadingWhitespace( + expected, self.GenerateMocks(source)) if __name__ == '__main__': unittest.main() diff --git a/scripts/generator/cpp/tokenize.py b/scripts/generator/cpp/tokenize.py index 28c3345..359d556 100755 --- a/scripts/generator/cpp/tokenize.py +++ b/scripts/generator/cpp/tokenize.py @@ -173,7 +173,7 @@ def GetTokens(source): token_type = SYNTAX i += 1 new_ch = source[i] - if new_ch == c: + if new_ch == c and c != '>': # Treat ">>" as two tokens. i += 1 elif c == '-' and new_ch == '>': i += 1 |