18"""Tests for gmock.scripts.generator.cpp.gmock_class."""
25sys.path.append(os.path.join(os.path.dirname(__file__),
'..'))
28from cpp
import gmock_class
32 """Helper class that adds assert methods."""
36 """Strip leading whitespace in each line in 'lines'."""
37 return '\n'.join([s.lstrip()
for s
in lines.split(
'\n')])
40 """Specialized assert that ignores the indent level."""
48 """Convert C++ source to Google Mock output source lines."""
49 method_source_lines = []
51 builder = ast.BuilderFromSource(cpp_source,
'<test>')
52 ast_list = list(builder.Generate())
53 gmock_class._GenerateMethods(method_source_lines, cpp_source, ast_list[0])
54 return '\n'.join(method_source_lines)
64 'MOCK_METHOD(int, Bar, (), (override));',
76 virtual int Bar() = 0;
81 'MOCK_METHOD(int, Bar, (), (override));',
89 virtual int Bar() = 0;
94 'MOCK_METHOD(int, Bar, (), (override));',
102 Foo(const Foo& f) = default;
103 Foo(Foo&& f) = default;
105 virtual int Bar() = 0;
110 'MOCK_METHOD(int, Bar, (), (override));',
118 Foo(const Foo& f) = delete;
119 Foo(Foo&& f) = delete;
121 virtual int Bar() = 0;
126 'MOCK_METHOD(int, Bar, (), (override));',
137 'MOCK_METHOD(int, Bar, (), (override));',
144 virtual void Bar(bool flag) const;
148 'MOCK_METHOD(void, Bar, (bool flag), (const, override));',
155 virtual int Bar(void);
159 'MOCK_METHOD(int, Bar, (), (override));',
171 'MOCK_METHOD(void, Bar, (int a), (override));',
178 virtual void Bar(int a, char c = 'x') = 0;
182 'MOCK_METHOD(void, Bar, (int a, char c), (override));',
192 const int* const p = nullptr,
193 const std::string& s =
"42",
194 char tab[] = {
'4',
'2'},
195 int const *& rp = aDefaultPointer) = 0;
199 'MOCK_METHOD(void, Bar, '
200 '(int a, char c, const int* const p, const std::string& s, char tab[], int const *& rp), '
207 virtual void Bar(int a = 42, int b = 43, int c = 44) = 0;
211 'MOCK_METHOD(void, Bar, (int a, int b, int c), (override));',
218 virtual bool Bar(const int test_arg = 42) = 0;
222 'MOCK_METHOD(bool, Bar, (const int test_arg), (override));',
229 virtual bool Bar(const std::string& test_arg = "42" ) = 0;
233 'MOCK_METHOD(bool, Bar, (const std::string& test_arg), (override));',
240 virtual void Bar(int a = 42 /* a comment */,
241 char /* other comment */ c= 'x') = 0;
245 'MOCK_METHOD(void, Bar, (int a, char c), (override));',
252 virtual void Bar(int a, // inline comments should be elided.
253 int b // inline comments should be elided.
258 'MOCK_METHOD(void, Bar, (int a, int b), (const, override));',
268 virtual const string& Bar(int /* keeper */, int b);
272 'MOCK_METHOD(const string&, Bar, (int, int b), (override));',
279 virtual int Bar(const vector<int>& v, map<int, string>* output);
282 'MOCK_METHOD(int, Bar, (const vector<int>& v, (map<int, string>* output)), (override));',
289 virtual vector<int>* Bar(int n);
292 'MOCK_METHOD(vector<int>*, Bar, (int n), (override));',
299 virtual map<int, string> Bar();
302 'MOCK_METHOD((map<int, string>), Bar, (), (override));',
314 'MOCK_METHOD(int, Bar, (), (override));',
324 'MOCK_METHOD(int, Bar, (C*), (override));',
334 'MOCK_METHOD(int, Bar, (C&), (override));',
340 virtual int Bar(C[]);
344 'MOCK_METHOD(int, Bar, (C[]), (override));',
352 """Convert C++ source to complete Google Mock output source."""
355 builder = ast.BuilderFromSource(cpp_source, filename)
356 ast_list = list(builder.Generate())
357 lines = gmock_class._GenerateMocks(filename, cpp_source, ast_list,
None)
358 return '\n'.join(lines)
363namespace Bar { class Forward; }
371} // namespace Baz::Qux
378class MockTest : public Test {
380MOCK_METHOD(void, Foo, (), (override));
383} // namespace Baz::Qux
391class STORAGE_SPECIFIER Test {
397class MockTest : public Test {
399MOCK_METHOD(void, Foo, (), (override));
407template <class T> class Forward; // Forward declaration should be ignored.
414class MockTest : public Test {
416MOCK_METHOD(void, Foo, (), (override));
424template <typename S, typename T>
431template <typename S, typename T>
432class MockTest : public Test<S, T> {
434MOCK_METHOD(void, Foo, (), (override));
444 typedef std::vector<std::list<int>> FooType;
445 virtual void Bar(const FooType& test_arg);
449class MockTest : public Test {
451MOCK_METHOD(void, Bar, (const FooType& test_arg), (override));
459template <typename S, typename T, typename U, typename V, typename W>
462 virtual U Foo(T some_arg);
466template <typename S, typename T, typename U, typename V, typename W>
467class MockTest : public Test<S, T, U, V, W> {
469MOCK_METHOD(U, Foo, (T some_arg), (override));
479 typedef std::function<void(
480 const vector<std::list<int>>&, int> FooType;
481 virtual void Bar(const FooType& test_arg);
485class MockTest : public Test {
487MOCK_METHOD(void, Bar, (const FooType& test_arg), (override));
497 virtual void Bar(std::function<void(int, int)> f);
501class MockTest : public Test {
503MOCK_METHOD(void, Bar, (std::function<void(int, int)> f), (override));
514 BAZ, QUX, QUUX, QUUUX
520class MockTest : public Test {
522MOCK_METHOD(void, Foo, (), (override));
533 BAZ, QUX, QUUX, QUUUX
539class MockTest : public Test {
541MOCK_METHOD(void, Foo, (), (override));
551 Test(std::function<int(std::string)> foo) : foo_(foo) {}
553 virtual std::function<int(std::string)> foo();
556 std::function<int(std::string)> foo_;
560class MockTest : public Test {
562MOCK_METHOD(std::function<int (std::string)>, foo, (), (override));
569if __name__ ==
'__main__':
def StripLeadingWhitespace(lines)
def assertEqualIgnoreLeadingWhitespace(self, expected_lines, lines)
def testExplicitlyDefaultedConstructorsAndDestructor(self)
def testStrangeNewlineInParameter(self)
def testSimpleOverrideMethod(self)
def testVirtualDestructor(self)
def testSimpleMethod(self)
def testMultipleDefaultParameters(self)
def testConstDefaultParameter(self)
def testExplicitVoid(self)
def testExplicitlyDeletedConstructorsAndDestructor(self)
def testArrayArgWithoutNames(self)
def testDefaultParameters(self)
def testPointerArgWithoutNames(self)
def testReturnTypeWithOneTemplateArg(self)
def testSimpleMethodInTemplatedClass(self)
def testMultipleSingleLineDefaultParameters(self)
def testSimpleConstructorsAndDestructor(self)
def testDoubleSlashCommentsInParameterListAreRemoved(self)
def GenerateMethodSource(cpp_source)
def testSimpleConstMethod(self)
def testRemovesCommentsWhenDefaultsArePresent(self)
def testArgsOfTemplateTypes(self)
def testConstRefDefaultParameter(self)
def testReferenceArgWithoutNames(self)
def testCStyleCommentsInParameterListAreNotRemoved(self)
def testReturnTypeWithManyTemplateArgs(self)
def testStdFunction(self)
def testTemplatedForwardDeclaration(self)
def testTemplateInATemplateTypedef(self)
def GenerateMocks(cpp_source)
def testParenthesizedCommaInArg(self)
def testTemplatedClass(self)
def testTemplateInATemplateTypedefWithComma(self)
def testTemplatedClassWithTemplatedArguments(self)
def testClassWithStorageSpecifierMacro(self)
def testEnumClassType(self)