From 9c4354314ec6965c7cc7c9823860d81dfc9f2a87 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 5 Jul 2020 16:52:40 +0200 Subject: [PATCH 001/126] Remove outdated MSVC solutions --- build/vc100/.gitignore | 7 - build/vc100/turtle.sln | 35 ---- build/vc100/turtle.vcxproj | 196 ------------------ build/vc100/turtle.vcxproj.filters | 131 ------------ build/vc100/turtle.vcxproj.user | 3 - build/vc100/turtle_bench.vcxproj | 192 ------------------ build/vc100/turtle_bench.vcxproj.filters | 38 ---- build/vc100/turtle_bench.vcxproj.user | 3 - build/vc100/turtle_test.vcxproj | 238 ---------------------- build/vc100/turtle_test.vcxproj.filters | 79 -------- build/vc100/turtle_test.vcxproj.user | 3 - build/vc140/.gitignore | 7 - build/vc140/turtle.sln | 35 ---- build/vc140/turtle.vcxproj | 196 ------------------ build/vc140/turtle.vcxproj.filters | 131 ------------ build/vc140/turtle.vcxproj.user | 3 - build/vc140/turtle_bench.vcxproj | 192 ------------------ build/vc140/turtle_bench.vcxproj.filters | 38 ---- build/vc140/turtle_bench.vcxproj.user | 3 - build/vc140/turtle_test.vcxproj | 241 ----------------------- build/vc140/turtle_test.vcxproj.filters | 79 -------- build/vc140/turtle_test.vcxproj.user | 3 - 22 files changed, 1853 deletions(-) delete mode 100644 build/vc100/.gitignore delete mode 100644 build/vc100/turtle.sln delete mode 100644 build/vc100/turtle.vcxproj delete mode 100644 build/vc100/turtle.vcxproj.filters delete mode 100644 build/vc100/turtle.vcxproj.user delete mode 100644 build/vc100/turtle_bench.vcxproj delete mode 100644 build/vc100/turtle_bench.vcxproj.filters delete mode 100644 build/vc100/turtle_bench.vcxproj.user delete mode 100644 build/vc100/turtle_test.vcxproj delete mode 100644 build/vc100/turtle_test.vcxproj.filters delete mode 100644 build/vc100/turtle_test.vcxproj.user delete mode 100644 build/vc140/.gitignore delete mode 100644 build/vc140/turtle.sln delete mode 100644 build/vc140/turtle.vcxproj delete mode 100644 build/vc140/turtle.vcxproj.filters delete mode 100644 build/vc140/turtle.vcxproj.user delete mode 100644 build/vc140/turtle_bench.vcxproj delete mode 100644 build/vc140/turtle_bench.vcxproj.filters delete mode 100644 build/vc140/turtle_bench.vcxproj.user delete mode 100644 build/vc140/turtle_test.vcxproj delete mode 100644 build/vc140/turtle_test.vcxproj.filters delete mode 100644 build/vc140/turtle_test.vcxproj.user diff --git a/build/vc100/.gitignore b/build/vc100/.gitignore deleted file mode 100644 index dd990f3..0000000 --- a/build/vc100/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.vs -*.db -*.ipch -*.opendb -*.opensdf -*.sdf -*.suo diff --git a/build/vc100/turtle.sln b/build/vc100/turtle.sln deleted file mode 100644 index 5e18ba2..0000000 --- a/build/vc100/turtle.sln +++ /dev/null @@ -1,35 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "turtle", "turtle.vcxproj", "{831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "turtle_test", "turtle_test.vcxproj", "{74810A2A-33D8-47D6-9A50-71261F1683F5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - debug|Win32 = debug|Win32 - debug|x64 = debug|x64 - release|Win32 = release|Win32 - release|x64 = release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|Win32.ActiveCfg = debug|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|Win32.Build.0 = debug|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|x64.ActiveCfg = debug|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|x64.Build.0 = debug|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|Win32.ActiveCfg = release|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|Win32.Build.0 = release|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|x64.ActiveCfg = release|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|x64.Build.0 = release|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|Win32.ActiveCfg = debug|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|Win32.Build.0 = debug|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|x64.ActiveCfg = debug|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|x64.Build.0 = debug|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|Win32.ActiveCfg = release|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|Win32.Build.0 = release|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|x64.ActiveCfg = release|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|x64.Build.0 = release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/build/vc100/turtle.vcxproj b/build/vc100/turtle.vcxproj deleted file mode 100644 index cf3d8da..0000000 --- a/build/vc100/turtle.vcxproj +++ /dev/null @@ -1,196 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D} - - - - StaticLibrary - - - StaticLibrary - - - StaticLibrary - - - StaticLibrary - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/vc100/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/libraries/$(ProjectName)\ - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - - /Zm179 %(AdditionalOptions) - Disabled - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName)d.lib - $(OutDir) ; ../../lib/vc100;%(AdditionalLibraryDirectories) - - - - - /Zm179 %(AdditionalOptions) - Disabled - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName)d.lib - $(OutDir) ; ../../lib/vc100_x64;%(AdditionalLibraryDirectories) - - - - - /Zm176 %(AdditionalOptions) - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32; NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName).lib - $(OutDir) ; ../../lib/vc100;%(AdditionalLibraryDirectories) - - - - - /Zm176 %(AdditionalOptions) - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32; NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName).lib - $(OutDir) ; ../../lib/vc100_x64;%(AdditionalLibraryDirectories) - - - - - - \ No newline at end of file diff --git a/build/vc100/turtle.vcxproj.filters b/build/vc100/turtle.vcxproj.filters deleted file mode 100644 index f3f1f04..0000000 --- a/build/vc100/turtle.vcxproj.filters +++ /dev/null @@ -1,131 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {b9cb2ff2-1351-456d-985e-cb0dd3f4e12d} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files - - - \ No newline at end of file diff --git a/build/vc100/turtle.vcxproj.user b/build/vc100/turtle.vcxproj.user deleted file mode 100644 index 695b5c7..0000000 --- a/build/vc100/turtle.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/vc100/turtle_bench.vcxproj b/build/vc100/turtle_bench.vcxproj deleted file mode 100644 index c6f73fd..0000000 --- a/build/vc100/turtle_bench.vcxproj +++ /dev/null @@ -1,192 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - {2D607783-30B9-46DE-81E2-28513B31D5D2} - - - - Application - - - Application - - - Application - - - Application - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/applications/$(ProjectName)/vc100/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc100_x64/$(Configuration)\ - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - Disabled - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - - - - - Disabled - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - - - - - MaxSpeed - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - false - - - - - MaxSpeed - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - false - - - - - - \ No newline at end of file diff --git a/build/vc100/turtle_bench.vcxproj.filters b/build/vc100/turtle_bench.vcxproj.filters deleted file mode 100644 index 8fc23e0..0000000 --- a/build/vc100/turtle_bench.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {0ddf67a0-6350-4b1a-ad9f-0648d3985709} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx;h;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/build/vc100/turtle_bench.vcxproj.user b/build/vc100/turtle_bench.vcxproj.user deleted file mode 100644 index 695b5c7..0000000 --- a/build/vc100/turtle_bench.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/vc100/turtle_test.vcxproj b/build/vc100/turtle_test.vcxproj deleted file mode 100644 index 9f1272f..0000000 --- a/build/vc100/turtle_test.vcxproj +++ /dev/null @@ -1,238 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - - - - - - BOOST_AUTO_TEST_MAIN;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - BOOST_AUTO_TEST_MAIN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - - - - - - - - - {74810A2A-33D8-47D6-9A50-71261F1683F5} - turtle_test - - - - Application - - - Application - - - Application - - - Application - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/vc100/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc100_x64/$(Configuration)/tests/$(ProjectName)\ - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - C:\dev\home\boost\stage\lib;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - C:\dev\home\boost\stage\lib;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - C:\dev\home\boost\stage\lib;$(VCInstallDir)lib\amd64;$(VCInstallDir)atlmfc\lib\amd64;$(WindowsSdkDir)lib\x64; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - C:\dev\home\boost\stage\lib;$(VCInstallDir)lib\amd64;$(VCInstallDir)atlmfc\lib\amd64;$(WindowsSdkDir)lib\x64; - - - - /Zm172 %(AdditionalOptions) - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc100;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - - /Zm172 %(AdditionalOptions) - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc100;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - /Zm162 %(AdditionalOptions) - MaxSpeed - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc100;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - - /Zm162 %(AdditionalOptions) - MaxSpeed - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc100;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - - \ No newline at end of file diff --git a/build/vc100/turtle_test.vcxproj.filters b/build/vc100/turtle_test.vcxproj.filters deleted file mode 100644 index de84e75..0000000 --- a/build/vc100/turtle_test.vcxproj.filters +++ /dev/null @@ -1,79 +0,0 @@ - - - - - {7b7d91a4-7b1e-441a-ac3f-2f93e73ae2ac} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx;h;hpp;hxx;hm;inl;inc;xsd - - - {214599f8-6837-4d60-96ae-b913798819ae} - - - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/build/vc100/turtle_test.vcxproj.user b/build/vc100/turtle_test.vcxproj.user deleted file mode 100644 index 695b5c7..0000000 --- a/build/vc100/turtle_test.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/vc140/.gitignore b/build/vc140/.gitignore deleted file mode 100644 index dd990f3..0000000 --- a/build/vc140/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.vs -*.db -*.ipch -*.opendb -*.opensdf -*.sdf -*.suo diff --git a/build/vc140/turtle.sln b/build/vc140/turtle.sln deleted file mode 100644 index 873405c..0000000 --- a/build/vc140/turtle.sln +++ /dev/null @@ -1,35 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "turtle", "turtle.vcxproj", "{831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "turtle_test", "turtle_test.vcxproj", "{74810A2A-33D8-47D6-9A50-71261F1683F5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - debug|Win32 = debug|Win32 - debug|x64 = debug|x64 - release|Win32 = release|Win32 - release|x64 = release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|Win32.ActiveCfg = debug|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|Win32.Build.0 = debug|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|x64.ActiveCfg = debug|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.debug|x64.Build.0 = debug|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|Win32.ActiveCfg = release|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|Win32.Build.0 = release|Win32 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|x64.ActiveCfg = release|x64 - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D}.release|x64.Build.0 = release|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|Win32.ActiveCfg = debug|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|Win32.Build.0 = debug|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|x64.ActiveCfg = debug|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.debug|x64.Build.0 = debug|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|Win32.ActiveCfg = release|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|Win32.Build.0 = release|Win32 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|x64.ActiveCfg = release|x64 - {74810A2A-33D8-47D6-9A50-71261F1683F5}.release|x64.Build.0 = release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/build/vc140/turtle.vcxproj b/build/vc140/turtle.vcxproj deleted file mode 100644 index fc32e63..0000000 --- a/build/vc140/turtle.vcxproj +++ /dev/null @@ -1,196 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {831F2DEE-1E35-4533-A3B2-12C01BA8DA1D} - - - - StaticLibrary - - - StaticLibrary - - - StaticLibrary - - - StaticLibrary - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/vc140/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140/$(Configuration)/libraries/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/libraries/$(ProjectName)\ - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - C:\dev\home\boost;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include; - - - - /Zm179 %(AdditionalOptions) - Disabled - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName)d.lib - $(OutDir) ; ../../lib/vc140;%(AdditionalLibraryDirectories) - - - - - /Zm179 %(AdditionalOptions) - Disabled - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName)d.lib - $(OutDir) ; ../../lib/vc140_x64;%(AdditionalLibraryDirectories) - - - - - /Zm176 %(AdditionalOptions) - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32; NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName).lib - $(OutDir) ; ../../lib/vc140;%(AdditionalLibraryDirectories) - - - - - /Zm176 %(AdditionalOptions) - $(IntDir); ../../include; ../../src/libraries; ../../src/libraries/$(ProjectName);%(AdditionalIncludeDirectories) - WIN32; NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - MultiThreadedDLL - Use - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir)$(ProjectName).pdb - Level4 - ProgramDatabase - - - $(OutDir)$(ProjectName).lib - $(OutDir) ; ../../lib/vc140_x64;%(AdditionalLibraryDirectories) - - - - - - \ No newline at end of file diff --git a/build/vc140/turtle.vcxproj.filters b/build/vc140/turtle.vcxproj.filters deleted file mode 100644 index ff0b69a..0000000 --- a/build/vc140/turtle.vcxproj.filters +++ /dev/null @@ -1,131 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {b9cb2ff2-1351-456d-985e-cb0dd3f4e12d} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files - - - \ No newline at end of file diff --git a/build/vc140/turtle.vcxproj.user b/build/vc140/turtle.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/build/vc140/turtle.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/vc140/turtle_bench.vcxproj b/build/vc140/turtle_bench.vcxproj deleted file mode 100644 index af19166..0000000 --- a/build/vc140/turtle_bench.vcxproj +++ /dev/null @@ -1,192 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - {2D607783-30B9-46DE-81E2-28513B31D5D2} - - - - Application - - - Application - - - Application - - - Application - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/applications/$(ProjectName)/vc140/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140_x64/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140/$(Configuration)\ - ../../out/applications/$(ProjectName)/vc140_x64/$(Configuration)\ - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - Disabled - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - - - - - Disabled - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - - - - - MaxSpeed - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - false - - - - - MaxSpeed - ../..; ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Console - false - - - - - - \ No newline at end of file diff --git a/build/vc140/turtle_bench.vcxproj.filters b/build/vc140/turtle_bench.vcxproj.filters deleted file mode 100644 index 0d3e15d..0000000 --- a/build/vc140/turtle_bench.vcxproj.filters +++ /dev/null @@ -1,38 +0,0 @@ - - - - - {0ddf67a0-6350-4b1a-ad9f-0648d3985709} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx;h;hpp;hxx;hm;inl;inc;xsd - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/build/vc140/turtle_bench.vcxproj.user b/build/vc140/turtle_bench.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/build/vc140/turtle_bench.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/build/vc140/turtle_test.vcxproj b/build/vc140/turtle_test.vcxproj deleted file mode 100644 index 6a07ae1..0000000 --- a/build/vc140/turtle_test.vcxproj +++ /dev/null @@ -1,241 +0,0 @@ - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - - - - - - - - - - - - - - - - - BOOST_AUTO_TEST_MAIN;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - BOOST_AUTO_TEST_MAIN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - - - - - - - - - - - {74810A2A-33D8-47D6-9A50-71261F1683F5} - turtle_test - 8.1 - - - - Application - v140 - - - Application - v140 - - - Application - v140 - - - Application - v140 - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ../../out/vc140/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140/$(Configuration)/tests/$(ProjectName)\ - ../../out/vc140_x64/$(Configuration)/tests/$(ProjectName)\ - - - C:\dev\include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(UniversalCRT_IncludePath); - C:\dev\lib\vc140;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib - - - C:\dev\include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(UniversalCRT_IncludePath); - C:\dev\lib\vc140;$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib - - - C:\dev\include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(IncludePath); - C:\dev\lib\vc140_x64;$(VCInstallDir)lib\amd64;$(VCInstallDir)atlmfc\lib\amd64;$(WindowsSdkDir)lib\x64;$(LibraryPath); - - - C:\dev\include;$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(IncludePath); - C:\dev\lib\vc140_x64;$(VCInstallDir)lib\amd64;$(VCInstallDir)atlmfc\lib\amd64;$(WindowsSdkDir)lib\x64;$(LibraryPath); - - - - /Zm172 %(AdditionalOptions) - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc140;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - /Zm172 %(AdditionalOptions) - Disabled - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc140;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - /Zm162 %(AdditionalOptions) - MaxSpeed - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc140;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - /Zm162 %(AdditionalOptions) - MaxSpeed - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDLL - true - - - $(ProjectName)_pch.h - $(IntDir)$(ProjectName).pch - $(IntDir) - $(IntDir) - $(IntDir)$(ProjectName).pdb - Level4 - true - ProgramDatabase - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - ../../lib/vc140;%(AdditionalLibraryDirectories) - true - Console - - - "$(TargetDir)$(TargetName).exe" --result_code=no --report_level=no --log_level=warning - - - - - - \ No newline at end of file diff --git a/build/vc140/turtle_test.vcxproj.filters b/build/vc140/turtle_test.vcxproj.filters deleted file mode 100644 index a37b36a..0000000 --- a/build/vc140/turtle_test.vcxproj.filters +++ /dev/null @@ -1,79 +0,0 @@ - - - - - {7b7d91a4-7b1e-441a-ac3f-2f93e73ae2ac} - cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx;h;hpp;hxx;hm;inl;inc;xsd - - - {214599f8-6837-4d60-96ae-b913798819ae} - - - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files\detail - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/build/vc140/turtle_test.vcxproj.user b/build/vc140/turtle_test.vcxproj.user deleted file mode 100644 index ace9a86..0000000 --- a/build/vc140/turtle_test.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file From 074c82315c134b47c8b2425ef3caff95028e1335 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 14:52:28 +0200 Subject: [PATCH 002/126] [CI] Require C++14 on travis --- .travis.yml | 7 +++---- test/CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index b151bcb..be66700 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,10 +18,9 @@ branches: env: - CXX_STANDARD=c++17 BRANCH_TO_TEST=master - CXX_STANDARD=c++14 BRANCH_TO_TEST=master - - CXX_STANDARD=c++11 BRANCH_TO_TEST=master - - CXX_STANDARD=c++11 BRANCH_TO_TEST=boost-1.58.0 - - CXX_STANDARD=c++11 BRANCH_TO_TEST=boost-1.59.0 - - CXX_STANDARD=c++11 BRANCH_TO_TEST=boost-1.67.0 + - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.58.0 + - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.59.0 + - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.67.0 compiler: - clang diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9c79747..f36751f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,7 +14,7 @@ endif() # Enable warnings option(TURTLE_WERROR "Treat warnings as errors" ON) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options(TurtleTestMain INTERFACE -Wall -Wextra -pedantic -Wno-long-long) + target_compile_options(TurtleTestMain INTERFACE -Wall -Wextra -pedantic) include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-Wunused-function TURTLE_CXX_UNUSED_FUNCTION) if(TURTLE_CXX_UNUSED_FUNCTION) From 56f68565c812b6b28bbf2764abb9064abb7948ba Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 22:46:09 +0200 Subject: [PATCH 003/126] [CI] Fix B2 build files --- .travis.yml | 22 +++++++++++----------- appveyor.yml | 10 ++++++---- build/build.bat | 23 ++++++++++++----------- build/build.sh | 35 ++++++++++++++++++----------------- 4 files changed, 47 insertions(+), 43 deletions(-) diff --git a/.travis.yml b/.travis.yml index be66700..a903e1b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,11 +16,11 @@ branches: - master env: - - CXX_STANDARD=c++17 BRANCH_TO_TEST=master - - CXX_STANDARD=c++14 BRANCH_TO_TEST=master - - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.58.0 - - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.59.0 - - CXX_STANDARD=c++14 BRANCH_TO_TEST=boost-1.67.0 + - CXX_STANDARD=17 BRANCH_TO_TEST=master + - CXX_STANDARD=14 BRANCH_TO_TEST=master + - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.58.0 + - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.59.0 + - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.67.0 compiler: - clang @@ -59,21 +59,21 @@ before_install: - PROJECT_DIR=`pwd` - git --version - BOOST=$HOME/boost-local - - git clone -b $BRANCH_TO_TEST https://github.com/boostorg/boost.git $BOOST + - git clone -b $BRANCH_TO_TEST --depth 1 https://github.com/boostorg/boost.git $BOOST - cd $BOOST - - git submodule update --init --merge + - git submodule update --init --depth 1 - ./bootstrap.sh - ./b2 headers script: - - cd $PROJECT_DIR/build + - cd $PROJECT_DIR - export BOOST_ROOT=$BOOST # `--coverage` flags required to generate coverage info for Coveralls - - ./build.sh --toolset=$CC "cxxflags=-std=$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 + - build/build.sh --toolset=$CC "cxxflags=-std=c++$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 + # CMake build - cd $BOOST && ./b2 --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Build required libs - mkdir $PROJECT_DIR/__build && cd $PROJECT_DIR/__build - - export CXXFLAGS="-std=$CXX_STANDARD" - - cmake .. -DCMAKE_BUILD_TYPE=Debug + - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++$CXX_STANDARD" - cmake --build . --config Debug -- -j3 - ctest --output-on-failure --build-config Debug diff --git a/appveyor.yml b/appveyor.yml index 7e127c0..1ca3551 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,8 @@ environment: CMAKE: true install: - - cd %APPVEYOR_BUILD_FOLDER%\doc + - mkdir %APPVEYOR_BUILD_FOLDER%\bin + - cd %APPVEYOR_BUILD_FOLDER%\bin - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/iconv-1.9.2.win32.zip -OutFile iconv.zip - 7z e iconv.zip iconv.dll -r - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/libxml2-2.7.8.win32.zip -OutFile libxml2.zip @@ -45,13 +46,14 @@ install: - xsltproc -V build_script: + - set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\bin - set BOOST_ROOT=C:\Libraries\boost_%BOOST% - cd %BOOST_ROOT% - call bootstrap.bat - - cd %APPVEYOR_BUILD_FOLDER%\build + - cd %APPVEYOR_BUILD_FOLDER% - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxflags=/std:c++%CXX_STANDARD% - set BUILD_ARGS=address-model=32,64 variant=debug,release - - call build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 + - call build\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 for: - matrix: @@ -64,4 +66,4 @@ for: - cd __build - cmake .. -DCMAKE_BUILD_TYPE=Debug - cmake --build . --config Debug - - ctest --output-on-failure --build-config Debug \ No newline at end of file + - ctest --output-on-failure --build-config Debug diff --git a/build/build.bat b/build/build.bat index a539b91..261831c 100644 --- a/build/build.bat +++ b/build/build.bat @@ -9,21 +9,22 @@ setlocal rem error if BOOST_ROOT not set set BOOST=%BOOST_ROOT% +set PROJECT_DIR=%cd% -pushd ..\test -%BOOST%\b2.exe -q %BUILD_ARGS% %* -popd +cd %BOOST% +b2.exe %PROJECT_DIR%\test -q %BUILD_ARGS% %* if errorlevel 1 exit /b %ERRORLEVEL% -set BOOSTBOOK_DIR=..\bin\turtle\boostbook +cd %PROJECT_DIR% +set BOOSTBOOK_DIR=%PROJECT_DIR%\bin\turtle\boostbook xcopy /Y /S /Q /I %BOOST%\tools\boostbook\xsl %BOOSTBOOK_DIR%\xsl xcopy /Y /S /Q /I %BOOST%\tools\boostbook\dtd %BOOSTBOOK_DIR%\dtd -xcopy /Y /S /Q /I boostbook %BOOSTBOOK_DIR% -xcopy /Y /S /Q /I %BOOST%\doc\src\boostbook.css ..\doc\html -xcopy /Y /S /Q /I %BOOST%\doc\src\images\*.png ..\doc\html\images -xcopy /Y /S /Q /I %BOOST%\doc\src\images\callouts\*.png ..\doc\html\images\callouts +xcopy /Y /S /Q /I build\boostbook %BOOSTBOOK_DIR% +xcopy /Y /S /Q /I %BOOST%\doc\src\boostbook.css doc\html +xcopy /Y /S /Q /I %BOOST%\doc\src\images\*.png doc\html\images +xcopy /Y /S /Q /I %BOOST%\doc\src\images\callouts\*.png doc\html\images\callouts if errorlevel 1 exit /b %ERRORLEVEL% -pushd ..\doc -%BOOST%\b2.exe -q %* -popd + +cd %BOOST% +b2.exe %PROJECT_DIR%\doc -q %* if errorlevel 1 exit /b %ERRORLEVEL% diff --git a/build/build.sh b/build/build.sh index a525c9e..33aa058 100755 --- a/build/build.sh +++ b/build/build.sh @@ -8,25 +8,26 @@ copy() { for dir; do true; done - mkdir -p $dir - cp $@ + mkdir -p "$dir" + cp "$@" } -set -ex +set -eux -export BOOST=$BOOST_ROOT +export BOOST="$BOOST_ROOT" +PROJECT_DIR="$(pwd)" -cd ../test -$BOOST/b2 -q "$@" -cd ../build +cd "$BOOST" +./b2 "$PROJECT_DIR/test" -q "$@" -export BOOSTBOOK_DIR=../bin/turtle/boostbook -copy -r "$BOOST"/tools/boostbook/xsl $BOOSTBOOK_DIR -copy -r "$BOOST"/tools/boostbook/dtd $BOOSTBOOK_DIR -copy -r boostbook/* $BOOSTBOOK_DIR -copy "$BOOST"/doc/src/boostbook.css ../doc/html -copy "$BOOST"/doc/src/images/*.png ../doc/html/images -copy "$BOOST"/doc/src/images/callouts/*.png ../doc/html/images/callouts -cd ../doc -$BOOST/b2 -q "$@" -cd ../build +cd "$PROJECT_DIR" +export BOOSTBOOK_DIR="$PROJECT_DIR/bin/turtle/boostbook" +copy -r "$BOOST"/tools/boostbook/xsl "$BOOSTBOOK_DIR" +copy -r "$BOOST"/tools/boostbook/dtd "$BOOSTBOOK_DIR" +copy -r build/boostbook/* "$BOOSTBOOK_DIR" +copy "$BOOST"/doc/src/boostbook.css doc/html +copy "$BOOST"/doc/src/images/*.png doc/html/images +copy "$BOOST"/doc/src/images/callouts/*.png doc/html/images/callouts + +cd "$BOOST" +./b2 "$PROJECT_DIR/doc" -q "$@" From 626c3b8cbbd00cbdf085d6dd23df18eedaf2a888 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 14 Jul 2020 17:39:21 +0200 Subject: [PATCH 004/126] [CI] Fix coverage collection Binaries are build multiple times with different configurations. Copying them into 1 folder will collapse that to one random configuration. Hence just use lcov to gather all data --- .travis.yml | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index a903e1b..2ce871f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,8 @@ addons: - xsltproc - docbook-xsl - docbook-xml + - python-yaml + - lcov before_install: - DOCBOOK_XSL_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl @@ -78,25 +80,14 @@ script: - ctest --output-on-failure --build-config Debug after_success: - - COVERALS_DIR=$PROJECT_DIR/coverals - - # Copying Coveralls data to a separate folder - - mkdir -p $COVERALS_DIR - - find $PROJECT_DIR/test/bin/ -name "*.gcda" -exec cp "{}" $COVERALS_DIR/ \; - - find $PROJECT_DIR/test/bin/ -name "*.gcno" -exec cp "{}" $COVERALS_DIR/ \; - - # Preparing Coveralls data by - # ... installing the tools - - sudo apt-get install -qq python-yaml lcov - # ... changing data format to a readable one - - lcov --directory $COVERALS_DIR --base-directory $PROJECT_DIR/test --capture --output-file $COVERALS_DIR/coverage.info - - # ... erasing /test/ /example/ folder data - - lcov --remove $COVERALS_DIR/coverage.info "/usr*" "/test/*" $IGNORE_COVERAGE "tests/*" "*/doc/examples/*" -o $COVERALS_DIR/coverage.info - # Output what was collected - - lcov --list $COVERALS_DIR/coverage.info - - # Sending data to Coveralls - cd $PROJECT_DIR + # Preparing Coveralls data by + # ... changing data format to a readable one + - lcov --directory "$PROJECT_DIR/test" --capture --output-file coverage.info + # ... erasing /test/ /doc/example/ folder data + - lcov --remove coverage.info "/usr*" $IGNORE_COVERAGE "*/test/*" "*/doc/example/*" -o coverage.info + # Output what was collected + - lcov --list coverage.info + # Sending data to Coveralls - gem install coveralls-lcov - - coveralls-lcov $COVERALS_DIR/coverage.info + - coveralls-lcov coverage.info From 3d44f9bfdabb6b1e52c55865376adc7b39cb77c0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 15 Jul 2020 17:55:53 +0200 Subject: [PATCH 005/126] Create documentation on GHA --- .github/workflows/release.yml | 63 +++++++++++++++++++++++++++++++++++ Jamfile.v2 | 28 ---------------- Jamroot.jam | 10 +++--- build/build.sh | 17 ++-------- doc/Jamfile.jam | 10 +++++- scripts/build_doc.sh | 31 +++++++++++++++++ 6 files changed, 111 insertions(+), 48 deletions(-) create mode 100644 .github/workflows/release.yml delete mode 100644 Jamfile.v2 create mode 100755 scripts/build_doc.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..125ef33 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,63 @@ +# Copyright 2020 Alexander Grund +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) + +name: Release + +on: + push: + branches: [master] + tags: ['v*'] + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + env: + BOOST_VERSION: 1.71.0 + BOOST_ROOT: ${{github.workspace}}/dependencies/boost + steps: + - uses: actions/checkout@v2 + - uses: actions/checkout@v2 + with: + repository: boostorg/boost + ref: boost-${{env.BOOST_VERSION}} + path: ${{env.BOOST_ROOT}} + fetch-depth: 1 + - name: Prepare boost + working-directory: ${{env.BOOST_ROOT}} + run: | + git submodule update --init --jobs 3 tools/boostdep tools/quickbook tools/boostbook + python tools/boostdep/depinst/depinst.py --exclude test --git_args '--jobs 3' ../tools/quickbook + ./bootstrap.sh || (cat bootstrap.log && false) + - name: Install dependencies + run: sudo apt-get install xsltproc docbook-xsl docbook-xml + - name: Create documentation + run: scripts/build_doc.sh -j3 + - name: Package documentation + run: tar -czvf turtle_doc.tar.gz html + working-directory: doc + # This runs only when actual tags are created + - name: Create Release + if: startsWith(github.ref, 'refs/tags/') + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + body: | + C++ mock object library for Boost + draft: true + prerelease: false + - name: Upload docs + if: startsWith(github.ref, 'refs/tags/') + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: doc/turtle_doc.tar.gz + asset_name: turtle_doc.tar.gz + asset_content_type: application/tar.gz diff --git a/Jamfile.v2 b/Jamfile.v2 deleted file mode 100644 index a373100..0000000 --- a/Jamfile.v2 +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright Rene Rivera 2007. -# -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -# Usage: -# -# bjam [options | properties | targets] -# -# Options: -# -# --boost= The directory of a Boost source tree. -# Default; BOOST env var (if found) -# Default; ../boost (if found) -# -# --boost-build= -# The directory for the Boost.Build v2 files. -# Default; BOOST_BUILD_PATH env var (if found) -# Default; BOOST_BUILD env var (if found) -# Default; /tools/build/v2 (if found) - -#~ If we have the Boost sources we can use the project... - -if [ GLOB $(BOOST) : [ modules.peek project : JAMFILE ] ] -{ - use-project /boost : $(BOOST) ; -} diff --git a/Jamroot.jam b/Jamroot.jam index 8797198..df7f2f9 100644 --- a/Jamroot.jam +++ b/Jamroot.jam @@ -6,9 +6,11 @@ import modules ; -local boost = [ modules.peek : BOOST ] ; +if BOOST_ROOT +{ + local boost = [ modules.peek : BOOST_ROOT ] ; -project mock : requirements $(boost) . ; + project mock : requirements $(boost) ; -# This seems to prevent some Boost.Build errors that otherwise occur :-( -use-project /boost : $(boost) ; + #use-project /boost : $(boost) ; +} diff --git a/build/build.sh b/build/build.sh index 33aa058..9779b25 100755 --- a/build/build.sh +++ b/build/build.sh @@ -5,13 +5,6 @@ # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) -copy() -{ - for dir; do true; done - mkdir -p "$dir" - cp "$@" -} - set -eux export BOOST="$BOOST_ROOT" @@ -21,13 +14,7 @@ cd "$BOOST" ./b2 "$PROJECT_DIR/test" -q "$@" cd "$PROJECT_DIR" -export BOOSTBOOK_DIR="$PROJECT_DIR/bin/turtle/boostbook" -copy -r "$BOOST"/tools/boostbook/xsl "$BOOSTBOOK_DIR" -copy -r "$BOOST"/tools/boostbook/dtd "$BOOSTBOOK_DIR" -copy -r build/boostbook/* "$BOOSTBOOK_DIR" -copy "$BOOST"/doc/src/boostbook.css doc/html -copy "$BOOST"/doc/src/images/*.png doc/html/images -copy "$BOOST"/doc/src/images/callouts/*.png doc/html/images/callouts +scripts/build_doc.sh "$@" cd "$BOOST" -./b2 "$PROJECT_DIR/doc" -q "$@" +./b2 "$PROJECT_DIR/doc//mock_examples" -q "$@" diff --git a/doc/Jamfile.jam b/doc/Jamfile.jam index bf5b54d..907d8bd 100644 --- a/doc/Jamfile.jam +++ b/doc/Jamfile.jam @@ -46,7 +46,15 @@ project example rule compile-examples { - for name in [ glob example/*.cpp ] { compile $(name) ; } + local examples ; + for name in [ glob example/*.cpp ] + { + local compile-target = [ compile $(name) ] ; + explicit $(compile-target) ; + examples += $(compile-target) ; + } + return $(examples) ; } alias mock_examples : [ compile-examples ] ; +explicit mock_examples ; diff --git a/scripts/build_doc.sh b/scripts/build_doc.sh new file mode 100755 index 0000000..d0e4830 --- /dev/null +++ b/scripts/build_doc.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Copyright (C) 2015 Mathieu Champlon +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +# Execute from repo root folder or set PROJECT_DIR +# Requires BOOST_ROOT to be set + +set -eu + +copy() +{ + for dir; do true; done + mkdir -p "$dir" + cp "$@" +} + +PROJECT_DIR="${PROJECT_DIR:-$(pwd)}" + +export BOOSTBOOK_DIR="${PROJECT_DIR}/bin/turtle/boostbook" +copy -r "$BOOST_ROOT"/tools/boostbook/xsl "$BOOSTBOOK_DIR" +copy -r "$BOOST_ROOT"/tools/boostbook/dtd "$BOOSTBOOK_DIR" +copy -r build/boostbook/* "$BOOSTBOOK_DIR" +copy "$BOOST_ROOT"/doc/src/boostbook.css doc/html +copy "$BOOST_ROOT"/doc/src/images/*.png doc/html/images +copy "$BOOST_ROOT"/doc/src/images/callouts/*.png doc/html/images/callouts + +cd "$BOOST_ROOT" +./b2 "$PROJECT_DIR/doc" -q "$@" From 32d16f773ba535f80a39d4c7a14661afff71d6f2 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 16 Jul 2020 12:52:45 +0200 Subject: [PATCH 006/126] Clean and remove build directory Move scripts into scripts folder Move doc-stuff into docs Update CI & CMake scripts See #89 --- .gitignore | 2 +- .travis.yml | 4 +- CMakeLists.txt | 2 +- appveyor.yml | 5 +- build/build.properties | 1 - build/build.xml | 115 ------------------------ build/clang/Dockerfile | 17 ---- build/gcc/Dockerfile | 9 -- {build => doc}/boostbook/xsl/navbar.xsl | 0 {build => scripts}/build.bat | 2 +- {build => scripts}/build.sh | 0 scripts/build_doc.sh | 2 +- build/version.hpp => version.hpp.cmake | 1 + 13 files changed, 9 insertions(+), 151 deletions(-) delete mode 100644 build/build.properties delete mode 100644 build/build.xml delete mode 100644 build/clang/Dockerfile delete mode 100644 build/gcc/Dockerfile rename {build => doc}/boostbook/xsl/navbar.xsl (100%) rename {build => scripts}/build.bat (94%) rename {build => scripts}/build.sh (100%) rename build/version.hpp => version.hpp.cmake (83%) diff --git a/.gitignore b/.gitignore index 534e0e9..f094525 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .vscode bin out -build/xsl +/build __build diff --git a/.travis.yml b/.travis.yml index 2ce871f..097c9f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,10 +71,10 @@ script: - cd $PROJECT_DIR - export BOOST_ROOT=$BOOST # `--coverage` flags required to generate coverage info for Coveralls - - build/build.sh --toolset=$CC "cxxflags=-std=c++$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 + - scripts/build.sh --toolset=$CC "cxxflags=-std=c++$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 # CMake build - cd $BOOST && ./b2 --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Build required libs - - mkdir $PROJECT_DIR/__build && cd $PROJECT_DIR/__build + - mkdir $PROJECT_DIR/build && cd $PROJECT_DIR/build - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++$CXX_STANDARD" - cmake --build . --config Debug -- -j3 - ctest --output-on-failure --build-config Debug diff --git a/CMakeLists.txt b/CMakeLists.txt index c372908..58b6828 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,7 @@ endif() find_package(Boost 1.58 REQUIRED) set(MOCK_VERSION "\"${PROJECT_VERSION}\"") -configure_file(build/version.hpp ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/version.hpp @ONLY) +configure_file(version.hpp.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/version.hpp @ONLY) add_library(turtle INTERFACE) add_library(turtle::turtle ALIAS turtle) diff --git a/appveyor.yml b/appveyor.yml index 1ca3551..7ebd82e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -53,7 +53,7 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxflags=/std:c++%CXX_STANDARD% - set BUILD_ARGS=address-model=32,64 variant=debug,release - - call build\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 + - call scripts\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 for: - matrix: @@ -62,8 +62,7 @@ for: build_script: - set BOOST_ROOT=C:\Libraries\boost_%BOOST% - cd %APPVEYOR_BUILD_FOLDER% - - mkdir __build - - cd __build + - mkdir build && cd build - cmake .. -DCMAKE_BUILD_TYPE=Debug - cmake --build . --config Debug - ctest --output-on-failure --build-config Debug diff --git a/build/build.properties b/build/build.properties deleted file mode 100644 index 623180f..0000000 --- a/build/build.properties +++ /dev/null @@ -1 +0,0 @@ -extensions = headers,check,run diff --git a/build/build.xml b/build/build.xml deleted file mode 100644 index b2201f8..0000000 --- a/build/build.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/clang/Dockerfile b/build/clang/Dockerfile deleted file mode 100644 index fd3a65b..0000000 --- a/build/clang/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# $ docker build --platform=linux -f clang/Dockerfile -t turtle-clang . -FROM buildpack-deps:stretch -RUN apt-get update && apt-get install -y xsltproc docbook-xsl docbook-xml && apt-get autoremove && apt-get clean -ENV DOCBOOK_XSL_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl \ - DOCBOOK_DTD_DIR=/usr/share/xml/docbook/schema/dtd/4.2 \ - BOOST_ROOT=/home/dev/cpp/boost/ -# wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add - && \ -RUN echo "deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-5.0 main" >> /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y --allow-unauthenticated clang-5.0 lld-5.0 libc++1 && \ - apt-get autoremove && \ - apt-get clean && \ - update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-5.0 100 && \ - update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 100 -RUN echo 'cd /home/dev/cpp/turtle/build' >> ~/.bashrc -# $ docker run --platform=linux --rm -v C:/dev:/home/dev -m 32g -it turtle-clang -# ./build.sh --toolset=clang "cxxflags=-std=c++17 -stdlib=libc++ -Wno-unused-variable" diff --git a/build/gcc/Dockerfile b/build/gcc/Dockerfile deleted file mode 100644 index 5d1a4d8..0000000 --- a/build/gcc/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -# $ docker build -f Dockerfile -t turtle-gcc . -FROM gcc -RUN apt-get update && apt-get install -y xsltproc docbook-xsl docbook-xml && apt-get autoremove && apt-get clean -ENV DOCBOOK_XSL_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl \ - DOCBOOK_DTD_DIR=/usr/share/xml/docbook/schema/dtd/4.2 \ - BOOST_ROOT=/home/dev/cpp/boost/ -RUN echo 'cd /home/dev/cpp/turtle/build' >> ~/.bashrc -# $ docker run --platform=linux --rm -v C:/dev:/home/dev -m 16g -it turtle-gcc -# ./build.sh --toolset=gcc "cxxflags=-std=c++17 -Wno-noexcept-type -Wno-unused-variable -Wno-unused-function -Wno-deprecated-declarations" diff --git a/build/boostbook/xsl/navbar.xsl b/doc/boostbook/xsl/navbar.xsl similarity index 100% rename from build/boostbook/xsl/navbar.xsl rename to doc/boostbook/xsl/navbar.xsl diff --git a/build/build.bat b/scripts/build.bat similarity index 94% rename from build/build.bat rename to scripts/build.bat index 261831c..0e2e38a 100644 --- a/build/build.bat +++ b/scripts/build.bat @@ -19,7 +19,7 @@ cd %PROJECT_DIR% set BOOSTBOOK_DIR=%PROJECT_DIR%\bin\turtle\boostbook xcopy /Y /S /Q /I %BOOST%\tools\boostbook\xsl %BOOSTBOOK_DIR%\xsl xcopy /Y /S /Q /I %BOOST%\tools\boostbook\dtd %BOOSTBOOK_DIR%\dtd -xcopy /Y /S /Q /I build\boostbook %BOOSTBOOK_DIR% +xcopy /Y /S /Q /I doc\boostbook %BOOSTBOOK_DIR% xcopy /Y /S /Q /I %BOOST%\doc\src\boostbook.css doc\html xcopy /Y /S /Q /I %BOOST%\doc\src\images\*.png doc\html\images xcopy /Y /S /Q /I %BOOST%\doc\src\images\callouts\*.png doc\html\images\callouts diff --git a/build/build.sh b/scripts/build.sh similarity index 100% rename from build/build.sh rename to scripts/build.sh diff --git a/scripts/build_doc.sh b/scripts/build_doc.sh index d0e4830..42af832 100755 --- a/scripts/build_doc.sh +++ b/scripts/build_doc.sh @@ -22,7 +22,7 @@ PROJECT_DIR="${PROJECT_DIR:-$(pwd)}" export BOOSTBOOK_DIR="${PROJECT_DIR}/bin/turtle/boostbook" copy -r "$BOOST_ROOT"/tools/boostbook/xsl "$BOOSTBOOK_DIR" copy -r "$BOOST_ROOT"/tools/boostbook/dtd "$BOOSTBOOK_DIR" -copy -r build/boostbook/* "$BOOSTBOOK_DIR" +copy -r doc/boostbook/* "$BOOSTBOOK_DIR" copy "$BOOST_ROOT"/doc/src/boostbook.css doc/html copy "$BOOST_ROOT"/doc/src/images/*.png doc/html/images copy "$BOOST_ROOT"/doc/src/images/callouts/*.png doc/html/images/callouts diff --git a/build/version.hpp b/version.hpp.cmake similarity index 83% rename from build/version.hpp rename to version.hpp.cmake index 2dfeecc..d9c8a24 100644 --- a/build/version.hpp +++ b/version.hpp.cmake @@ -7,3 +7,4 @@ // http://www.boost.org/LICENSE_1_0.txt) #define MOCK_VERSION @MOCK_VERSION@ +#define TURTLE_VERSION "@turtle_VERSION@" From 01013cce2f473eec0630f52c74678c9dda8ae6f9 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 16 Jul 2020 12:59:05 +0200 Subject: [PATCH 007/126] Only use BOOST_ROOT --- .travis.yml | 10 +++++----- scripts/build.bat | 18 +++++++++--------- scripts/build.sh | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 097c9f3..518ddfe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -60,20 +60,20 @@ before_install: # Cloning Boost libraries (fast nondeep cloning) - PROJECT_DIR=`pwd` - git --version - - BOOST=$HOME/boost-local - - git clone -b $BRANCH_TO_TEST --depth 1 https://github.com/boostorg/boost.git $BOOST - - cd $BOOST + - BOOST_ROOT=$HOME/boost-local + - git clone -b $BRANCH_TO_TEST --depth 1 https://github.com/boostorg/boost.git $BOOST_ROOT + - cd $BOOST_ROOT - git submodule update --init --depth 1 - ./bootstrap.sh - ./b2 headers script: - cd $PROJECT_DIR - - export BOOST_ROOT=$BOOST + - export BOOST_ROOT # `--coverage` flags required to generate coverage info for Coveralls - scripts/build.sh --toolset=$CC "cxxflags=-std=c++$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 # CMake build - - cd $BOOST && ./b2 --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Build required libs + - cd $BOOST_ROOT && ./b2 --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Build required libs - mkdir $PROJECT_DIR/build && cd $PROJECT_DIR/build - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++$CXX_STANDARD" - cmake --build . --config Debug -- -j3 diff --git a/scripts/build.bat b/scripts/build.bat index 0e2e38a..98dda03 100644 --- a/scripts/build.bat +++ b/scripts/build.bat @@ -7,24 +7,24 @@ rem (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.t setlocal -rem error if BOOST_ROOT not set -set BOOST=%BOOST_ROOT% +rem Need to set BOOST_ROOT and run from the source root directory + set PROJECT_DIR=%cd% -cd %BOOST% +cd %BOOST_ROOT% b2.exe %PROJECT_DIR%\test -q %BUILD_ARGS% %* if errorlevel 1 exit /b %ERRORLEVEL% cd %PROJECT_DIR% set BOOSTBOOK_DIR=%PROJECT_DIR%\bin\turtle\boostbook -xcopy /Y /S /Q /I %BOOST%\tools\boostbook\xsl %BOOSTBOOK_DIR%\xsl -xcopy /Y /S /Q /I %BOOST%\tools\boostbook\dtd %BOOSTBOOK_DIR%\dtd +xcopy /Y /S /Q /I %BOOST_ROOT%\tools\boostbook\xsl %BOOSTBOOK_DIR%\xsl +xcopy /Y /S /Q /I %BOOST_ROOT%\tools\boostbook\dtd %BOOSTBOOK_DIR%\dtd xcopy /Y /S /Q /I doc\boostbook %BOOSTBOOK_DIR% -xcopy /Y /S /Q /I %BOOST%\doc\src\boostbook.css doc\html -xcopy /Y /S /Q /I %BOOST%\doc\src\images\*.png doc\html\images -xcopy /Y /S /Q /I %BOOST%\doc\src\images\callouts\*.png doc\html\images\callouts +xcopy /Y /S /Q /I %BOOST_ROOT%\doc\src\boostbook.css doc\html +xcopy /Y /S /Q /I %BOOST_ROOT%\doc\src\images\*.png doc\html\images +xcopy /Y /S /Q /I %BOOST_ROOT%\doc\src\images\callouts\*.png doc\html\images\callouts if errorlevel 1 exit /b %ERRORLEVEL% -cd %BOOST% +cd %BOOST_ROOT% b2.exe %PROJECT_DIR%\doc -q %* if errorlevel 1 exit /b %ERRORLEVEL% diff --git a/scripts/build.sh b/scripts/build.sh index 9779b25..3261c23 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -7,14 +7,14 @@ set -eux -export BOOST="$BOOST_ROOT" +# Need to set BOOST_ROOT and run from the source root directory PROJECT_DIR="$(pwd)" -cd "$BOOST" +cd "$BOOST_ROOT" ./b2 "$PROJECT_DIR/test" -q "$@" cd "$PROJECT_DIR" scripts/build_doc.sh "$@" -cd "$BOOST" +cd "$BOOST_ROOT" ./b2 "$PROJECT_DIR/doc//mock_examples" -q "$@" From 1083954cfeaa90a4a9fae0c77ad3751581584aa1 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 16 Jul 2020 13:08:46 +0200 Subject: [PATCH 008/126] Remove remaining references to Boost.Mock --- .travis.yml | 10 +--------- doc/Jamfile.jam | 2 -- doc/mock.qbk | 5 +---- index.html | 2 +- test/Jamfile.jam | 2 -- 5 files changed, 3 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index 518ddfe..a12eb45 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,7 @@ # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # # Copyright Antony Polukhin 2014. - -# -# See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file -# and how it can be used with Boost libraries. -# +# Copyright Alexander Grund 2020. language: cpp @@ -49,10 +45,6 @@ before_install: - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5 - gcc --version - # Set this to the name of your Boost library - # Autodetect library name by using the following code: - PROJECT_TO_TEST=$(basename $(pwd)) - - PROJECT_TO_TEST=$(basename $(pwd)) - # Files, which coverage results must be ignored (files from other projects). Example: - IGNORE_COVERAGE='*/boost/progress.hpp */filesystem/src/path.cpp' - IGNORE_COVERAGE='*/boost-local/*' diff --git a/doc/Jamfile.jam b/doc/Jamfile.jam index 907d8bd..9800cf0 100644 --- a/doc/Jamfile.jam +++ b/doc/Jamfile.jam @@ -1,5 +1,3 @@ -# Boost.Mock -# # Copyright Mathieu Champlon 2012 # # Distributed under the Boost Software License version 1.0. (See diff --git a/doc/mock.qbk b/doc/mock.qbk index 7cdd860..4915d9b 100644 --- a/doc/mock.qbk +++ b/doc/mock.qbk @@ -7,8 +7,7 @@ [article Turtle [quickbook 1.5] -[/ [authors [Champlon, Mathieu]] ] - [authors [,A C++ mock object library for Boost]] + [authors [Champlon, Mathieu]] [copyright 2008-2014 Mathieu Champlon] [license Distributed under the [@http://www.boost.org/LICENSE_1_0.txt Boost Software License, Version 1.0]. @@ -16,8 +15,6 @@ [/ [purpose A C++ mock object library for Boost] ] ] -[note Turtle is not an official Boost library.] - [/ [section:introduction Introduction] diff --git a/index.html b/index.html index cfecfa2..fa5974d 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ Automatic redirection failed, please go to doc/html/index.html
-Boost.Mock
+Turtle

Copyright Mathieu Champlon 2012

diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 7b7cd14..39852e3 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -1,5 +1,3 @@ -# Boost.Mock -# # Copyright Mathieu Champlon 2012 # # Distributed under the Boost Software License version 1.0. (See From 675969eafde0a8982ead62abdc755699e82cdddb Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 27 Jul 2020 16:02:50 +0200 Subject: [PATCH 009/126] Auto-deduce method sig in MOCK_METHOD_(NON)CONST Fixes #93 --- include/turtle/mock.hpp | 14 ++++++++------ test/test_mock.cpp | 4 ++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 4c4c9b0..f873cee 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -188,14 +188,16 @@ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) -#define MOCK_CONST_METHOD(M, n, ...) \ - MOCK_CONST_METHOD_EXT(M, n, \ +#define MOCK_CONST_METHOD(M, ...) \ + MOCK_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) -#define MOCK_NON_CONST_METHOD(M, n, ...) \ - MOCK_NON_CONST_METHOD_EXT(M, n, \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_NON_CONST_METHOD(M, ...) \ + MOCK_NON_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) #define MOCK_METHOD_TPL(M, n, ...) \ MOCK_METHOD_EXT_TPL(M, n, \ diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 3aa7473..2e4f41c 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -366,6 +366,8 @@ namespace {} virtual void m1() = 0; + virtual void m10() const = 0; + virtual void m11() = 0; }; MOCK_BASE_CLASS( variadic, base ) @@ -373,8 +375,10 @@ namespace MOCK_METHOD( m1, 0 ) MOCK_METHOD( m2, 0, void() ) MOCK_METHOD( m3, 0, void(), m3 ) + MOCK_CONST_METHOD( m10, 0 ) MOCK_CONST_METHOD( m4, 0, void() ) MOCK_CONST_METHOD( m5, 0, void(), m5 ) + MOCK_NON_CONST_METHOD( m11, 0 ) MOCK_NON_CONST_METHOD( m6, 0, void() ) MOCK_NON_CONST_METHOD( m7, 0, void(), m7 ) MOCK_STATIC_METHOD( m8, 0, void() ) From 139918dc35b96b7e7610a2b07ff9a371614a7655 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 12 Aug 2020 17:11:19 +0200 Subject: [PATCH 010/126] Add changelog for auto deducing method sig --- doc/changelog.qbk | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index a889888..9b5700d 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -7,6 +7,13 @@ [section Changelog] +[section Unreleased] +Released - + +* Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` + +[endsect] + [section 1.3.2] Released 19 June 2020 From 6c3ec0d7856818f14bb60027908eb29dcc134680 Mon Sep 17 00:00:00 2001 From: Michael Jones Date: Mon, 16 Aug 2021 15:01:39 -0500 Subject: [PATCH 011/126] Fix deprecation warning about implicit copy constructor --- include/turtle/detail/expectation_template.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index 20bf6f4..8b4cf40 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -155,6 +155,11 @@ namespace detail , line_( line ) {} + expectation(expectation &&) = default; + expectation(expectation const&) = default; + expectation& operator=(expectation &&) = default; + expectation& operator=(expectation const&) = default; + ~expectation() { for( sequences_cit it = sequences_.begin(); From 9e664b52ab173a27b048d2e7eb6c0fd36358106f Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 5 Jul 2020 17:29:44 +0200 Subject: [PATCH 012/126] Replace Boost.Move by std equivalents --- CMakeLists.txt | 2 + include/turtle/config.hpp | 6 --- include/turtle/constraint.hpp | 9 ++-- include/turtle/constraints.hpp | 8 ++-- include/turtle/detail/action.hpp | 17 ++++--- .../turtle/detail/expectation_template.hpp | 4 +- include/turtle/detail/function.hpp | 1 - .../turtle/detail/function_impl_template.hpp | 17 +++---- include/turtle/detail/function_template.hpp | 2 +- include/turtle/detail/move_helper.hpp | 47 ------------------- include/turtle/detail/mutex.hpp | 27 ++++------- include/turtle/matcher.hpp | 4 +- include/turtle/mock.hpp | 2 +- test/detail/test_function.cpp | 4 -- test/test_constraints.cpp | 2 +- 15 files changed, 44 insertions(+), 108 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 58b6828..9a91641 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,8 @@ configure_file(version.hpp.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/vers add_library(turtle INTERFACE) add_library(turtle::turtle ALIAS turtle) target_include_directories(turtle INTERFACE $) +target_compile_features(turtle INTERFACE cxx_std_14) + target_link_libraries(turtle INTERFACE Boost::boost Boost::disable_autolinking) if(NOT TURTLE_AUTO_PTR) target_compile_definitions(turtle INTERFACE MOCK_NO_AUTO_PTR) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 16b0ed5..6876926 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -64,12 +64,6 @@ # endif #endif -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_RVALUE_REFERENCES) -# ifndef MOCK_NO_RVALUE_REFERENCES -# define MOCK_RVALUE_REFERENCES -# endif -#endif - #if !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) # ifndef MOCK_NO_HDR_FUNCTIONAL # define MOCK_HDR_FUNCTIONAL diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index 887a22d..a8c9d4f 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -19,7 +19,6 @@ #include #include #include -#include #include namespace mock @@ -147,7 +146,7 @@ namespace detail const mock::constraint< detail::Name > Name; #define MOCK_CONSTRAINT_ASSIGN(z, n, d) \ - expected##n( boost::forward< T##n >(e##n) ) + expected##n( std::forward< T##n >(e##n) ) #define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ boost::unwrap_ref( expected##n ) @@ -166,13 +165,13 @@ namespace detail BOOST_PP_ARRAY_ELEM(n, Args) #define MOCK_CONSTRAINT_ARG(z, n, Args) \ - BOOST_FWD_REF(T##n) BOOST_PP_ARRAY_ELEM(n, Args) + T##n&& BOOST_PP_ARRAY_ELEM(n, Args) #define MOCK_CONSTRAINT_ARGS(z, n, Args) \ - BOOST_FWD_REF(T##n) e##n + T##n&& e##n #define MOCK_CONSTRAINT_PARAM(z, n, Args) \ - boost::forward< T##n >( BOOST_PP_ARRAY_ELEM(n, Args) ) + std::forward< T##n >( BOOST_PP_ARRAY_ELEM(n, Args) ) #define MOCK_NARY_CONSTRAINT(Name, n, Args, Expr) \ namespace detail \ diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index c17320f..4d4f9f1 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -190,7 +190,7 @@ namespace detail return true; } template< typename Actual > - bool operator()( BOOST_RV_REF(Actual) actual, + bool operator()( Actual&& actual, typename boost::disable_if< boost::is_convertible< const Actual*, @@ -199,7 +199,7 @@ namespace detail > >::type* = 0 ) const { - *expected_ = boost::move( actual ); + *expected_ = std::move( actual ); return true; } template< typename Actual > @@ -276,9 +276,9 @@ namespace detail } template< typename T > - constraint< detail::equal< typename detail::forward_type< T >::type > > equal( BOOST_FWD_REF(T) t ) + constraint< detail::equal< T > > equal( T&& t ) { - return detail::equal< typename detail::forward_type< T >::type >( boost::forward< T >( t ) ); + return detail::equal< T >( std::forward< T >( t ) ); } template< typename T > diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index a146130..47360d8 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -105,19 +104,19 @@ namespace detail } template< typename Value > - void moves( BOOST_RV_REF(Value) v ) + void moves( Value&& v ) { this->set( boost::bind( &move< typename boost::remove_reference< Value >::type >, - boost::ref( store( boost::move( v ) ) ) ) ); + boost::ref( store( std::move( v ) ) ) ) ); } private: template< typename Value > - static BOOST_RV_REF(Value) move( Value& t ) + static Value&& move( Value& t ) { - return boost::move( t ); + return std::move( t ); } struct value : boost::noncopyable { @@ -134,8 +133,8 @@ namespace detail >::type >::type value_type; - value_imp( BOOST_RV_REF(value_type) t ) - : t_( boost::move( t ) ) + value_imp( value_type&& t ) + : t_( std::move( t ) ) {} value_imp( const value_type& t ) : t_( t ) @@ -148,9 +147,9 @@ namespace detail }; template< typename T > - T& store( BOOST_RV_REF(T) t ) + T& store( T&& t ) { - v_.reset( new value_imp< T >( boost::move( t ) ) ); + v_.reset( new value_imp< T >( std::move( t ) ) ); return static_cast< value_imp< T >& >( *v_ ).t_; } template< typename T > diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index 8b4cf40..39e8938 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -15,7 +15,7 @@ matcher< T##n, Constraint_##n > c##n##_; #define MOCK_EXPECTATION_IS_VALID(z, n, d) \ - BOOST_PP_IF(n, &&,) c##n##_( mock::detail::move_if_not_lvalue_reference< T##n >( a##n ) ) + BOOST_PP_IF(n, &&,) c##n##_( std::forward< T##n >( a##n ) ) #define MOCK_EXPECTATION_SERIALIZE(z, n, d) \ BOOST_PP_IF(n, << ", " <<,) c##n##_ @@ -24,7 +24,7 @@ BOOST_PP_IF(n, << ", " <<,) "any" #define MOCK_EXPECTATION_PARAM(z, n, Args) \ - mock::detail::move_if_not_lvalue_reference< T##n >( a##n ) + std::forward< T##n >( a##n ) #define MOCK_REF_ARG(z, n, d) \ typename ref_arg< T##n >::type a##n diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index a17dfec..24381da 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index 3a68971..b67c124 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -25,7 +25,7 @@ << lazy_expectations( this ) #define MOCK_MOVE(z, n, d) \ - mock::detail::move_if_not_lvalue_reference< T##n >( t##n ) + std::forward< T##n >( t##n ) namespace mock { @@ -99,21 +99,22 @@ namespace detail { private: typedef wrapper_base< R, expectation_type > base_type; - BOOST_MOVABLE_BUT_NOT_COPYABLE(wrapper) public: wrapper( const boost::shared_ptr< mutex >& m, expectation_type& e ) : base_type( e ) , lock_( m ) {} - wrapper( BOOST_RV_REF( wrapper ) x ) + wrapper(const wrapper&) = delete; + wrapper( wrapper&& x ) : base_type( x ) - , lock_( boost::move( x.lock_) ) + , lock_( std::move( x.lock_) ) {} - wrapper& operator=( BOOST_RV_REF( wrapper ) x ) + wrapper& operator=(const wrapper&) = delete; + wrapper& operator=( wrapper&& x ) { static_cast< base_type& >( *this ) = x; - lock_ = boost::move( x.lock_ ); + lock_ = std::move( x.lock_ ); return *this; } wrapper& once() @@ -200,9 +201,9 @@ namespace detail this->e_->throws( t ); } template< typename TT > - void moves( BOOST_RV_REF(TT) t ) + void moves( TT&& t ) { - this->e_->moves( boost::move( t ) ); + this->e_->moves( std::move( t ) ); } lock lock_; diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp index 0ebfe14..6d8a01d 100644 --- a/include/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -9,7 +9,7 @@ #include "function_impl_template.hpp" #define MOCK_MOVE(z, n, d) \ - mock::detail::move_if_not_lvalue_reference< T##n >( t##n ) + std::forward< T##n >( t##n ) namespace mock { diff --git a/include/turtle/detail/move_helper.hpp b/include/turtle/detail/move_helper.hpp index 87f1f2d..75b173d 100644 --- a/include/turtle/detail/move_helper.hpp +++ b/include/turtle/detail/move_helper.hpp @@ -9,24 +9,14 @@ #ifndef MOCK_MOVE_HELPER_HPP_INCLUDED #define MOCK_MOVE_HELPER_HPP_INCLUDED -#include "../config.hpp" #include #include -#include -#include #include -#include namespace mock { namespace detail { -#ifdef MOCK_RVALUE_REFERENCES - template< typename T > - struct forward_type - { - typedef T type; - }; template< typename T > struct ref_arg { @@ -35,43 +25,6 @@ namespace detail T, typename boost::add_rvalue_reference< T >::type >::type type; }; - - template< typename T > - inline T&& move_if_not_lvalue_reference(typename boost::remove_reference< T >::type& t) - { - return static_cast< T&& >(t); - } - - template< typename T > - inline T&& move_if_not_lvalue_reference(typename boost::remove_reference< T >::type&& t) - { - return static_cast< T&& >(t); - } -#else - template< typename T > - struct forward_type - { - typedef typename boost::decay< const T >::type type; - }; - template< class T> - struct forward_type< boost::rv< T > > - { - typedef T type; - }; - template< typename T > - struct ref_arg - { - typedef typename boost::conditional< - boost::is_reference< T >::value, - T, - const typename boost::add_reference< T >::type >::type type; - }; - template< typename T > - inline typename boost::remove_reference< T >::type& move_if_not_lvalue_reference(typename boost::remove_reference< T >::type& t) - { - return t; - } -#endif } } diff --git a/include/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp index b5dcb35..3be9f02 100644 --- a/include/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -11,7 +11,6 @@ #include "../config.hpp" #include "singleton.hpp" -#include #include #include @@ -38,9 +37,6 @@ namespace detail struct lock { - private: - BOOST_MOVABLE_BUT_NOT_COPYABLE(lock) - public: lock( const boost::shared_ptr< mutex >& m ) : m_( m ) @@ -52,13 +48,15 @@ namespace detail if( m_ ) m_->unlock(); } - lock( BOOST_RV_REF( lock ) x ) + lock( const lock& ) = delete; + lock( lock&& x ) : m_( x.m_ ) { // Explicit reset to avoid unlock in destructor x.m_.reset(); } - lock& operator=( BOOST_RV_REF( lock ) x ) + lock& operator=( const lock& ) = delete; + lock& operator=( lock&& x ) { m_ = x.m_; x.m_.reset(); @@ -86,29 +84,24 @@ namespace detail }; // Dummy lock classes. // Constructor + Destructor make it RAII classes for compilers and avoid unused variable warnings - struct scoped_lock : boost::noncopyable + struct scoped_lock { scoped_lock( mutex& ) {} ~scoped_lock() {} }; - class lock : boost::noncopyable + class lock { - private: - BOOST_MOVABLE_BUT_NOT_COPYABLE(lock) - public: lock( const boost::shared_ptr< mutex >& ) {} ~lock() {} - lock( BOOST_RV_REF( lock ) ) - {} - lock& operator=( BOOST_RV_REF( lock ) ) - { - return *this; - } + lock(const lock&) = delete; + lock( lock&& ) = default; + lock& operator=( const lock& ) = delete; + lock& operator=( lock&& ) = default; }; } } // mock diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index c6082a7..4429164 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -71,7 +71,7 @@ namespace mock {} bool operator()( typename detail::ref_arg< Actual >::type actual ) { - return c_( mock::detail::move_if_not_lvalue_reference< typename detail::ref_arg< Actual >::type >( actual ) ); + return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); } friend std::ostream& operator<<( std::ostream& s, const matcher& m ) @@ -95,7 +95,7 @@ namespace mock {} bool operator()( typename detail::ref_arg< Actual >::type actual ) { - return c_( mock::detail::move_if_not_lvalue_reference< typename detail::ref_arg< Actual >::type >( actual ) ); + return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); } friend std::ostream& operator<<( std::ostream& s, const matcher& m ) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index f873cee..d5c5cff 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -87,7 +87,7 @@ BOOST_PP_COMMA_IF(n) d, n >::type >( p##n ) #define MOCK_FORWARD_PARAMS(n, S, tpn) \ BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, \ - mock::detail::move_if_not_lvalue_reference< MOCK_PARAM(S, tpn)) + std::forward< MOCK_PARAM(S, tpn)) #define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ MOCK_DECL(M, n, S, c, tpn) \ { \ diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 682840a..270fbe2 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -575,8 +575,6 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_valu #endif // MOCK_AUTO_PTR -#ifdef MOCK_RVALUE_REFERENCES - BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture ) { mock::detail::function< int() > f; @@ -603,8 +601,6 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_rvalue, mock_er CHECK_CALLS( 1 ); } -#endif - #ifdef MOCK_SMART_PTR BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture ) diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 9e918da..26087ea 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint ) { std::unique_ptr< int > i; std::unique_ptr< int > j( new int( 3 ) ); - BOOST_CHECK( mock::retrieve( i ).c_( boost::move( j ) ) ); + BOOST_CHECK( mock::retrieve( i ).c_( std::move( j ) ) ); BOOST_REQUIRE( i ); BOOST_CHECK_EQUAL( 3, *i ); BOOST_CHECK( !j ); From df5b77af95fe0381a8d688f7d75d83c1e4fa0ebd Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 5 Jul 2020 18:10:24 +0200 Subject: [PATCH 013/126] Replace Boost.TypeTraits by std equivalents --- include/turtle/config.hpp | 6 --- include/turtle/constraint.hpp | 4 +- include/turtle/constraints.hpp | 64 +++++++++++++++------------ include/turtle/detail/action.hpp | 14 ++---- include/turtle/detail/is_functor.hpp | 28 +++--------- include/turtle/detail/move_helper.hpp | 14 +++--- include/turtle/log.hpp | 14 +++--- include/turtle/matcher.hpp | 11 +++-- include/turtle/mock.hpp | 2 +- include/turtle/object.hpp | 7 +-- test/detail/test_function.cpp | 13 +++--- test/detail/test_is_functor.cpp | 4 -- test/detail/test_signature.cpp | 8 ++-- 13 files changed, 76 insertions(+), 113 deletions(-) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 6876926..6f4104e 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -46,12 +46,6 @@ # endif #endif -#if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_DECLTYPE) -# ifndef MOCK_NO_DECLTYPE -# define MOCK_DECLTYPE -# endif -#endif - #if !defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) # ifndef MOCK_NO_VARIADIC_MACROS # define MOCK_VARIADIC_MACROS diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index a8c9d4f..2e0d1e0 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include namespace mock { @@ -158,7 +158,7 @@ namespace detail Expected_##n expected##n; #define MOCK_CONSTRAINT_TPL_TYPE(z, n, d) \ - typename boost::decay< const T##n >::type + std::decay_t< const T##n > #define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ const typename boost::unwrap_reference< Expected_##n >::type& \ diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index 4d4f9f1..3d7af0c 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -15,15 +15,13 @@ #include "detail/move_helper.hpp" #include #include -#include -#include -#include -#include +#include #if BOOST_VERSION >= 107000 #include #else #include #endif +#include namespace mock { @@ -65,7 +63,7 @@ namespace detail template< typename T1, typename T2, typename Tolerance > bool is_close( const T1& t1, const T2& t2, const Tolerance& tolerance ) { - typedef typename boost::common_type< T1, T2 >::type common_type; + typedef std::common_type_t< T1, T2 > common_type; return boost::math::fpc::close_at_tolerance< common_type >( tolerance, boost::math::fpc::FPC_STRONG )( t1, t2 ); } @@ -114,6 +112,14 @@ namespace detail namespace detail { + template + struct has_equal_to: std::false_type + {}; + + template + struct has_equal_to() == std::declval())>>: std::true_type + {}; + template< typename Expected > struct equal { @@ -122,25 +128,25 @@ namespace detail {} template< typename Actual > bool operator()( const Actual& actual, - typename boost::enable_if< - boost::has_equal_to< + std::enable_if_t< + has_equal_to< Actual, typename boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const + >::value + >* = 0 ) const { return actual == boost::unwrap_ref( expected_ ); } template< typename Actual > bool operator()( const Actual& actual, - typename boost::disable_if< - boost::has_equal_to< + std::enable_if_t< + !has_equal_to< Actual, typename boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const + >::value + >* = 0 ) const { return actual && *actual == boost::unwrap_ref( expected_ ); } @@ -178,38 +184,38 @@ namespace detail {} template< typename Actual > bool operator()( const Actual& actual, - typename boost::disable_if< - boost::is_convertible< + std::enable_if_t< + !std::is_convertible< const Actual*, typename boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const + >::value + >* = 0 ) const { *expected_ = actual; return true; } template< typename Actual > bool operator()( Actual&& actual, - typename boost::disable_if< - boost::is_convertible< + std::enable_if_t< + !std::is_convertible< const Actual*, typename boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const + >::value + >* = 0 ) const { *expected_ = std::move( actual ); return true; } template< typename Actual > bool operator()( Actual& actual, - typename boost::enable_if< - boost::is_convertible< Actual*, + std::enable_if_t< + std::is_convertible< Actual*, typename boost::unwrap_reference< Expected >::type - > - >::type* = 0 ) const + >::value + >* = 0 ) const { *expected_ = detail::addressof( actual ); return true; @@ -236,13 +242,13 @@ namespace detail } template< typename Actual > bool operator()( Actual* actual, - typename boost::enable_if< - boost::is_convertible< + std::enable_if_t< + std::is_convertible< typename boost::unwrap_reference< Expected >::type, Actual - > - >::type* = 0 ) const + >::value + >* = 0 ) const { if( ! actual ) return false; diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 47360d8..8cdfe72 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -10,13 +10,12 @@ #define MOCK_ACTION_HPP_INCLUDED #include "../config.hpp" -#include -#include #include #include #include #include #include +#include namespace mock { @@ -108,7 +107,7 @@ namespace detail { this->set( boost::bind( - &move< typename boost::remove_reference< Value >::type >, + &move< std::remove_reference_t< Value > >, boost::ref( store( std::move( v ) ) ) ) ); } @@ -126,12 +125,7 @@ namespace detail template< typename T > struct value_imp : value { - typedef - typename boost::remove_const< - typename boost::remove_reference< - T - >::type - >::type value_type; + typedef std::remove_const_t> value_type; value_imp( value_type&& t ) : t_( std::move( t ) ) @@ -159,7 +153,7 @@ namespace detail return static_cast< value_imp< T >& >( *v_ ).t_; } template< typename T > - typename boost::remove_reference< Result >::type& store( T* t ) + std::remove_reference_t< Result >& store( T* t ) { v_.reset( new value_imp< Result >( t ) ); return static_cast< value_imp< Result >& >( *v_ ).t_; diff --git a/include/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp index 5d4de95..817213a 100644 --- a/include/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -11,10 +11,11 @@ #include "../config.hpp" #include -#include #include #include #include +#include +#include namespace mock { @@ -24,33 +25,18 @@ namespace detail BOOST_MPL_HAS_XXX_TEMPLATE_DEF( sig ) BOOST_MPL_HAS_XXX_TEMPLATE_DEF( result ) -#ifdef MOCK_DECLTYPE - + template< typename F, typename P, class = void > + struct is_callable : std::false_type + {}; template< typename F, typename P > - struct is_callable - { - typedef boost::type_traits::yes_type yes_type; - typedef boost::type_traits::no_type no_type; - - template< typename T > - static yes_type check( - decltype( boost::declval< T >()( boost::declval< P >() ) )* ); - template< typename T > - static no_type check( ... ); - - typedef boost::mpl::bool_< - sizeof( check< F >( 0 ) ) == sizeof( yes_type ) > type; - }; - -#endif // MOCK_DECLTYPE + struct is_callable< F, P, boost::void_t()( std::declval

() ) )> >: std::true_type + {}; template< typename T, typename P > struct is_functor : boost::mpl::or_< boost::function_types::is_callable_builtin< T >, -#ifdef MOCK_DECLTYPE is_callable< T, P >, -#endif has_result_type< T >, has_result< T >, has_sig< T > diff --git a/include/turtle/detail/move_helper.hpp b/include/turtle/detail/move_helper.hpp index 75b173d..9d910ff 100644 --- a/include/turtle/detail/move_helper.hpp +++ b/include/turtle/detail/move_helper.hpp @@ -9,22 +9,18 @@ #ifndef MOCK_MOVE_HELPER_HPP_INCLUDED #define MOCK_MOVE_HELPER_HPP_INCLUDED -#include -#include -#include +#include namespace mock { namespace detail { template< typename T > - struct ref_arg - { - typedef typename boost::conditional< - boost::is_reference< T >::value, + using ref_arg = std::conditional< + std::is_reference< T >::value, T, - typename boost::add_rvalue_reference< T >::type >::type type; - }; + std::add_rvalue_reference_t< T > + >; } } diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index 104c9fe..b196ec0 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -12,11 +12,11 @@ #include "config.hpp" #include "stream.hpp" #include "format.hpp" -#include #include #include #include #include +#include namespace boost { @@ -181,19 +181,19 @@ namespace detail #endif template< typename T > - typename boost::enable_if< - boost::function_types::is_callable_builtin< T >, + std::enable_if_t< + boost::function_types::is_callable_builtin< T >::value, stream& - >::type + > operator<<( stream& s, T* ) { return s << '?'; } template< typename T > - typename boost::disable_if< - boost::function_types::is_callable_builtin< T >, + std::enable_if_t< + !boost::function_types::is_callable_builtin< T >::value, stream& - >::type + > operator<<( stream& s, T* t ) { *s.s_ << t; diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index 4429164..aed74ea 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -14,10 +14,9 @@ #include "constraints.hpp" #include "detail/is_functor.hpp" #include "detail/move_helper.hpp" -#include -#include #include #include +#include namespace mock { @@ -28,7 +27,7 @@ namespace mock explicit matcher( Expected expected ) : expected_( expected ) {} - bool operator()( typename boost::add_reference< const Actual >::type actual ) + bool operator()( std::add_lvalue_reference_t< const Actual > actual ) { return mock::equal( boost::unwrap_ref( expected_ ) ).c_( actual ); @@ -84,9 +83,9 @@ namespace mock template< typename Actual, typename Functor > class matcher< Actual, Functor, - typename boost::enable_if< - detail::is_functor< Functor, Actual > - >::type + std::enable_if_t< + detail::is_functor< Functor, Actual >::value + > > { public: diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index d5c5cff..af0cc12 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -28,7 +28,7 @@ struct T : mock::object #define MOCK_FUNCTION_TYPE(S, tpn) \ - tpn boost::remove_pointer< tpn BOOST_IDENTITY_TYPE(S) >::type + std::remove_pointer_t< tpn BOOST_IDENTITY_TYPE(S) > #ifdef MOCK_VARIADIC_MACROS diff --git a/include/turtle/object.hpp b/include/turtle/object.hpp index d201757..9f473cd 100644 --- a/include/turtle/object.hpp +++ b/include/turtle/object.hpp @@ -14,10 +14,9 @@ #include "detail/type_name.hpp" #include "detail/object_impl.hpp" #include -#include -#include #include #include +#include namespace mock { @@ -36,9 +35,7 @@ namespace detail boost::unit_test::const_string instance, boost::optional< type_name > type, boost::unit_test::const_string name, - typename boost::disable_if< - typename boost::is_base_of< object, T > - >::type* = 0 ) + std::enable_if_t< !std::is_base_of< object, T >::value >* = 0 ) { e.configure( detail::root, &t, instance, type, name ); return e; diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 270fbe2..599d89f 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -16,6 +16,7 @@ #include #include #include +#include // static @@ -23,14 +24,10 @@ namespace { boost::function< void() > static_f; - BOOST_MPL_ASSERT(( - boost::is_same< void, boost::result_of< mock::detail::function< void() >() >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< int, boost::result_of< mock::detail::function< int() >() >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< void, boost::result_of< mock::detail::function< void( float ) >( float ) >::type > )); - BOOST_MPL_ASSERT(( - boost::is_same< int, boost::result_of< mock::detail::function< int( float ) >( float ) >::type > )); + static_assert( std::is_same< void, boost::result_of< mock::detail::function< void() >() >::type >::value, "!"); + static_assert( std::is_same< int, boost::result_of< mock::detail::function< int() >() >::type >::value, "!"); + static_assert( std::is_same< void, boost::result_of< mock::detail::function< void( float ) >( float ) >::type >::value, "!"); + static_assert( std::is_same< int, boost::result_of< mock::detail::function< int( float ) >( float ) >::type >::value, "!"); } // functor diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index a6a0f38..88adf31 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -143,11 +143,7 @@ BOOST_AUTO_TEST_CASE( class_with_sig_is_functor ) BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) { is_not_functor( []() {} ); -#ifdef MOCK_DECLTYPE is_functor( []( int ) {} ); -#else - is_not_functor( []( int ) {} ); -#endif is_not_functor( []( const std::string&, int ) {} ); is_not_functor( []( int, const std::string& ) {} ); } diff --git a/test/detail/test_signature.cpp b/test/detail/test_signature.cpp index 27f4e91..c366aae 100644 --- a/test/detail/test_signature.cpp +++ b/test/detail/test_signature.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include namespace { @@ -22,8 +22,6 @@ namespace BOOST_AUTO_TEST_CASE( mock_signature_generates_signature ) { - BOOST_MPL_ASSERT(( - boost::is_same< void(), MOCK_SIGNATURE(method_1) > )); - BOOST_MPL_ASSERT(( - boost::is_same< float( int ), MOCK_SIGNATURE(method_2) > )); + static_assert( std::is_same< void(), MOCK_SIGNATURE(method_1) >::value, "!"); + static_assert( std::is_same< float( int ), MOCK_SIGNATURE(method_2) >::value, "!"); } From cf330e8c86daa84ffedd2497f68646b11296b639 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 5 Jul 2020 22:29:14 +0200 Subject: [PATCH 014/126] Remove usage of Boost.MPL and reduce Boost.FunctionTypes usage They are known to be slow on compilation and C++11 offer better alternatives --- include/turtle/detail/is_functor.hpp | 18 +------- include/turtle/detail/parameter.hpp | 54 +++++++++++++++++++----- include/turtle/detail/signature.hpp | 62 ++++++++++++++++----------- include/turtle/mock.hpp | 11 ++--- test/detail/test_function.cpp | 1 - test/detail/test_is_functor.cpp | 63 ++++------------------------ 6 files changed, 94 insertions(+), 115 deletions(-) diff --git a/include/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp index 817213a..ca804b7 100644 --- a/include/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -10,10 +10,6 @@ #define MOCK_IS_FUNCTOR_HPP_INCLUDED #include "../config.hpp" -#include -#include -#include -#include #include #include @@ -21,10 +17,6 @@ namespace mock { namespace detail { - BOOST_MPL_HAS_XXX_TRAIT_DEF( result_type ) - BOOST_MPL_HAS_XXX_TEMPLATE_DEF( sig ) - BOOST_MPL_HAS_XXX_TEMPLATE_DEF( result ) - template< typename F, typename P, class = void > struct is_callable : std::false_type {}; @@ -33,15 +25,7 @@ namespace detail {}; template< typename T, typename P > - struct is_functor - : boost::mpl::or_< - boost::function_types::is_callable_builtin< T >, - is_callable< T, P >, - has_result_type< T >, - has_result< T >, - has_sig< T > - > - {}; + using is_functor = is_callable< T, P >; } } // mock diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index 38925a2..4c25a3b 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -10,24 +10,56 @@ #define MOCK_PARAMETER_HPP_INCLUDED #include "../config.hpp" -#include -#include -#include namespace mock { namespace detail { - template< typename Signature, int n > - struct parameter + template< class... > + struct tuple; + + template< std::size_t I, class T > + struct tuple_element; + + template< std::size_t I, class H, class... T > + struct tuple_element> : tuple_element> + {}; + + template< class H, class... T > + struct tuple_element<0, tuple> { - typedef typename - boost::mpl::at_c< - typename - boost::function_types::parameter_types< Signature >, - n - >::type type; + using type = H; }; + + template< typename Signature > + struct result_type; + + template< typename R, typename... Args > + struct result_type< R(Args...) > + { + using type = R; + }; + + template< typename Signature > + struct function_arity; + + template< typename R, typename... Args > + struct function_arity< R(Args...) > + { + static constexpr size_t value = sizeof...(Args); + }; + + template< typename Signature > + struct parameter_types; + + template< typename R, typename... Args > + struct parameter_types< R(Args...) > + { + using type = tuple; + }; + + template< typename Signature, int n > + using parameter = tuple_element< n, typename parameter_types::type >; } } // mock diff --git a/include/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp index 03c016c..9df1ee2 100644 --- a/include/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -10,33 +10,47 @@ #define MOCK_SIGNATURE_HPP_INCLUDED #include "../config.hpp" -#include -#include -#include -#include -#include -#include -#define BOOST_TYPEOF_SILENT -#include +#include namespace mock { namespace detail { +#define MOCK_NOARG +#define MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ref) \ + template< typename R, typename... Args > \ + struct strip_function_qualifiers \ + { using type = R(Args...); }; \ + template< typename R, typename... Args > \ + struct strip_function_qualifiers \ + { using type = R(Args..., ...); }; + +#define MOCK_STRIP_FUNCTION_QUALIFIERS_REF(cv) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(cv,) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &&) + + template + struct strip_function_qualifiers; + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(MOCK_NOARG) + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(const) + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(volatile) + MOCK_STRIP_FUNCTION_QUALIFIERS_REF(const volatile) +#undef MOCK_NOARG +#undef MOCK_STRIP_FUNCTION_QUALIFIERS +#undef MOCK_STRIP_FUNCTION_QUALIFIERS_REF + template< typename M > - struct signature : - boost::function_types::function_type< - boost::mpl::joint_view< - boost::mpl::single_view< - typename - boost::function_types::result_type< M >::type - >, - typename boost::mpl::pop_front< - typename - boost::function_types::parameter_types< M > - >::type - > - > + struct signature; + + template< typename R, typename... Args> + struct signature< R(Args...) > + { + using type = R(Args...); + }; + + template< typename Sig, typename C> + struct signature< Sig(C::*) >: signature< typename strip_function_qualifiers::type > {}; template< typename T > @@ -55,9 +69,9 @@ namespace detail #define MOCK_SIGNATURE(M) \ mock::detail::signature< \ - BOOST_TYPEOF( \ - mock::detail::ambiguous_method_requires_to_specify_signature( \ - &base_type::M ) ) \ + std::remove_cv_t< std::remove_reference_t < decltype( \ + mock::detail::ambiguous_method_requires_to_specify_signature( &base_type::M ) \ + ) > > \ >::type #endif // MOCK_SIGNATURE_HPP_INCLUDED diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index af0cc12..49faacb 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -22,7 +22,6 @@ #include #include #include -#include #define MOCK_CLASS(T) \ struct T : mock::object @@ -79,7 +78,7 @@ #define MOCK_DECL_PARAMS(n, S, tpn) \ BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S, tpn)) #define MOCK_DECL(M, n, S, c, tpn) \ - tpn boost::function_types::result_type< \ + tpn mock::detail::result_type< \ MOCK_FUNCTION_TYPE((S), tpn) >::type M( \ MOCK_DECL_PARAMS(n, S, tpn) ) c @@ -91,9 +90,7 @@ #define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ MOCK_DECL(M, n, S, c, tpn) \ { \ - BOOST_MPL_ASSERT_RELATION( n, ==, \ - boost::function_types::function_arity< \ - MOCK_FUNCTION_TYPE((S), tpn) >::value ); \ + static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE((S), tpn) >::value, "Arity mismatch" ); \ return MOCK_ANONYMOUS_HELPER(t)( \ MOCK_FORWARD_PARAMS(n, S, tpn) ); \ } @@ -171,9 +168,7 @@ MOCK_FUNCTION_HELPER(S, t, s, tpn) \ s MOCK_DECL(F, n, S,,tpn) \ { \ - BOOST_MPL_ASSERT_RELATION( n, ==, \ - boost::function_types::function_arity< \ - MOCK_FUNCTION_TYPE((S), tpn) >::value ); \ + static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE((S), tpn) >::value, "Arity mismatch" ); \ return MOCK_HELPER(t)( MOCK_FORWARD_PARAMS(n, S, tpn) ); \ } diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 599d89f..69566da 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 88adf31..6a659c6 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -22,18 +22,17 @@ namespace { struct declared_but_not_defined; - BOOST_MPL_ASSERT_NOT(( - mock::detail::is_functor< declared_but_not_defined, int > )); + static_assert( !mock::detail::is_functor< declared_but_not_defined, int >::value, "Should not be a functor" ); template< typename T > void is_functor( T ) { - BOOST_MPL_ASSERT(( mock::detail::is_functor< T, int > )); + static_assert( mock::detail::is_functor< T, int >::value, "Should be functor"); } template< typename T > void is_not_functor( T ) { - BOOST_MPL_ASSERT_NOT(( mock::detail::is_functor< T, int > )); + static_assert( !mock::detail::is_functor< T, int >::value, "Should not be a functor" ); } void f0() {} @@ -48,22 +47,22 @@ BOOST_AUTO_TEST_CASE( data_is_not_functor ) BOOST_AUTO_TEST_CASE( function_is_functor ) { - is_functor( f0 ); + is_not_functor( f0 ); is_functor( f1 ); - is_functor( f2 ); + is_not_functor( f2 ); } BOOST_AUTO_TEST_CASE( function_pointer_is_functor ) { - is_functor( &f0 ); + is_not_functor( &f0 ); is_functor( &f1 ); - is_functor( &f2 ); + is_not_functor( &f2 ); } BOOST_AUTO_TEST_CASE( std_ptr_fun_is_functor ) { is_functor( std::ptr_fun( &f1 ) ); - is_functor( std::ptr_fun( &f2 ) ); + is_not_functor( std::ptr_fun( &f2 ) ); } BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) @@ -71,20 +70,6 @@ BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) is_functor( std::bind1st( std::ptr_fun( &f2 ), "" ) ); } -namespace -{ - struct unary_functor0 : public std::unary_function< void, void > - {}; - struct unary_functor1 : public std::unary_function< int, void > - {}; -} - -BOOST_AUTO_TEST_CASE( std_unary_functor_is_functor ) -{ - is_functor( unary_functor0() ); - is_functor( unary_functor1() ); -} - BOOST_AUTO_TEST_CASE( boost_bind_is_functor ) { is_functor( boost::bind( &f0 ) ); @@ -105,37 +90,7 @@ BOOST_AUTO_TEST_CASE( boost_phoenix_is_functor ) BOOST_AUTO_TEST_CASE( boost_function_is_functor ) { - is_functor( boost::function< void() >() ); -} - -namespace -{ - struct result_type_functor - { - typedef void result_type; - }; -} - -BOOST_AUTO_TEST_CASE( class_with_result_type_is_functor ) -{ - is_functor( result_type_functor() ); -} - -namespace -{ - struct sig_functor - { - template< typename Args > - struct sig - { - typedef void type; - }; - }; -} - -BOOST_AUTO_TEST_CASE( class_with_sig_is_functor ) -{ - is_functor( sig_functor() ); + is_functor( boost::function< void(int) >() ); } #ifdef MOCK_LAMBDAS From f678f4d91f8be524e035e8db8e9d29041db6d47c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 18:41:40 +0200 Subject: [PATCH 015/126] Assume nullptr existance --- doc/example/limitations_literal_zero.cpp | 2 -- include/turtle/config.hpp | 6 ---- include/turtle/constraints.hpp | 10 +++---- include/turtle/detail/addressof.hpp | 36 ------------------------ include/turtle/detail/formatter.hpp | 4 +-- include/turtle/log.hpp | 2 -- test/detail/test_function.cpp | 4 --- test/test_constraints.cpp | 4 --- test/test_log.cpp | 4 --- 9 files changed, 7 insertions(+), 65 deletions(-) delete mode 100644 include/turtle/detail/addressof.hpp diff --git a/doc/example/limitations_literal_zero.cpp b/doc/example/limitations_literal_zero.cpp index 463f4ea..895f4f5 100644 --- a/doc/example/limitations_literal_zero.cpp +++ b/doc/example/limitations_literal_zero.cpp @@ -35,9 +35,7 @@ BOOST_AUTO_TEST_CASE( literal_zero ) //[ limitations_literal_zero_solution_2 MOCK_EXPECT( m.method ).with( mock::negate ); //] -#ifdef MOCK_NULLPTR //[ limitations_literal_zero_solution_3 MOCK_EXPECT( m.method ).with( nullptr ); //] -#endif } diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 6f4104e..f1daeb0 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -40,12 +40,6 @@ # error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher #endif -#if !defined(BOOST_NO_CXX11_NULLPTR) && !defined(BOOST_NO_NULLPTR) -# ifndef MOCK_NO_NULLPTR -# define MOCK_NULLPTR -# endif -#endif - #if !defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) # ifndef MOCK_NO_VARIADIC_MACROS # define MOCK_VARIADIC_MACROS diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index 3d7af0c..d37e433 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -11,7 +11,6 @@ #include "config.hpp" #include "constraint.hpp" -#include "detail/addressof.hpp" #include "detail/move_helper.hpp" #include #include @@ -21,6 +20,7 @@ #else #include #endif +#include #include namespace mock @@ -161,12 +161,12 @@ namespace detail struct same { explicit same( const Expected& expected ) - : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) + : expected_( std::addressof( boost::unwrap_ref( expected ) ) ) {} template< typename Actual > bool operator()( const Actual& actual ) const { - return detail::addressof( actual ) == expected_; + return std::addressof( actual ) == expected_; } friend std::ostream& operator<<( std::ostream& os, const same& s ) { @@ -180,7 +180,7 @@ namespace detail struct retrieve { explicit retrieve( Expected& expected ) - : expected_( detail::addressof( boost::unwrap_ref( expected ) ) ) + : expected_( std::addressof( boost::unwrap_ref( expected ) ) ) {} template< typename Actual > bool operator()( const Actual& actual, @@ -217,7 +217,7 @@ namespace detail >::value >* = 0 ) const { - *expected_ = detail::addressof( actual ); + *expected_ = std::addressof( actual ); return true; } friend std::ostream& operator<<( std::ostream& s, const retrieve& r ) diff --git a/include/turtle/detail/addressof.hpp b/include/turtle/detail/addressof.hpp deleted file mode 100644 index 4e48a8d..0000000 --- a/include/turtle/detail/addressof.hpp +++ /dev/null @@ -1,36 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2013 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_ADDRESSOF_HPP_INCLUDED -#define MOCK_ADDRESSOF_HPP_INCLUDED - -#include "../config.hpp" -#include - -namespace mock -{ -namespace detail -{ - using boost::addressof; - -#ifdef MOCK_NULLPTR - - inline const std::nullptr_t* addressof( const std::nullptr_t& p ) - { - return &p; - } - inline std::nullptr_t* addressof( std::nullptr_t& p ) - { - return &p; - } - -#endif -} -} // mock - -#endif // MOCK_ADDRESSOF_HPP_INCLUDED diff --git a/include/turtle/detail/formatter.hpp b/include/turtle/detail/formatter.hpp index 18ccd73..a89204a 100644 --- a/include/turtle/detail/formatter.hpp +++ b/include/turtle/detail/formatter.hpp @@ -11,7 +11,7 @@ #include "../config.hpp" #include "../stream.hpp" -#include "addressof.hpp" +#include namespace mock { @@ -21,7 +21,7 @@ namespace detail struct formatter { explicit formatter( const T& t ) - : t_( detail::addressof( t ) ) + : t_( std::addressof( t ) ) {} void serialize( stream& s ) const { diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index b196ec0..e30ea55 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -173,12 +173,10 @@ namespace detail return s << '?'; } -#ifdef MOCK_NULLPTR inline stream& operator<<( stream& s, std::nullptr_t ) { return s << "nullptr"; } -#endif template< typename T > std::enable_if_t< diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 69566da..ad38a25 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -350,8 +350,6 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_failing_custom_constrain // CHECK_CALLS( 1 ); //} -#ifdef MOCK_NULLPTR - BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) { mock::detail::function< void( int* ) > f; @@ -360,8 +358,6 @@ BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constr CHECK_CALLS( 1 ); } -#endif - #ifdef MOCK_SMART_PTR BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixture ) diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 26087ea..1d89740 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -106,12 +106,10 @@ BOOST_AUTO_TEST_CASE( same_constraint ) BOOST_CHECK( ! c.c_( j ) ); BOOST_CHECK( c.c_( i ) ); } -#ifdef MOCK_NULLPTR { std::nullptr_t p; BOOST_CHECK( mock::same( p ).c_( p ) ); } -#endif } BOOST_AUTO_TEST_CASE( assign_constraint ) @@ -245,14 +243,12 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint ) BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); BOOST_CHECK_EQUAL( i, &j ); } -#ifdef MOCK_NULLPTR { std::nullptr_t* i = 0; std::nullptr_t j; BOOST_CHECK( mock::retrieve( i ).c_( j ) ); BOOST_CHECK_EQUAL( i, &j ); } -#endif #ifdef MOCK_SMART_PTR { std::unique_ptr< int > i; diff --git a/test/test_log.cpp b/test/test_log.cpp index 728eb20..59d5b4c 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -665,15 +665,11 @@ BOOST_AUTO_TEST_CASE( boost_lambda_functor_yields_question_mark_when_serialized #endif -#ifdef MOCK_NULLPTR - BOOST_AUTO_TEST_CASE( nullptr_is_serialized ) { BOOST_CHECK_EQUAL( "nullptr", to_string( nullptr ) ); } -#endif - BOOST_AUTO_TEST_CASE( mock_boost_optional_yields_its_value_when_serialized ) { BOOST_CHECK_EQUAL( "7", to_string( boost::optional< int >( 7 ) ) ); From 3b3700fda6326e234b4f044d19d34d43319352fb Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 18:44:36 +0200 Subject: [PATCH 016/126] Assume support for variadic macros --- include/turtle/config.hpp | 6 ------ include/turtle/constraint.hpp | 4 ---- include/turtle/mock.hpp | 33 --------------------------------- test/test_constraint.cpp | 4 ---- test/test_mock.cpp | 30 ------------------------------ 5 files changed, 77 deletions(-) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index f1daeb0..744883f 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -40,12 +40,6 @@ # error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher #endif -#if !defined(BOOST_NO_CXX11_VARIADIC_MACROS) && !defined(BOOST_NO_VARIADIC_MACROS) -# ifndef MOCK_NO_VARIADIC_MACROS -# define MOCK_VARIADIC_MACROS -# endif -#endif - #if !defined(BOOST_NO_CXX11_SMART_PTR) && !defined(BOOST_NO_SMART_PTR) # ifndef MOCK_NO_SMART_PTR # define MOCK_SMART_PTR diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index 2e0d1e0..ff744dc 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -220,8 +220,6 @@ namespace detail MOCK_NARY_CONSTRAINT, \ MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) -#ifdef MOCK_VARIADIC_MACROS - #ifdef BOOST_MSVC # define MOCK_VARIADIC_SIZE(...) \ BOOST_PP_CAT(MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ @@ -253,6 +251,4 @@ namespace detail MOCK_CONSTRAINT_AUX( \ Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) -#endif // MOCK_VARIADIC_MACROS - #endif // MOCK_CONSTRAINT_HPP_INCLUDED diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 49faacb..83d8be5 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -29,8 +29,6 @@ #define MOCK_FUNCTION_TYPE(S, tpn) \ std::remove_pointer_t< tpn BOOST_IDENTITY_TYPE(S) > -#ifdef MOCK_VARIADIC_MACROS - #define MOCK_BASE_CLASS(T, ...) \ struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > @@ -40,19 +38,6 @@ mock::detail::functor< \ MOCK_FUNCTION_TYPE((__VA_ARGS__), typename) > f, f##_mock -#else // MOCK_VARIADIC_MACROS - -#define MOCK_BASE_CLASS(T, I) \ - struct T : I, mock::object, mock::detail::base< I > - -#define MOCK_FUNCTOR(f, S) \ - mock::detail::functor< MOCK_FUNCTION_TYPE((S),) > f, f##_mock -#define MOCK_FUNCTOR_TPL(f, S) \ - mock::detail::functor< \ - MOCK_FUNCTION_TYPE((S), typename) > f, f##_mock - -#endif // MOCK_VARIADIC_MACROS - #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) #define MOCK_ANONYMOUS_HELPER(t) \ @@ -172,8 +157,6 @@ return MOCK_HELPER(t)( MOCK_FORWARD_PARAMS(n, S, tpn) ); \ } -#ifdef MOCK_VARIADIC_MACROS - #define MOCK_VARIADIC_ELEM_0(e0, ...) e0 #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 #define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 @@ -225,22 +208,6 @@ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ static, typename) -#else // MOCK_VARIADIC_MACROS - -#define MOCK_METHOD(M, n) \ - MOCK_METHOD_EXT(M, n, MOCK_SIGNATURE(M), M) - -#define MOCK_FUNCTION(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t, inline,) - -#define MOCK_STATIC_METHOD(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t, static,) - -#define MOCK_STATIC_METHOD_TPL(F, n, S, t) \ - MOCK_FUNCTION_AUX(F, n, S, t, static, typename) - -#endif // MOCK_VARIADIC_MACROS - #define MOCK_EXPECT(t) MOCK_HELPER(t).expect( __FILE__, __LINE__ ) #define MOCK_RESET(t) MOCK_HELPER(t).reset( __FILE__, __LINE__ ) #define MOCK_VERIFY(t) MOCK_HELPER(t).verify( __FILE__, __LINE__ ) diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index c690d07..3aebf11 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -9,8 +9,6 @@ #include #include -#ifdef MOCK_VARIADIC_MACROS - namespace { MOCK_CONSTRAINT( constraint_0, actual == 0 ) @@ -25,8 +23,6 @@ BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_ma BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); } -#endif // MOCK_VARIADIC_MACROS - namespace { MOCK_CONSTRAINT_EXT( constraint_0_ext, 0,, actual == 0 ) diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 2e4f41c..d73a932 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -356,8 +356,6 @@ namespace MOCK_FUNCTION( fun0, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())), fun0 ) } -#ifdef MOCK_VARIADIC_MACROS - namespace { struct base @@ -409,32 +407,6 @@ namespace MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); } -#else // MOCK_VARIADIC_MACROS - -namespace -{ - struct base - { - virtual ~base() - {} - - virtual void m1() = 0; - }; - - MOCK_BASE_CLASS( derived, base ) - { - MOCK_METHOD( m1, 0 ) - }; - - template< typename T > - MOCK_BASE_CLASS( derived_tpl, base ) - { - MOCK_METHOD_EXT( m1, 0, void(), m1 ) - }; -} - -#endif // MOCK_VARIADIC_MACROS - #ifdef BOOST_MSVC # define MOCK_STDCALL __stdcall #else @@ -458,9 +430,7 @@ namespace stdcall MOCK_CONVERSION_OPERATOR( MOCK_STDCALL operator, int, to_int ) MOCK_METHOD_EXT( MOCK_STDCALL m1, 0, void(), m1 ) MOCK_METHOD_EXT( MOCK_STDCALL m2, 0, void(), m2 ) -#ifdef MOCK_VARIADIC_MACROS MOCK_METHOD( MOCK_STDCALL m3, 0, void(), m3 ) -#endif MOCK_STATIC_METHOD( MOCK_STDCALL m4, 0, void(), m4 ) }; From f154a1a22acad6825c1bce1a4b3da00c7c6051ec Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 18:46:41 +0200 Subject: [PATCH 017/126] Assume existance of smart pointers --- include/turtle/config.hpp | 6 ------ include/turtle/detail/function.hpp | 1 - include/turtle/log.hpp | 2 -- test/detail/test_function.cpp | 8 -------- test/test_constraints.cpp | 8 -------- test/test_integration.cpp | 4 ---- test/test_log.cpp | 4 ---- 7 files changed, 33 deletions(-) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 744883f..bc8d096 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -40,12 +40,6 @@ # error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher #endif -#if !defined(BOOST_NO_CXX11_SMART_PTR) && !defined(BOOST_NO_SMART_PTR) -# ifndef MOCK_NO_SMART_PTR -# define MOCK_SMART_PTR -# endif -#endif - #if !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) # ifndef MOCK_NO_HDR_FUNCTIONAL # define MOCK_HDR_FUNCTIONAL diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index 24381da..693a506 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index e30ea55..691d5ef 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -144,7 +144,6 @@ namespace detail return s << boost::none; } -#ifdef MOCK_SMART_PTR template< typename T > stream& operator<<( stream& s, const std::shared_ptr< T >& t ) { @@ -160,7 +159,6 @@ namespace detail { return s << mock::format( p.get() ); } -#endif template< typename T > stream& operator<<( stream& s, const boost::lambda::lambda_functor< T >& ) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index ad38a25..1a322d7 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -358,8 +358,6 @@ BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constr CHECK_CALLS( 1 ); } -#ifdef MOCK_SMART_PTR - BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixture ) { mock::detail::function< void( std::unique_ptr< int > ) > f; @@ -369,8 +367,6 @@ BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixtur CHECK_CALLS( 1 ); } -#endif // MOCK_SMART_PTR - // result handling BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_no_return_set_calls_missing_action, mock_error_fixture ) @@ -593,8 +589,6 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_rvalue, mock_er CHECK_CALLS( 1 ); } -#ifdef MOCK_SMART_PTR - BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture ) { mock::detail::function< std::unique_ptr< int >() > f; @@ -614,8 +608,6 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_rval } } -#endif // MOCK_SMART_PTR - BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture ) { { diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 1d89740..008b117 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -52,7 +52,6 @@ BOOST_AUTO_TEST_CASE( equal_constraint ) s = "string"; BOOST_CHECK( c.c_( "string" ) ); } -#ifdef MOCK_SMART_PTR { std::unique_ptr< int > i; std::unique_ptr< int > j( new int( 3 ) ); @@ -61,7 +60,6 @@ BOOST_AUTO_TEST_CASE( equal_constraint ) BOOST_CHECK( mock::equal( i ).c_( i ) ); BOOST_CHECK( mock::equal( j ).c_( j ) ); } -#endif } BOOST_AUTO_TEST_CASE( equal_constraint_deref ) @@ -75,14 +73,12 @@ BOOST_AUTO_TEST_CASE( equal_constraint_deref ) int* i = 0; BOOST_CHECK( ! mock::equal( 3 ).c_( i ) ); } -#ifdef MOCK_SMART_PTR { std::unique_ptr< int > j( new int( 3 ) ); BOOST_CHECK( mock::equal( 3 ).c_( j ) ); std::unique_ptr< int > i; BOOST_CHECK( ! mock::equal( 3 ).c_( i ) ); } -#endif // MOCK_SMART_PTR } BOOST_AUTO_TEST_CASE( same_constraint ) @@ -249,7 +245,6 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint ) BOOST_CHECK( mock::retrieve( i ).c_( j ) ); BOOST_CHECK_EQUAL( i, &j ); } -#ifdef MOCK_SMART_PTR { std::unique_ptr< int > i; std::unique_ptr< int > j( new int( 3 ) ); @@ -258,7 +253,6 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint ) BOOST_CHECK_EQUAL( 3, *i ); BOOST_CHECK( !j ); } -#endif } namespace @@ -291,12 +285,10 @@ BOOST_AUTO_TEST_CASE( affirm_constraint ) BOOST_CHECK( mock::affirm.c_( &j ) ); } { -#ifdef MOCK_SMART_PTR std::unique_ptr< int > i; std::unique_ptr< int > j( new int( 3 ) ); BOOST_CHECK( ! mock::affirm.c_( i ) ); BOOST_CHECK( mock::affirm.c_( j ) ); -#endif } } diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 8cc3557..587984e 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -705,8 +705,6 @@ BOOST_FIXTURE_TEST_CASE( mock_method_accepts_polymorphic_multi_constraint, mock_ CHECK_CALLS( 1 ); } -#ifdef MOCK_SMART_PTR - BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_action, mock_error_fixture ) { MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); @@ -775,5 +773,3 @@ struct my_unique_ptr_class MOCK_METHOD_EXT( m, 1, void( std::unique_ptr< int > ), m ) MOCK_STATIC_METHOD( ms, 1, void( std::unique_ptr< int > ), ms ) }; - -#endif diff --git a/test/test_log.cpp b/test/test_log.cpp index 59d5b4c..b624734 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -409,8 +409,6 @@ BOOST_AUTO_TEST_CASE( boost_weak_ptr_are_serialized ) BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >( new int( 42 ) ) ) ) ); } -#ifdef MOCK_SMART_PTR - BOOST_AUTO_TEST_CASE( std_shared_ptr_are_serialized ) { BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >() ) ); @@ -429,8 +427,6 @@ BOOST_AUTO_TEST_CASE( std_unique_ptr_are_serialized ) BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >( new int( 42 ) ) ) ); } -#endif - BOOST_AUTO_TEST_CASE( std_deques_are_serialized ) { std::deque< int > d; From 9faab7749cd019f4f9a728c9195f1ac5b27d61b9 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 18:51:40 +0200 Subject: [PATCH 018/126] Assume existance of --- doc/example/patterns_invoke_functor.cpp | 4 ++-- include/turtle/config.hpp | 6 ------ include/turtle/detail/action.hpp | 7 +------ test/detail/test_function.cpp | 8 ++++---- test/detail/test_is_functor.cpp | 6 ++++++ test/test_integration.cpp | 5 +++-- 6 files changed, 16 insertions(+), 20 deletions(-) diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index f4d281d..d0c9f81 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -7,14 +7,14 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ invoke_functor_problem -#include +#include namespace { class base_class { public: - virtual void method( const boost::function< void( int ) >& functor ) = 0; + virtual void method( const std::function< void( int ) >& functor ) = 0; }; void function( base_class& ); // the function will call 'method' with a functor to be applied diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index bc8d096..dfce9fa 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -40,12 +40,6 @@ # error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher #endif -#if !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) -# ifndef MOCK_NO_HDR_FUNCTIONAL -# define MOCK_HDR_FUNCTIONAL -# endif -#endif - #if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) # ifndef MOCK_NO_HDR_MUTEX # define MOCK_HDR_MUTEX diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 8cdfe72..74bf0b2 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -12,9 +12,9 @@ #include "../config.hpp" #include #include -#include #include #include +#include #include namespace mock @@ -25,13 +25,8 @@ namespace detail class action_base { private: -#ifdef MOCK_HDR_FUNCTIONAL typedef std::function< Signature > functor_type; typedef std::function< Result() > action_type; -#else - typedef boost::function< Signature > functor_type; - typedef boost::function< Result() > action_type; -#endif public: const functor_type& functor() const diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 1a322d7..661482f 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -13,15 +13,15 @@ #include #include #include -#include #include +#include #include // static namespace { - boost::function< void() > static_f; + std::function< void() > static_f; static_assert( std::is_same< void, boost::result_of< mock::detail::function< void() >() >::type >::value, "!"); static_assert( std::is_same< int, boost::result_of< mock::detail::function< int() >() >::type >::value, "!"); @@ -34,13 +34,13 @@ namespace BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture ) { mock::detail::function< void() > f; - boost::function< void() > functor = f; + std::function< void() > functor = f; } BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_boost_bind_and_boost_ref, mock_error_fixture ) { mock::detail::function< void() > f; - boost::function< void() > functor = boost::bind( boost::ref( f ) ); + std::function< void() > functor = boost::bind( boost::ref( f ) ); } // invocations diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 6a659c6..c0f1c22 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -18,6 +18,7 @@ #endif #include #include +#include namespace { @@ -93,6 +94,11 @@ BOOST_AUTO_TEST_CASE( boost_function_is_functor ) is_functor( boost::function< void(int) >() ); } +BOOST_AUTO_TEST_CASE( std_function_is_functor ) +{ + is_functor( std::function< void(int) >() ); +} + #ifdef MOCK_LAMBDAS BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 587984e..15e4a30 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace { @@ -153,7 +154,7 @@ namespace BOOST_FIXTURE_TEST_CASE( mock_functor_in_namespace_is_supported, mock_error_fixture ) { - boost::function< int( float, const std::string& ) > func; + std::function< int( float, const std::string& ) > func; MOCK_EXPECT( gf ).once().with( 3, "op" ).returns( 42 ); func = gf; BOOST_CHECK_EQUAL( 42, func( 3, "op" ) ); @@ -162,7 +163,7 @@ BOOST_FIXTURE_TEST_CASE( mock_functor_in_namespace_is_supported, mock_error_fixt BOOST_FIXTURE_TEST_CASE( mock_functor_in_function_is_supported, mock_error_fixture ) { - boost::function< int( float, const std::string& ) > func; + std::function< int( float, const std::string& ) > func; { MOCK_FUNCTOR( f, int( float, const std::string& ) ); MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); From 2f72d5639e4c6856749e7595693a613b2885f18e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 18:58:49 +0200 Subject: [PATCH 019/126] Assume existance of lambdas --- doc/example/reference.cpp | 8 -------- include/turtle/config.hpp | 6 ------ test/detail/test_is_functor.cpp | 4 ---- 3 files changed, 18 deletions(-) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index bb2c4d6..e2e3574 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -623,8 +623,6 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_phoenix //] } -#ifdef MOCK_LAMBDAS - namespace constraints_example_7 { //[ constraints_example_7 @@ -641,8 +639,6 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_constraint_with_cxx11_lambda ) //] } -#endif - namespace constraints_example_8 { //[ constraints_example_8 @@ -711,8 +707,6 @@ BOOST_AUTO_TEST_CASE( demonstrates_enforcing_several_expectation_orders ) //] } -#ifdef MOCK_LAMBDAS - namespace action_example_1 { //[ action_example_1 @@ -739,8 +733,6 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) //] } -#endif - namespace action_example_2 { //[ action_example_2 diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index dfce9fa..8ca1464 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -46,12 +46,6 @@ # endif #endif -#if !defined(BOOST_NO_CXX11_LAMBDAS) && !defined(BOOST_NO_LAMBDAS) -# ifndef MOCK_NO_LAMBDAS -# define MOCK_LAMBDAS -# endif -#endif - #if !defined(BOOST_NO_AUTO_PTR) # ifndef MOCK_NO_AUTO_PTR # define MOCK_AUTO_PTR diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index c0f1c22..f45a1e4 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -99,8 +99,6 @@ BOOST_AUTO_TEST_CASE( std_function_is_functor ) is_functor( std::function< void(int) >() ); } -#ifdef MOCK_LAMBDAS - BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) { is_not_functor( []() {} ); @@ -108,5 +106,3 @@ BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) is_not_functor( []( const std::string&, int ) {} ); is_not_functor( []( int, const std::string& ) {} ); } - -#endif From 35fa6e63e6460c5853bc8ba7177f997e77d20a32 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 19:09:54 +0200 Subject: [PATCH 020/126] Use std smart pointers in code --- include/turtle/detail/action.hpp | 4 ++-- .../turtle/detail/expectation_template.hpp | 16 +++++++------- include/turtle/detail/function.hpp | 1 - .../turtle/detail/function_impl_template.hpp | 22 +++++++++---------- include/turtle/detail/function_template.hpp | 4 ++-- include/turtle/detail/mutex.hpp | 8 +++---- include/turtle/detail/object_impl.hpp | 10 ++++----- include/turtle/detail/sequence_impl.hpp | 6 ++--- include/turtle/detail/type_name.hpp | 4 ++-- include/turtle/object.hpp | 6 ++--- include/turtle/sequence.hpp | 5 +++-- test/detail/test_function.cpp | 12 +++++----- test/test_log.cpp | 2 +- test/test_mock.cpp | 4 ++-- test/test_object.cpp | 4 ++-- 15 files changed, 53 insertions(+), 55 deletions(-) diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 74bf0b2..1984dac 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -11,10 +11,10 @@ #include "../config.hpp" #include -#include #include #include #include +#include #include namespace mock @@ -154,7 +154,7 @@ namespace detail return static_cast< value_imp< Result >& >( *v_ ).t_; } - boost::shared_ptr< value > v_; + std::shared_ptr< value > v_; }; template< typename Signature > diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index 39e8938..ef8a562 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -133,9 +133,9 @@ namespace detail { public: expectation() - : invocation_( boost::make_shared< unlimited >() ) + : invocation_( std::make_shared< unlimited >() ) , matcher_( - boost::make_shared< + std::make_shared< default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > @@ -144,9 +144,9 @@ namespace detail , line_( 0 ) {} expectation( const char* file, int line ) - : invocation_( boost::make_shared< unlimited >() ) + : invocation_( std::make_shared< unlimited >() ) , matcher_( - boost::make_shared< + std::make_shared< default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > @@ -167,7 +167,7 @@ namespace detail (*it)->remove( this ); } - void invoke( const boost::shared_ptr< invocation >& i ) + void invoke( const std::shared_ptr< invocation >& i ) { invocation_ = i; } @@ -253,12 +253,12 @@ namespace detail private: typedef std::vector< - boost::shared_ptr< sequence_impl > + std::shared_ptr< sequence_impl > > sequences_type; typedef sequences_type::const_iterator sequences_cit; - boost::shared_ptr< invocation > invocation_; - boost::shared_ptr< + std::shared_ptr< invocation > invocation_; + std::shared_ptr< matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index 693a506..6443d16 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index b67c124..2cf73cb 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -36,7 +36,7 @@ namespace detail template< typename R BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > class function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public verifiable, public boost::enable_shared_from_this< + : public verifiable, public std::enable_shared_from_this< function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) )> > { public: @@ -47,7 +47,7 @@ namespace detail : context_( 0 ) , valid_( true ) , exceptions_( exceptions() ) - , mutex_( boost::make_shared< mutex >() ) + , mutex_( std::make_shared< mutex >() ) {} virtual ~function_impl() { @@ -85,7 +85,7 @@ namespace detail { lock _( mutex_ ); valid_ = true; - boost::shared_ptr< function_impl > guard = + std::shared_ptr< function_impl > guard = this->shared_from_this(); expectations_.clear(); } @@ -101,7 +101,7 @@ namespace detail typedef wrapper_base< R, expectation_type > base_type; public: - wrapper( const boost::shared_ptr< mutex >& m, expectation_type& e ) + wrapper( const std::shared_ptr< mutex >& m, expectation_type& e ) : base_type( e ) , lock_( m ) {} @@ -119,36 +119,36 @@ namespace detail } wrapper& once() { - this->e_->invoke( boost::make_shared< detail::once >() ); + this->e_->invoke( std::make_shared< detail::once >() ); return *this; } wrapper& never() { - this->e_->invoke( boost::make_shared< detail::never >() ); + this->e_->invoke( std::make_shared< detail::never >() ); return *this; } wrapper& exactly( std::size_t count ) { this->e_->invoke( - boost::make_shared< detail::exactly >( count ) ); + std::make_shared< detail::exactly >( count ) ); return *this; } wrapper& at_least( std::size_t min ) { this->e_->invoke( - boost::make_shared< detail::at_least >( min ) ); + std::make_shared< detail::at_least >( min ) ); return *this; } wrapper& at_most( std::size_t max ) { this->e_->invoke( - boost::make_shared< detail::at_most >( max ) ); + std::make_shared< detail::at_most >( max ) ); return *this; } wrapper& between( std::size_t min, std::size_t max ) { this->e_->invoke( - boost::make_shared< detail::between >( min, max ) ); + std::make_shared< detail::between >( min, max ) ); return *this; } @@ -320,7 +320,7 @@ namespace detail context* context_; mutable bool valid_; const int exceptions_; - const boost::shared_ptr< mutex > mutex_; + const std::shared_ptr< mutex > mutex_; }; } } // mock diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp index 6d8a01d..10183ec 100644 --- a/include/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -39,7 +39,7 @@ namespace detail public: function() - : impl_( boost::make_shared< impl_type >() ) + : impl_( std::make_shared< impl_type >() ) {} bool verify() const @@ -98,7 +98,7 @@ namespace detail } private: - boost::shared_ptr< impl_type > impl_; + std::shared_ptr< impl_type > impl_; }; } } // mock diff --git a/include/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp index 3be9f02..d9f0563 100644 --- a/include/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -12,7 +12,7 @@ #include "../config.hpp" #include "singleton.hpp" #include -#include +#include #ifdef MOCK_THREAD_SAFE @@ -38,7 +38,7 @@ namespace detail struct lock { public: - lock( const boost::shared_ptr< mutex >& m ) + lock( const std::shared_ptr< mutex >& m ) : m_( m ) { m_->lock(); @@ -64,7 +64,7 @@ namespace detail } private: - boost::shared_ptr< mutex > m_; + std::shared_ptr< mutex > m_; }; } } // mock @@ -94,7 +94,7 @@ namespace detail class lock { public: - lock( const boost::shared_ptr< mutex >& ) + lock( const std::shared_ptr< mutex >& ) {} ~lock() {} diff --git a/include/turtle/detail/object_impl.hpp b/include/turtle/detail/object_impl.hpp index 6aa215f..c411ef6 100644 --- a/include/turtle/detail/object_impl.hpp +++ b/include/turtle/detail/object_impl.hpp @@ -17,8 +17,6 @@ #include "child.hpp" #include "mutex.hpp" #include -#include -#include #include namespace mock @@ -26,11 +24,11 @@ namespace mock namespace detail { class object_impl : public context, public verifiable, - public boost::enable_shared_from_this< object_impl > + public std::enable_shared_from_this< object_impl > { public: object_impl() - : mutex_( boost::make_shared< mutex >() ) + : mutex_( std::make_shared< mutex >() ) {} virtual void add( const void* /*p*/, verifiable& v, @@ -75,7 +73,7 @@ namespace detail virtual void reset() { lock _( mutex_ ); - boost::shared_ptr< object_impl > guard = shared_from_this(); + std::shared_ptr< object_impl > guard = shared_from_this(); group_.reset(); } @@ -86,7 +84,7 @@ namespace detail group group_; parent parent_; children_t children_; - const boost::shared_ptr< mutex > mutex_; + const std::shared_ptr< mutex > mutex_; }; } } // mock diff --git a/include/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp index c7d3ce6..37db2b6 100644 --- a/include/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -12,8 +12,8 @@ #include "../config.hpp" #include "mutex.hpp" #include -#include #include +#include #include namespace mock @@ -24,7 +24,7 @@ namespace detail { public: sequence_impl() - : mutex_( boost::make_shared< mutex >() ) + : mutex_( std::make_shared< mutex >() ) {} void add( void* e ) @@ -59,7 +59,7 @@ namespace detail typedef std::vector< void* > elements_type; elements_type elements_; - const boost::shared_ptr< mutex > mutex_; + const std::shared_ptr< mutex > mutex_; }; } } // mock diff --git a/include/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp index 8264601..e3b4df9 100644 --- a/include/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -24,8 +24,8 @@ # define MOCK_TYPEID( t ) BOOST_SP_TYPEID(t) # define MOCK_TYPEINFO boost::detail::sp_typeinfo #endif -#include #include +#include #include #include #ifdef __GNUC__ @@ -57,7 +57,7 @@ namespace detail const char* name = info.name(); #ifdef __GNUC__ int status = 0; - boost::shared_ptr< char > demangled( + std::shared_ptr< char > demangled( abi::__cxa_demangle( name, 0, 0, &status ), &std::free ); if( ! status && demangled ) diff --git a/include/turtle/object.hpp b/include/turtle/object.hpp index 9f473cd..d9f6a47 100644 --- a/include/turtle/object.hpp +++ b/include/turtle/object.hpp @@ -14,8 +14,8 @@ #include "detail/type_name.hpp" #include "detail/object_impl.hpp" #include -#include #include +#include #include namespace mock @@ -45,13 +45,13 @@ namespace detail { public: object() - : impl_( boost::make_shared< detail::object_impl >() ) + : impl_( std::make_shared< detail::object_impl >() ) {} protected: ~object() {} public: - boost::shared_ptr< detail::object_impl > impl_; + std::shared_ptr< detail::object_impl > impl_; }; namespace detail diff --git a/include/turtle/sequence.hpp b/include/turtle/sequence.hpp index 28a2ee9..377e920 100644 --- a/include/turtle/sequence.hpp +++ b/include/turtle/sequence.hpp @@ -11,6 +11,7 @@ #include "config.hpp" #include "detail/sequence_impl.hpp" +#include namespace mock { @@ -18,10 +19,10 @@ namespace mock { public: sequence() - : impl_( boost::make_shared< detail::sequence_impl >() ) + : impl_( std::make_shared< detail::sequence_impl >() ) {} - boost::shared_ptr< detail::sequence_impl > impl_; + std::shared_ptr< detail::sequence_impl > impl_; }; } // mock diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 661482f..bf862f7 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -12,9 +12,9 @@ #include #include #include -#include #include #include +#include #include // static @@ -611,19 +611,19 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_rval BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture ) { { - mock::detail::function< boost::shared_ptr< base >() > f; + mock::detail::function< std::shared_ptr< base >() > f; f.expect().returns( new derived ); BOOST_CHECK_NO_THROW( f() ); CHECK_CALLS( 1 ); } { - mock::detail::function< const boost::shared_ptr< base >&() > f; + mock::detail::function< const std::shared_ptr< base >&() > f; f.expect().returns( new derived ); BOOST_CHECK_NO_THROW( f() ); CHECK_CALLS( 1 ); } { - mock::detail::function< boost::shared_ptr< base >&() > f; + mock::detail::function< std::shared_ptr< base >&() > f; f.expect().returns( new derived ); BOOST_CHECK_NO_THROW( f() ); CHECK_CALLS( 1 ); @@ -844,7 +844,7 @@ BOOST_FIXTURE_TEST_CASE( expectation_can_be_serialized_to_be_human_readable, moc BOOST_FIXTURE_TEST_CASE( expectation_with_remaining_untriggered_matches_upon_destruction_calls_untriggered_expectation, mock_error_fixture ) { - boost::scoped_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); + auto f = std::make_unique>(); f->expect().once(); CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); } @@ -864,7 +864,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_unexpected_call_call_disables_the_automatic_ BOOST_FIXTURE_TEST_CASE( adding_an_expectation_reactivates_the_verification_upon_destruction, mock_error_fixture ) { - boost::scoped_ptr< mock::detail::function< void() > > f( new mock::detail::function< void() > ); + auto f = std::make_unique>(); CHECK_ERROR( (*f)(), "unexpected call", 0, "?()" ); f->expect().once(); CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); diff --git a/test/test_log.cpp b/test/test_log.cpp index b624734..9fad50b 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -30,6 +29,7 @@ #include #include #include +#include #include namespace diff --git a/test/test_mock.cpp b/test/test_mock.cpp index d73a932..66ae929 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -231,7 +231,7 @@ BOOST_FIXTURE_TEST_CASE( mock_object_const_auto_pointer_is_named, mock_error_fix BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture ) { - boost::shared_ptr< my_mock > m( new my_mock ); + std::shared_ptr< my_mock > m( new my_mock ); BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); @@ -240,7 +240,7 @@ BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture BOOST_FIXTURE_TEST_CASE( mock_object_const_shared_pointer_is_named, mock_error_fixture ) { - const boost::shared_ptr< my_mock > m( new my_mock ); + const std::shared_ptr< my_mock > m( new my_mock ); BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); diff --git a/test/test_object.cpp b/test/test_object.cpp index 84e1094..a2c45de 100644 --- a/test/test_object.cpp +++ b/test/test_object.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include namespace { @@ -90,7 +90,7 @@ BOOST_FIXTURE_TEST_CASE( an_object_is_assignable_by_sharing_its_state, mock_erro BOOST_FIXTURE_TEST_CASE( an_object_is_copiable_by_sharing_its_state, mock_error_fixture ) { - boost::scoped_ptr< object > o2( new object ); + auto o2 = std::make_unique(); const object o1( *o2 ); mock::detail::function< void() > e; mock::detail::configure( *o2, e, "instance", MOCK_TYPE_NAME(*o2), "name" ); From 353849e9ad88c0bfa92b4caaadf09ff83652c5ec Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 19:39:48 +0200 Subject: [PATCH 021/126] Use default/delete for ctor/dtor --- ...limitations_template_base_class_method.cpp | 3 +- doc/example/limitations_throw_specifier.cpp | 3 +- doc/example/reference.cpp | 15 +++----- include/turtle/constraint.hpp | 3 +- include/turtle/detail/action.hpp | 12 +++--- include/turtle/detail/context.hpp | 10 +++-- include/turtle/detail/function.hpp | 1 - include/turtle/detail/invocation.hpp | 10 +++-- .../turtle/detail/matcher_base_template.hpp | 6 ++- include/turtle/detail/mutex.hpp | 22 ++++++----- include/turtle/detail/parent.hpp | 3 +- include/turtle/detail/sequence_impl.hpp | 3 +- include/turtle/detail/singleton.hpp | 2 +- include/turtle/detail/verifiable.hpp | 9 +++-- include/turtle/object.hpp | 3 +- include/turtle/stream.hpp | 14 ++++--- ...classes_30_methods_30_args_30_max_args.cpp | 2 +- test/bench_30_classes_30_methods_9_args.cpp | 2 +- ..._classes_30_methods_9_args_10_max_args.cpp | 2 +- ..._classes_30_methods_9_args_20_max_args.cpp | 2 +- ..._classes_30_methods_9_args_30_max_args.cpp | 2 +- test/detail/test_function.cpp | 11 ++++-- test/fail_ambiguous_mock_method.cpp | 2 +- ...sting_base_class_method_in_mock_method.cpp | 2 +- ...of_arguments_greater_than_max_constant.cpp | 2 +- ...fail_too_many_arguments_in_mock_method.cpp | 2 +- test/test_integration.cpp | 38 +++++++++++-------- test/test_mock.cpp | 6 +-- 28 files changed, 100 insertions(+), 92 deletions(-) diff --git a/doc/example/limitations_template_base_class_method.cpp b/doc/example/limitations_template_base_class_method.cpp index 5b5461b..b847f68 100644 --- a/doc/example/limitations_template_base_class_method.cpp +++ b/doc/example/limitations_template_base_class_method.cpp @@ -17,8 +17,7 @@ namespace class base { public: - virtual ~base() - {} + virtual ~base() = default; virtual void method() = 0; }; diff --git a/doc/example/limitations_throw_specifier.cpp b/doc/example/limitations_throw_specifier.cpp index 01e70fe..77b44c8 100644 --- a/doc/example/limitations_throw_specifier.cpp +++ b/doc/example/limitations_throw_specifier.cpp @@ -15,8 +15,7 @@ namespace //[ limitations_throw_specifier_problem struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method() throw (); }; diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index e2e3574..d599a59 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -121,8 +121,7 @@ namespace member_function_example_1 //[ member_function_example_1 struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method( int ) = 0; }; @@ -138,8 +137,7 @@ namespace member_function_example_2 //[ member_function_example_2 struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method( int, const std::string& ) = 0; virtual void method( float ) = 0; }; @@ -157,8 +155,7 @@ namespace member_function_example_3 //[ member_function_example_3 struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method( float ) = 0; virtual void method( float ) const = 0; }; @@ -175,8 +172,7 @@ namespace member_function_example_4 //[ member_function_example_4 struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method( float ) = 0; virtual void method( float ) const = 0; }; @@ -194,8 +190,7 @@ namespace member_function_example_5 //[ member_function_example_5 struct base_class { - virtual ~base_class() - {} + virtual ~base_class() = default; virtual void method( float ) = 0; }; diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index ff744dc..dd30eab 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -26,8 +26,7 @@ namespace mock template< typename Constraint > struct constraint { - constraint() - {} + constraint() {} constraint( const Constraint& c ) : c_( c ) {} diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 1984dac..a959c31 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -10,7 +10,6 @@ #define MOCK_ACTION_HPP_INCLUDED #include "../config.hpp" -#include #include #include #include @@ -112,10 +111,12 @@ namespace detail { return std::move( t ); } - struct value : boost::noncopyable + struct value { - virtual ~value() - {} + value() = default; + value(const value&) = delete; + value& operator=(const value&) = delete; + virtual ~value() = default; }; template< typename T > struct value_imp : value @@ -177,8 +178,7 @@ namespace detail : public action_base< std::auto_ptr< Result >, Signature > { public: - action() - {} + action() = default; action( const action& rhs ) : v_( rhs.v_.release() ) { diff --git a/include/turtle/detail/context.hpp b/include/turtle/detail/context.hpp index 9b275a3..3e46813 100644 --- a/include/turtle/detail/context.hpp +++ b/include/turtle/detail/context.hpp @@ -11,7 +11,6 @@ #include "../config.hpp" #include "type_name.hpp" -#include #include #include #include @@ -22,11 +21,14 @@ namespace detail { class verifiable; - class context : boost::noncopyable + class context { public: - context() {} - virtual ~context() {} + context() = default; + context(const context&) = delete; + context& operator=(const context&) = delete; + + virtual ~context() = default; virtual void add( const void* p, verifiable& v, boost::unit_test::const_string instance, diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index 6443d16..e723a42 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include diff --git a/include/turtle/detail/invocation.hpp b/include/turtle/detail/invocation.hpp index fd1c0f6..cf37dff 100644 --- a/include/turtle/detail/invocation.hpp +++ b/include/turtle/detail/invocation.hpp @@ -10,7 +10,6 @@ #define MOCK_INVOCATION_HPP_INCLUDED #include "../config.hpp" -#include #include #include #include @@ -19,11 +18,14 @@ namespace mock { namespace detail { - class invocation : private boost::noncopyable + class invocation { public: - invocation() {} - virtual ~invocation() {} + invocation() = default; + invocation(const invocation&) = delete; + invocation& operator=(const invocation&) = delete; + + virtual ~invocation() = default; virtual bool invoke() = 0; virtual bool verify() const = 0; diff --git a/include/turtle/detail/matcher_base_template.hpp b/include/turtle/detail/matcher_base_template.hpp index 07fa326..2de909e 100644 --- a/include/turtle/detail/matcher_base_template.hpp +++ b/include/turtle/detail/matcher_base_template.hpp @@ -18,10 +18,12 @@ namespace detail template< BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > class matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : boost::noncopyable { public: - virtual ~matcher_base() {} + matcher_base() = default; + matcher_base(const matcher_base&) = delete; + matcher_base& operator=(const matcher_base&) = delete; + virtual ~matcher_base() = default; virtual bool operator()( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) = 0; diff --git a/include/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp index d9f0563..5cc193b 100644 --- a/include/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -11,7 +11,6 @@ #include "../config.hpp" #include "singleton.hpp" -#include #include #ifdef MOCK_THREAD_SAFE @@ -75,8 +74,12 @@ namespace mock { namespace detail { - struct mutex : boost::noncopyable + struct mutex { + mutex() = default; + mutex(const mutex&) = delete; + mutex& operator=(const mutex&) = delete; + void lock() {} void unlock() @@ -86,18 +89,17 @@ namespace detail // Constructor + Destructor make it RAII classes for compilers and avoid unused variable warnings struct scoped_lock { - scoped_lock( mutex& ) - {} - ~scoped_lock() - {} + scoped_lock(const scoped_lock&) = delete; + scoped_lock& operator=(const scoped_lock&) = delete; + + scoped_lock( mutex& ) {} + ~scoped_lock() {} }; class lock { public: - lock( const std::shared_ptr< mutex >& ) - {} - ~lock() - {} + lock( const std::shared_ptr< mutex >& ) {} + ~lock() {} lock(const lock&) = delete; lock( lock&& ) = default; lock& operator=( const lock& ) = delete; diff --git a/include/turtle/detail/parent.hpp b/include/turtle/detail/parent.hpp index 0d14e77..aedb373 100644 --- a/include/turtle/detail/parent.hpp +++ b/include/turtle/detail/parent.hpp @@ -22,8 +22,7 @@ namespace detail class parent { public: - parent() - {} + parent() = default; parent( boost::unit_test::const_string instance, boost::optional< type_name > type ) : instance_( instance ) diff --git a/include/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp index 37db2b6..84087c4 100644 --- a/include/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -11,7 +11,6 @@ #include "../config.hpp" #include "mutex.hpp" -#include #include #include #include @@ -20,7 +19,7 @@ namespace mock { namespace detail { - class sequence_impl : private boost::noncopyable + class sequence_impl { public: sequence_impl() diff --git a/include/turtle/detail/singleton.hpp b/include/turtle/detail/singleton.hpp index 2080750..c8f42d6 100644 --- a/include/turtle/detail/singleton.hpp +++ b/include/turtle/detail/singleton.hpp @@ -38,7 +38,7 @@ protected: #define MOCK_SINGLETON_CONS( type ) \ private: \ friend class mock::detail::singleton< type >; \ -type() {} +type() = default #define MOCK_SINGLETON_INST( inst ) \ static BOOST_JOIN( inst, _t )& inst = BOOST_JOIN( inst, _t )::instance(); diff --git a/include/turtle/detail/verifiable.hpp b/include/turtle/detail/verifiable.hpp index 5d85c93..3390ec9 100644 --- a/include/turtle/detail/verifiable.hpp +++ b/include/turtle/detail/verifiable.hpp @@ -10,17 +10,18 @@ #define MOCK_VERIFIABLE_HPP_INCLUDED #include "../config.hpp" -#include namespace mock { namespace detail { - class verifiable : private boost::noncopyable + class verifiable { public: - verifiable() {} - virtual ~verifiable() {} + verifiable() = default; + verifiable(const verifiable&) = delete; + verifiable& operator=(const verifiable&) = delete; + virtual ~verifiable() = default; virtual bool verify() const = 0; diff --git a/include/turtle/object.hpp b/include/turtle/object.hpp index d9f6a47..70f98fa 100644 --- a/include/turtle/object.hpp +++ b/include/turtle/object.hpp @@ -48,8 +48,7 @@ namespace detail : impl_( std::make_shared< detail::object_impl >() ) {} protected: - ~object() - {} + ~object() = default; public: std::shared_ptr< detail::object_impl > impl_; }; diff --git a/include/turtle/stream.hpp b/include/turtle/stream.hpp index d8f3707..3ea47db 100644 --- a/include/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -10,7 +10,6 @@ #define MOCK_STREAM_HPP_INCLUDED #include "config.hpp" -#include #include namespace mock @@ -41,10 +40,13 @@ namespace conversion return s << '?'; } - struct holder : boost::noncopyable + struct holder { - virtual ~holder() - {} + holder() = default; + holder(const holder&) = delete; + holder& operator=(const holder&) = delete; + + virtual ~holder() = default; virtual void serialize( std::ostream& s ) const = 0; }; @@ -64,12 +66,14 @@ namespace conversion const T& t_; }; - struct any : boost::noncopyable + struct any { template< typename T > any( const T& t ) : h_( new holder_imp< T >( t ) ) {} + any(const any&) = delete; + any& operator=(const any&) = delete; ~any() { delete h_; diff --git a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp index 7872dc2..d659f6c 100644 --- a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp @@ -17,7 +17,7 @@ namespace class base_class { public: - virtual ~base_class() {} + virtual ~base_class() = default; virtual void f1( int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int ) = 0; diff --git a/test/bench_30_classes_30_methods_9_args.cpp b/test/bench_30_classes_30_methods_9_args.cpp index 67d1b65..beb45bf 100644 --- a/test/bench_30_classes_30_methods_9_args.cpp +++ b/test/bench_30_classes_30_methods_9_args.cpp @@ -16,7 +16,7 @@ namespace class base_class { public: - virtual ~base_class() {} + virtual ~base_class() = default; virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; diff --git a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp index 61a553c..20dad20 100644 --- a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp @@ -17,7 +17,7 @@ namespace class base_class { public: - virtual ~base_class() {} + virtual ~base_class() = default; virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; diff --git a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp index fe442fa..e720691 100644 --- a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp @@ -17,7 +17,7 @@ namespace class base_class { public: - virtual ~base_class() {} + virtual ~base_class() = default; virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; diff --git a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp index 3f6e0af..68096ed 100644 --- a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp @@ -17,7 +17,7 @@ namespace class base_class { public: - virtual ~base_class() {} + virtual ~base_class() = default; virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index bf862f7..95b6d6e 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -289,10 +289,14 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in namespace { - class my_interface : boost::noncopyable + class my_interface { public: - virtual ~my_interface() {} + my_interface() = default; + my_interface(const my_interface&) = delete; + my_interface& operator=(const my_interface&) = delete; + virtual ~my_interface() = default; + private: virtual void my_method() = 0; }; @@ -493,8 +497,7 @@ namespace { struct base { - virtual ~base() - {} + virtual ~base() = default; virtual void f() = 0; }; struct derived : base diff --git a/test/fail_ambiguous_mock_method.cpp b/test/fail_ambiguous_mock_method.cpp index 08148ce..d1c03de 100644 --- a/test/fail_ambiguous_mock_method.cpp +++ b/test/fail_ambiguous_mock_method.cpp @@ -12,7 +12,7 @@ namespace { struct my_base { - virtual ~my_base() {} + virtual ~my_base() = default; virtual void my_method() = 0; virtual void my_method( int ) = 0; }; diff --git a/test/fail_non_existing_base_class_method_in_mock_method.cpp b/test/fail_non_existing_base_class_method_in_mock_method.cpp index 0e50e73..b30c9ef 100644 --- a/test/fail_non_existing_base_class_method_in_mock_method.cpp +++ b/test/fail_non_existing_base_class_method_in_mock_method.cpp @@ -12,7 +12,7 @@ namespace { struct my_base { - virtual ~my_base() {} + virtual ~my_base() = default; }; MOCK_BASE_CLASS( my_class, my_base ) diff --git a/test/fail_number_of_arguments_greater_than_max_constant.cpp b/test/fail_number_of_arguments_greater_than_max_constant.cpp index 7a71272..4c59c70 100644 --- a/test/fail_number_of_arguments_greater_than_max_constant.cpp +++ b/test/fail_number_of_arguments_greater_than_max_constant.cpp @@ -14,7 +14,7 @@ namespace { struct my_base { - virtual ~my_base() {} + virtual ~my_base() = default; virtual void my_method( int, int, int, int, int, int, int, int, int, int ) = 0; }; diff --git a/test/fail_too_many_arguments_in_mock_method.cpp b/test/fail_too_many_arguments_in_mock_method.cpp index fa4ca01..7c08f7e 100644 --- a/test/fail_too_many_arguments_in_mock_method.cpp +++ b/test/fail_too_many_arguments_in_mock_method.cpp @@ -12,7 +12,7 @@ namespace { struct my_base { - virtual ~my_base() {} + virtual ~my_base() = default; virtual void my_method( int ) = 0; }; diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 15e4a30..e09b99b 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -10,7 +10,6 @@ #include "undefined.hpp" #include #include -#include #include #include #include @@ -82,11 +81,13 @@ BOOST_FIXTURE_TEST_CASE( basic_mock_object_usage, mock_error_fixture ) namespace { - class my_ambiguited_interface : boost::noncopyable + class my_ambiguited_interface { public: - virtual ~my_ambiguited_interface() - {} + my_ambiguited_interface() = default; + my_ambiguited_interface(const my_ambiguited_interface&) = delete; + my_ambiguited_interface& operator=(const my_ambiguited_interface&) = delete; + virtual ~my_ambiguited_interface() = default; virtual void my_method() = 0; virtual void my_method( int ) = 0; }; @@ -108,11 +109,13 @@ BOOST_FIXTURE_TEST_CASE( mock_object_method_disambiguation, mock_error_fixture ) namespace { - class my_const_ambiguited_interface : boost::noncopyable + class my_const_ambiguited_interface { public: - virtual ~my_const_ambiguited_interface() - {} + my_const_ambiguited_interface() = default; + my_const_ambiguited_interface(const my_const_ambiguited_interface&) = delete; + my_const_ambiguited_interface& operator=(const my_const_ambiguited_interface&) = delete; + virtual ~my_const_ambiguited_interface() = default; virtual void my_method() = 0; virtual void my_method() const = 0; }; @@ -213,8 +216,7 @@ namespace template< typename T > struct my_template_base_class { - virtual ~my_template_base_class() - {} + virtual ~my_template_base_class() = default; virtual void my_method( T ) = 0; virtual void my_other_method() = 0; }; @@ -237,23 +239,27 @@ BOOST_FIXTURE_TEST_CASE( mocking_a_template_base_class_method_is_supported, mock namespace { - class my_observer : boost::noncopyable + class my_observer { public: - virtual ~my_observer() - {} + my_observer() = default; + my_observer(const my_observer&) = delete; + my_observer& operator=(const my_observer&) = delete; + virtual ~my_observer() = default; virtual void notify( int value ) = 0; }; - class my_manager : boost::noncopyable + class my_manager { public: - virtual ~my_manager() - {} + my_manager() = default; + my_manager(const my_manager&) = delete; + my_manager& operator=(const my_manager&) = delete; + virtual ~my_manager() = default; virtual my_observer& get_observer() const = 0; }; - class my_subject : boost::noncopyable + class my_subject { public: explicit my_subject( my_manager& f ) diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 66ae929..516cd9b 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -360,8 +360,7 @@ namespace { struct base { - virtual ~base() - {} + virtual ~base() = default; virtual void m1() = 0; virtual void m10() const = 0; @@ -417,8 +416,7 @@ namespace stdcall { struct base { - virtual ~base() - {} + virtual ~base() = default; virtual void MOCK_STDCALL m1() = 0; }; From 35e43d58a6852def91f280c5a3444e59eef88261 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 20:25:40 +0200 Subject: [PATCH 022/126] Use std::reference_wrapper instead of boost --- doc/example/customization.cpp | 6 +-- doc/example/patterns_retrieve_cref.cpp | 2 +- doc/example/reference.cpp | 2 +- include/turtle/constraint.hpp | 7 ++-- include/turtle/constraints.hpp | 41 ++++++++------------ include/turtle/detail/action.hpp | 19 +++++---- include/turtle/detail/function.hpp | 2 +- include/turtle/detail/unwrap_reference.hpp | 45 ++++++++++++++++++++++ include/turtle/log.hpp | 5 +++ include/turtle/matcher.hpp | 4 +- test/detail/test_function.cpp | 14 +++---- test/test_constraints.cpp | 38 ++++++------------ test/test_integration.cpp | 9 ++--- test/test_log.cpp | 6 +-- test/test_matcher.cpp | 4 +- test/test_mock.cpp | 2 +- 16 files changed, 116 insertions(+), 90 deletions(-) create mode 100644 include/turtle/detail/unwrap_reference.hpp diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index 30f69c3..78283a3 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -86,8 +86,8 @@ struct near_constraint template< typename Actual > bool operator()( Actual actual ) const { - return std::abs( actual - boost::unwrap_ref( expected_ ) ) - < boost::unwrap_ref( threshold_ ); + return std::abs( actual - unwrap_ref( expected_ ) ) + < unwrap_ref( threshold_ ); } friend std::ostream& operator<<( std::ostream& s, const near_constraint& c ) @@ -127,7 +127,7 @@ BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one ) mock_view v; calculator c( v ); int expected, threshold; - MOCK_EXPECT( v.display ).with( near( boost::cref( expected ), boost::cref( threshold ) ) ); + MOCK_EXPECT( v.display ).with( near( std::cref( expected ), std::cref( threshold ) ) ); expected = 42; threshold = 1; c.add( 41, 1 ); diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index 8be3e9a..0b5aace 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) my_class c( mock ); int value; MOCK_EXPECT( mock.method ).once().with( mock::retrieve( value ) ); // on first call retrieve the value, this expectation takes precedence because it can never fail - MOCK_EXPECT( mock.method ).once().with( boost::cref( value ) ); // on second call compare the previously retrieved value with the newly received one + MOCK_EXPECT( mock.method ).once().with( std::cref( value ) ); // on second call compare the previously retrieved value with the newly received one c.process(); } //] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index d599a59..d6aa41e 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -740,7 +740,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions_with_references ) { mock_class c; int i = 0; - MOCK_EXPECT( c.method ).returns( boost::ref( i ) ); // wrap i to store a reference + MOCK_EXPECT( c.method ).returns( std::ref( i ) ); // wrap i to store a reference c.method() = 42; // really change i and not just the stored copy BOOST_CHECK_EQUAL( 42, i ); // indeed } diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index dd30eab..b739239 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -11,7 +11,7 @@ #include "config.hpp" #include "log.hpp" -#include +#include "detail/unwrap_reference.hpp" #include #include #include @@ -19,6 +19,7 @@ #include #include #include +#include #include namespace mock @@ -148,7 +149,7 @@ namespace detail expected##n( std::forward< T##n >(e##n) ) #define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ - boost::unwrap_ref( expected##n ) + mock::detail::unwrap_ref( expected##n ) #define MOCK_CONSTRAINT_FORMAT(z, n, d) \ BOOST_PP_IF(n, << ", " <<,) mock::format( c.expected##n ) @@ -160,7 +161,7 @@ namespace detail std::decay_t< const T##n > #define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ - const typename boost::unwrap_reference< Expected_##n >::type& \ + const mock::detail::unwrap_reference_t< Expected_##n >& \ BOOST_PP_ARRAY_ELEM(n, Args) #define MOCK_CONSTRAINT_ARG(z, n, Args) \ diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index d37e433..97f72fc 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -12,7 +12,7 @@ #include "config.hpp" #include "constraint.hpp" #include "detail/move_helper.hpp" -#include +#include "detail/unwrap_reference.hpp" #include #include #if BOOST_VERSION >= 107000 @@ -20,6 +20,7 @@ #else #include #endif +#include #include #include @@ -131,24 +132,22 @@ namespace detail std::enable_if_t< has_equal_to< Actual, - typename - boost::unwrap_reference< Expected >::type + unwrap_reference_t< Expected > >::value >* = 0 ) const { - return actual == boost::unwrap_ref( expected_ ); + return actual == unwrap_ref( expected_ ); } template< typename Actual > bool operator()( const Actual& actual, std::enable_if_t< !has_equal_to< Actual, - typename - boost::unwrap_reference< Expected >::type + unwrap_reference_t< Expected > >::value >* = 0 ) const { - return actual && *actual == boost::unwrap_ref( expected_ ); + return actual && *actual == unwrap_ref( expected_ ); } friend std::ostream& operator<<( std::ostream& s, const equal& e ) { @@ -161,7 +160,7 @@ namespace detail struct same { explicit same( const Expected& expected ) - : expected_( std::addressof( boost::unwrap_ref( expected ) ) ) + : expected_( std::addressof( unwrap_ref( expected ) ) ) {} template< typename Actual > bool operator()( const Actual& actual ) const @@ -172,23 +171,21 @@ namespace detail { return os << "same( " << mock::format( *s.expected_ ) << " )"; } - const typename - boost::unwrap_reference< Expected >::type* expected_; + const unwrap_reference_t< Expected >* expected_; }; template< typename Expected > struct retrieve { explicit retrieve( Expected& expected ) - : expected_( std::addressof( boost::unwrap_ref( expected ) ) ) + : expected_( std::addressof( unwrap_ref( expected ) ) ) {} template< typename Actual > bool operator()( const Actual& actual, std::enable_if_t< !std::is_convertible< const Actual*, - typename - boost::unwrap_reference< Expected >::type + unwrap_reference_t< Expected > >::value >* = 0 ) const { @@ -200,8 +197,7 @@ namespace detail std::enable_if_t< !std::is_convertible< const Actual*, - typename - boost::unwrap_reference< Expected >::type + unwrap_reference_t< Expected > >::value >* = 0 ) const { @@ -212,8 +208,7 @@ namespace detail bool operator()( Actual& actual, std::enable_if_t< std::is_convertible< Actual*, - typename - boost::unwrap_reference< Expected >::type + unwrap_reference_t< Expected > >::value >* = 0 ) const { @@ -224,8 +219,7 @@ namespace detail { return s << "retrieve( " << mock::format( *r.expected_ ) << " )"; } - typename - boost::unwrap_reference< Expected >::type* expected_; + unwrap_reference_t< Expected >* expected_; }; template< typename Expected > @@ -237,22 +231,21 @@ namespace detail template< typename Actual > bool operator()( Actual& actual ) const { - actual = boost::unwrap_ref( expected_ ); + actual = unwrap_ref( expected_ ); return true; } template< typename Actual > bool operator()( Actual* actual, std::enable_if_t< std::is_convertible< - typename - boost::unwrap_reference< Expected >::type, + unwrap_reference_t< Expected >, Actual >::value >* = 0 ) const { if( ! actual ) return false; - *actual = boost::unwrap_ref( expected_ ); + *actual = unwrap_ref( expected_ ); return true; } friend std::ostream& operator<<( std::ostream& s, const assign& a ) @@ -270,7 +263,7 @@ namespace detail {} bool operator()( const std::string& actual ) const { - return actual.find( boost::unwrap_ref( expected_ ) ) + return actual.find( unwrap_ref( expected_ ) ) != std::string::npos; } friend std::ostream& operator<<( std::ostream& s, const contain& n ) diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index a959c31..155e5cb 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -11,7 +11,6 @@ #include "../config.hpp" #include -#include #include #include #include @@ -60,9 +59,9 @@ namespace detail a_ = a; } template< typename Y > - void set( const boost::reference_wrapper< Y >& r ) + void set( const std::reference_wrapper< Y >& r ) { - a_ = boost::bind( &do_ref< Y >, r.get_pointer() ); + a_ = boost::bind( &do_ref< Y >, &r.get() ); } private: @@ -88,10 +87,10 @@ namespace detail template< typename Value > void returns( const Value& v ) { - this->set( boost::ref( store( v ) ) ); + this->set( std::ref( store( v ) ) ); } template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) + void returns( const std::reference_wrapper< Y >& r ) { this->set( r ); } @@ -102,7 +101,7 @@ namespace detail this->set( boost::bind( &move< std::remove_reference_t< Value > >, - boost::ref( store( std::move( v ) ) ) ) ); + std::ref( store( std::move( v ) ) ) ) ); } private: @@ -183,23 +182,23 @@ namespace detail : v_( rhs.v_.release() ) { if( v_.get() ) - returns( boost::ref( v_ ) ); + returns( std::ref( v_ ) ); } template< typename Y > void returns( Y* r ) { v_.reset( r ); - this->set( boost::ref( v_ ) ); + this->set( std::ref( v_ ) ); } template< typename Y > void returns( std::auto_ptr< Y > r ) { v_ = r; - this->set( boost::ref( v_ ) ); + this->set( std::ref( v_ ) ); } template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) + void returns( const std::reference_wrapper< Y >& r ) { this->set( r ); } diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index e723a42..fed3802 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -76,7 +76,7 @@ namespace detail e_->returns( r ); } template< typename Y > - void returns( const boost::reference_wrapper< Y >& r ) + void returns( const std::reference_wrapper< Y >& r ) { e_->returns( r ); } diff --git a/include/turtle/detail/unwrap_reference.hpp b/include/turtle/detail/unwrap_reference.hpp new file mode 100644 index 0000000..376744f --- /dev/null +++ b/include/turtle/detail/unwrap_reference.hpp @@ -0,0 +1,45 @@ +// http://turtle.sourceforge.net +// +// Copyright Alexander Grund 2020 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_UNWRAP_REFERENCE_HPP_INCLUDED +#define MOCK_UNWRAP_REFERENCE_HPP_INCLUDED + +#include +#include + +namespace mock +{ +namespace detail +{ + template + struct unwrap_reference + { + using type = T; + }; + template + struct unwrap_reference> + { + using type = T; + }; + template + struct unwrap_reference> + { + using type = T; + }; + template + using unwrap_reference_t = typename unwrap_reference::type; + + template + BOOST_FORCEINLINE unwrap_reference_t& unwrap_ref( T& t ) noexcept + { + return t; + } +} +} + +#endif // MOCK_UNWRAP_REFERENCE_HPP_INCLUDED diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index 691d5ef..b7728d0 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -123,6 +123,11 @@ namespace detail return s << mock::format( t.get() ); } template< typename T > + stream& operator<<( stream& s, const std::reference_wrapper< T >& t ) + { + return s << mock::format( t.get() ); + } + template< typename T > stream& operator<<( stream& s, const boost::shared_ptr< T >& t ) { return s << mock::format( t.get() ); diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index aed74ea..e96a970 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -14,8 +14,8 @@ #include "constraints.hpp" #include "detail/is_functor.hpp" #include "detail/move_helper.hpp" -#include #include +#include #include namespace mock @@ -30,7 +30,7 @@ namespace mock bool operator()( std::add_lvalue_reference_t< const Actual > actual ) { return mock::equal( - boost::unwrap_ref( expected_ ) ).c_( actual ); + mock::detail::unwrap_ref( expected_ ) ).c_( actual ); } friend std::ostream& operator<<( std::ostream& s, const matcher& m ) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 95b6d6e..d28b9a7 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -40,7 +40,7 @@ BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_boost_bind_and_boost_ref, mock_error_fixture ) { mock::detail::function< void() > f; - std::function< void() > functor = boost::bind( boost::ref( f ) ); + std::function< void() > functor = boost::bind( std::ref( f ) ); } // invocations @@ -410,7 +410,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_value, mock_e { mock::detail::function< int() > f; int i = 42; - f.expect().returns( boost::ref( i ) ); + f.expect().returns( std::ref( i ) ); i = 43; BOOST_CHECK_EQUAL( 43, f() ); CHECK_CALLS( 1 ); @@ -439,7 +439,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_value, mock_e { mock::detail::function< int&() > f; int i = 42; - f.expect().returns( boost::ref( i ) ); + f.expect().returns( std::ref( i ) ); i = 43; BOOST_CHECK_EQUAL( 43, f() ); BOOST_CHECK_EQUAL( 12, f() = 12 ); @@ -514,7 +514,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_valu { mock::detail::function< std::auto_ptr< int >() > f; std::auto_ptr< int > ptr( new int( 3 ) ); - f.expect().returns( boost::ref( ptr ) ); + f.expect().returns( std::ref( ptr ) ); BOOST_CHECK_EQUAL( 3, *ptr ); BOOST_CHECK_EQUAL( 3, *f() ); BOOST_CHECK( ! ptr.get() ); @@ -638,7 +638,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_by_reference, mock_er { mock::detail::function< base&() > f; derived b; - f.expect().returns( boost::ref( b ) ); + f.expect().returns( std::ref( b ) ); BOOST_CHECK_NO_THROW( f() ); CHECK_CALLS( 1 ); } @@ -651,7 +651,7 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_by_reference, mock_er } { mock::detail::function< undefined&() > f; - f.expect().returns( boost::ref( get_undefined() ) ); + f.expect().returns( std::ref( get_undefined() ) ); f.reset(); } } @@ -917,7 +917,7 @@ BOOST_FIXTURE_TEST_CASE( function_is_thread_safe, mock_error_fixture ) mock::detail::function< int() > f; boost::thread_group group; for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, boost::ref( f ) ) ); + group.create_thread( boost::bind( &iterate, std::ref( f ) ) ); group.join_all(); CHECK_CALLS( 100 ); } diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 008b117..f77d247 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE( equal_constraint ) BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) ); { std::string s; - BOOST_AUTO( c, mock::equal( boost::cref( s ) ) ); + BOOST_AUTO( c, mock::equal( std::cref( s ) ) ); s = "string"; BOOST_CHECK( c.c_( "string" ) ); } @@ -94,11 +94,7 @@ BOOST_AUTO_TEST_CASE( same_constraint ) int i = 0; int j = 0; BOOST_CHECK_EQUAL( i, j ); - mock::constraint< - mock::detail::same< - const boost::reference_wrapper< const int > - > - > c = mock::same( boost::cref( i ) ); + auto c = mock::same( i ); BOOST_CHECK( ! c.c_( j ) ); BOOST_CHECK( c.c_( i ) ); } @@ -137,9 +133,9 @@ BOOST_AUTO_TEST_CASE( assign_constraint ) int j = 1; mock::constraint< mock::detail::assign< - boost::reference_wrapper< const int > + std::reference_wrapper< const int > > - > c = mock::assign( boost::cref( j ) ); + > c = mock::assign( std::cref( j ) ); BOOST_CHECK( c.c_( i ) ); BOOST_CHECK_EQUAL( 1, i ); j = 3; @@ -149,11 +145,7 @@ BOOST_AUTO_TEST_CASE( assign_constraint ) { int i = 0; int j = 1; - mock::constraint< - mock::detail::assign< - boost::reference_wrapper< const int > - > - > c = mock::assign( boost::cref( j ) ); + auto c = mock::assign( std::cref( j ) ); BOOST_CHECK( c.c_( &i ) ); BOOST_CHECK_EQUAL( 1, i ); j = 3; @@ -164,11 +156,7 @@ BOOST_AUTO_TEST_CASE( assign_constraint ) const int* i = 0; int k = 1; int* j = &k; - mock::constraint< - mock::detail::assign< - boost::reference_wrapper< int* const > - > - > c = mock::assign( boost::cref( j ) ); + auto c = mock::assign( std::cref( j ) ); BOOST_CHECK( c.c_( i ) ); BOOST_CHECK_EQUAL( j, i ); j = 0; @@ -230,13 +218,13 @@ BOOST_AUTO_TEST_CASE( retrieve_constraint ) { int i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); BOOST_CHECK_EQUAL( i, j ); } { const int* i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( boost::ref( i ) ).c_( j ) ); + BOOST_CHECK( mock::retrieve( i ).c_( j ) ); BOOST_CHECK_EQUAL( i, &j ); } { @@ -332,11 +320,7 @@ BOOST_AUTO_TEST_CASE( contain_constraint_with_const_char_ptr ) BOOST_CHECK( ! mock::contain( "not found" ).c_( std::string( "this is a string" ) ) ); { const char* s = 0; - mock::constraint< - mock::detail::contain< - boost::reference_wrapper< const char* const > - > - > c = mock::contain( boost::cref( s ) ); + auto c = mock::contain( std::cref( s ) ); s = "string"; BOOST_CHECK( c.c_( "this is a string" ) ); BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); @@ -356,9 +340,9 @@ BOOST_AUTO_TEST_CASE( contain_constraint_with_strings ) std::string s; mock::constraint< mock::detail::contain< - boost::reference_wrapper< const std::string > + std::reference_wrapper< const std::string > > - > c = mock::contain( boost::cref( s ) ); + > c = mock::contain( std::cref( s ) ); s = "string"; BOOST_CHECK( c.c_( "this is a string" ) ); BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); diff --git a/test/test_integration.cpp b/test/test_integration.cpp index e09b99b..9460fa8 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -294,7 +293,7 @@ namespace BOOST_FIXTURE_TEST_CASE( basic_mock_object_collaboration_usage, fixture ) { - MOCK_EXPECT( manager.get_observer ).returns( boost::ref( observer ) ); + MOCK_EXPECT( manager.get_observer ).returns( std::ref( observer ) ); my_subject subject( manager ); MOCK_EXPECT( observer.notify ).once().with( 1 ); subject.increment(); @@ -395,7 +394,7 @@ BOOST_FIXTURE_TEST_CASE( boost_optional_on_base_class_reference_as_return_type_i { boost_optional b; my_mock_observer o; - MOCK_EXPECT( b.tag ).once().returns( boost::ref( o ) ); + MOCK_EXPECT( b.tag ).once().returns( std::ref( o ) ); b.method(); CHECK_CALLS( 1 ); } @@ -460,7 +459,7 @@ BOOST_FIXTURE_TEST_CASE( boost_reference_wrapper_is_supported_in_value_constrain { MOCK_FUNCTOR( f, void( const std::string& ) ); std::string s; - MOCK_EXPECT( f ).once().with( boost::cref( s ) ); + MOCK_EXPECT( f ).once().with( std::cref( s ) ); s = "string"; f( "string" ); CHECK_CALLS( 1 ); @@ -666,7 +665,7 @@ BOOST_FIXTURE_TEST_CASE( mock_class_is_thread_safe, mock_error_fixture ) my_mock m; boost::thread_group group; for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, boost::ref( m ) ) ); + group.create_thread( boost::bind( &iterate, std::ref( m ) ) ); group.join_all(); CHECK_CALLS( 100 ); } diff --git a/test/test_log.cpp b/test/test_log.cpp index 9fad50b..5b55bb6 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -517,11 +517,11 @@ BOOST_AUTO_TEST_CASE( boost_assign_map_list_of_are_serialized ) BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( boost::assign::map_list_of( 12, "12" )( 42, "42" ) ) ); } -BOOST_AUTO_TEST_CASE( boost_reference_wrappers_are_serialized ) +BOOST_AUTO_TEST_CASE( std_reference_wrappers_are_serialized ) { const int i = 3; - BOOST_CHECK_EQUAL( "3", to_string( boost::cref( i ) ) ); - BOOST_CHECK_EQUAL( "\"string\"", to_string( boost::cref( "string" ) ) ); + BOOST_CHECK_EQUAL( "3", to_string( std::cref( i ) ) ); + BOOST_CHECK_EQUAL( "\"string\"", to_string( std::cref( "string" ) ) ); } namespace diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index c28648e..86197a8 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -28,8 +28,8 @@ BOOST_AUTO_TEST_CASE( int_and_int_can_be_compared ) BOOST_AUTO_TEST_CASE( ref_to_int_and_int_can_be_compared ) { const int i = 3; - BOOST_CHECK( match( 3, boost::cref( i ) ) ); - BOOST_CHECK( ! match( 4, boost::cref( i ) ) ); + BOOST_CHECK( match( 3, std::cref( i ) ) ); + BOOST_CHECK( ! match( 4, std::cref( i ) ) ); } namespace diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 516cd9b..2f0d42f 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -44,7 +44,7 @@ namespace BOOST_FIXTURE_TEST_CASE( mock_addition_operator, mock_error_fixture ) { mock_class_with_operator m; - MOCK_EXPECT( m.addition ).once().returns( boost::ref( m ) ); + MOCK_EXPECT( m.addition ).once().returns( std::ref( m ) ); m += 1; CHECK_CALLS( 1 ); } From a426e027596fbc25f49c05f6818a0fbbe9a0573a Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 21:02:10 +0200 Subject: [PATCH 023/126] Replace Boost.Bind by std::bind and lambdas --- doc/example/patterns_async_call.cpp | 4 ++-- doc/example/patterns_invoke_functor.cpp | 4 ++-- doc/example/reference.cpp | 4 ++-- include/turtle/detail/action.hpp | 28 +++++-------------------- test/detail/test_function.cpp | 11 +++++----- test/detail/test_is_functor.cpp | 5 ++++- test/test_integration.cpp | 4 ++-- test/test_log.cpp | 4 +++- test/test_mock.cpp | 5 +++-- 9 files changed, 28 insertions(+), 41 deletions(-) diff --git a/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp index e1b2a60..918c5d4 100644 --- a/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -64,10 +64,10 @@ BOOST_AUTO_TEST_CASE( method_is_called ) // Note: Boost 1.57 introduced a bug preventing usage of the lambda with clang in C++98 // See: https://svn.boost.org/trac10/ticket/10785 #if defined(BOOST_CLANG) && (BOOST_VERSION >= 105700) - MOCK_EXPECT( m.method ).once().calls( boost::bind(&set_bool, done) ); + MOCK_EXPECT( m.method ).once().calls( std::bind(&set_bool, done) ); #else MOCK_EXPECT( m.method ).once().calls( boost::lambda::var( done ) = true ); #endif - check( done, boost::bind( &my_class::flush, &c ) ); // just wait on done, flushing from time to time + check( done, std::bind( &my_class::flush, &c ) ); // just wait on done, flushing from time to time } //] diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index d0c9f81..5a00f4a 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -24,8 +24,8 @@ namespace //[ invoke_functor_solution #define BOOST_AUTO_TEST_MAIN #include -#include #include +#include namespace { @@ -38,7 +38,7 @@ namespace BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method ) { mock_class mock; - MOCK_EXPECT( mock.method ).calls( boost::bind( boost::apply< void >(), _1, 42 ) ); // whenever 'method' is called, invoke the functor with 42 + MOCK_EXPECT( mock.method ).calls( [](const auto &functor){ functor(42); } ); // whenever 'method' is called, invoke the functor with 42 function( mock ); } //] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index d6aa41e..2c6d7e8 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -572,7 +572,7 @@ bool custom_constraint( int expected, int actual ) BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_bind ) { mock_class c; - MOCK_EXPECT( c.method ).with( boost::bind( &custom_constraint, 42, _1 ) ); + MOCK_EXPECT( c.method ).with( std::bind( &custom_constraint, 42, _1 ) ); } //] } @@ -722,7 +722,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) MOCK_EXPECT( c.method ).moves( 42 ); // returns by moving the value MOCK_EXPECT( c.method ).throws( std::runtime_error( "error !" ) ); MOCK_EXPECT( c.method ).calls( &function ); // forwards 'method' parameter to 'function' - MOCK_EXPECT( c.method ).calls( boost::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' + MOCK_EXPECT( c.method ).calls( std::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' MOCK_EXPECT( c.method ).calls( []( int i ) { return i; } ); // uses a C++11 lambda } //] diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 155e5cb..ac886a4 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -10,7 +10,6 @@ #define MOCK_ACTION_HPP_INCLUDED #include "../config.hpp" -#include #include #include #include @@ -50,7 +49,7 @@ namespace detail template< typename Exception > void throws( Exception e ) { - a_ = boost::bind( &do_throw< Exception >, e ); + a_ = [e]() -> Result { throw e; }; } protected: @@ -61,21 +60,10 @@ namespace detail template< typename Y > void set( const std::reference_wrapper< Y >& r ) { - a_ = boost::bind( &do_ref< Y >, &r.get() ); + a_ = [r]() -> Result { return r.get(); }; } private: - template< typename T > - static T& do_ref( T* t ) - { - return *t; - } - template< typename T > - static Result do_throw( T t ) - { - throw t; - } - functor_type f_; action_type a_; }; @@ -98,10 +86,8 @@ namespace detail template< typename Value > void moves( Value&& v ) { - this->set( - boost::bind( - &move< std::remove_reference_t< Value > >, - std::ref( store( std::move( v ) ) ) ) ); + auto vRef = std::ref( store( std::move( v ) ) ); + this->set([vRef](){ return std::move(vRef.get()); }); } private: @@ -163,12 +149,8 @@ namespace detail public: action() { - this->set( boost::bind( &do_nothing ) ); + this->set( [](){} ); } - - private: - static void do_nothing() - {} }; #ifdef MOCK_AUTO_PTR diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index d28b9a7..c0d4977 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -37,10 +36,10 @@ BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture std::function< void() > functor = f; } -BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_boost_bind_and_boost_ref, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_std_bind_and_std_ref, mock_error_fixture ) { mock::detail::function< void() > f; - std::function< void() > functor = boost::bind( std::ref( f ) ); + std::function< void() > functor = std::bind( std::ref( f ) ); } // invocations @@ -688,10 +687,10 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_with CHECK_CALLS( 1 ); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_boost_bind, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_std_bind, mock_error_fixture ) { mock::detail::function< int( int ) > f; - f.expect().calls( boost::bind( &custom_result ) ); + f.expect().calls( std::bind( &custom_result ) ); BOOST_CHECK_EQUAL( 42, f( 17 ) ); CHECK_CALLS( 1 ); } @@ -917,7 +916,7 @@ BOOST_FIXTURE_TEST_CASE( function_is_thread_safe, mock_error_fixture ) mock::detail::function< int() > f; boost::thread_group group; for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, std::ref( f ) ) ); + group.create_thread( [&f](){ iterate(f); } ); group.join_all(); CHECK_CALLS( 100 ); } diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index f45a1e4..e384f83 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -71,11 +71,14 @@ BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) is_functor( std::bind1st( std::ptr_fun( &f2 ), "" ) ); } -BOOST_AUTO_TEST_CASE( boost_bind_is_functor ) +BOOST_AUTO_TEST_CASE( bind_is_functor ) { is_functor( boost::bind( &f0 ) ); is_functor( boost::bind( &f1, _1 ) ); is_functor( boost::bind( &f2, "", _1 ) ); + is_functor( std::bind( &f0 ) ); + is_functor( std::bind( &f1, std::placeholders::_1 ) ); + is_functor( std::bind( &f2, "", std::placeholders::_1 ) ); } BOOST_AUTO_TEST_CASE( boost_lambda_is_functor ) diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 9460fa8..f517a6a 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -646,7 +646,7 @@ BOOST_FIXTURE_TEST_CASE( mock_functor_creation_is_thread_safe, mock_error_fixtur { boost::thread_group group; for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &create_functor, i ) ); + group.create_thread( [i](){ create_functor( i ); } ); group.join_all(); CHECK_CALLS( 100 ); } @@ -665,7 +665,7 @@ BOOST_FIXTURE_TEST_CASE( mock_class_is_thread_safe, mock_error_fixture ) my_mock m; boost::thread_group group; for( int i = 0; i < 100; ++i ) - group.create_thread( boost::bind( &iterate, std::ref( m ) ) ); + group.create_thread( [&m](){ iterate(m); } ); group.join_all(); CHECK_CALLS( 100 ); } diff --git a/test/test_log.cpp b/test/test_log.cpp index 5b55bb6..f4d7c81 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -25,6 +25,7 @@ #include #endif #include +#include #include #include #include @@ -646,9 +647,10 @@ BOOST_AUTO_TEST_CASE( boost_phoenix_functor_yields_question_mark_when_serialized BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::arg_names::_1 < 42 ) ); } -BOOST_AUTO_TEST_CASE( boost_bind_functor_yields_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE( bind_functor_yields_question_mark_when_serialized ) { BOOST_CHECK_EQUAL( "?", to_string( boost::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL( "?", to_string( std::bind( &some_function ) ) ); } #ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 2f0d42f..d143b0f 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include namespace { @@ -162,7 +162,8 @@ namespace BOOST_FIXTURE_TEST_CASE( MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture ) { my_mock m; - boost::bind( &my_mock::my_method, &m, 42 ); + const auto f = std::bind( &my_mock::my_method, &m, 42 ); + (void) f; } BOOST_FIXTURE_TEST_CASE( MOCK_VERIFY_macro, mock_error_fixture ) From 52d21a86affbb28b4afeeb146420c04b633c07f0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 9 Jul 2020 23:32:08 +0200 Subject: [PATCH 024/126] Get rid of BOOST_IDENTITY_TYPE --- include/turtle/detail/parameter.hpp | 10 ++++++++++ include/turtle/mock.hpp | 30 ++++++++++++++++------------- test/test_mock.cpp | 10 +++++----- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index 4c25a3b..6c2442c 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -60,6 +60,16 @@ namespace detail template< typename Signature, int n > using parameter = tuple_element< n, typename parameter_types::type >; + + template + struct parameter_type; + template + struct parameter_type + { + using type = U; + }; + template + using parameter_type_t = typename parameter_type::type; } } // mock diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 83d8be5..23891d4 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -21,22 +21,26 @@ #include "detail/parameter.hpp" #include #include -#include #define MOCK_CLASS(T) \ struct T : mock::object -#define MOCK_FUNCTION_TYPE(S, tpn) \ - std::remove_pointer_t< tpn BOOST_IDENTITY_TYPE(S) > +#define MOCK_PROTECT_FUNCTION_SIG(...) \ + mock::detail::parameter_type_t + +/// Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE +/// TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG +#define MOCK_FUNCTION_TYPE(...) \ + std::remove_pointer_t< __VA_ARGS__ > #define MOCK_BASE_CLASS(T, ...) \ struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > #define MOCK_FUNCTOR(f, ...) \ - mock::detail::functor< MOCK_FUNCTION_TYPE((__VA_ARGS__),) > f, f##_mock + mock::detail::functor< MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock #define MOCK_FUNCTOR_TPL(f, ...) \ mock::detail::functor< \ - MOCK_FUNCTION_TYPE((__VA_ARGS__), typename) > f, f##_mock + MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) @@ -44,8 +48,8 @@ t##_mock( mock::detail::root, "?." ) #define MOCK_METHOD_HELPER(S, t, tpn) \ - mutable mock::detail::function< MOCK_FUNCTION_TYPE((S), tpn) > t##_mock_; \ - mock::detail::function< MOCK_FUNCTION_TYPE((S), tpn) >& t##_mock( \ + mutable mock::detail::function< MOCK_FUNCTION_TYPE(S) > t##_mock_; \ + mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ const mock::detail::context&, \ const boost::unit_test::const_string& instance ) const \ { \ @@ -57,14 +61,14 @@ } #define MOCK_PARAM(S, tpn) \ - tpn mock::detail::parameter< MOCK_FUNCTION_TYPE((S), tpn) + tpn mock::detail::parameter< MOCK_FUNCTION_TYPE(S) #define MOCK_DECL_PARAM(z, n, d) \ BOOST_PP_COMMA_IF(n) d, n >::type p##n #define MOCK_DECL_PARAMS(n, S, tpn) \ BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S, tpn)) #define MOCK_DECL(M, n, S, c, tpn) \ tpn mock::detail::result_type< \ - MOCK_FUNCTION_TYPE((S), tpn) >::type M( \ + MOCK_FUNCTION_TYPE(S) >::type M( \ MOCK_DECL_PARAMS(n, S, tpn) ) c #define MOCK_FORWARD_PARAM(z, n, d) \ @@ -75,7 +79,7 @@ #define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ MOCK_DECL(M, n, S, c, tpn) \ { \ - static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE((S), tpn) >::value, "Arity mismatch" ); \ + static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE(S) >::value, "Arity mismatch" ); \ return MOCK_ANONYMOUS_HELPER(t)( \ MOCK_FORWARD_PARAMS(n, S, tpn) ); \ } @@ -125,11 +129,11 @@ MOCK_METHOD_HELPER(T(), t, typename) #define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s mock::detail::function< MOCK_FUNCTION_TYPE((S), tpn) >& t##_mock( \ + s mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ mock::detail::context& context, \ boost::unit_test::const_string instance ) \ { \ - static mock::detail::function< MOCK_FUNCTION_TYPE((S), tpn) > f; \ + static mock::detail::function< MOCK_FUNCTION_TYPE(S) > f; \ return f( context, instance ); \ } @@ -153,7 +157,7 @@ MOCK_FUNCTION_HELPER(S, t, s, tpn) \ s MOCK_DECL(F, n, S,,tpn) \ { \ - static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE((S), tpn) >::value, "Arity mismatch" ); \ + static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE(S) >::value, "Arity mismatch" ); \ return MOCK_HELPER(t)( MOCK_FORWARD_PARAMS(n, S, tpn) ); \ } diff --git a/test/test_mock.cpp b/test/test_mock.cpp index d143b0f..97adaef 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -350,11 +350,11 @@ namespace { MOCK_CLASS( round_parenthesized_signature ) { - MOCK_METHOD_EXT( m0, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())), m0 ) - MOCK_STATIC_METHOD( m1, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())), m1 ) - MOCK_FUNCTOR( f0, BOOST_IDENTITY_TYPE((std::map< int, int >())) ); + MOCK_METHOD_EXT( m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), m0 ) + MOCK_STATIC_METHOD( m1, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), m1 ) + MOCK_FUNCTOR( f0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()) ); }; - MOCK_FUNCTION( fun0, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())), fun0 ) + MOCK_FUNCTION( fun0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), fun0 ) } namespace @@ -402,7 +402,7 @@ namespace MOCK_FUNCTION( fun1, 0, void() ) MOCK_FUNCTION( fun2, 0, void(), fun2 ) - MOCK_FUNCTION( fun3, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())) ) + MOCK_FUNCTION( fun3, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()) ) MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); } From 908ca385b9fb4baf00e0195450ec5cef5cf8f889 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 10 Jul 2020 20:19:37 +0200 Subject: [PATCH 025/126] Add docstrings to mock.hpp --- include/turtle/mock.hpp | 87 +++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 24 deletions(-) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 23891d4..bce7640 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -22,9 +22,13 @@ #include #include +/// MOCK_CLASS( name ) +/// Define a class #define MOCK_CLASS(T) \ struct T : mock::object +/// MOCK_PROTECT_FUNCTION_SIG( signature ) +/// Use this with MOCK_FUNCTION/MOCK_*_METHOD if the return type contains commas #define MOCK_PROTECT_FUNCTION_SIG(...) \ mock::detail::parameter_type_t @@ -33,21 +37,25 @@ #define MOCK_FUNCTION_TYPE(...) \ std::remove_pointer_t< __VA_ARGS__ > +/// MOCK_BASE_CLASS( name, base ) +/// Define a class deriving from a base class #define MOCK_BASE_CLASS(T, ...) \ struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > +/// MOCK_FUNCTOR( name, signature ) +/// Define a callable variable/member #define MOCK_FUNCTOR(f, ...) \ mock::detail::functor< MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock -#define MOCK_FUNCTOR_TPL(f, ...) \ - mock::detail::functor< \ - MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock +/// MOCK_FUNCTOR_TPL( name, signature ) +/// Deprecated. Same as MOCK_FUNCTOR +#define MOCK_FUNCTOR_TPL(f, ...) MOCK_FUNCTOR(F, __VA_ARGS__) #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) #define MOCK_ANONYMOUS_HELPER(t) \ t##_mock( mock::detail::root, "?." ) -#define MOCK_METHOD_HELPER(S, t, tpn) \ +#define MOCK_METHOD_HELPER(S, t) \ mutable mock::detail::function< MOCK_FUNCTION_TYPE(S) > t##_mock_; \ mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ const mock::detail::context&, \ @@ -87,46 +95,45 @@ #define MOCK_METHOD_EXT(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t,,) \ MOCK_METHOD_AUX(M, n, S, t, const,) \ - MOCK_METHOD_HELPER(S, t,) + MOCK_METHOD_HELPER(S, t) #define MOCK_CONST_METHOD_EXT(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t, const,) \ - MOCK_METHOD_HELPER(S, t,) + MOCK_METHOD_HELPER(S, t) #define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t,,) \ - MOCK_METHOD_HELPER(S, t,) + MOCK_METHOD_HELPER(S, t) #define MOCK_METHOD_EXT_TPL(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t,, typename) \ MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t, typename) + MOCK_METHOD_HELPER(S, t) #define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t, typename) + MOCK_METHOD_HELPER(S, t) #define MOCK_NON_CONST_METHOD_EXT_TPL(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t,, typename) \ - MOCK_METHOD_HELPER(S, t, typename) + MOCK_METHOD_HELPER(S, t) +/// MOCK_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) +/// generates both const and non-const operators #define MOCK_CONVERSION_OPERATOR(M, T, t) \ M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) + MOCK_METHOD_HELPER(T(), t) +/// MOCK_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) +/// generates only a const operator #define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) + MOCK_METHOD_HELPER(T(), t) +/// MOCK_NON_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) +/// generates only a non-const operator #define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) \ M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t,) + MOCK_METHOD_HELPER(T(), t) -#define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) -#define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) -#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t, typename) +#define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONVERSION_OPERATOR(M, T, t) +#define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONST_CONVERSION_OPERATOR(M, T, t) +#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) #define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ s mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ @@ -144,14 +151,20 @@ } \ MOCK_FUNCTION_HELPER(void A, t, static, tpn) +/// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) +/// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. #define MOCK_CONSTRUCTOR(T, n, A, t) \ MOCK_CONSTRUCTOR_AUX(T, n, A, t,) +/// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) +/// must be used if the signature uses a template parameter of the class +/// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. #define MOCK_CONSTRUCTOR_TPL(T, n, A, t) \ MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) +/// MOCK_DESTRUCTOR( [calling convention] ~name, identifier ) #define MOCK_DESTRUCTOR(T, t) \ T() { try { MOCK_ANONYMOUS_HELPER(t)(); } catch( ... ) {} } \ - MOCK_METHOD_HELPER(void(), t,) + MOCK_METHOD_HELPER(void(), t) #define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ MOCK_FUNCTION_HELPER(S, t, s, tpn) \ @@ -165,55 +178,81 @@ #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 #define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 +/// MOCK_METHOD( [calling convention] name, arity[, signature[, identifier]] ) +/// generates both const and non-const methods #define MOCK_METHOD(M, ...) \ MOCK_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +/// MOCK_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) +/// generates only the const version of the method #define MOCK_CONST_METHOD(M, ...) \ MOCK_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +/// MOCK_NON_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) +/// generates only the non-const version of the method #define MOCK_NON_CONST_METHOD(M, ...) \ MOCK_NON_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) + +/// MOCK_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) +/// must be used if the signature uses a template parameter of the class +/// generates both const and non-const methods #define MOCK_METHOD_TPL(M, n, ...) \ MOCK_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) +/// MOCK_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) +/// must be used if the signature uses a template parameter of the class +/// generates only the const version of the method #define MOCK_CONST_METHOD_TPL(M, n, ...) \ MOCK_CONST_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) +/// MOCK_NON_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) +/// must be used if the signature uses a template parameter of the class +/// generates only the non-const version of the method #define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) +/// MOCK_FUNCTION( [calling convention] name, arity, signature[, identifier] ) +/// if 'identifier' is omitted it will default to 'name' #define MOCK_FUNCTION(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ inline,) +/// MOCK_STATIC_METHOD( [calling convention] name, arity, signature[, identifier] ) +/// if 'identifier' is omitted it will default to 'name' #define MOCK_STATIC_METHOD(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ static,) +/// MOCK_STATIC_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) +/// must be used if the signature uses a template parameter of the class +/// if 'identifier' is omitted it will default to 'name' #define MOCK_STATIC_METHOD_TPL(F, n, ...) \ MOCK_FUNCTION_AUX(F, n, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ static, typename) +/// MOCK_EXPECT( identifier ) #define MOCK_EXPECT(t) MOCK_HELPER(t).expect( __FILE__, __LINE__ ) +/// MOCK_RESET( identifier ) #define MOCK_RESET(t) MOCK_HELPER(t).reset( __FILE__, __LINE__ ) +/// MOCK_VERIFY( identifier ) #define MOCK_VERIFY(t) MOCK_HELPER(t).verify( __FILE__, __LINE__ ) #endif // MOCK_MOCK_HPP_INCLUDED From ed8c58d81357f0ef3f9e70c37094e3b786e64502 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 10 Jul 2020 20:21:51 +0200 Subject: [PATCH 026/126] Remove Boost.Typeof --- test/test_constraints.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index f77d247..3350de7 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -8,7 +8,6 @@ #include #include -#include BOOST_AUTO_TEST_CASE( all_comparison_constraints_can_be_instanciated ) { @@ -48,7 +47,7 @@ BOOST_AUTO_TEST_CASE( equal_constraint ) BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) ); { std::string s; - BOOST_AUTO( c, mock::equal( std::cref( s ) ) ); + auto c = mock::equal( std::cref( s ) ); s = "string"; BOOST_CHECK( c.c_( "string" ) ); } From a6aa140148d68211abf4fef6dc086e5a40d4115c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 10 Jul 2020 20:27:36 +0200 Subject: [PATCH 027/126] Remove superflous test instantiations --- test/CMakeLists.txt | 4 +--- test/Jamfile.jam | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f36751f..53d0b4a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -35,7 +35,7 @@ set(testsUsingUndefinedCPP test_function test_integration) foreach(testFile IN LISTS testFiles) get_filename_component(name ${testFile} NAME_WE) - foreach(testVariant IN ITEMS "" _max_args _use_conversions _no_decltype _no_variadic_macros _thread_safe) + foreach(testVariant IN ITEMS "" _max_args _use_conversions _thread_safe) set(curName ${name}${testVariant}) add_executable(${curName} ${testFile}) if(name IN_LIST testsUsingUndefinedCPP) @@ -47,8 +47,6 @@ foreach(testFile IN LISTS testFiles) target_compile_definitions(${name}_max_args PRIVATE MOCK_MAX_ARGS=21) target_compile_definitions(${name}_use_conversions PRIVATE MOCK_USE_CONVERSIONS) - target_compile_definitions(${name}_no_decltype PRIVATE MOCK_NO_DECLTYPE) - target_compile_definitions(${name}_no_variadic_macros PRIVATE MOCK_NO_VARIADIC_MACROS) target_link_libraries(${name}_thread_safe PRIVATE Boost::thread) target_compile_definitions(${name}_thread_safe PRIVATE MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE) diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 39852e3..3e8768b 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -26,8 +26,6 @@ rule run-test ( name ) run $(name) defined_1.cpp defined_2.cpp undefined.cpp /boost//unit_test_framework : : : : $(name)_ ; run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_MAX_ARGS=21 : $(name)_max_args ; run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_USE_CONVERSIONS : $(name)_use_conversions ; - run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_NO_DECLTYPE : $(name)_no_decltype ; - run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_NO_VARIADIC_MACROS : $(name)_no_variadic_macros ; run $(name) undefined.cpp /boost//unit_test_framework /boost//thread : : : MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE multi : $(name)_thread_safe ; } From 5ef17d0e33c839c6dd6852db51ce268883e1d503 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 11 Jul 2020 14:01:18 +0200 Subject: [PATCH 028/126] Include examples in CI tests Also fix and update examples and documentation where required This allows to make sure examples are actually runnable avoiding them to become outdated --- doc/changelog.qbk | 3 + doc/customization.qbk | 2 +- doc/example/calculator.hpp | 7 +- doc/example/customization.cpp | 12 +- doc/example/getting_started.cpp | 102 +++++++++++++-- doc/example/limitations_comma_in_macro.cpp | 48 ------- .../limitations_const_parameter_warning.cpp | 10 +- doc/example/limitations_literal_zero.cpp | 1 - .../limitations_non_virtual_method.cpp | 8 +- .../limitations_protected_private_method.cpp | 11 +- ...limitations_template_base_class_method.cpp | 10 +- doc/example/limitations_template_method.cpp | 20 ++- doc/example/limitations_throw_specifier.cpp | 12 +- doc/example/motivation.cpp | 7 +- doc/example/patterns_async_call.cpp | 34 ++--- doc/example/patterns_invoke_functor.cpp | 19 ++- doc/example/patterns_quick_constraint.cpp | 1 - doc/example/patterns_retrieve_cref.cpp | 18 ++- doc/example/patterns_static_objects.cpp | 10 +- doc/example/rationale.cpp | 13 ++ doc/example/reference.cpp | 123 +++++++++--------- doc/limitations.qbk | 38 ------ doc/reference.qbk | 34 +---- include/turtle/constraint.hpp | 8 +- include/turtle/constraints.hpp | 2 +- .../turtle/detail/expectation_template.hpp | 3 +- .../turtle/detail/function_impl_template.hpp | 24 ++-- .../turtle/detail/matcher_base_template.hpp | 3 +- include/turtle/detail/parameter.hpp | 6 +- include/turtle/matcher.hpp | 15 +-- include/turtle/mock.hpp | 2 +- .../turtle/{detail => }/unwrap_reference.hpp | 3 - test/CMakeLists.txt | 34 +++++ test/bench_0_class_10_max_args.cpp | 5 + test/bench_0_class_20_max_args.cpp | 5 + test/bench_0_class_30_max_args.cpp | 5 + ...classes_30_methods_30_args_30_max_args.cpp | 5 + test/bench_30_classes_30_methods_9_args.cpp | 5 + ..._classes_30_methods_9_args_10_max_args.cpp | 5 + ..._classes_30_methods_9_args_20_max_args.cpp | 5 + ..._classes_30_methods_9_args_30_max_args.cpp | 5 + test/test_mock.cpp | 2 +- 42 files changed, 400 insertions(+), 285 deletions(-) delete mode 100644 doc/example/limitations_comma_in_macro.cpp rename include/turtle/{detail => }/unwrap_reference.hpp (97%) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 9b5700d..20c3d4c 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -11,6 +11,9 @@ Released - * Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` +* Replaced Boost facilities with std:: equivalents where existing in C++14 +* Deprecated MOCK_FUNCTOR_TPL as no longer required, use the non _TPL variant even for templates +* Added MOCK_PROTECT_FUNCTION_SIG to pass function signatures with commas in the return type [endsect] diff --git a/doc/customization.qbk b/doc/customization.qbk index 577ed88..6946cff 100644 --- a/doc/customization.qbk +++ b/doc/customization.qbk @@ -98,7 +98,7 @@ The purpose of the 'near' template function is to : * remove the burden of specifying the template parameter when instantiating near_constraint * wrap the constraint in a mock::constraint so that it plays nicely with !, && and ||. -The use of boost::unwrap_ref provides support for passing arguments as references with boost::ref and boost::cref and delaying their initialization, for instance : +The use of mock::unwrap_ref provides support for passing arguments as references with std::ref and std::cref and delaying their initialization, for instance : [near_constraint_cref_test] diff --git a/doc/example/calculator.hpp b/doc/example/calculator.hpp index 23aff87..13c83cd 100644 --- a/doc/example/calculator.hpp +++ b/doc/example/calculator.hpp @@ -9,15 +9,16 @@ #ifndef CALCULATOR #define CALCULATOR -class view; +#include "view.hpp" //[ calculator class calculator { + view& v; public: - calculator( view& v ); + calculator( view& v ): v(v){} - void add( int a, int b ); // the result will be sent to the view 'v' + void add( int a, int b ){ v.display(a + b); } // the result will be sent to the view 'v' }; //] diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index 78283a3..ddc5324 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -12,6 +12,7 @@ //] #include "calculator.hpp" #include "mock_view.hpp" +#include //[ mock_stream_user_type namespace user_namespace @@ -36,7 +37,7 @@ bool custom_constraint( int actual ) //] //[ custom_constraint_free_function_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two ) +BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_free_function ) { mock_view v; calculator c( v ); @@ -64,7 +65,7 @@ struct custom_constraint //] //[ custom_constraint_functor_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two ) +BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_custom_constraint ) { mock_view v; calculator c( v ); @@ -86,8 +87,7 @@ struct near_constraint template< typename Actual > bool operator()( Actual actual ) const { - return std::abs( actual - unwrap_ref( expected_ ) ) - < unwrap_ref( threshold_ ); + return std::abs( actual - expected_ ) < threshold_ ; } friend std::ostream& operator<<( std::ostream& s, const near_constraint& c ) @@ -109,7 +109,7 @@ mock::constraint< near_constraint< Expected > > near( Expected expected, Expecte namespace near_constraint_test { //[ near_constraint_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one ) +BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near ) { mock_view v; calculator c( v ); @@ -122,7 +122,7 @@ BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one ) namespace near_constraint_cref_test { //[ near_constraint_cref_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one ) +BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cref ) { mock_view v; calculator c( v ); diff --git a/doc/example/getting_started.cpp b/doc/example/getting_started.cpp index ff732c4..140a8a4 100644 --- a/doc/example/getting_started.cpp +++ b/doc/example/getting_started.cpp @@ -6,14 +6,69 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +#include +#include +#include + +std::function error_handler_abort; +std::function error_handler_pass; +std::function error_handler_call; +std::function error_handler_fail; + +template< typename Result > +struct configurable_mock_error +{ + static Result abort() + { + error_handler_abort(); + return Result(); + } + + static void pass( const char* file, int line ) + { + error_handler_pass(file, line); + } + + template< typename Context > + static void call( const Context& context, const char* file, int line ) + { + std::stringstream s; + s << context; + error_handler_call( s.str(), file, line ); + } + + template< typename Context > + static void fail( const char* message, const Context& context, const char* file = "", int line = 0 ) + { + std::stringstream s; + s << context; + error_handler_fail( message, s.str(), file, line ); + } +}; + +#define MOCK_ERROR_POLICY configurable_mock_error +#define MOCK_USE_BOOST_TEST + //[ prerequisite -#define BOOST_AUTO_TEST_MAIN #include #include //] #include "calculator.hpp" #include "mock_view.hpp" +struct Fixture +{ + Fixture() + { + error_handler_abort = mock::error::abort; + error_handler_pass = mock::error::pass; + error_handler_call = mock::error::call; + error_handler_fail = mock::error::fail; + } +}; + +BOOST_FIXTURE_TEST_SUITE(GettingStarted, Fixture) + namespace phases { //[ phases @@ -30,7 +85,7 @@ BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) namespace verify_reset { //[ verify_reset -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_reset ) { mock_view v; calculator c( v ); @@ -49,7 +104,7 @@ BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) namespace expectations { //[ expectations -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_expect ) { mock_view v; calculator c( v ); @@ -63,7 +118,7 @@ BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) namespace sequence { //[ sequence -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_then_1_plus_0_is_1 ) { mock_view v; calculator c( v ); @@ -79,7 +134,7 @@ BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) namespace several_sequences { //[ several_sequences -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( add_several_numbers_in_sequences ) { mock_view v; calculator c( v ); @@ -112,18 +167,49 @@ MOCK_BASE_CLASS( mock_view, view ) class calculator { + view& v; public: - calculator( view& v ); + calculator( view& v ): v(v) {} - void add( int a, int b ); + void add( int a, int b ){ v.display(a + b); } }; + +struct CatchFailureFixture +{ + static bool aborted; + static std::string fail_msg; + + static void abort() + { + aborted = true; + } + static void fail( const std::string& message, const std::string&, const char* = "", int = 0 ){ + fail_msg = message; + } + CatchFailureFixture() + { + error_handler_abort = abort; + error_handler_fail = fail; + } + void assert_failure(const std::string& required_message) + { + BOOST_CHECK(aborted); + BOOST_CHECK(fail_msg.find(required_message) != std::string::npos); + } +}; +bool CatchFailureFixture::aborted = false; +std::string CatchFailureFixture::fail_msg; + //[ action_test -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_FIXTURE_TEST_CASE( zero_plus_zero_is_zero_with_action, CatchFailureFixture ) { mock_view v; calculator c( v ); MOCK_EXPECT( v.display ).once().with( 0 ); // missing returns( true ) c.add( 0, 0 ); + assert_failure("missing action"); } //] } + +BOOST_AUTO_TEST_SUITE_END() diff --git a/doc/example/limitations_comma_in_macro.cpp b/doc/example/limitations_comma_in_macro.cpp deleted file mode 100644 index c19ebdf..0000000 --- a/doc/example/limitations_comma_in_macro.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2014 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define BOOST_AUTO_TEST_MAIN -#include -#include - -namespace -{ -//[ limitations_comma_in_macro_problem - template< typename T1, typename T2 > - struct my_base_class - {}; -//] -} - -namespace limitations_comma_in_macro_solution_1 -{ -//[ limitations_comma_in_macro_solution_1 - typedef my_base_class< int, int > my_base_type; - - MOCK_BASE_CLASS( my_mock, my_base_type ) - {}; -//] -} - -namespace limitations_comma_in_macro_solution_2 -{ -//[ limitations_comma_in_macro_solution_2 - template< typename T1, typename T2 > - MOCK_BASE_CLASS( my_mock, my_base_class< T1 BOOST_PP_COMMA() T2 > ) - {}; -//] -} - -namespace limitations_comma_in_macro_solution_3 -{ -//[ limitations_comma_in_macro_solution_3 - template< typename T1, typename T2 > - struct my_mock : my_base_class< T1, T2 >, mock::object - {}; -//] -} diff --git a/doc/example/limitations_const_parameter_warning.cpp b/doc/example/limitations_const_parameter_warning.cpp index 531bba2..049c123 100644 --- a/doc/example/limitations_const_parameter_warning.cpp +++ b/doc/example/limitations_const_parameter_warning.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -35,7 +34,7 @@ namespace limitations_const_parameter_warning_explanation //] } -namespace limitations_const_parameter_warning_solution +namespace { //[ limitations_const_parameter_warning_solution MOCK_BASE_CLASS( mock_base, base ) @@ -48,3 +47,10 @@ namespace limitations_const_parameter_warning_solution }; //] } + +BOOST_AUTO_TEST_CASE(check_method_stub_is_called) +{ + mock_base b; + MOCK_EXPECT(b.method).once().with(1); + static_cast(&b)->method(1); +} diff --git a/doc/example/limitations_literal_zero.cpp b/doc/example/limitations_literal_zero.cpp index 895f4f5..81ba680 100644 --- a/doc/example/limitations_literal_zero.cpp +++ b/doc/example/limitations_literal_zero.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include diff --git a/doc/example/limitations_non_virtual_method.cpp b/doc/example/limitations_non_virtual_method.cpp index b6f0457..e5fd30e 100644 --- a/doc/example/limitations_non_virtual_method.cpp +++ b/doc/example/limitations_non_virtual_method.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -25,3 +24,10 @@ MOCK_BASE_CLASS( mock_base, base ) MOCK_METHOD( method, 0 ) }; //] + +BOOST_AUTO_TEST_CASE(method_not_called_through_base) +{ + mock_base b; + MOCK_EXPECT(b.method).never(); + static_cast(&b)->method(); // Doesn't call the mocked method +} diff --git a/doc/example/limitations_protected_private_method.cpp b/doc/example/limitations_protected_private_method.cpp index a3a23f3..ca621a8 100644 --- a/doc/example/limitations_protected_private_method.cpp +++ b/doc/example/limitations_protected_private_method.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -15,6 +14,8 @@ namespace //[ limitations_protected_private_method_problem class base { + public: + void call(){ method_1(); method_2(); } protected: virtual void method_1() = 0; private: @@ -30,3 +31,11 @@ namespace }; //] } + +BOOST_AUTO_TEST_CASE(mocked_methods_are_called) +{ + mock_base b; + MOCK_EXPECT(b.method_1).once(); + MOCK_EXPECT(b.method_2).once(); + static_cast(&b)->call(); +} diff --git a/doc/example/limitations_template_base_class_method.cpp b/doc/example/limitations_template_base_class_method.cpp index b847f68..bbbeb4d 100644 --- a/doc/example/limitations_template_base_class_method.cpp +++ b/doc/example/limitations_template_base_class_method.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -27,7 +26,14 @@ namespace template< typename T > MOCK_BASE_CLASS( mock_base, base< T > ) { - MOCK_METHOD( method, 1, void() ) + MOCK_METHOD( method, 0, void() ) }; //] } + +BOOST_AUTO_TEST_CASE(call_method_from_templated_class) +{ + mock_base b; + MOCK_EXPECT(b.method).once(); + static_cast*>(&b)->method(); +} diff --git a/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp index c5c0fa7..f955e80 100644 --- a/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -17,8 +16,7 @@ class concept { public: template< typename T > - void method( T t ) - {} + void method( T t ); }; template< typename T > @@ -36,6 +34,14 @@ MOCK_CLASS( mock_concept ) MOCK_METHOD( method, 1, void( const char* ), method_string ) }; //] + +BOOST_AUTO_TEST_CASE(mocked_templated_methods_are_called) +{ + mock_concept b; + MOCK_EXPECT(b.method_int).once().with(42); + MOCK_EXPECT(b.method_string).once().with(mock::equal(std::string("string"))); + function_under_test(b); +} } namespace limitations_template_method_problem_2 @@ -80,4 +86,12 @@ std::string mock_concept::create< std::string >() return create_string(); } //] + +BOOST_AUTO_TEST_CASE(dispatch_methods_are_called) +{ + mock_concept b; + MOCK_EXPECT(b.create_int).once().returns(int{}); + MOCK_EXPECT(b.create_string).once().returns(std::string{}); + function_under_test(b); +} } diff --git a/doc/example/limitations_throw_specifier.cpp b/doc/example/limitations_throw_specifier.cpp index 77b44c8..cccaf58 100644 --- a/doc/example/limitations_throw_specifier.cpp +++ b/doc/example/limitations_throw_specifier.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -17,14 +16,14 @@ namespace { virtual ~base_class() = default; - virtual void method() throw (); + virtual void method() throw() = 0; }; //] //[ limitations_throw_specifier_solution MOCK_BASE_CLASS( mock_class, base_class ) { - void method() throw () + void method() throw() override { method_proxy(); } @@ -32,3 +31,10 @@ namespace }; //] } + +BOOST_AUTO_TEST_CASE(call_method_proxy) +{ + mock_class b; + MOCK_EXPECT(b.method).once(); + static_cast(&b)->method(); +} diff --git a/doc/example/motivation.cpp b/doc/example/motivation.cpp index 9aef368..614d300 100644 --- a/doc/example/motivation.cpp +++ b/doc/example/motivation.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include #include "calculator.hpp" @@ -22,6 +21,8 @@ public: }; //] +int calculator::add( int a, int b ){ return a + b; } + //[ simple_zero_plus_zero_is_zero BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) { @@ -51,7 +52,7 @@ public: //] //[ zero_plus_zero_is_zero_without_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_without_mock_object ) { my_view v; calculator c( v ); @@ -65,7 +66,7 @@ BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) namespace with_mock_object { //[ zero_plus_zero_is_zero_with_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_with_mock_object ) { mock_view v; calculator c( v ); diff --git a/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp index 918c5d4..2fd3834 100644 --- a/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ async_call_problem -namespace +namespace mock_test { class base_class { @@ -17,6 +17,7 @@ namespace class my_class { + base_class& b; public: explicit my_class( base_class& ); @@ -25,14 +26,23 @@ namespace } //] +namespace mock_test +{ + my_class::my_class( base_class& b): b(b){} + void my_class::flush() + { + static int secret_value = 7; + if(--secret_value == 0) + b.method(); + } +} + //[ async_call_solution -#define BOOST_AUTO_TEST_MAIN #include -#include #include #include -namespace +namespace mock_test { template< typename F > void check( bool& condition, F flush, int attempts = 100, int sleep = 100 ) @@ -49,25 +59,15 @@ namespace { MOCK_METHOD( method, 0 ) }; - void set_bool(bool& b) - { - b = true; - } } BOOST_AUTO_TEST_CASE( method_is_called ) { + using namespace mock_test; mock_base_class m; my_class c( m ); bool done = false; - // when method is called it will set done to true - // Note: Boost 1.57 introduced a bug preventing usage of the lambda with clang in C++98 - // See: https://svn.boost.org/trac10/ticket/10785 -#if defined(BOOST_CLANG) && (BOOST_VERSION >= 105700) - MOCK_EXPECT( m.method ).once().calls( std::bind(&set_bool, done) ); -#else - MOCK_EXPECT( m.method ).once().calls( boost::lambda::var( done ) = true ); -#endif - check( done, std::bind( &my_class::flush, &c ) ); // just wait on done, flushing from time to time + MOCK_EXPECT( m.method ).once().calls( [&done](){ done = true; } ); + check( done, [&c](){ c.flush(); } ); // just wait on done, flushing from time to time } //] diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index 5a00f4a..e9f6655 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -9,8 +9,6 @@ //[ invoke_functor_problem #include -namespace -{ class base_class { public: @@ -18,14 +16,24 @@ namespace }; void function( base_class& ); // the function will call 'method' with a functor to be applied -} //] +namespace +{ + int receivedValue = 0; + void setx(int newValue) + { + receivedValue = newValue; + } +} +void function( base_class& c) +{ + c.method(setx); +} + //[ invoke_functor_solution -#define BOOST_AUTO_TEST_MAIN #include #include -#include namespace { @@ -40,5 +48,6 @@ BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_meth mock_class mock; MOCK_EXPECT( mock.method ).calls( [](const auto &functor){ functor(42); } ); // whenever 'method' is called, invoke the functor with 42 function( mock ); + BOOST_CHECK(receivedValue == 42); } //] diff --git a/doc/example/patterns_quick_constraint.cpp b/doc/example/patterns_quick_constraint.cpp index a331bdc..f1ae03b 100644 --- a/doc/example/patterns_quick_constraint.cpp +++ b/doc/example/patterns_quick_constraint.cpp @@ -7,7 +7,6 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ quick_constraint_problem -#define BOOST_AUTO_TEST_MAIN #include #include #include diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index 0b5aace..16f5a07 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ retrieve_cref_problem -namespace +namespace mock_test { class base_class { @@ -17,6 +17,7 @@ namespace class my_class { + base_class& b; public: explicit my_class( base_class& ); @@ -25,12 +26,22 @@ namespace } //] +namespace mock_test +{ + my_class::my_class( base_class& b): b(b){} + void my_class::process() + { + int secret_value = 42; + b.method(secret_value); + b.method(secret_value); + } +} + //[ retrieve_cref_solution -#define BOOST_AUTO_TEST_MAIN #include #include -namespace +namespace mock_test { MOCK_BASE_CLASS( mock_base_class, base_class ) { @@ -40,6 +51,7 @@ namespace BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) { + using namespace mock_test; mock_base_class mock; my_class c( mock ); int value; diff --git a/doc/example/patterns_static_objects.cpp b/doc/example/patterns_static_objects.cpp index c385fbc..6d47362 100644 --- a/doc/example/patterns_static_objects.cpp +++ b/doc/example/patterns_static_objects.cpp @@ -6,8 +6,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +// Used to make this test file pass. Define to empty to see other tests fail +#define ASSERT_VERIFY_FAIL() mock::reset() + //[ static_objects_problem -#define BOOST_AUTO_TEST_MAIN #include #include #include @@ -16,8 +18,7 @@ namespace { struct my_class { - my_class( int i ) - : i_( i ) + my_class( int i ) : i_( i ) {} int i_; @@ -28,13 +29,14 @@ namespace return os << "my_class " << c->i_; // the 'c' pointer must be valid when logging } - MOCK_FUNCTION( f, 1, void( my_class* ) ) // being static 'f' outlive the test case + MOCK_FUNCTION( f, 1, void( my_class* ) ) // being static 'f' outlives the test case } BOOST_AUTO_TEST_CASE( static_objects_problem ) { my_class c( 42 ); MOCK_EXPECT( f ).once().with( &c ); // the set expectation will also outlive the test case and leak into other test cases using 'f' + ASSERT_VERIFY_FAIL(); // Check that mock::verify fails, but that means other test fail too } // the 'c' instance goes out of scope and the '&c' pointer becomes dangling //] diff --git a/doc/example/rationale.cpp b/doc/example/rationale.cpp index 170e7e7..9ece937 100644 --- a/doc/example/rationale.cpp +++ b/doc/example/rationale.cpp @@ -9,6 +9,19 @@ #include #include "calculator.hpp" #include "mock_view.hpp" +#include +#include +#include +#include + +// Dummy to detect if the assertion unexpectedly succeeded to test what is explained +#undef BOOST_CHECK_THROW +#define BOOST_CHECK_THROW(expr, exc) \ + try { \ + expr; \ + } catch(const exc&) { \ + std::cerr << "Exception thrown but should not"; \ + } //[ overflow_throws BOOST_AUTO_TEST_CASE( overflow_throws ) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 2c6d7e8..97762a3 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define BOOST_AUTO_TEST_MAIN #include #include @@ -374,10 +373,11 @@ MOCK_CLASS( mock_class ) namespace function_example_1 { //[ function_example_1 -MOCK_FUNCTION( f, 1, float( int ) ) +MOCK_FUNCTION( f, 1, void( int ) ) BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_function ) { + MOCK_EXPECT(f).once().with(3); f( 3 ); } //] @@ -398,6 +398,7 @@ namespace functor_example_1 BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) { MOCK_FUNCTOR( f, void( int ) ); + MOCK_EXPECT(f).once().with(3); f( 3 ); } //] @@ -409,12 +410,13 @@ namespace functor_example_2 template< typename T > struct mock_class { - MOCK_FUNCTOR_TPL( f, void( T ) ); + MOCK_FUNCTOR( f, void( T ) ); }; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) +BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor_inside_a_class ) { mock_class< int > c; + MOCK_EXPECT(c.f).once().with(3); c.f( 3 ); } //] @@ -436,6 +438,9 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) MOCK_EXPECT( c.method ).once().with( 0 ).in( s ).returns( 42 ); MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); + BOOST_CHECK(c.method(0) == 42); + BOOST_CHECK_THROW(c.method("notok", 1.f), std::runtime_error); + BOOST_CHECK_THROW(c.method("notok", 2.f), std::runtime_error); } //] } @@ -446,13 +451,18 @@ namespace invocation_example_1 MOCK_CLASS( mock_class ) { MOCK_METHOD( method, 2, void( int, const std::string& ) ) + MOCK_METHOD( method2, 1, void( int ) ) }; BOOST_AUTO_TEST_CASE( demonstrates_setting_up_invocations_on_a_mock_method ) { mock_class c; MOCK_EXPECT( c.method ).once(); // can only be called once - MOCK_EXPECT( c.method ); // can be called an unlimited number of times + MOCK_EXPECT( c.method2 ); // can be called an unlimited number of times + c.method(42, "Hello world!"); + c.method2(42); + c.method2(42); + c.method2(42); } //] } @@ -464,6 +474,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_functor ) { MOCK_FUNCTOR( f, void( int, const std::string& ) ); MOCK_EXPECT( f ).once(); + f(42, "Hello world!"); } //] } @@ -476,6 +487,7 @@ MOCK_FUNCTION( f, 1, void( int ) ) BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_function ) { MOCK_EXPECT( f ).once(); + f(42); } //] } @@ -485,14 +497,17 @@ namespace invocation_example_4 //[ invocation_example_4 MOCK_CLASS( mock_class ) { - MOCK_STATIC_METHOD( method, 1, void( int ) ) + MOCK_STATIC_METHOD( method1, 1, void( int ) ) + MOCK_STATIC_METHOD( method2, 1, void( int ) ) }; BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_static_method ) { mock_class c; - MOCK_EXPECT( c.method ).once(); - MOCK_EXPECT( mock_class::method ).once(); // does the same + MOCK_EXPECT( c.method1 ).once(); + MOCK_EXPECT( mock_class::method2 ).once(); // does the same + c.method1(42); + c.method2(42); } //] } @@ -502,14 +517,17 @@ namespace constraints_example_1 //[ constraints_example_1 MOCK_CLASS( mock_class ) { - MOCK_METHOD( method, 2, void( int, const std::string& ) ) + MOCK_METHOD( method1, 2, void( int, const std::string& ) ) + MOCK_METHOD( method2, 2, void( int, const std::string& ) ) }; BOOST_AUTO_TEST_CASE( demonstrates_adding_builtin_constraints ) { mock_class c; - MOCK_EXPECT( c.method ).with( mock::equal( 3 ), mock::equal( "some string" ) ); - MOCK_EXPECT( c.method ).with( 3, "some string" ); // equivalent to the previous one using short-cuts + MOCK_EXPECT( c.method1 ).with( mock::equal( 3 ), mock::equal( "some string" ) ); + MOCK_EXPECT( c.method2 ).with( 3, "some string" ); // equivalent to the previous one using short-cuts + c.method1(3, "some string"); + c.method2(3, "some string"); } //] } @@ -531,6 +549,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_free_functi { mock_class c; MOCK_EXPECT( c.method ).with( &custom_constraint ); + c.method(42); } //] } @@ -552,6 +571,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_standard_li { mock_class c; MOCK_EXPECT( c.method ).with( std::bind1st( std::ptr_fun( &custom_constraint ), 42 ) ); // std::ptr_fun creates an std::unary_function + c.method(42); } //] } @@ -569,10 +589,12 @@ bool custom_constraint( int expected, int actual ) return expected == actual; } -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_bind ) +BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_std_bind ) { mock_class c; + using namespace std::placeholders; MOCK_EXPECT( c.method ).with( std::bind( &custom_constraint, 42, _1 ) ); + c.method(42); } //] } @@ -593,6 +615,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_lambda { mock_class c; MOCK_EXPECT( c.method ).with( boost::lambda::_1 == 42 ); + c.method(42); } //] } @@ -606,14 +629,17 @@ namespace constraints_example_6 //[ constraints_example_6 MOCK_CLASS( mock_class ) { - MOCK_METHOD( method, 1, void( int ) ) + MOCK_METHOD( method1, 1, void( int ) ) + MOCK_METHOD( method2, 1, void( int ) ) }; BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_phoenix ) { mock_class c; - MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::arg1 == 42 ); - MOCK_EXPECT( c.method ).with( boost::phoenix::arg_names::_1 == 42 ); + MOCK_EXPECT( c.method1 ).with( boost::phoenix::arg_names::arg1 == 42 ); + MOCK_EXPECT( c.method2 ).with( boost::phoenix::arg_names::_1 == 42 ); + c.method1(42); + c.method2(42); } //] } @@ -630,6 +656,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_a_constraint_with_cxx11_lambda ) { mock_class c; MOCK_EXPECT( c.method ).with( []( int actual ) { return 42 == actual; } ); + c.method(42); } //] } @@ -646,6 +673,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_combining_constraints ) { mock_class c; MOCK_EXPECT( c.method ).with( mock::less( 4 ) && mock::greater( 2 ), ! mock::equal( "" ) ); + c.method(3, "Hello World!"); } //] } @@ -667,6 +695,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_one_constraint_for_all_arguments ) { mock_class c; MOCK_EXPECT( c.method ).with( &custom_constraint ); + c.method("1234", 4); } //] } @@ -698,6 +727,9 @@ BOOST_AUTO_TEST_CASE( demonstrates_enforcing_several_expectation_orders ) MOCK_EXPECT( c_1.method_1 ).in( s_1 ); MOCK_EXPECT( c_2.method_2 ).in( s_2 ); // c_1.method_1 and c_2.method_2 are in different sequences and can be called in any order MOCK_EXPECT( c_3.method_3 ).in( s_1, s_2 ); // c_3.method_3 must be called after both c_1.method_1 and c_2.method_2 + c_2.method_2(); + c_1.method_1(); + c_3.method_3(); } //] } @@ -718,12 +750,18 @@ int function( int i ) BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) { mock_class c; - MOCK_EXPECT( c.method ).returns( 42 ); - MOCK_EXPECT( c.method ).moves( 42 ); // returns by moving the value - MOCK_EXPECT( c.method ).throws( std::runtime_error( "error !" ) ); - MOCK_EXPECT( c.method ).calls( &function ); // forwards 'method' parameter to 'function' - MOCK_EXPECT( c.method ).calls( std::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' - MOCK_EXPECT( c.method ).calls( []( int i ) { return i; } ); // uses a C++11 lambda + MOCK_EXPECT( c.method ).once().returns( 42 ); + MOCK_EXPECT( c.method ).once().moves( 42 ); // returns by moving the value + MOCK_EXPECT( c.method ).once().throws( std::runtime_error( "error !" ) ); + MOCK_EXPECT( c.method ).once().calls( &function ); // forwards 'method' parameter to 'function' + MOCK_EXPECT( c.method ).once().calls( std::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' + MOCK_EXPECT( c.method ).once().calls( []( int i ) { return i; } ); // uses a C++11 lambda + BOOST_CHECK(c.method(0) == 42); + BOOST_CHECK(c.method(1) == 42); + BOOST_CHECK_THROW(c.method(0), std::runtime_error); + BOOST_CHECK(c.method(2) == 2); + BOOST_CHECK(c.method(3) == 42); + BOOST_CHECK(c.method(4) == 4); } //] } @@ -913,46 +951,3 @@ BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) } //] } - -namespace helpers_example_4 -{ -//[ helpers_example_4 -MOCK_CONSTRAINT_EXT( any, 0,, true ) // this is (almost) how mock::any is defined -MOCK_CONSTRAINT_EXT( forty_two, 0,, actual == 42 ) // this defines a 'forty_two' constraint - -BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( forty_two ); - MOCK_EXPECT( f ).with( any ); -} -//] -} - -namespace helpers_example_5 -{ -//[ helpers_example_5 -MOCK_CONSTRAINT_EXT( equal, 1, ( expected ), actual == expected ) // this is how mock::equal is defined -MOCK_CONSTRAINT_EXT( near, 1, ( expected ), std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' - -BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42 ) ); - MOCK_EXPECT( f ).with( equal( 42 ) ); -} -//] -} - -namespace helpers_example_6 -{ -//[ helpers_example_6 -MOCK_CONSTRAINT_EXT( near, 2, ( expected, tolerance ), std::abs( actual - expected ) < tolerance ) // this is how mock::near is defined - -BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) -{ - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); -} -//] -} diff --git a/doc/limitations.qbk b/doc/limitations.qbk index 46926f0..f4bce36 100644 --- a/doc/limitations.qbk +++ b/doc/limitations.qbk @@ -12,7 +12,6 @@ [import example/limitations_template_base_class_method.cpp] [import example/limitations_template_method.cpp] [import example/limitations_protected_private_method.cpp] -[import example/limitations_comma_in_macro.cpp] [import example/limitations_const_parameter_warning.cpp] This section lists the library known limitations. @@ -151,43 +150,6 @@ A workaround would be to write a proxy member function : [endsect] -[section Compilers without support for variadic macros fail on commas in MOCK_BASE_CLASS] - -For compilers without support for variadic macros given : - -[limitations_comma_in_macro_problem] - -the following code does not compile : - - MOCK_BASE_CLASS( my_mock, my_base_class< int, int > ) // this fails because the pre-processor believes the macro to be called with 3 arguments - {}; - -One workaround is : - -[limitations_comma_in_macro_solution_1] - -Of course this is not always possible, as in : - - template< typename T1, typename T2 > - MOCK_BASE_CLASS( my_mock, my_base_type< T1, T2 > ) - {}; - -Another workaround would make use of [@http://www.boost.org/libs/preprocessor Boost.Preprocessor] : - -[limitations_comma_in_macro_solution_2] - -Actually BOOST_PP_COMMA implementation is quite trivial, being only : - - #define BOOST_PP_COMMA() , - -Finally another workaround would be to not use the macro at all : - -[limitations_comma_in_macro_solution_3] - -Note that [@http://www.boost.org/libs/utility/identity_type/doc/html/index.html Boost.IdentityType] is of little help here because the type is by essence very often abstract, which doesn't work well for some compilers (e.g. gcc). - -[endsect] - [section Warning C4505: '...' : unreferenced local function has been removed] Example : diff --git a/doc/reference.qbk b/doc/reference.qbk index 434a630..dacce89 100644 --- a/doc/reference.qbk +++ b/doc/reference.qbk @@ -105,8 +105,6 @@ Synopsis : [note In case of a calling convention specified, all four parameters must be provided.] -[warning For compilers without support for variadic macros the MOCK_METHOD_EXT familly set of macros must be used.] - Synopsis : MOCK_METHOD_EXT( [calling convention] name, arity, signature, identifier ) // generates both const and non-const methods @@ -167,8 +165,6 @@ Synopsis : [note In case of a calling convention specified, all four parameters must be provided.] -[warning For compilers without support for variadic macros the identifier cannot be omitted and must be given explicitly.] - Example : [static_member_function_example_1] @@ -277,8 +273,6 @@ Synopsis : [note In case of a calling convention specified, all four parameters must be provided.] -[warning For compilers without support for variadic macros the identifier cannot be omitted and must be given explicitly.] - Example : [function_example_1] @@ -415,13 +409,13 @@ Constraints : [[mock::evaluate] [['actual]()] [evaluates ['actual] as a functor returning a ['bool] and taking no argument]] ] -[important When passing ['expected] directly as a shortcut mock::call is implied for a function, a function pointer, an instance of a type with a result_type member typedef (support for standard library, [@http://www.boost.org/libs/bind/bind.html Boost.Bind], [@http://www.boost.org/libs/function Boost.Function] functors), an instance of a type with a sig member (support for [@http://www.boost.org/libs/lambda Boost.Lambda] functors), an instance of a type with a result member (support for [@http://www.boost.org/libs/phoenix Boost.Phoenix] functors); mock::equal is implied for anything else.] +[important When passing ['expected] directly as a shortcut mock::call is implied for a callable (function, function pointer, functor, ...); mock::equal is implied for anything else.] [warning Because mock::assign and mock::retrieve have side effects they may modify ['expected] in unexpected ways. For instance they may be called again after their expectations have already been exhausted because of the way the [link turtle.getting_started.expectation_selection_algorithm expectation selection algorithm] works. Therefore it is probably a good idea to use an [link turtle.reference.expectation.actions action] instead.] [note For mock::assign and mock::retrieve the switch to one form or another is made depending on whichever is the most relevant based on types involved.] -[note All constraints accepting a parameter support the use of boost::ref and boost::cref in order to delay initialization.] +[note All constraints accepting a parameter support the use of std::ref and std::cref in order to delay initialization.] [note All constraints can be combined using the && and || operators, as well as negated with the ! operator.] @@ -437,7 +431,7 @@ Example using a standard library functor : [constraints_example_3] -Example using [@http://www.boost.org/libs/bind Boost.Bind] : +Example using std::bind : [constraints_example_4] @@ -497,7 +491,7 @@ Synopsis : [note The returns and moves actions are not available for mock methods returning void, including constructors and destructors.] -[note Actions are captured by copy, boost::ref and boost::cref can however be used to turn the copies into references.] +[note Actions are captured by copy, std::ref and std::cref can however be used to turn the copies into references.] Example : @@ -581,38 +575,18 @@ Synopsis : The expression manipulates a received parameter ['actual] in order to implement the constraint, as well as extra optional arguments named ['expected_1], ['expected_2], ... -For compilers without support for variadic macros the alternate following macro must be used. - -Synopsis : - - MOCK_CONSTRAINT_EXT( name, arity, ( expected_1, expected_2, ... ), expression ) // defines a constraint 'name' based on the given 'expression' - -Of course this macro is also available for compilers which support variadic macros. - Example without any extra argument : [helpers_example_1] -or with the alternate more portable macro : - -[helpers_example_4] - Example with one extra argument : [helpers_example_2] -or with the alternate more portable macro : - -[helpers_example_5] - Example with two extra arguments : [helpers_example_3] -or with the alternate more portable macro : - -[helpers_example_6] - [endsect] [endsect] diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index b739239..4708cf8 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -11,7 +11,7 @@ #include "config.hpp" #include "log.hpp" -#include "detail/unwrap_reference.hpp" +#include "unwrap_reference.hpp" #include #include #include @@ -135,7 +135,7 @@ namespace detail template< typename Actual > \ bool operator()( const Actual& actual ) const \ { \ - return Expr; \ + (void) actual; return Expr; \ } \ friend std::ostream& operator<<( std::ostream& s, const Name& ) \ { \ @@ -149,7 +149,7 @@ namespace detail expected##n( std::forward< T##n >(e##n) ) #define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ - mock::detail::unwrap_ref( expected##n ) + mock::unwrap_ref( expected##n ) #define MOCK_CONSTRAINT_FORMAT(z, n, d) \ BOOST_PP_IF(n, << ", " <<,) mock::format( c.expected##n ) @@ -161,7 +161,7 @@ namespace detail std::decay_t< const T##n > #define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ - const mock::detail::unwrap_reference_t< Expected_##n >& \ + const mock::unwrap_reference_t< Expected_##n >& \ BOOST_PP_ARRAY_ELEM(n, Args) #define MOCK_CONSTRAINT_ARG(z, n, Args) \ diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index 97f72fc..0c679b7 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -12,7 +12,7 @@ #include "config.hpp" #include "constraint.hpp" #include "detail/move_helper.hpp" -#include "detail/unwrap_reference.hpp" +#include "unwrap_reference.hpp" #include #include #if BOOST_VERSION >= 107000 diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index ef8a562..1791e0f 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -240,8 +240,7 @@ namespace detail return line_; } - friend std::ostream& operator<<( - std::ostream& s, const expectation& e ) + friend std::ostream& operator<<( std::ostream& s, const expectation& e ) { return s << ( e.invocation_->exhausted() ? 'v' : '.' ) << ' ' << *e.invocation_ diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index 2cf73cb..708e122 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -129,26 +129,22 @@ namespace detail } wrapper& exactly( std::size_t count ) { - this->e_->invoke( - std::make_shared< detail::exactly >( count ) ); + this->e_->invoke( std::make_shared< detail::exactly >( count ) ); return *this; } wrapper& at_least( std::size_t min ) { - this->e_->invoke( - std::make_shared< detail::at_least >( min ) ); + this->e_->invoke( std::make_shared< detail::at_least >( min ) ); return *this; } wrapper& at_most( std::size_t max ) { - this->e_->invoke( - std::make_shared< detail::at_most >( max ) ); + this->e_->invoke( std::make_shared< detail::at_most >( max ) ); return *this; } wrapper& between( std::size_t min, std::size_t max ) { - this->e_->invoke( - std::make_shared< detail::between >( min, max ) ); + this->e_->invoke( std::make_shared< detail::between >( min, max ) ); return *this; } @@ -250,8 +246,7 @@ namespace detail return error_type::abort(); } valid_ = true; - error_type::call( - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + error_type::call( MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); if( it->functor() ) return it->functor()( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ); @@ -273,8 +268,7 @@ namespace detail context_ = &c; } - friend std::ostream& operator<<( - std::ostream& s, const function_impl& impl ) + friend std::ostream& operator<<( std::ostream& s, const function_impl& impl ) { lock _( impl.mutex_ ); return s << lazy_context( &impl ) << lazy_expectations( &impl ); @@ -285,8 +279,7 @@ namespace detail lazy_context( const function_impl* impl ) : impl_( impl ) {} - friend std::ostream& operator<<( - std::ostream& s, const lazy_context& c ) + friend std::ostream& operator<<( std::ostream& s, const lazy_context& c ) { if( c.impl_->context_ ) c.impl_->context_->serialize( s, *c.impl_ ); @@ -302,8 +295,7 @@ namespace detail lazy_expectations( const function_impl* impl ) : impl_( impl ) {} - friend std::ostream& operator<<( - std::ostream& s, const lazy_expectations& e ) + friend std::ostream& operator<<( std::ostream& s, const lazy_expectations& e ) { for( expectations_cit it = e.impl_->expectations_.begin(); it != e.impl_->expectations_.end(); ++it ) diff --git a/include/turtle/detail/matcher_base_template.hpp b/include/turtle/detail/matcher_base_template.hpp index 2de909e..931b8e9 100644 --- a/include/turtle/detail/matcher_base_template.hpp +++ b/include/turtle/detail/matcher_base_template.hpp @@ -28,8 +28,7 @@ namespace detail virtual bool operator()( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) = 0; - friend std::ostream& operator<<( - std::ostream& s, const matcher_base& m ) + friend std::ostream& operator<<( std::ostream& s, const matcher_base& m ) { m.serialize( s ); return s; diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index 6c2442c..b37ce58 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -59,7 +59,11 @@ namespace detail }; template< typename Signature, int n > - using parameter = tuple_element< n, typename parameter_types::type >; + struct parameter + { + static_assert(n < function_arity::value, "Function signature has not that many parameters"); + using type = typename tuple_element< n, typename parameter_types::type >::type; + }; template struct parameter_type; diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index e96a970..f6dbd7d 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -29,11 +29,9 @@ namespace mock {} bool operator()( std::add_lvalue_reference_t< const Actual > actual ) { - return mock::equal( - mock::detail::unwrap_ref( expected_ ) ).c_( actual ); + return mock::equal( mock::unwrap_ref( expected_ ) ).c_( actual ); } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) + friend std::ostream& operator<<( std::ostream& s, const matcher& m ) { return s << mock::format( m.expected_ ); } @@ -52,8 +50,7 @@ namespace mock { return std::strcmp( actual, expected_ ) == 0; } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) + friend std::ostream& operator<<( std::ostream& s, const matcher& m ) { return s << mock::format( m.expected_ ); } @@ -72,8 +69,7 @@ namespace mock { return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) + friend std::ostream& operator<<( std::ostream& s, const matcher& m ) { return s << mock::format( m.c_ ); } @@ -96,8 +92,7 @@ namespace mock { return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); } - friend std::ostream& operator<<( - std::ostream& s, const matcher& m ) + friend std::ostream& operator<<( std::ostream& s, const matcher& m ) { return s << mock::format( m.c_ ); } diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index bce7640..a5c8052 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -48,7 +48,7 @@ mock::detail::functor< MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock /// MOCK_FUNCTOR_TPL( name, signature ) /// Deprecated. Same as MOCK_FUNCTOR -#define MOCK_FUNCTOR_TPL(f, ...) MOCK_FUNCTOR(F, __VA_ARGS__) +#define MOCK_FUNCTOR_TPL(f, ...) MOCK_FUNCTOR(f, __VA_ARGS__) #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) diff --git a/include/turtle/detail/unwrap_reference.hpp b/include/turtle/unwrap_reference.hpp similarity index 97% rename from include/turtle/detail/unwrap_reference.hpp rename to include/turtle/unwrap_reference.hpp index 376744f..b450cff 100644 --- a/include/turtle/detail/unwrap_reference.hpp +++ b/include/turtle/unwrap_reference.hpp @@ -13,8 +13,6 @@ #include namespace mock -{ -namespace detail { template struct unwrap_reference @@ -40,6 +38,5 @@ namespace detail return t; } } -} #endif // MOCK_UNWRAP_REFERENCE_HPP_INCLUDED diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 53d0b4a..0b68c99 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -30,6 +30,7 @@ elseif(MSVC) endif() endif() +# Regular unit tests in variations file(GLOB_RECURSE testFiles test_*.cpp) set(testsUsingUndefinedCPP test_function test_integration) foreach(testFile IN LISTS testFiles) @@ -52,10 +53,12 @@ foreach(testFile IN LISTS testFiles) target_compile_definitions(${name}_thread_safe PRIVATE MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE) endforeach() +# Link test only to check for a regression add_executable(link-test_defined EXCLUDE_FROM_ALL test_exception.cpp defined_1.cpp defined_2.cpp) target_link_libraries(link-test_defined PRIVATE turtle::turtle TurtleTestMain) add_test(NAME link-test_defined COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target link-test_defined --config $) +# Should fail to compile file(GLOB_RECURSE compileFailureTestFiles fail_*.cpp) foreach(testFile IN LISTS compileFailureTestFiles) get_filename_component(name ${testFile} NAME_WE) @@ -65,3 +68,34 @@ foreach(testFile IN LISTS compileFailureTestFiles) add_test(NAME compile-${name} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${name} --config $) set_tests_properties(compile-${name} PROPERTIES WILL_FAIL TRUE) endforeach() + +# Examples are runnable tests +file(GLOB_RECURSE exampleFiles ${PROJECT_SOURCE_DIR}/doc/example/*.cpp) +foreach(testFile IN LISTS exampleFiles) + get_filename_component(name ${testFile} NAME_WE) + set(name "example_${name}") + add_executable(${name} ${testFile}) + target_link_libraries(${name} PRIVATE turtle::turtle TurtleTestMain) + add_test(NAME ${name} COMMAND ${name}) +endforeach() + +file(GLOB_RECURSE exampleTargetFiles ${PROJECT_SOURCE_DIR}/doc/example/*.hpp) +foreach(name IN ITEMS customization getting_started motivation rationale) + target_sources(example_${name} PUBLIC ${exampleTargetFiles}) +endforeach() + +# Expected to trigger a mock failure +set_tests_properties(example_rationale PROPERTIES WILL_FAIL TRUE PASS_REGULAR_EXPRESSION "Exception thrown but should not") +foreach(name IN ITEMS example_patterns_async_call) + target_link_libraries(${name} PRIVATE Boost::thread) + target_compile_definitions(${name} PRIVATE MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE) +endforeach() + +# Compile benchmarks +file(GLOB_RECURSE benchFiles bench_*.cpp) +foreach(testFile IN LISTS benchFiles) + get_filename_component(name ${testFile} NAME_WE) + add_executable(${name} EXCLUDE_FROM_ALL ${testFile}) + target_link_libraries(${name} PRIVATE turtle::turtle TurtleTestMain) + add_test(NAME ${name} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${name} --config $) +endforeach() \ No newline at end of file diff --git a/test/bench_0_class_10_max_args.cpp b/test/bench_0_class_10_max_args.cpp index 0772e7d..99fb400 100644 --- a/test/bench_0_class_10_max_args.cpp +++ b/test/bench_0_class_10_max_args.cpp @@ -8,3 +8,8 @@ #define MOCK_MAX_ARGS 10 #include + +int main() +{ + return 0; +} diff --git a/test/bench_0_class_20_max_args.cpp b/test/bench_0_class_20_max_args.cpp index b236e09..1a52cd5 100644 --- a/test/bench_0_class_20_max_args.cpp +++ b/test/bench_0_class_20_max_args.cpp @@ -8,3 +8,8 @@ #define MOCK_MAX_ARGS 20 #include + +int main() +{ + return 0; +} diff --git a/test/bench_0_class_30_max_args.cpp b/test/bench_0_class_30_max_args.cpp index d87d02f..3eab294 100644 --- a/test/bench_0_class_30_max_args.cpp +++ b/test/bench_0_class_30_max_args.cpp @@ -8,3 +8,8 @@ #define MOCK_MAX_ARGS 30 #include + +int main() +{ + return 0; +} diff --git a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp index d659f6c..021d95b 100644 --- a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp @@ -1132,3 +1132,8 @@ namespace mock_class_29 c_29; mock_class_30 c_30; } + +int main() +{ + return 0; +} diff --git a/test/bench_30_classes_30_methods_9_args.cpp b/test/bench_30_classes_30_methods_9_args.cpp index beb45bf..17c5a52 100644 --- a/test/bench_30_classes_30_methods_9_args.cpp +++ b/test/bench_30_classes_30_methods_9_args.cpp @@ -1071,3 +1071,8 @@ namespace mock_class_29 c_29; mock_class_30 c_30; } + +int main() +{ + return 0; +} diff --git a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp index 20dad20..6a8023c 100644 --- a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp @@ -1072,3 +1072,8 @@ namespace mock_class_29 c_29; mock_class_30 c_30; } + +int main() +{ + return 0; +} diff --git a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp index e720691..c36c91b 100644 --- a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp @@ -1072,3 +1072,8 @@ namespace mock_class_29 c_29; mock_class_30 c_30; } + +int main() +{ + return 0; +} diff --git a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp index 68096ed..c9c4be2 100644 --- a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp @@ -1072,3 +1072,8 @@ namespace mock_class_29 c_29; mock_class_30 c_30; } + +int main() +{ + return 0; +} diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 97adaef..3fb9397 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -299,7 +299,7 @@ namespace template< typename T > struct tpl_functor_class { - MOCK_FUNCTOR_TPL( f, void( T ) ); + MOCK_FUNCTOR( f, void( T ) ); }; } From 6702d68940735a6e507d34c1c55071449e41fd91 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 11 Jul 2020 14:45:10 +0200 Subject: [PATCH 029/126] Use range-based for-loops --- .../turtle/detail/expectation_template.hpp | 24 +++----- .../turtle/detail/function_impl_template.hpp | 55 ++++++++++--------- include/turtle/detail/group.hpp | 20 +++---- include/turtle/detail/object_impl.hpp | 7 +-- include/turtle/detail/root.hpp | 9 +-- include/turtle/detail/sequence_impl.hpp | 3 +- 6 files changed, 51 insertions(+), 67 deletions(-) diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index 1791e0f..4424847 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -162,9 +162,8 @@ namespace detail ~expectation() { - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - (*it)->remove( this ); + for( auto& sequence: sequences_) + sequence->remove( this ); } void invoke( const std::shared_ptr< invocation >& i ) @@ -220,14 +219,14 @@ namespace detail bool invoke() const { - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - if( ! (*it)->is_valid( this ) ) + for( auto& sequence: sequences_) + { + if( ! sequence->is_valid( this ) ) return false; + } bool result = invocation_->invoke(); - for( sequences_cit it = sequences_.begin(); - it != sequences_.end(); ++it ) - (*it)->invalidate( this ); + for( auto& sequence: sequences_) + sequence->invalidate( this ); return result; } @@ -251,18 +250,13 @@ namespace detail } private: - typedef std::vector< - std::shared_ptr< sequence_impl > - > sequences_type; - typedef sequences_type::const_iterator sequences_cit; - std::shared_ptr< invocation > invocation_; std::shared_ptr< matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > > matcher_; - sequences_type sequences_; + std::vector< std::shared_ptr > sequences_; const char* file_; int line_; }; diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index 708e122..727632d 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -52,14 +52,19 @@ namespace detail virtual ~function_impl() { if( valid_ && exceptions_ >= exceptions() ) - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( ! it->verify() ) + { + for( const auto& expectation: expectations_ ) + { + if( ! expectation.verify() ) + { error_type::fail( "untriggered expectation", boost::unit_test::lazy_ostream::instance() << lazy_context( this ) << lazy_expectations( this ), - it->file(), it->line() ); + expectation.file(), expectation.line() ); + } + } + } if( context_ ) context_->remove( *this ); } @@ -67,17 +72,18 @@ namespace detail virtual bool verify() const { lock _( mutex_ ); - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( ! it->verify() ) + for( const auto& expectation: expectations_ ) + { + if( ! expectation.verify() ) { valid_ = false; error_type::fail( "verification failed", boost::unit_test::lazy_ostream::instance() << lazy_context( this ) << lazy_expectations( this ), - it->file(), it->line() ); + expectation.file(), expectation.line() ); } + } return valid_; } @@ -228,30 +234,31 @@ namespace detail { lock _( mutex_ ); valid_ = false; - for( expectations_cit it = expectations_.begin(); - it != expectations_.end(); ++it ) - if( it->is_valid( + for( const auto& expectation: expectations_ ) + { + if( expectation.is_valid( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ) ) { - if( ! it->invoke() ) + if( ! expectation.invoke() ) { error_type::fail( "sequence failed", - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); return error_type::abort(); } - if( ! it->valid() ) + if( ! expectation.valid() ) { error_type::fail( "missing action", - MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); + MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); return error_type::abort(); } valid_ = true; - error_type::call( MOCK_FUNCTION_CONTEXT, it->file(), it->line() ); - if( it->functor() ) - return it->functor()( + error_type::call( MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); + if( expectation.functor() ) + return expectation.functor()( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ); - return it->trigger(); + return expectation.trigger(); } + } error_type::fail( "unexpected call", MOCK_FUNCTION_CONTEXT ); return error_type::abort(); } @@ -297,18 +304,14 @@ namespace detail {} friend std::ostream& operator<<( std::ostream& s, const lazy_expectations& e ) { - for( expectations_cit it = e.impl_->expectations_.begin(); - it != e.impl_->expectations_.end(); ++it ) - s << std::endl << *it; + for( const auto& expectation: e.impl_->expectations_ ) + s << std::endl << expectation; return s; } const function_impl* impl_; }; - typedef std::list< expectation_type > expectations_type; - typedef typename expectations_type::const_iterator expectations_cit; - - expectations_type expectations_; + std::list< expectation_type > expectations_; context* context_; mutable bool valid_; const int exceptions_; diff --git a/include/turtle/detail/group.hpp b/include/turtle/detail/group.hpp index d0668cc..16ce5a3 100644 --- a/include/turtle/detail/group.hpp +++ b/include/turtle/detail/group.hpp @@ -36,27 +36,21 @@ namespace detail bool verify() const { bool valid = true; - for( verifiables_cit it = verifiables_.begin(); - it != verifiables_.end(); ++it ) - if( ! (*it)->verify() ) + for( const auto* verifiable: verifiables_ ) + if( ! verifiable->verify() ) valid = false; return valid; } void reset() { - const verifiables_t verifiables = verifiables_; - for( verifiables_cit it = verifiables.begin(); - it != verifiables.end(); ++it ) - if( std::find( verifiables_.begin(), verifiables_.end(), *it ) - != verifiables_.end() ) - (*it)->reset(); + const auto verifiables = verifiables_; + for( auto* verifiable: verifiables ) + if( std::find( verifiables_.begin(), verifiables_.end(), verifiable ) != verifiables_.end() ) + verifiable->reset(); } private: - typedef std::vector< verifiable* > verifiables_t; - typedef verifiables_t::const_iterator verifiables_cit; - - verifiables_t verifiables_; + std::vector< verifiable* > verifiables_; }; } } // mock diff --git a/include/turtle/detail/object_impl.hpp b/include/turtle/detail/object_impl.hpp index c411ef6..6f5d4eb 100644 --- a/include/turtle/detail/object_impl.hpp +++ b/include/turtle/detail/object_impl.hpp @@ -58,7 +58,7 @@ namespace detail virtual void serialize( std::ostream& s, const verifiable& v ) const { lock _( mutex_ ); - children_cit it = children_.find( &v ); + const auto it = children_.find( &v ); if( it != children_.end() ) s << it->second; else @@ -78,12 +78,9 @@ namespace detail } private: - typedef std::map< const verifiable*, child > children_t; - typedef children_t::const_iterator children_cit; - group group_; parent parent_; - children_t children_; + std::map< const verifiable*, child > children_; const std::shared_ptr< mutex > mutex_; }; } diff --git a/include/turtle/detail/root.hpp b/include/turtle/detail/root.hpp index dae3790..09c1f95 100644 --- a/include/turtle/detail/root.hpp +++ b/include/turtle/detail/root.hpp @@ -33,7 +33,7 @@ namespace detail boost::unit_test::const_string name ) { scoped_lock _( mutex_ ); - children_t::iterator it = children_.lower_bound( &v ); + auto it = children_.lower_bound( &v ); if( it == children_.end() || children_.key_comp()( &v, it->first ) ) it = children_.insert( it, @@ -67,7 +67,7 @@ namespace detail virtual void serialize( std::ostream& s, const verifiable& v ) const { scoped_lock _( mutex_ ); - children_cit it = children_.find( &v ); + const auto it = children_.find( &v ); if( it != children_.end() ) s << it->second; else @@ -120,11 +120,8 @@ namespace detail child child_; }; - typedef std::map< const verifiable*, counter_child > children_t; - typedef children_t::const_iterator children_cit; - parents_t parents_; - children_t children_; + std::map< const verifiable*, counter_child > children_; group group_; mutable mutex mutex_; diff --git a/include/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp index 84087c4..d3f9f90 100644 --- a/include/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -48,8 +48,7 @@ namespace detail void invalidate( const void* e ) { lock _( mutex_ ); - elements_type::iterator it = - std::find( elements_.begin(), elements_.end(), e ); + const auto it = std::find( elements_.begin(), elements_.end(), e ); if( it != elements_.end() ) elements_.erase( elements_.begin(), it ); } From 9af9f0e2eac01980df7401c898aa373f907bfd5e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 11 Jul 2020 14:58:37 +0200 Subject: [PATCH 030/126] Replace Boost.TypeInfo --- include/turtle/detail/type_name.hpp | 36 ++++++++++++++--------------- include/turtle/mock.hpp | 2 +- test/detail/test_type_name.cpp | 6 ++--- test/test_object.cpp | 6 ++--- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/include/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp index e3b4df9..72e3025 100644 --- a/include/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -15,15 +15,6 @@ #include #include #include -#if BOOST_VERSION >= 107000 -# include -# define MOCK_TYPEID( t ) BOOST_CORE_TYPEID(t) -# define MOCK_TYPEINFO boost::core::typeinfo -#else -# include -# define MOCK_TYPEID( t ) BOOST_SP_TYPEID(t) -# define MOCK_TYPEINFO boost::detail::sp_typeinfo -#endif #include #include #include @@ -33,8 +24,6 @@ #include #endif -#define MOCK_TYPE_NAME( t ) mock::detail::type_name( MOCK_TYPEID(t) ) - namespace mock { namespace detail @@ -42,7 +31,7 @@ namespace detail class type_name { public: - explicit type_name( const MOCK_TYPEINFO& info ) + explicit type_name( const std::type_info& info ) : info_( &info ) {} friend std::ostream& operator<<( std::ostream& s, const type_name& t ) @@ -51,8 +40,7 @@ namespace detail return s; } private: - void serialize( std::ostream& s, - const MOCK_TYPEINFO& info ) const + static void serialize( std::ostream& s, const std::type_info& info ) { const char* name = info.name(); #ifdef __GNUC__ @@ -69,7 +57,7 @@ namespace detail typedef std::string::size_type size_type; - void serialize( std::ostream& s, std::string name ) const + static void serialize( std::ostream& s, std::string name ) { const size_type nm = rfind( name, ':' ) + 1; const size_type tpl = name.find( '<', nm ); @@ -80,7 +68,7 @@ namespace detail list( s, name.substr( tpl + 1, name.rfind( '>' ) - tpl - 1 ) ); s << '>'; } - void list( std::ostream& s, const std::string& name ) const + static void list( std::ostream& s, const std::string& name ) { const size_type comma = rfind( name, ',' ); if( comma != std::string::npos ) @@ -90,7 +78,7 @@ namespace detail } serialize( s, name.substr( comma + 1 ) ); } - std::string clean( std::string name ) const + static std::string clean( std::string name ) { boost::algorithm::trim( name ); boost::algorithm::erase_all( name, "class " ); @@ -102,7 +90,7 @@ namespace detail boost::algorithm::replace_all( name, "* ", "*" ); return name; } - size_type rfind( const std::string& name, char c ) const + static size_type rfind( const std::string& name, char c ) { size_type count = 0; for( size_type i = name.size() - 1; i > 0; --i ) @@ -117,8 +105,18 @@ namespace detail return std::string::npos; } - const MOCK_TYPEINFO* info_; + const std::type_info* info_; }; + template< typename T > + type_name make_type_name() + { + return type_name( typeid(T) ); + } + template< typename T > + type_name make_type_name( const T& ) + { + return type_name( typeid(T) ); + } } } // mock diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index a5c8052..423ab74 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -63,7 +63,7 @@ { \ mock::detail::configure( *this, t##_mock_, \ instance.substr( 0, instance.rfind( BOOST_PP_STRINGIZE(t) ) ), \ - MOCK_TYPE_NAME(*this), \ + mock::detail::make_type_name(*this), \ BOOST_PP_STRINGIZE(t) ); \ return t##_mock_; \ } diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index 292414a..cdaf736 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -13,9 +13,9 @@ namespace { template< typename T > - std::string to_string( const T& ) + std::string to_string( const T& t) { - return boost::lexical_cast< std::string >( MOCK_TYPE_NAME(T) ); + return boost::lexical_cast< std::string >( mock::detail::make_type_name(t) ); } } @@ -111,7 +111,7 @@ BOOST_AUTO_TEST_CASE( name_of_type_in_unnamed_inner_namespace_is_extracted ) BOOST_AUTO_TEST_CASE( name_of_local_type_is_extracted ) { struct my_local_type {}; - BOOST_CHECK_EQUAL( "my_local_type", boost::lexical_cast< std::string >( MOCK_TYPE_NAME(my_local_type) ) ); + BOOST_CHECK_EQUAL( "my_local_type", boost::lexical_cast< std::string >( mock::detail::make_type_name() ) ); } namespace diff --git a/test/test_object.cpp b/test/test_object.cpp index a2c45de..4e8dba2 100644 --- a/test/test_object.cpp +++ b/test/test_object.cpp @@ -33,7 +33,7 @@ namespace { fixture() { - mock::detail::configure( o, e, "instance", MOCK_TYPE_NAME(o), "name" ); + mock::detail::configure( o, e, "instance", mock::detail::make_type_name(o), "name" ); } object o; mock::detail::function< void() > e; @@ -73,7 +73,7 @@ BOOST_FIXTURE_TEST_CASE( an_object_is_assignable_by_sharing_its_state, mock_erro mock::detail::function< void() > e; { object o2; - mock::detail::configure( o2, e, "instance", MOCK_TYPE_NAME(o2), "name" ); + mock::detail::configure( o2, e, "instance", mock::detail::make_type_name(o2), "name" ); e.expect().once(); o1 = o2; CHECK_ERROR( @@ -93,7 +93,7 @@ BOOST_FIXTURE_TEST_CASE( an_object_is_copiable_by_sharing_its_state, mock_error_ auto o2 = std::make_unique(); const object o1( *o2 ); mock::detail::function< void() > e; - mock::detail::configure( *o2, e, "instance", MOCK_TYPE_NAME(*o2), "name" ); + mock::detail::configure( *o2, e, "instance", mock::detail::make_type_name(*o2), "name" ); e.expect().once(); CHECK_ERROR( BOOST_CHECK( ! mock::verify( *o2 ) ), From 446e70be536c8cf7c2f5467cb65e211359375bd8 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 12:42:31 +0200 Subject: [PATCH 031/126] Remove boost::result_of --- test/detail/test_function.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index c0d4977..0a3d59b 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -22,10 +21,10 @@ namespace { std::function< void() > static_f; - static_assert( std::is_same< void, boost::result_of< mock::detail::function< void() >() >::type >::value, "!"); - static_assert( std::is_same< int, boost::result_of< mock::detail::function< int() >() >::type >::value, "!"); - static_assert( std::is_same< void, boost::result_of< mock::detail::function< void( float ) >( float ) >::type >::value, "!"); - static_assert( std::is_same< int, boost::result_of< mock::detail::function< int( float ) >( float ) >::type >::value, "!"); + static_assert( std::is_same< void, decltype( mock::detail::function< void() >{}() ) >::value, "!"); + static_assert( std::is_same< int, decltype( mock::detail::function< int() >{}() ) >::value, "!"); + static_assert( std::is_same< void, decltype( mock::detail::function< void( float ) >{}( std::declval() ) ) >::value, "!"); + static_assert( std::is_same< int, decltype( mock::detail::function< int( float ) >{}( std::declval() ) ) >::value, "!"); } // functor From 898a5a4524a16afbcaeef9ab7f90ef58c2eca80b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 13:04:14 +0200 Subject: [PATCH 032/126] Document and improve is_functor --- include/turtle/detail/function.hpp | 1 - include/turtle/detail/is_functor.hpp | 12 +++++------- include/turtle/log.hpp | 20 +++++++++++--------- test/detail/test_is_functor.cpp | 4 ++-- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index fed3802..e231a95 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include diff --git a/include/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp index ca804b7..0b8f53a 100644 --- a/include/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -17,15 +17,13 @@ namespace mock { namespace detail { - template< typename F, typename P, class = void > - struct is_callable : std::false_type + /// Trait to return true if F is a functor that can be called with a single argument Arg + template< typename F, typename Arg, class = void > + struct is_functor : std::false_type {}; - template< typename F, typename P > - struct is_callable< F, P, boost::void_t()( std::declval

() ) )> >: std::true_type + template< typename F, typename Arg > + struct is_functor< F, Arg, boost::void_t()( std::declval() ) )> >: std::true_type {}; - - template< typename T, typename P > - using is_functor = is_callable< T, P >; } } // mock diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index b7728d0..06a8928 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -13,7 +13,6 @@ #include "stream.hpp" #include "format.hpp" #include -#include #include #include #include @@ -51,6 +50,15 @@ namespace detail s << (it == begin ? "" : ",") << mock::format( *it ); s << ')'; } + template + struct is_callable_impl: std::false_type + {}; + template + struct is_callable_impl: std::true_type + {}; + template + struct is_callable: is_callable_impl< std::remove_cv_t > + {}; } #ifdef MOCK_AUTO_PTR @@ -182,19 +190,13 @@ namespace detail } template< typename T > - std::enable_if_t< - boost::function_types::is_callable_builtin< T >::value, - stream& - > + std::enable_if_t< detail::is_callable< T >::value, stream& > operator<<( stream& s, T* ) { return s << '?'; } template< typename T > - std::enable_if_t< - !boost::function_types::is_callable_builtin< T >::value, - stream& - > + std::enable_if_t< !detail::is_callable< T >::value, stream& > operator<<( stream& s, T* t ) { *s.s_ << t; diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index e384f83..6d48a19 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -28,12 +28,12 @@ namespace template< typename T > void is_functor( T ) { - static_assert( mock::detail::is_functor< T, int >::value, "Should be functor"); + static_assert( mock::detail::is_functor< T, int >::value, "Should be a functor taking an int"); } template< typename T > void is_not_functor( T ) { - static_assert( !mock::detail::is_functor< T, int >::value, "Should not be a functor" ); + static_assert( !mock::detail::is_functor< T, int >::value, "Should not be a functor taking an int" ); } void f0() {} From 04dff97fdeca79c3fced1240d893d2da3a27a6d9 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 13:38:54 +0200 Subject: [PATCH 033/126] Use explicit streaming ops instead of Boost.LexicalCast --- doc/example/patterns_quick_constraint.cpp | 6 ++++-- test/detail/test_type_name.cpp | 8 +++++--- test/mock_error.hpp | 13 ++++++------- test/test_log.cpp | 13 +++++++++---- test/test_mock.cpp | 1 - 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/doc/example/patterns_quick_constraint.cpp b/doc/example/patterns_quick_constraint.cpp index f1ae03b..5163020 100644 --- a/doc/example/patterns_quick_constraint.cpp +++ b/doc/example/patterns_quick_constraint.cpp @@ -35,13 +35,15 @@ namespace //] //[ quick_constraint_solution -#include +#include namespace // in the same namespace as 'my_class' { bool operator==( const my_class& actual, const std::string& expected ) // the first part of the trick is to compare to a string { - return boost::lexical_cast< std::string >( actual ) == expected; + std::ostringstream s; + s << actual; + return s.str() == expected; } } // mock diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index cdaf736..3040965 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -8,14 +8,16 @@ #include #include -#include +#include namespace { template< typename T > std::string to_string( const T& t) { - return boost::lexical_cast< std::string >( mock::detail::make_type_name(t) ); + std::ostringstream s; + s << mock::detail::make_type_name(t); // Typename can be streamed + return s.str(); } } @@ -111,7 +113,7 @@ BOOST_AUTO_TEST_CASE( name_of_type_in_unnamed_inner_namespace_is_extracted ) BOOST_AUTO_TEST_CASE( name_of_local_type_is_extracted ) { struct my_local_type {}; - BOOST_CHECK_EQUAL( "my_local_type", boost::lexical_cast< std::string >( mock::detail::make_type_name() ) ); + BOOST_CHECK_EQUAL( "my_local_type", to_string( my_local_type() ) ); } namespace diff --git a/test/mock_error.hpp b/test/mock_error.hpp index bd3fbe9..5821f52 100644 --- a/test/mock_error.hpp +++ b/test/mock_error.hpp @@ -11,9 +11,9 @@ #define MOCK_ERROR_POLICY mock_error #include -#include #include #include +#include struct mock_error_data_t : mock::detail::singleton< mock_error_data_t > { @@ -68,18 +68,17 @@ struct mock_error {} template< typename Context > - static void call( const Context& /*context*/, - const char* /*file*/, int /*line*/ ) + static void call( const Context& /*context*/, const char* /*file*/, int /*line*/ ) { mock_error_data.call(); } template< typename Context > - static void fail( const std::string& message, const Context& context, - const char* file = "", int line = 0 ) + static void fail( const std::string& message, const Context& context, const char* file = "", int line = 0 ) { - mock_error_data.fail( message, - boost::lexical_cast< std::string >( context ), file, line ); + std::ostringstream s; + s << context; // Context can be streamed + mock_error_data.fail( message, s.str(), file, line ); } }; diff --git a/test/test_log.cpp b/test/test_log.cpp index f4d7c81..f26d649 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #ifdef BOOST_MSVC #pragma warning( push, 0 ) @@ -55,13 +54,19 @@ BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized ) { { int i = 0; + std::ostringstream s; + s << &i; + const std::string pointerValue = s.str(); BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + BOOST_CHECK_EQUAL( pointerValue, to_string( &i ) ); } { const int i = 0; + std::ostringstream s; + s << &i; + const std::string pointerValue = s.str(); BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( &i ), to_string( &i ) ); + BOOST_CHECK_EQUAL( pointerValue, to_string( &i ) ); } } @@ -630,7 +635,7 @@ BOOST_AUTO_TEST_CASE( mock_detail_template_template_streamable_yields_its_value_ BOOST_AUTO_TEST_CASE( unsigned_char_is_serialized_as_int ) { - BOOST_CHECK_EQUAL( boost::lexical_cast< std::string >( static_cast< int >( 'a' ) ), to_string< unsigned char >( 'a' ) ); + BOOST_CHECK_EQUAL( std::to_string( static_cast< int >( 'a' ) ), to_string< unsigned char >( 'a' ) ); } namespace diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 3fb9397..34d0325 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -9,7 +9,6 @@ #include "mock_error.hpp" #include #include -#include #include namespace From 823fd994ff88fb0a6f4fbba28ded8e8c51cd7ab3 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 13:44:24 +0200 Subject: [PATCH 034/126] Remove some Boost.PP stuff --- include/turtle/config.hpp | 14 -------------- test/test_integration.cpp | 4 +++- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 8ca1464..28cfb68 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -12,8 +12,6 @@ #define MOCK_CONFIG_HPP_INCLUDED #include -#include -#include #ifndef MOCK_ERROR_POLICY # define MOCK_ERROR_POLICY mock::error @@ -28,18 +26,6 @@ # define MOCK_MAX_SEQUENCES 10 #endif -#ifndef BOOST_FUNCTION_MAX_ARGS -# define BOOST_FUNCTION_MAX_ARGS MOCK_MAX_ARGS -#elif BOOST_PP_LESS(BOOST_FUNCTION_MAX_ARGS, MOCK_MAX_ARGS) -# error BOOST_FUNCTION_MAX_ARGS must be set to MOCK_MAX_ARGS or higher -#endif - -#ifndef BOOST_FT_MAX_ARITY -# define BOOST_FT_MAX_ARITY BOOST_PP_INC(MOCK_MAX_ARGS) -#elif BOOST_PP_LESS_EQUAL(BOOST_FT_MAX_ARITY, MOCK_MAX_ARGS) -# error BOOST_FT_MAX_ARITY must be set to MOCK_MAX_ARGS + 1 or higher -#endif - #if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) # ifndef MOCK_NO_HDR_MUTEX # define MOCK_HDR_MUTEX diff --git a/test/test_integration.cpp b/test/test_integration.cpp index f517a6a..c988dc0 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -593,7 +593,9 @@ namespace template< typename T1, typename T2 > struct my_base {}; - MOCK_BASE_CLASS( my_comma_mock, my_base< int BOOST_PP_COMMA() int > ) + MOCK_BASE_CLASS( my_comma_mock, my_base< int, int > ) + {}; + MOCK_BASE_CLASS( my_boost_pp_comma_mock, my_base< int BOOST_PP_COMMA() int > ) {}; } From d9a10afc127f3e7f59bb9507c6e7b9345bf08a54 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 17:46:41 +0200 Subject: [PATCH 035/126] Include definition for void_t to avoid dependency on Boost 1.64+ --- include/turtle/constraints.hpp | 4 ++-- include/turtle/detail/is_functor.hpp | 4 ++-- include/turtle/detail/void_t.hpp | 27 +++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 include/turtle/detail/void_t.hpp diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index 0c679b7..af18b65 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -13,8 +13,8 @@ #include "constraint.hpp" #include "detail/move_helper.hpp" #include "unwrap_reference.hpp" +#include "detail/void_t.hpp" #include -#include #if BOOST_VERSION >= 107000 #include #else @@ -118,7 +118,7 @@ namespace detail {}; template - struct has_equal_to() == std::declval())>>: std::true_type + struct has_equal_to() == std::declval())>>: std::true_type {}; template< typename Expected > diff --git a/include/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp index 0b8f53a..066cb92 100644 --- a/include/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -10,7 +10,7 @@ #define MOCK_IS_FUNCTOR_HPP_INCLUDED #include "../config.hpp" -#include +#include "void_t.hpp" #include namespace mock @@ -22,7 +22,7 @@ namespace detail struct is_functor : std::false_type {}; template< typename F, typename Arg > - struct is_functor< F, Arg, boost::void_t()( std::declval() ) )> >: std::true_type + struct is_functor< F, Arg, void_t()( std::declval() ) )> >: std::true_type {}; } } // mock diff --git a/include/turtle/detail/void_t.hpp b/include/turtle/detail/void_t.hpp new file mode 100644 index 0000000..4c45e04 --- /dev/null +++ b/include/turtle/detail/void_t.hpp @@ -0,0 +1,27 @@ +// http://turtle.sourceforge.net +// +// Copyright Alexander Grund 2020 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_VOID_T_HPP_INCLUDED +#define MOCK_VOID_T_HPP_INCLUDED + +namespace mock +{ +namespace detail +{ + template + struct make_void + { + using type = void; + }; + /// Standard helper to implement the detection idiom. Returns always void + template + using void_t = typename make_void::type; +} +} // mock + +#endif // MOCK_VOID_T_HPP_INCLUDED From c2617ba360454eaefcce214dca92f71d4ed3d7e6 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 17:53:18 +0200 Subject: [PATCH 036/126] Update from deprecated unit test header inclusion --- doc/example/getting_started.cpp | 2 +- doc/example/limitations_const_parameter_warning.cpp | 2 +- doc/example/limitations_literal_zero.cpp | 2 +- doc/example/limitations_non_virtual_method.cpp | 2 +- doc/example/limitations_protected_private_method.cpp | 2 +- doc/example/limitations_template_base_class_method.cpp | 2 +- doc/example/limitations_template_method.cpp | 2 +- doc/example/limitations_throw_specifier.cpp | 2 +- doc/example/motivation.cpp | 2 +- doc/example/patterns_async_call.cpp | 2 +- doc/example/patterns_invoke_functor.cpp | 2 +- doc/example/patterns_quick_constraint.cpp | 2 +- doc/example/patterns_retrieve_cref.cpp | 2 +- doc/example/patterns_static_objects.cpp | 2 +- doc/example/reference.cpp | 2 +- test/detail/test_function.cpp | 2 +- test/detail/test_invocation.cpp | 2 +- test/detail/test_is_functor.cpp | 2 +- test/detail/test_signature.cpp | 2 +- test/detail/test_type_name.cpp | 2 +- test/test_constraint.cpp | 2 +- test/test_constraints.cpp | 2 +- test/test_exception.cpp | 2 +- test/test_integration.cpp | 2 +- test/test_log.cpp | 2 +- test/test_matcher.cpp | 2 +- test/test_max_args.cpp | 2 +- test/test_mock.cpp | 2 +- test/test_object.cpp | 2 +- test/test_sequence.cpp | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/doc/example/getting_started.cpp b/doc/example/getting_started.cpp index 140a8a4..328cf8e 100644 --- a/doc/example/getting_started.cpp +++ b/doc/example/getting_started.cpp @@ -50,7 +50,7 @@ struct configurable_mock_error #define MOCK_USE_BOOST_TEST //[ prerequisite -#include +#include #include //] #include "calculator.hpp" diff --git a/doc/example/limitations_const_parameter_warning.cpp b/doc/example/limitations_const_parameter_warning.cpp index 049c123..4cddbd5 100644 --- a/doc/example/limitations_const_parameter_warning.cpp +++ b/doc/example/limitations_const_parameter_warning.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace diff --git a/doc/example/limitations_literal_zero.cpp b/doc/example/limitations_literal_zero.cpp index 81ba680..badd1c2 100644 --- a/doc/example/limitations_literal_zero.cpp +++ b/doc/example/limitations_literal_zero.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace diff --git a/doc/example/limitations_non_virtual_method.cpp b/doc/example/limitations_non_virtual_method.cpp index e5fd30e..96258f4 100644 --- a/doc/example/limitations_non_virtual_method.cpp +++ b/doc/example/limitations_non_virtual_method.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include //[ limitations_non_virtual_method_problem diff --git a/doc/example/limitations_protected_private_method.cpp b/doc/example/limitations_protected_private_method.cpp index ca621a8..887b10f 100644 --- a/doc/example/limitations_protected_private_method.cpp +++ b/doc/example/limitations_protected_private_method.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace diff --git a/doc/example/limitations_template_base_class_method.cpp b/doc/example/limitations_template_base_class_method.cpp index bbbeb4d..b8e6839 100644 --- a/doc/example/limitations_template_base_class_method.cpp +++ b/doc/example/limitations_template_base_class_method.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace diff --git a/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp index f955e80..72874c5 100644 --- a/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace limitations_template_method_problem diff --git a/doc/example/limitations_throw_specifier.cpp b/doc/example/limitations_throw_specifier.cpp index cccaf58..1c72731 100644 --- a/doc/example/limitations_throw_specifier.cpp +++ b/doc/example/limitations_throw_specifier.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace diff --git a/doc/example/motivation.cpp b/doc/example/motivation.cpp index 614d300..aadc975 100644 --- a/doc/example/motivation.cpp +++ b/doc/example/motivation.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include "calculator.hpp" #include "mock_view.hpp" diff --git a/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp index 2fd3834..9a9f9e7 100644 --- a/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -38,7 +38,7 @@ namespace mock_test } //[ async_call_solution -#include +#include #include #include diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index e9f6655..cabdb67 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -32,7 +32,7 @@ void function( base_class& c) } //[ invoke_functor_solution -#include +#include #include namespace diff --git a/doc/example/patterns_quick_constraint.cpp b/doc/example/patterns_quick_constraint.cpp index 5163020..13bec6b 100644 --- a/doc/example/patterns_quick_constraint.cpp +++ b/doc/example/patterns_quick_constraint.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ quick_constraint_problem -#include +#include #include #include diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index 16f5a07..287bf03 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -38,7 +38,7 @@ namespace mock_test } //[ retrieve_cref_solution -#include +#include #include namespace mock_test diff --git a/doc/example/patterns_static_objects.cpp b/doc/example/patterns_static_objects.cpp index 6d47362..d5e198e 100644 --- a/doc/example/patterns_static_objects.cpp +++ b/doc/example/patterns_static_objects.cpp @@ -10,7 +10,7 @@ #define ASSERT_VERIFY_FAIL() mock::reset() //[ static_objects_problem -#include +#include #include #include diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 97762a3..f1af6ba 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include namespace class_example_1 diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 0a3d59b..46e5d5c 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -10,7 +10,7 @@ #include "../undefined.hpp" #include #include -#include +#include #include #include #include diff --git a/test/detail/test_invocation.cpp b/test/detail/test_invocation.cpp index 7bec6f8..93ed575 100644 --- a/test/detail/test_invocation.cpp +++ b/test/detail/test_invocation.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include BOOST_AUTO_TEST_CASE( unlimited ) { diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 6d48a19..9ab36b0 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include #ifdef BOOST_MSVC #pragma warning( push, 0 ) #endif diff --git a/test/detail/test_signature.cpp b/test/detail/test_signature.cpp index c366aae..f20d2a3 100644 --- a/test/detail/test_signature.cpp +++ b/test/detail/test_signature.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include #include namespace diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index 3040965..0a0fc97 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include #include namespace diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index 3aebf11..ca35e7b 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include namespace { diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 3350de7..b92f728 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include BOOST_AUTO_TEST_CASE( all_comparison_constraints_can_be_instanciated ) { diff --git a/test/test_exception.cpp b/test/test_exception.cpp index 818ddeb..a2bed75 100644 --- a/test/test_exception.cpp +++ b/test/test_exception.cpp @@ -8,7 +8,7 @@ #define MOCK_USE_BOOST_TEST #include -#include +#include BOOST_AUTO_TEST_CASE( a_mock_exception_is_not_an_std_exception_to_not_mess_with_user_exceptions ) { diff --git a/test/test_integration.cpp b/test/test_integration.cpp index c988dc0..8b3cd93 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -9,7 +9,7 @@ #include "mock_error.hpp" #include "undefined.hpp" #include -#include +#include #include #include #include diff --git a/test/test_log.cpp b/test/test_log.cpp index f26d649..141f9e2 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include #include #include #include diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index 86197a8..916f20b 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include +#include namespace { diff --git a/test/test_max_args.cpp b/test/test_max_args.cpp index 970a25f..7d74943 100644 --- a/test/test_max_args.cpp +++ b/test/test_max_args.cpp @@ -8,7 +8,7 @@ #include "mock_error.hpp" #include -#include +#include #include #define IDENTITY(z, n, d) d diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 34d0325..25006b2 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -8,7 +8,7 @@ #include "mock_error.hpp" #include -#include +#include #include namespace diff --git a/test/test_object.cpp b/test/test_object.cpp index 4e8dba2..bd11dc3 100644 --- a/test/test_object.cpp +++ b/test/test_object.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include namespace diff --git a/test/test_sequence.cpp b/test/test_sequence.cpp index d14de02..2a7b584 100644 --- a/test/test_sequence.cpp +++ b/test/test_sequence.cpp @@ -9,7 +9,7 @@ #include "mock_error.hpp" #include #include -#include +#include BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture ) { From 91b738da272233487f45cf1d216508d1b807d5ab Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 18:01:12 +0200 Subject: [PATCH 037/126] Avoid Boost.Bind deprecation warning --- test/detail/test_is_functor.cpp | 15 +++++++++++---- test/test_log.cpp | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 9ab36b0..0b58b13 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -17,7 +17,9 @@ #pragma warning( pop ) #endif #include -#include +#include +#include +#include #include namespace @@ -73,9 +75,14 @@ BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) BOOST_AUTO_TEST_CASE( bind_is_functor ) { - is_functor( boost::bind( &f0 ) ); - is_functor( boost::bind( &f1, _1 ) ); - is_functor( boost::bind( &f2, "", _1 ) ); + { +#if BOOST_VERSION >= 106000 + using namespace boost::placeholders; +#endif + is_functor( boost::bind( &f0 ) ); + is_functor( boost::bind( &f1, _1 ) ); + is_functor( boost::bind( &f2, "", _1 ) ); + } is_functor( std::bind( &f0 ) ); is_functor( std::bind( &f1, std::placeholders::_1 ) ); is_functor( std::bind( &f2, "", std::placeholders::_1 ) ); diff --git a/test/test_log.cpp b/test/test_log.cpp index 141f9e2..12dc0df 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -23,7 +23,7 @@ #include #include #endif -#include +#include #include #include #include From 492e6281d79ab9abf85da528a0cc4a6d16979f9e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 12 Jul 2020 18:33:32 +0200 Subject: [PATCH 038/126] Avoid unused paramter warning in example --- doc/example/customization.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index ddc5324..98aa0e1 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -141,6 +141,11 @@ BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cre #include //] +#if defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +#endif + //[ custom_policy template< typename Result > struct custom_policy @@ -167,6 +172,10 @@ struct custom_policy }; //] +#if defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + #undef MOCK_ERROR_POLICY //[ define_custom_policy #define MOCK_ERROR_POLICY custom_policy From 558e1ca13540e7dbc6aeb5bc4df4931e9d6d81b1 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 14 Jul 2020 19:14:36 +0200 Subject: [PATCH 039/126] Don't error when TURTLE_AUTO_PTR=ON --- test/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0b68c99..39bb8ff 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -21,6 +21,10 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" target_compile_options(TurtleTestMain INTERFACE -Wno-unused-function) endif() if(TURTLE_WERROR) + check_cxx_compiler_flag(-Wdeprecated-declarations TURTLE_CXX_DEPRECATED_DECLARATIONS) + if(TURTLE_CXX_DEPRECATED_DECLARATIONS) + target_compile_options(TurtleTestMain INTERFACE -Wno-error=deprecated-declarations) + endif() target_compile_options(TurtleTestMain INTERFACE -Werror) endif() elseif(MSVC) @@ -98,4 +102,4 @@ foreach(testFile IN LISTS benchFiles) add_executable(${name} EXCLUDE_FROM_ALL ${testFile}) target_link_libraries(${name} PRIVATE turtle::turtle TurtleTestMain) add_test(NAME ${name} COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target ${name} --config $) -endforeach() \ No newline at end of file +endforeach() From f3d6564d2bab37aa1475b7bd270d508b7e736c32 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 14 Jul 2020 19:33:00 +0200 Subject: [PATCH 040/126] Use make_* functions instead of new --- include/turtle/detail/action.hpp | 6 +++--- include/turtle/detail/expectation_template.hpp | 12 ++++++------ include/turtle/stream.hpp | 12 +++--------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index ac886a4..204b4f2 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -124,19 +124,19 @@ namespace detail template< typename T > T& store( T&& t ) { - v_.reset( new value_imp< T >( std::move( t ) ) ); + v_ = std::make_shared< value_imp >( std::move( t ) ); return static_cast< value_imp< T >& >( *v_ ).t_; } template< typename T > T& store( const T& t ) { - v_.reset( new value_imp< T >( t ) ); + v_ = std::make_shared< value_imp >( t ); return static_cast< value_imp< T >& >( *v_ ).t_; } template< typename T > std::remove_reference_t< Result >& store( T* t ) { - v_.reset( new value_imp< Result >( t ) ); + v_ = std::make_shared< value_imp >( t ); return static_cast< value_imp< Result >& >( *v_ ).t_; } diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index 4424847..ea2926a 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -178,22 +178,22 @@ namespace detail expectation& with( BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) { - matcher_.reset( - new single_matcher< + matcher_ = std::make_shared< + single_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - >( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ) ); + >>( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); return *this; } #if MOCK_NUM_ARGS > 1 template< typename Constraint > expectation& with( const Constraint& c ) { - matcher_.reset( - new multi_matcher< + matcher_ = std::make_shared< + multi_matcher< Constraint, void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - >( c ) ); + >>( c ); return *this; } #endif diff --git a/include/turtle/stream.hpp b/include/turtle/stream.hpp index 3ea47db..9f5b0a1 100644 --- a/include/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -10,6 +10,7 @@ #define MOCK_STREAM_HPP_INCLUDED #include "config.hpp" +#include #include namespace mock @@ -69,16 +70,9 @@ namespace conversion struct any { template< typename T > - any( const T& t ) - : h_( new holder_imp< T >( t ) ) + any( const T& t ): h_( std::make_unique< holder_imp >( t ) ) {} - any(const any&) = delete; - any& operator=(const any&) = delete; - ~any() - { - delete h_; - } - holder* h_; + std::unique_ptr h_; }; } } From d9f9fce6fc5c8bfcea2f882a39533adad10b0045 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 14 Jul 2020 21:17:14 +0200 Subject: [PATCH 041/126] Make action classes non-relocatable This fixes an issue with auto_ptr. As shown by missing coverage the actual copy/move ctors are not required as C++11 emplace functions can be used. Furthermore some places using shared_ptr could be replaced by unique_ptr leading to better performance. --- include/turtle/detail/action.hpp | 51 +++++++------------ .../turtle/detail/expectation_template.hpp | 20 ++++---- .../turtle/detail/function_impl_template.hpp | 16 +++--- include/turtle/detail/type_name.hpp | 9 ++-- test/detail/test_function.cpp | 13 +++++ 5 files changed, 54 insertions(+), 55 deletions(-) diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 204b4f2..1f3a1b8 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -25,7 +25,16 @@ namespace detail typedef std::function< Signature > functor_type; typedef std::function< Result() > action_type; + protected: + // Meant to be subclassed and not be directly used + // Non-relocatable (contained functions may wrap references/pointers which could be invalidated) + action_base() = default; + action_base(const action_base&) = delete; + action_base(action_base&&) = delete; + action_base& operator=(const action_base&) = delete; + action_base& operator=(action_base&&) = delete; public: + const functor_type& functor() const { return f_; @@ -91,11 +100,6 @@ namespace detail } private: - template< typename Value > - static Value&& move( Value& t ) - { - return std::move( t ); - } struct value { value() = default; @@ -106,41 +110,28 @@ namespace detail template< typename T > struct value_imp : value { - typedef std::remove_const_t> value_type; + typedef std::remove_const_t> type; - value_imp( value_type&& t ) - : t_( std::move( t ) ) + template< typename U > + value_imp( U&& t ) : t_( std::forward( t ) ) {} - value_imp( const value_type& t ) - : t_( t ) - {} - template< typename Y > - value_imp( Y* y ) - : t_( y ) - {} - value_type t_; + type t_; }; template< typename T > - T& store( T&& t ) + typename value_imp::type& store( T&& t ) { - v_ = std::make_shared< value_imp >( std::move( t ) ); - return static_cast< value_imp< T >& >( *v_ ).t_; - } - template< typename T > - T& store( const T& t ) - { - v_ = std::make_shared< value_imp >( t ); + v_ = std::make_unique< value_imp >( std::forward( t ) ); return static_cast< value_imp< T >& >( *v_ ).t_; } template< typename T > std::remove_reference_t< Result >& store( T* t ) { - v_ = std::make_shared< value_imp >( t ); + v_ = std::make_unique< value_imp >( t ); return static_cast< value_imp< Result >& >( *v_ ).t_; } - std::shared_ptr< value > v_; + std::unique_ptr< value > v_; }; template< typename Signature > @@ -159,14 +150,6 @@ namespace detail : public action_base< std::auto_ptr< Result >, Signature > { public: - action() = default; - action( const action& rhs ) - : v_( rhs.v_.release() ) - { - if( v_.get() ) - returns( std::ref( v_ ) ); - } - template< typename Y > void returns( Y* r ) { diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index ea2926a..d3e74bd 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -133,9 +133,9 @@ namespace detail { public: expectation() - : invocation_( std::make_shared< unlimited >() ) + : invocation_( std::make_unique< unlimited >() ) , matcher_( - std::make_shared< + std::make_unique< default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > @@ -144,9 +144,9 @@ namespace detail , line_( 0 ) {} expectation( const char* file, int line ) - : invocation_( std::make_shared< unlimited >() ) + : invocation_( std::make_unique< unlimited >() ) , matcher_( - std::make_shared< + std::make_unique< default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > @@ -166,9 +166,9 @@ namespace detail sequence->remove( this ); } - void invoke( const std::shared_ptr< invocation >& i ) + void invoke( std::unique_ptr< invocation > i ) { - invocation_ = i; + invocation_ = std::move(i); } #ifndef MOCK_NUM_ARGS_0 @@ -178,7 +178,7 @@ namespace detail expectation& with( BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) { - matcher_ = std::make_shared< + matcher_ = std::make_unique< single_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) @@ -189,7 +189,7 @@ namespace detail template< typename Constraint > expectation& with( const Constraint& c ) { - matcher_ = std::make_shared< + matcher_ = std::make_unique< multi_matcher< Constraint, void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) @@ -250,8 +250,8 @@ namespace detail } private: - std::shared_ptr< invocation > invocation_; - std::shared_ptr< + std::unique_ptr< invocation > invocation_; + std::unique_ptr< matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index 727632d..c5a212d 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -125,32 +125,32 @@ namespace detail } wrapper& once() { - this->e_->invoke( std::make_shared< detail::once >() ); + this->e_->invoke( std::make_unique< detail::once >() ); return *this; } wrapper& never() { - this->e_->invoke( std::make_shared< detail::never >() ); + this->e_->invoke( std::make_unique< detail::never >() ); return *this; } wrapper& exactly( std::size_t count ) { - this->e_->invoke( std::make_shared< detail::exactly >( count ) ); + this->e_->invoke( std::make_unique< detail::exactly >( count ) ); return *this; } wrapper& at_least( std::size_t min ) { - this->e_->invoke( std::make_shared< detail::at_least >( min ) ); + this->e_->invoke( std::make_unique< detail::at_least >( min ) ); return *this; } wrapper& at_most( std::size_t max ) { - this->e_->invoke( std::make_shared< detail::at_most >( max ) ); + this->e_->invoke( std::make_unique< detail::at_most >( max ) ); return *this; } wrapper& between( std::size_t min, std::size_t max ) { - this->e_->invoke( std::make_shared< detail::between >( min, max ) ); + this->e_->invoke( std::make_unique< detail::between >( min, max ) ); return *this; } @@ -217,14 +217,14 @@ namespace detail wrapper expect( const char* file, int line ) { lock _( mutex_ ); - expectations_.push_back( expectation_type( file, line ) ); + expectations_.emplace_back( file, line ); valid_ = true; return wrapper( mutex_, expectations_.back() ); } wrapper expect() { lock _( mutex_ ); - expectations_.push_back( expectation_type() ); + expectations_.emplace_back( ); valid_ = true; return wrapper( mutex_, expectations_.back() ); } diff --git a/include/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp index 72e3025..7f84193 100644 --- a/include/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -45,9 +45,12 @@ namespace detail const char* name = info.name(); #ifdef __GNUC__ int status = 0; - std::shared_ptr< char > demangled( - abi::__cxa_demangle( name, 0, 0, &status ), - &std::free ); + struct Deleter + { + void operator()(const void* p) { std::free(const_cast(p)); } + }; + std::unique_ptr< const char, Deleter > demangled( + abi::__cxa_demangle( name, 0, 0, &status )); if( ! status && demangled ) serialize( s, demangled.get() ); else diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 46e5d5c..110bf1b 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -535,6 +535,19 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_valu BOOST_CHECK( ! f().get() ); CHECK_CALLS( 2 ); } + { + mock::detail::function< std::auto_ptr< int >() > f; + f.expect().once().returns( new int( 1 ) ); + f.expect().once().returns( new int( 2 ) ); + f.expect().once().returns( new int( 3 ) ); + f.expect().returns( new int( 4 ) ); + BOOST_CHECK_EQUAL( 1, *f() ); + BOOST_CHECK_EQUAL( 2, *f() ); + BOOST_CHECK_EQUAL( 3, *f() ); + BOOST_CHECK_EQUAL( 4, *f() ); + BOOST_CHECK( ! f().get() ); + CHECK_CALLS( 5 ); + } { mock::detail::function< std::auto_ptr< int >() > f; f.expect().returns( std::auto_ptr< int >( new int( 3 ) ) ); From 476c1a7831812e31cb8c96644404644f655232d4 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 14 Jul 2020 21:23:30 +0200 Subject: [PATCH 042/126] Remove some superflous typedefs and default impls --- include/turtle/detail/function_impl_template.hpp | 12 ++---------- include/turtle/detail/function_template.hpp | 9 --------- include/turtle/detail/mutex.hpp | 14 ++------------ include/turtle/detail/sequence_impl.hpp | 4 +--- 4 files changed, 5 insertions(+), 34 deletions(-) diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index c5a212d..c40d66d 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -112,17 +112,9 @@ namespace detail , lock_( m ) {} wrapper(const wrapper&) = delete; - wrapper( wrapper&& x ) - : base_type( x ) - , lock_( std::move( x.lock_) ) - {} + wrapper( wrapper&& x ) = default; wrapper& operator=(const wrapper&) = delete; - wrapper& operator=( wrapper&& x ) - { - static_cast< base_type& >( *this ) = x; - lock_ = std::move( x.lock_ ); - return *this; - } + wrapper& operator=( wrapper&& x ) = default; wrapper& once() { this->e_->invoke( std::make_unique< detail::once >() ); diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp index 10183ec..179148e 100644 --- a/include/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -21,15 +21,6 @@ namespace detail BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > class function< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > { - public: - typedef R result_type; - - template< typename Args > - struct sig - { - typedef R type; - }; - private: typedef function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) diff --git a/include/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp index 5cc193b..793a666 100644 --- a/include/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -48,19 +48,9 @@ namespace detail m_->unlock(); } lock( const lock& ) = delete; - lock( lock&& x ) - : m_( x.m_ ) - { - // Explicit reset to avoid unlock in destructor - x.m_.reset(); - } + lock( lock&& x ) = default; lock& operator=( const lock& ) = delete; - lock& operator=( lock&& x ) - { - m_ = x.m_; - x.m_.reset(); - return *this; - } + lock& operator=( lock&& x ) = default; private: std::shared_ptr< mutex > m_; diff --git a/include/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp index d3f9f90..f53fff9 100644 --- a/include/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -54,9 +54,7 @@ namespace detail } private: - typedef std::vector< void* > elements_type; - - elements_type elements_; + std::vector< void* > elements_; const std::shared_ptr< mutex > mutex_; }; } From d21f78edf19d3af1495412498946c187f7e325da Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Sep 2020 15:00:19 +0200 Subject: [PATCH 043/126] Remove "using namespace mock_test" from patterns_retrieve_cref.cpp --- doc/example/patterns_retrieve_cref.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index 287bf03..439585f 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -7,7 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ retrieve_cref_problem -namespace mock_test +namespace { class base_class { @@ -26,7 +26,7 @@ namespace mock_test } //] -namespace mock_test +namespace { my_class::my_class( base_class& b): b(b){} void my_class::process() @@ -41,7 +41,7 @@ namespace mock_test #include #include -namespace mock_test +namespace { MOCK_BASE_CLASS( mock_base_class, base_class ) { @@ -51,7 +51,6 @@ namespace mock_test BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) { - using namespace mock_test; mock_base_class mock; my_class c( mock ); int value; From 66a046469a766706bf4a7b04d7c36d9d03bb4ecb Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Sep 2020 15:08:39 +0200 Subject: [PATCH 044/126] "notok" -> "not ok" --- doc/example/reference.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index f1af6ba..19033e4 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -439,8 +439,8 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); BOOST_CHECK(c.method(0) == 42); - BOOST_CHECK_THROW(c.method("notok", 1.f), std::runtime_error); - BOOST_CHECK_THROW(c.method("notok", 2.f), std::runtime_error); + BOOST_CHECK_THROW(c.method("not ok", 1.f), std::runtime_error); + BOOST_CHECK_THROW(c.method("not ok", 2.f), std::runtime_error); } //] } From 279bb2c767ade1934e04c5e8266311c828699d1b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Sep 2020 15:08:48 +0200 Subject: [PATCH 045/126] Fix memory include --- include/turtle/detail/formatter.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/turtle/detail/formatter.hpp b/include/turtle/detail/formatter.hpp index a89204a..b1377b9 100644 --- a/include/turtle/detail/formatter.hpp +++ b/include/turtle/detail/formatter.hpp @@ -11,7 +11,7 @@ #include "../config.hpp" #include "../stream.hpp" -#include +#include namespace mock { From c7873cde4bd268c98a398d0354b6cfda0c71cf1b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 24 Sep 2020 22:50:22 +0200 Subject: [PATCH 046/126] Adress review comments --- doc/example/customization.cpp | 2 +- .../limitations_const_parameter_warning.cpp | 4 +++- doc/example/limitations_non_virtual_method.cpp | 2 +- doc/example/limitations_template_method.cpp | 4 ++-- doc/example/patterns_async_call.cpp | 9 +++++---- doc/example/patterns_invoke_functor.cpp | 6 +++--- doc/example/patterns_retrieve_cref.cpp | 8 ++++---- doc/example/reference.cpp | 16 ++++++++-------- include/turtle/detail/function_impl_template.hpp | 8 ++++---- include/turtle/detail/function_template.hpp | 6 +++--- include/turtle/mock.hpp | 3 +-- test/detail/test_type_name.cpp | 2 +- test/test_constraint.cpp | 14 -------------- 13 files changed, 36 insertions(+), 48 deletions(-) diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index 98aa0e1..e33c3ef 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -126,7 +126,7 @@ BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cre { mock_view v; calculator c( v ); - int expected, threshold; + int expected = 0, threshold = 0; MOCK_EXPECT( v.display ).with( near( std::cref( expected ), std::cref( threshold ) ) ); expected = 42; threshold = 1; diff --git a/doc/example/limitations_const_parameter_warning.cpp b/doc/example/limitations_const_parameter_warning.cpp index 4cddbd5..88a163c 100644 --- a/doc/example/limitations_const_parameter_warning.cpp +++ b/doc/example/limitations_const_parameter_warning.cpp @@ -52,5 +52,7 @@ BOOST_AUTO_TEST_CASE(check_method_stub_is_called) { mock_base b; MOCK_EXPECT(b.method).once().with(1); - static_cast(&b)->method(1); + // Example user code taking a base* (or smart pointer variant) + auto callMethod = [](base* bPtr){ bPtr->method(1); }; + callMethod(&b); } diff --git a/doc/example/limitations_non_virtual_method.cpp b/doc/example/limitations_non_virtual_method.cpp index 96258f4..27e1899 100644 --- a/doc/example/limitations_non_virtual_method.cpp +++ b/doc/example/limitations_non_virtual_method.cpp @@ -29,5 +29,5 @@ BOOST_AUTO_TEST_CASE(method_not_called_through_base) { mock_base b; MOCK_EXPECT(b.method).never(); - static_cast(&b)->method(); // Doesn't call the mocked method + static_cast(&b)->method(); // Doesn't call the mocked method as asserted above } diff --git a/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp index 72874c5..f03bd8b 100644 --- a/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -90,8 +90,8 @@ std::string mock_concept::create< std::string >() BOOST_AUTO_TEST_CASE(dispatch_methods_are_called) { mock_concept b; - MOCK_EXPECT(b.create_int).once().returns(int{}); - MOCK_EXPECT(b.create_string).once().returns(std::string{}); + MOCK_EXPECT(b.create_int).once().returns(0); + MOCK_EXPECT(b.create_string).once().returns(""); function_under_test(b); } } diff --git a/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp index 9a9f9e7..0e8b779 100644 --- a/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -31,8 +31,8 @@ namespace mock_test my_class::my_class( base_class& b): b(b){} void my_class::flush() { - static int secret_value = 7; - if(--secret_value == 0) + static int counter = 7; + if(--counter == 0) b.method(); } } @@ -59,15 +59,16 @@ namespace mock_test { MOCK_METHOD( method, 0 ) }; -} BOOST_AUTO_TEST_CASE( method_is_called ) { - using namespace mock_test; mock_base_class m; my_class c( m ); bool done = false; MOCK_EXPECT( m.method ).once().calls( [&done](){ done = true; } ); check( done, [&c](){ c.flush(); } ); // just wait on done, flushing from time to time } + +} + //] diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index cabdb67..01f7809 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -21,14 +21,14 @@ namespace { int receivedValue = 0; - void setx(int newValue) + void setValue(int newValue) { receivedValue = newValue; } } void function( base_class& c) { - c.method(setx); + c.method(setValue); } //[ invoke_functor_solution @@ -48,6 +48,6 @@ BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_meth mock_class mock; MOCK_EXPECT( mock.method ).calls( [](const auto &functor){ functor(42); } ); // whenever 'method' is called, invoke the functor with 42 function( mock ); - BOOST_CHECK(receivedValue == 42); + BOOST_CHECK(receivedValue == 42); // functor was called and received the value 42 } //] diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index 439585f..be28298 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -17,7 +17,6 @@ namespace class my_class { - base_class& b; public: explicit my_class( base_class& ); @@ -28,12 +27,13 @@ namespace namespace { - my_class::my_class( base_class& b): b(b){} + static base_class* global_b = nullptr; + my_class::my_class( base_class& b){ global_b = &b; } void my_class::process() { int secret_value = 42; - b.method(secret_value); - b.method(secret_value); + global_b->method(secret_value); + global_b->method(secret_value); } } diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 19033e4..ae6ca2e 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -438,7 +438,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) MOCK_EXPECT( c.method ).once().with( 0 ).in( s ).returns( 42 ); MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); - BOOST_CHECK(c.method(0) == 42); + BOOST_TEST(c.method(0) == 42); BOOST_CHECK_THROW(c.method("not ok", 1.f), std::runtime_error); BOOST_CHECK_THROW(c.method("not ok", 2.f), std::runtime_error); } @@ -505,7 +505,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_static_met { mock_class c; MOCK_EXPECT( c.method1 ).once(); - MOCK_EXPECT( mock_class::method2 ).once(); // does the same + MOCK_EXPECT( mock_class::method2 ).once(); // does the same (but for the other method) c.method1(42); c.method2(42); } @@ -525,7 +525,7 @@ BOOST_AUTO_TEST_CASE( demonstrates_adding_builtin_constraints ) { mock_class c; MOCK_EXPECT( c.method1 ).with( mock::equal( 3 ), mock::equal( "some string" ) ); - MOCK_EXPECT( c.method2 ).with( 3, "some string" ); // equivalent to the previous one using short-cuts + MOCK_EXPECT( c.method2 ).with( 3, "some string" ); // similar to the previous one using short-cuts c.method1(3, "some string"); c.method2(3, "some string"); } @@ -756,12 +756,12 @@ BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) MOCK_EXPECT( c.method ).once().calls( &function ); // forwards 'method' parameter to 'function' MOCK_EXPECT( c.method ).once().calls( std::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' MOCK_EXPECT( c.method ).once().calls( []( int i ) { return i; } ); // uses a C++11 lambda - BOOST_CHECK(c.method(0) == 42); - BOOST_CHECK(c.method(1) == 42); + BOOST_TEST(c.method(0) == 42); + BOOST_TEST(c.method(1) == 42); BOOST_CHECK_THROW(c.method(0), std::runtime_error); - BOOST_CHECK(c.method(2) == 2); - BOOST_CHECK(c.method(3) == 42); - BOOST_CHECK(c.method(4) == 4); + BOOST_TEST(c.method(2) == 2); + BOOST_TEST(c.method(3) == 42); + BOOST_TEST(c.method(4) == 4); } //] } diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index c40d66d..ecf6667 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -24,7 +24,7 @@ << ')' \ << lazy_expectations( this ) -#define MOCK_MOVE(z, n, d) \ +#define MOCK_FORWARD(z, n, d) \ std::forward< T##n >( t##n ) namespace mock @@ -229,7 +229,7 @@ namespace detail for( const auto& expectation: expectations_ ) { if( expectation.is_valid( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ) ) + BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ) ) { if( ! expectation.invoke() ) { @@ -247,7 +247,7 @@ namespace detail error_type::call( MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); if( expectation.functor() ) return expectation.functor()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ); + BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ); return expectation.trigger(); } } @@ -314,4 +314,4 @@ namespace detail #undef MOCK_FUNCTION_FORMAT #undef MOCK_FUNCTION_CONTEXT -#undef MOCK_MOVE +#undef MOCK_FORWARD diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp index 179148e..e4de743 100644 --- a/include/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -8,7 +8,7 @@ #include "function_impl_template.hpp" -#define MOCK_MOVE(z, n, d) \ +#define MOCK_FORWARD(z, n, d) \ std::forward< T##n >( t##n ) namespace mock @@ -65,7 +65,7 @@ namespace detail R operator()( BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t) ) const { - return (*impl_)( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_MOVE, _) ); + return (*impl_)( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ); } friend std::ostream& operator<<( std::ostream& s, const function& f ) @@ -94,4 +94,4 @@ namespace detail } } // mock -#undef MOCK_MOVE +#undef MOCK_FORWARD diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 423ab74..17b5092 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -47,8 +47,7 @@ #define MOCK_FUNCTOR(f, ...) \ mock::detail::functor< MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock /// MOCK_FUNCTOR_TPL( name, signature ) -/// Deprecated. Same as MOCK_FUNCTOR -#define MOCK_FUNCTOR_TPL(f, ...) MOCK_FUNCTOR(f, __VA_ARGS__) +#define MOCK_FUNCTOR_TPL(f, ...) static_assert(false, "MOCK_FUNCTOR_TPL has been replaced by MOCK_FUNCTOR") #define MOCK_HELPER(t) \ t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index 0a0fc97..0f577ef 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -16,7 +16,7 @@ namespace std::string to_string( const T& t) { std::ostringstream s; - s << mock::detail::make_type_name(t); // Typename can be streamed + s << mock::detail::make_type_name(t); return s.str(); } } diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index ca35e7b..58793f3 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -22,17 +22,3 @@ BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_ma BOOST_CHECK( constraint_1( 0 ).c_( 0 ) ); BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); } - -namespace -{ - MOCK_CONSTRAINT_EXT( constraint_0_ext, 0,, actual == 0 ) - MOCK_CONSTRAINT_EXT( constraint_1_ext, 1, ( expected ), actual == expected ) - MOCK_CONSTRAINT_EXT( constraint_2_ext, 2, ( expected_0, expected_1 ), actual == expected_0 || actual == expected_1 ) -} - -BOOST_AUTO_TEST_CASE( mock_constraint_ext_is_supported_by_all_compilers ) -{ - BOOST_CHECK( constraint_0_ext.c_( 0 ) ); - BOOST_CHECK( constraint_1_ext( 0 ).c_( 0 ) ); - BOOST_CHECK( constraint_2_ext( 0, 0 ).c_( 0 ) ); -} From cf5ac874992896d1622d5c5a50501a9296c3fbc3 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 24 Sep 2020 22:54:13 +0200 Subject: [PATCH 047/126] Remove support for auto_ptr --- CMakeLists.txt | 4 -- include/turtle/config.hpp | 6 --- include/turtle/detail/action.hpp | 28 ------------- include/turtle/log.hpp | 8 ---- test/detail/test_function.cpp | 72 -------------------------------- test/test_log.cpp | 10 ----- test/test_mock.cpp | 22 ---------- 7 files changed, 150 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a91641..957f3d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,6 @@ else() endif() option(TURTLE_INSTALL "Enable to add install target" ${IS_ROOT_PROJECT}) -option(TURTLE_AUTO_PTR "Enable support for auto_ptr" OFF) # Default boost libs are static on windows and dynamic on linux if(WIN32 AND NOT DEFINED Boost_USE_STATIC_LIBS) @@ -30,9 +29,6 @@ target_include_directories(turtle INTERFACE $= 1900) # ifndef MOCK_NO_UNCAUGHT_EXCEPTIONS diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 1f3a1b8..714d61a 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -144,34 +144,6 @@ namespace detail } }; -#ifdef MOCK_AUTO_PTR - template< typename Result, typename Signature > - class action< std::auto_ptr< Result >, Signature > - : public action_base< std::auto_ptr< Result >, Signature > - { - public: - template< typename Y > - void returns( Y* r ) - { - v_.reset( r ); - this->set( std::ref( v_ ) ); - } - template< typename Y > - void returns( std::auto_ptr< Y > r ) - { - v_ = r; - this->set( std::ref( v_ ) ); - } - template< typename Y > - void returns( const std::reference_wrapper< Y >& r ) - { - this->set( r ); - } - - private: - mutable std::auto_ptr< Result > v_; - }; -#endif // MOCK_AUTO_PTR } } // mock diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index 06a8928..25a4392 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -61,14 +61,6 @@ namespace detail {}; } -#ifdef MOCK_AUTO_PTR - template< typename T > - stream& operator<<( stream& s, const std::auto_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } -#endif // MOCK_AUTO_PTR - template< typename T1, typename T2 > stream& operator<<( stream& s, const std::pair< T1, T2 >& p ) { diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 110bf1b..a946fc9 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -505,78 +505,6 @@ namespace }; } -#ifdef MOCK_AUTO_PTR - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_auto_ptr_value, mock_error_fixture ) -{ - { - mock::detail::function< std::auto_ptr< int >() > f; - std::auto_ptr< int > ptr( new int( 3 ) ); - f.expect().returns( std::ref( ptr ) ); - BOOST_CHECK_EQUAL( 3, *ptr ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! ptr.get() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - std::auto_ptr< int > ptr( new int( 3 ) ); - f.expect().returns( ptr ); - BOOST_CHECK( ! ptr.get() ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - f.expect().returns( new int( 3 ) ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - f.expect().once().returns( new int( 1 ) ); - f.expect().once().returns( new int( 2 ) ); - f.expect().once().returns( new int( 3 ) ); - f.expect().returns( new int( 4 ) ); - BOOST_CHECK_EQUAL( 1, *f() ); - BOOST_CHECK_EQUAL( 2, *f() ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK_EQUAL( 4, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 5 ); - } - { - mock::detail::function< std::auto_ptr< int >() > f; - f.expect().returns( std::auto_ptr< int >( new int( 3 ) ) ); - BOOST_CHECK_EQUAL( 3, *f() ); - BOOST_CHECK( ! f().get() ); - CHECK_CALLS( 2 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( std::auto_ptr< base >( new derived ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } - { - mock::detail::function< std::auto_ptr< base >() > f; - f.expect().returns( std::auto_ptr< derived >( new derived ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); - } -} - -#endif // MOCK_AUTO_PTR - BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture ) { mock::detail::function< int() > f; diff --git a/test/test_log.cpp b/test/test_log.cpp index 12dc0df..a512ac6 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -393,16 +393,6 @@ BOOST_AUTO_TEST_CASE( std_pairs_are_serialized ) BOOST_CHECK_EQUAL( "(3,42)", to_string( std::make_pair( 3, 42.f ) ) ); } -#ifdef MOCK_AUTO_PTR - -BOOST_AUTO_TEST_CASE( std_auto_ptr_are_serialized ) -{ - BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::auto_ptr< int >( new int( 42 ) ) ) ); -} - -#endif // MOCK_AUTO_PTR - BOOST_AUTO_TEST_CASE( boost_shared_ptr_are_serialized ) { BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >() ) ); diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 25006b2..aecaa9a 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -207,28 +207,6 @@ BOOST_FIXTURE_TEST_CASE( mock_object_is_named, mock_error_fixture ) BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); } -#ifdef MOCK_AUTO_PTR - -BOOST_FIXTURE_TEST_CASE( mock_object_auto_pointer_is_named, mock_error_fixture ) -{ - std::auto_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -BOOST_FIXTURE_TEST_CASE( mock_object_const_auto_pointer_is_named, mock_error_fixture ) -{ - const std::auto_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); -} - -#endif // MOCK_AUTO_PTR - BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture ) { std::shared_ptr< my_mock > m( new my_mock ); From 40a4b3ceb477aa3cc007950818c47eb5e01aed56 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 24 Sep 2020 23:23:52 +0200 Subject: [PATCH 048/126] Add documentation about unwrap_ref back and add example --- doc/example/customization.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index e33c3ef..fcd1a78 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -87,7 +87,7 @@ struct near_constraint template< typename Actual > bool operator()( Actual actual ) const { - return std::abs( actual - expected_ ) < threshold_ ; + return std::abs( actual - mock::unwrap_ref(expected_) ) < mock::unwrap_ref(threshold_) ; } friend std::ostream& operator<<( std::ostream& s, const near_constraint& c ) @@ -133,6 +133,32 @@ BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cre c.add( 41, 1 ); } //] + +// Example of a "strong type" float +struct float_wrapper{ + float value; + float_wrapper(float value): value(value){} + operator float() const { return value; } + friend std::ostream& operator<<( std::ostream& s, const float_wrapper& f) + { + return s << f.value; + } +}; + +BOOST_AUTO_TEST_CASE( near_constraint_works_with_with_float_wrapper_and_cref ) +{ + mock_view v; + calculator c( v ); + float_wrapper expected = 0, threshold = 0; + // This works even without the unwrap_ref + MOCK_EXPECT( v.display ).once().with( near( expected, threshold ) ); + // This requires 2 implicit conversion: from reference_wrapper to float_wrapper, then to float + // so unwrap_ref in near is required as C++ allows only 1 implicit conversion + MOCK_EXPECT( v.display ).once().with( near( std::cref( expected ), std::cref( threshold ) ) ); + expected = 42; + threshold = 1; + c.add( 41, 1 ); +} } #undef MOCK_MAX_ARGS From 728dfd06eb82d063b6b7df82de94405e5b98a869 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 6 Jan 2022 14:24:07 +0100 Subject: [PATCH 049/126] Remove user(doc) visible change to zero_plus_zero_is_zero_with_action Tests via Fixture::teardown that the assertion is fulfilled --- doc/example/getting_started.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/example/getting_started.cpp b/doc/example/getting_started.cpp index 328cf8e..4cf11fe 100644 --- a/doc/example/getting_started.cpp +++ b/doc/example/getting_started.cpp @@ -149,6 +149,7 @@ BOOST_AUTO_TEST_CASE( add_several_numbers_in_sequences ) } //] } +BOOST_AUTO_TEST_SUITE_END() namespace action { @@ -174,7 +175,7 @@ public: void add( int a, int b ){ v.display(a + b); } }; -struct CatchFailureFixture +struct CatchFailureFixture: Fixture { static bool aborted; static std::string fail_msg; @@ -200,14 +201,20 @@ struct CatchFailureFixture bool CatchFailureFixture::aborted = false; std::string CatchFailureFixture::fail_msg; +struct AssertMissingAction: CatchFailureFixture{ + void teardown(){ + assert_failure("missing action"); + } +}; + +BOOST_FIXTURE_TEST_SUITE( MissingReturnActionSuite, AssertMissingAction) //[ action_test -BOOST_FIXTURE_TEST_CASE( zero_plus_zero_is_zero_with_action, CatchFailureFixture ) +BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_with_action ) { mock_view v; calculator c( v ); MOCK_EXPECT( v.display ).once().with( 0 ); // missing returns( true ) c.add( 0, 0 ); - assert_failure("missing action"); } //] } From e43059423eb96a5a8ca9ce3c299d917a6e7fd940 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 6 Jan 2022 15:10:27 +0100 Subject: [PATCH 050/126] Remove test-artifact from user visible part of how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method Only show what is required --- doc/example/patterns_invoke_functor.cpp | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index 01f7809..a66e471 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -6,6 +6,10 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +// Intentionally duplicate to have complete examples and minimal user visible, yet tested test code +#include + +static void someFunctor(int newValue); //[ invoke_functor_problem #include @@ -15,21 +19,27 @@ virtual void method( const std::function< void( int ) >& functor ) = 0; }; - void function( base_class& ); // the function will call 'method' with a functor to be applied + // the function will call 'method' with a functor to be applied + void function(base_class& c) { c.method(someFunctor); } //] -namespace +// Some test-only code to verify what is described +static int receivedValue = 0; +static void someFunctor(int newValue) { - int receivedValue = 0; - void setValue(int newValue) + receivedValue = newValue; +} +// Check that the functor was called with 42 +struct CheckReceivedValue +{ + void teardown() { - receivedValue = newValue; + BOOST_CHECK(receivedValue == 42); // functor was called and received the value 42 } -} -void function( base_class& c) -{ - c.method(setValue); -} +}; +// And force using it w/o showing that in the docs +#undef BOOST_AUTO_TEST_CASE +#define BOOST_AUTO_TEST_CASE(name) BOOST_FIXTURE_TEST_CASE(name, CheckReceivedValue) //[ invoke_functor_solution #include @@ -48,6 +58,5 @@ BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_meth mock_class mock; MOCK_EXPECT( mock.method ).calls( [](const auto &functor){ functor(42); } ); // whenever 'method' is called, invoke the functor with 42 function( mock ); - BOOST_CHECK(receivedValue == 42); // functor was called and received the value 42 } //] From e26601672e4e6016bead4895a8cf692a9c74b800 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 6 Jan 2022 15:24:46 +0100 Subject: [PATCH 051/126] Remove ASSERT_VERIFY_FAIL macro from static_objects_problem --- doc/example/patterns_static_objects.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/example/patterns_static_objects.cpp b/doc/example/patterns_static_objects.cpp index d5e198e..7918531 100644 --- a/doc/example/patterns_static_objects.cpp +++ b/doc/example/patterns_static_objects.cpp @@ -6,8 +6,15 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -// Used to make this test file pass. Define to empty to see other tests fail -#define ASSERT_VERIFY_FAIL() mock::reset() +#include + +// Used to make this test file pass. Define to 0 to see other tests fail +#define MOCK_MAKE_TEST_PASS 1 + +#if MOCK_MAKE_TEST_PASS +#undef BOOST_AUTO_TEST_CASE +#define BOOST_AUTO_TEST_CASE(name) BOOST_FIXTURE_TEST_CASE(name, mock::cleanup) +#endif //[ static_objects_problem #include @@ -36,7 +43,6 @@ BOOST_AUTO_TEST_CASE( static_objects_problem ) { my_class c( 42 ); MOCK_EXPECT( f ).once().with( &c ); // the set expectation will also outlive the test case and leak into other test cases using 'f' - ASSERT_VERIFY_FAIL(); // Check that mock::verify fails, but that means other test fail too } // the 'c' instance goes out of scope and the '&c' pointer becomes dangling //] From 98541eb5a765b2953efdfa643ba0513f29558d86 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 6 Jan 2022 15:38:29 +0100 Subject: [PATCH 052/126] Change the threshold param of `near` to be inclusive I.e. it means the maximum allowed difference, similar to how other testing frameworks handle this and it allows a threshold of 0 to mean "equal" --- doc/example/customization.cpp | 5 +++-- include/turtle/constraints.hpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index fcd1a78..d9f6cb7 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -87,7 +87,7 @@ struct near_constraint template< typename Actual > bool operator()( Actual actual ) const { - return std::abs( actual - mock::unwrap_ref(expected_) ) < mock::unwrap_ref(threshold_) ; + return std::abs( actual - mock::unwrap_ref(expected_) ) <= mock::unwrap_ref(threshold_) ; } friend std::ostream& operator<<( std::ostream& s, const near_constraint& c ) @@ -157,7 +157,8 @@ BOOST_AUTO_TEST_CASE( near_constraint_works_with_with_float_wrapper_and_cref ) MOCK_EXPECT( v.display ).once().with( near( std::cref( expected ), std::cref( threshold ) ) ); expected = 42; threshold = 1; - c.add( 41, 1 ); + c.add(0, 0); + c.add(41, 1); } } diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index af18b65..f29495a 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -106,7 +106,7 @@ namespace detail # define MOCK_NEAR_DEFINED #endif MOCK_NARY_CONSTRAINT( near, 2, ( expected, tolerance ), - std::abs( actual - expected ) < tolerance ) + std::abs( actual - expected ) <= tolerance ) #ifdef MOCK_NEAR_DEFINED # pragma pop_macro( "near" ) #endif From 78fa67ecb8d8432d2390229df70dc902ba7f3b9a Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 7 Jan 2022 11:28:22 +0100 Subject: [PATCH 053/126] Remove test checking for failure when NOT using "typename"/TPL macro This is allowed in C++20 and doesn't need to be tested anyway. --- ...ail_template_argument_without_tpl_macro.cpp | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 test/fail_template_argument_without_tpl_macro.cpp diff --git a/test/fail_template_argument_without_tpl_macro.cpp b/test/fail_template_argument_without_tpl_macro.cpp deleted file mode 100644 index a0e700e..0000000 --- a/test/fail_template_argument_without_tpl_macro.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -namespace -{ - template< typename T > - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( T ), my_method ) - }; -} From f4c7401e2c57750c62007c5c1178632beffb7ed6 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 7 Jan 2022 16:58:31 +0100 Subject: [PATCH 054/126] Rename class `concept` to avoid name clash with C++20 `concept` keyword --- doc/example/limitations_template_method.cpp | 4 ++-- doc/limitations.qbk | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp index f03bd8b..598934e 100644 --- a/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -12,7 +12,7 @@ namespace limitations_template_method_problem { //[ limitations_template_method_problem -class concept +class concept_class { public: template< typename T > @@ -47,7 +47,7 @@ BOOST_AUTO_TEST_CASE(mocked_templated_methods_are_called) namespace limitations_template_method_problem_2 { //[ limitations_template_method_problem_2 -class concept +class concept_class { public: template< typename T > diff --git a/doc/limitations.qbk b/doc/limitations.qbk index f4bce36..19c6294 100644 --- a/doc/limitations.qbk +++ b/doc/limitations.qbk @@ -75,7 +75,7 @@ Given : [limitations_template_method_problem] -writing a mock object modeling 'concept' requires to list all the possible versions of 'method' : +writing a mock object modeling the 'concept class' requires to list all the possible versions of 'method' : [limitations_template_method_solution] From 2dede8303bef3456639391022906ad7ad1d5f30a Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 7 Jan 2022 18:13:19 +0100 Subject: [PATCH 055/126] Avoid unused function warnings in compile fail tests This avoids false positives when warnings-as-error is enabled --- ...fail_constraint_functor_not_compatible.cpp | 19 ++++++++----------- test/fail_constraint_value_not_comparable.cpp | 17 +++++++---------- ...ue_of_wrong_type_in_builtin_constraint.cpp | 17 +++++++---------- ...il_mismatch_type_in_returns_int_action.cpp | 17 +++++++---------- ...mismatch_type_in_returns_string_action.cpp | 17 +++++++---------- ...l_mismatch_type_in_returns_void_action.cpp | 17 +++++++---------- ...fail_wrong_number_of_arguments_in_with.cpp | 17 +++++++---------- 7 files changed, 50 insertions(+), 71 deletions(-) diff --git a/test/fail_constraint_functor_not_compatible.cpp b/test/fail_constraint_functor_not_compatible.cpp index 51558eb..e3d6aed 100644 --- a/test/fail_constraint_functor_not_compatible.cpp +++ b/test/fail_constraint_functor_not_compatible.cpp @@ -8,17 +8,14 @@ #include -namespace +MOCK_CLASS(my_class) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - bool constraint( int, int ); + MOCK_METHOD_EXT(my_method, 1, void(int), my_method) +}; +bool constraint(int, int) { return true; } - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( &constraint ); - } +void test_case() +{ + my_class c; + MOCK_EXPECT(c.my_method).with(&constraint); } diff --git a/test/fail_constraint_value_not_comparable.cpp b/test/fail_constraint_value_not_comparable.cpp index 0d0ef8c..dec09ac 100644 --- a/test/fail_constraint_value_not_comparable.cpp +++ b/test/fail_constraint_value_not_comparable.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( "42" ); - } + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).with( "42" ); } diff --git a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp index f54013c..8d18b82 100644 --- a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp +++ b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( mock::equal( "42" ) ); - } + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).with( mock::equal( "42" ) ); } diff --git a/test/fail_mismatch_type_in_returns_int_action.cpp b/test/fail_mismatch_type_in_returns_int_action.cpp index 1147857..c4a5aed 100644 --- a/test/fail_mismatch_type_in_returns_int_action.cpp +++ b/test/fail_mismatch_type_in_returns_int_action.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, int(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( std::string() ); - } + MOCK_METHOD_EXT( my_method, 0, int(), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).returns( std::string() ); } diff --git a/test/fail_mismatch_type_in_returns_string_action.cpp b/test/fail_mismatch_type_in_returns_string_action.cpp index 103613f..885a4ac 100644 --- a/test/fail_mismatch_type_in_returns_string_action.cpp +++ b/test/fail_mismatch_type_in_returns_string_action.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, std::string(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( 42 ); - } + MOCK_METHOD_EXT( my_method, 0, std::string(), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).returns( 42 ); } diff --git a/test/fail_mismatch_type_in_returns_void_action.cpp b/test/fail_mismatch_type_in_returns_void_action.cpp index 68b774c..d3dd35c 100644 --- a/test/fail_mismatch_type_in_returns_void_action.cpp +++ b/test/fail_mismatch_type_in_returns_void_action.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 0, void(), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).returns( "42" ); - } + MOCK_METHOD_EXT( my_method, 0, void(), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).returns( "42" ); } diff --git a/test/fail_wrong_number_of_arguments_in_with.cpp b/test/fail_wrong_number_of_arguments_in_with.cpp index dc3420f..033ffd8 100644 --- a/test/fail_wrong_number_of_arguments_in_with.cpp +++ b/test/fail_wrong_number_of_arguments_in_with.cpp @@ -8,15 +8,12 @@ #include -namespace +MOCK_CLASS( my_class ) { - MOCK_CLASS( my_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) - }; - void test_case() - { - my_class c; - MOCK_EXPECT( c.my_method ).with( 42, 42 ); - } + MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) +}; +void test_case() +{ + my_class c; + MOCK_EXPECT( c.my_method ).with( 42, 42 ); } From 23ed9584a072eaf4386e8c2ceb4eb8a5c9ceb663 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 6 Jan 2022 16:51:38 +0100 Subject: [PATCH 056/126] Update CI - Move travis to GHA (travis is dead for OSS) - Update Boost on appveyor --- .github/workflows/ci.yml | 160 +++++++++++++++++++++++++++++++++++++++ .travis.yml | 85 --------------------- appveyor.yml | 6 +- 3 files changed, 163 insertions(+), 88 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..53cf91a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,160 @@ +# Copyright 2022 Alexander Grund +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) + +name: CI + +on: + pull_request: + push: + branches: + - master + - develop + - feature/** + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +env: + NET_RETRY_COUNT: 5 + DOCBOOK_XSL_DIR: /usr/share/xml/docbook/stylesheet/docbook-xsl + DOCBOOK_DTD_DIR: /usr/share/xml/docbook/schema/dtd/4.2 + +jobs: + posix: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + # Linux, gcc + - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-18.04 } + - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-18.04 } + - { compiler: gcc-5, cxxstd: '14,1z', boostBranch: master, os: ubuntu-18.04 } + - { compiler: gcc-11,cxxstd: '14,17,20', boostBranch: master, os: ubuntu-20.04 } + + # Linux, clang + - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-18.04 } + - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-18.04 } + - { compiler: clang-5.0, cxxstd: '14,1z', boostBranch: master, os: ubuntu-18.04 } + - { compiler: clang-12, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-20.04 } + + - { name: Collect coverage, coverage: yes, + compiler: gcc-8, cxxstd: '14', boostBranch: master, os: ubuntu-20.04 } + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + env: + BOOST_ROOT: ${{github.workspace}}/boost-root + PROJECT_DIR: ${{github.workspace}}/repo + + steps: + - uses: actions/checkout@v2 + if: '!matrix.coverage' + with: + path: ${{env.PROJECT_DIR}} + - uses: actions/checkout@v2 + if: 'matrix.coverage' + with: + path: ${{env.PROJECT_DIR}} + fetch-depth: 0 + # Checking out Boost and all its submodules takes ages... + - name: Cache Boost + uses: actions/cache@v2 + with: + path: boost-root + key: boost-${{matrix.boostBranch}} + - name: Checkout Boost + uses: actions/checkout@v2 + with: + repository: boostorg/boost + ref: ${{matrix.boostBranch}} + submodules: true + path: boost-root + persist-credentials: false + + - name: Install packages and setup env + run: | + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + CXX=${{matrix.compiler}} + CXX="${CXX/gcc-/g++-}" + # Package names are g++-* and clang-*, so set this before correcting CXX for Clang + pkgs="$CXX xsltproc docbook-xsl docbook-xml lcov ccache" + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs + CXX="ccache ${CXX/clang-/clang++-}" + echo "CXX=$CXX" >> $GITHUB_ENV + echo "CC=${{matrix.compiler}}" >> $GITHUB_ENV + if [[ "$CXX" =~ clang ]]; then + B2_TOOLSET=clang + else + B2_TOOLSET=gcc + fi + echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV + echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam + + - name: Cache ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{matrix.os}}-${{matrix.compiler}}-${{matrix.boostBranch}} + + - name: Prepare boost + working-directory: boost-root + run: ./bootstrap.sh && ./b2 headers + + - name: Boost build + working-directory: ${{env.PROJECT_DIR}} + run: | + if [[ "${{matrix.boostBranch}}" == "master" ]]; then + B2_FLAGS="cxxstd=${{matrix.cxxstd}}" + else + B2_FLAGS="cxxflags=-std=c++${{matrix.cxxstd}}" + fi + if [[ "${{matrix.coverage}}" == "yes" ]]; then + B2_FLAGS="$B2_FLAGS cxxflags=--coverage linkflags=--coverage" + fi + scripts/build.sh --toolset=$B2_TOOLSET $B2_FLAGS -j3 + + - name: Collect coverage + if: matrix.coverage + working-directory: ${{env.PROJECT_DIR}} + run: | + lcov --version + lcov --gcov-tool=gcov-8 --directory "$PROJECT_DIR/test" --base-directory "$BOOST_ROOT" --capture --output-file all.info + # dump a summary on the console + lcov --list all.info + # Limit to our files (header-only in this case) + lcov --extract all.info "$PROJECT_DIR/include/*" --output-file coverage.info + # Output what was collected + lcov --list coverage.info + - name: Upload coverage + if: matrix.coverage + uses: coverallsapp/github-action@master + with: + path-to-lcov: ${{env.PROJECT_DIR}}/coverage.info + github-token: ${{secrets.GITHUB_TOKEN}} + + - name: Build required boost libs + working-directory: boost-root + run: | + ./b2 --toolset=$B2_TOOLSET --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 + # Add lib folder to LD_LIBRARY_PATH, so the tests can load them + echo "LD_LIBRARY_PATH=$PWD/stage/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV + + - name: CMake build + working-directory: ${{env.PROJECT_DIR}} + run: | + mkdir build && cd build + CXX_STANDARD="${{matrix.cxxstd}}" + cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++${CXX_STANDARD##*,}" -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_VERBOSE_MAKEFILE=ON + cmake --build . --config Debug -- -j3 + ctest --output-on-failure --build-config Debug -j3 + + - name: Cleanup Boost folder + if: ${{ always() }} + working-directory: boost-root + run: git clean -fxd diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a12eb45..0000000 --- a/.travis.yml +++ /dev/null @@ -1,85 +0,0 @@ -# Use, modification, and distribution are -# subject to the Boost Software License, Version 1.0. (See accompanying -# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -# -# Copyright Antony Polukhin 2014. -# Copyright Alexander Grund 2020. - -language: cpp - -branches: - only: - - master - -env: - - CXX_STANDARD=17 BRANCH_TO_TEST=master - - CXX_STANDARD=14 BRANCH_TO_TEST=master - - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.58.0 - - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.59.0 - - CXX_STANDARD=14 BRANCH_TO_TEST=boost-1.67.0 - -compiler: - - clang - - gcc - -addons: - apt: - sources: - - ubuntu-toolchain-r-test - - llvm-toolchain-precise - packages: - - gcc-5 - - g++-5 - - clang-5.0 - - lld-5.0 - - xsltproc - - docbook-xsl - - docbook-xml - - python-yaml - - lcov - -before_install: - - DOCBOOK_XSL_DIR=/usr/share/xml/docbook/stylesheet/docbook-xsl - - DOCBOOK_DTD_DIR=/usr/share/xml/docbook/schema/dtd/4.2 - - - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 60 --slave /usr/bin/g++ g++ /usr/bin/g++-5 - - gcc --version - - # Files, which coverage results must be ignored (files from other projects). Example: - IGNORE_COVERAGE='*/boost/progress.hpp */filesystem/src/path.cpp' - - IGNORE_COVERAGE='*/boost-local/*' - - # From this point and below code is same for all the Boost libs - # Cloning Boost libraries (fast nondeep cloning) - - PROJECT_DIR=`pwd` - - git --version - - BOOST_ROOT=$HOME/boost-local - - git clone -b $BRANCH_TO_TEST --depth 1 https://github.com/boostorg/boost.git $BOOST_ROOT - - cd $BOOST_ROOT - - git submodule update --init --depth 1 - - ./bootstrap.sh - - ./b2 headers - -script: - - cd $PROJECT_DIR - - export BOOST_ROOT - # `--coverage` flags required to generate coverage info for Coveralls - - scripts/build.sh --toolset=$CC "cxxflags=-std=c++$CXX_STANDARD -Wno-unused-local-typedefs -Wno-unused-function -Wno-deprecated-declarations --coverage" "linkflags=--coverage" -j3 - # CMake build - - cd $BOOST_ROOT && ./b2 --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Build required libs - - mkdir $PROJECT_DIR/build && cd $PROJECT_DIR/build - - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++$CXX_STANDARD" - - cmake --build . --config Debug -- -j3 - - ctest --output-on-failure --build-config Debug - -after_success: - - cd $PROJECT_DIR - # Preparing Coveralls data by - # ... changing data format to a readable one - - lcov --directory "$PROJECT_DIR/test" --capture --output-file coverage.info - # ... erasing /test/ /doc/example/ folder data - - lcov --remove coverage.info "/usr*" $IGNORE_COVERAGE "*/test/*" "*/doc/example/*" -o coverage.info - # Output what was collected - - lcov --list coverage.info - # Sending data to Coveralls - - gem install coveralls-lcov - - coveralls-lcov coverage.info diff --git a/appveyor.yml b/appveyor.yml index 7ebd82e..40f4560 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,7 +14,7 @@ branches: environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - BOOST: 1_60_0 + BOOST: 1_65_1 TOOLSET: msvc-14.0 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 BOOST: 1_65_1 @@ -26,10 +26,10 @@ environment: CXX_STANDARD: 14 # CXX_STANDARD: 17 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - BOOST: 1_60_0 + BOOST: 1_65_1 CMAKE: true - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - BOOST: 1_71_0 + BOOST: 1_77_0 CMAKE: true install: From ee72e8b9d8d51b4f9112564e541696137411601d Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 24 Jan 2022 16:11:29 +0100 Subject: [PATCH 057/126] Format code using Clang-Format 10 and enforce via CI Makes the format of the code base uniform. --- .clang-format | 162 + .github/workflows/ci.yml | 9 + doc/example/calculator.hpp | 7 +- doc/example/customization.cpp | 169 +- doc/example/getting_started.cpp | 170 +- .../limitations_const_parameter_warning.cpp | 63 +- doc/example/limitations_literal_zero.cpp | 45 +- .../limitations_non_virtual_method.cpp | 6 +- .../limitations_protected_private_method.cpp | 39 +- ...limitations_template_base_class_method.cpp | 33 +- doc/example/limitations_template_method.cpp | 56 +- doc/example/limitations_throw_specifier.cpp | 30 +- doc/example/mock_view.hpp | 8 +- doc/example/motivation.cpp | 55 +- doc/example/patterns_async_call.cpp | 80 +- doc/example/patterns_invoke_functor.cpp | 38 +- doc/example/patterns_quick_constraint.cpp | 58 +- doc/example/patterns_retrieve_cref.cpp | 70 +- doc/example/patterns_static_objects.cpp | 58 +- doc/example/rationale.cpp | 22 +- doc/example/reference.cpp | 924 +++-- doc/example/view.hpp | 2 +- include/turtle/catch.hpp | 37 +- include/turtle/cleanup.hpp | 27 +- include/turtle/config.hpp | 23 +- include/turtle/constraint.hpp | 381 ++- include/turtle/constraints.hpp | 321 +- include/turtle/detail/action.hpp | 104 +- include/turtle/detail/child.hpp | 33 +- include/turtle/detail/context.hpp | 24 +- .../turtle/detail/expectation_template.hpp | 247 +- include/turtle/detail/formatter.hpp | 33 +- include/turtle/detail/function.hpp | 71 +- .../turtle/detail/function_impl_template.hpp | 271 +- include/turtle/detail/function_template.hpp | 86 +- include/turtle/detail/functor.hpp | 27 +- include/turtle/detail/group.hpp | 31 +- include/turtle/detail/invocation.hpp | 90 +- include/turtle/detail/is_functor.hpp | 14 +- .../turtle/detail/matcher_base_template.hpp | 28 +- include/turtle/detail/move_helper.hpp | 18 +- include/turtle/detail/mutex.hpp | 123 +- include/turtle/detail/object_impl.hpp | 78 +- include/turtle/detail/parameter.hpp | 46 +- include/turtle/detail/parent.hpp | 23 +- include/turtle/detail/root.hpp | 105 +- include/turtle/detail/sequence_impl.hpp | 46 +- include/turtle/detail/signature.hpp | 55 +- include/turtle/detail/singleton.hpp | 44 +- include/turtle/detail/type_name.hpp | 100 +- include/turtle/detail/verifiable.hpp | 8 +- include/turtle/detail/void_t.hpp | 8 +- include/turtle/error.hpp | 104 +- include/turtle/exception.hpp | 11 +- include/turtle/format.hpp | 13 +- include/turtle/log.hpp | 313 +- include/turtle/matcher.hpp | 130 +- include/turtle/mock.hpp | 226 +- include/turtle/object.hpp | 90 +- include/turtle/reset.hpp | 33 +- include/turtle/sequence.hpp | 17 +- include/turtle/stream.hpp | 110 +- include/turtle/unwrap_reference.hpp | 47 +- include/turtle/verify.hpp | 33 +- ...classes_30_methods_30_args_30_max_args.cpp | 3045 +++++++++++------ test/bench_30_classes_30_methods_9_args.cpp | 2115 ++++++------ ..._classes_30_methods_9_args_10_max_args.cpp | 2115 ++++++------ ..._classes_30_methods_9_args_20_max_args.cpp | 2115 ++++++------ ..._classes_30_methods_9_args_30_max_args.cpp | 2115 ++++++------ test/defined.hpp | 4 +- test/detail/test_function.cpp | 865 ++--- test/detail/test_invocation.cpp | 90 +- test/detail/test_is_functor.cpp | 119 +- test/detail/test_signature.cpp | 21 +- test/detail/test_type_name.cpp | 354 +- test/fail_ambiguous_mock_method.cpp | 23 +- ...fail_constraint_functor_not_compatible.cpp | 5 +- test/fail_constraint_value_not_comparable.cpp | 6 +- ...ue_of_wrong_type_in_builtin_constraint.cpp | 6 +- ...il_mismatch_type_in_returns_int_action.cpp | 6 +- ...mismatch_type_in_returns_string_action.cpp | 6 +- ...l_mismatch_type_in_returns_void_action.cpp | 6 +- ...sting_base_class_method_in_mock_method.cpp | 19 +- ...of_arguments_greater_than_max_constant.cpp | 23 +- ...fail_too_many_arguments_in_mock_method.cpp | 21 +- ...fail_wrong_number_of_arguments_in_with.cpp | 6 +- test/mock_error.hpp | 68 +- test/test_constraint.cpp | 19 +- test/test_constraints.cpp | 374 +- test/test_exception.cpp | 10 +- test/test_integration.cpp | 1016 +++--- test/test_log.cpp | 865 +++-- test/test_matcher.cpp | 80 +- test/test_max_args.cpp | 31 +- test/test_mock.cpp | 523 ++- test/test_object.cpp | 97 +- test/test_sequence.cpp | 130 +- 97 files changed, 11189 insertions(+), 10842 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3e0460e --- /dev/null +++ b/.clang-format @@ -0,0 +1,162 @@ +--- +Language: Cpp +# BasedOnStyle: Mozilla +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: Yes +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakInheritanceList: AfterColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: true +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: false +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: ' //[ mock_stream_user_type -namespace user_namespace -{ - struct user_type - {}; +namespace user_namespace { +struct user_type +{}; - inline mock::stream& operator<<( mock::stream& s, const user_type& ) - { - return s << "user_type"; - } +inline mock::stream& operator<<(mock::stream& s, const user_type&) +{ + return s << "user_type"; } +} // namespace user_namespace //] -namespace custom_constraint_free_function_test -{ +namespace custom_constraint_free_function_test { //[ custom_constraint_free_function -bool custom_constraint( int actual ) +bool custom_constraint(int actual) { return actual == 42; } //] //[ custom_constraint_free_function_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_free_function ) +BOOST_AUTO_TEST_CASE(forty_one_plus_one_is_forty_two_free_function) { mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).with( &custom_constraint ); - c.add( 41, 1 ); - } -//] + calculator c(v); + MOCK_EXPECT(v.display).with(&custom_constraint); + c.add(41, 1); } +//] +} // namespace custom_constraint_free_function_test -namespace custom_constraint_functor_test -{ +namespace custom_constraint_functor_test { //[ custom_constraint_functor struct custom_constraint { - friend bool operator==( int actual, const custom_constraint& ) - { - return actual == 42; - } + friend bool operator==(int actual, const custom_constraint&) { return actual == 42; } - friend std::ostream& operator<<( std::ostream& s, const custom_constraint& ) - { - return s << "_ == 42"; - } + friend std::ostream& operator<<(std::ostream& s, const custom_constraint&) { return s << "_ == 42"; } }; //] //[ custom_constraint_functor_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_custom_constraint ) +BOOST_AUTO_TEST_CASE(forty_one_plus_one_is_forty_two_custom_constraint) { mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).with( custom_constraint() ); - c.add( 41, 1 ); + calculator c(v); + MOCK_EXPECT(v.display).with(custom_constraint()); + c.add(41, 1); } //] -} +} // namespace custom_constraint_functor_test //[ near_constraint -template< typename Expected > +template struct near_constraint { - near_constraint( Expected expected, Expected threshold ) - : expected_( expected ) - , threshold_( threshold ) - {} + near_constraint(Expected expected, Expected threshold) : expected_(expected), threshold_(threshold) {} - template< typename Actual > - bool operator()( Actual actual ) const + template + bool operator()(Actual actual) const { - return std::abs( actual - mock::unwrap_ref(expected_) ) <= mock::unwrap_ref(threshold_) ; + return std::abs(actual - mock::unwrap_ref(expected_)) <= mock::unwrap_ref(threshold_); } - friend std::ostream& operator<<( std::ostream& s, const near_constraint& c ) + friend std::ostream& operator<<(std::ostream& s, const near_constraint& c) { - return s << "near( " << mock::format( c.expected_ ) - << ", " << mock::format( c.threshold_ ) << " )"; + return s << "near( " << mock::format(c.expected_) << ", " << mock::format(c.threshold_) << " )"; } Expected expected_, threshold_; }; -template< typename Expected > -mock::constraint< near_constraint< Expected > > near( Expected expected, Expected threshold ) +template +mock::constraint> near(Expected expected, Expected threshold) { - return near_constraint< Expected >( expected, threshold ); + return near_constraint(expected, threshold); } //] -namespace near_constraint_test -{ +namespace near_constraint_test { //[ near_constraint_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near ) +BOOST_AUTO_TEST_CASE(forty_one_plus_one_is_forty_two_plus_or_minus_one_near) { - mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).with( near( 42, 1 ) ); - c.add( 41, 1 ); + mock_view v; + calculator c(v); + MOCK_EXPECT(v.display).with(near(42, 1)); + c.add(41, 1); } //] -} +} // namespace near_constraint_test -namespace near_constraint_cref_test -{ +namespace near_constraint_cref_test { //[ near_constraint_cref_test -BOOST_AUTO_TEST_CASE( forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cref ) +BOOST_AUTO_TEST_CASE(forty_one_plus_one_is_forty_two_plus_or_minus_one_near_cref) { - mock_view v; - calculator c( v ); - int expected = 0, threshold = 0; - MOCK_EXPECT( v.display ).with( near( std::cref( expected ), std::cref( threshold ) ) ); - expected = 42; - threshold = 1; - c.add( 41, 1 ); + mock_view v; + calculator c(v); + int expected = 0, threshold = 0; + MOCK_EXPECT(v.display).with(near(std::cref(expected), std::cref(threshold))); + expected = 42; + threshold = 1; + c.add(41, 1); } //] // Example of a "strong type" float -struct float_wrapper{ +struct float_wrapper +{ float value; - float_wrapper(float value): value(value){} + float_wrapper(float value) : value(value) {} operator float() const { return value; } - friend std::ostream& operator<<( std::ostream& s, const float_wrapper& f) - { - return s << f.value; - } + friend std::ostream& operator<<(std::ostream& s, const float_wrapper& f) { return s << f.value; } }; -BOOST_AUTO_TEST_CASE( near_constraint_works_with_with_float_wrapper_and_cref ) +BOOST_AUTO_TEST_CASE(near_constraint_works_with_with_float_wrapper_and_cref) { - mock_view v; - calculator c( v ); - float_wrapper expected = 0, threshold = 0; - // This works even without the unwrap_ref - MOCK_EXPECT( v.display ).once().with( near( expected, threshold ) ); - // This requires 2 implicit conversion: from reference_wrapper to float_wrapper, then to float - // so unwrap_ref in near is required as C++ allows only 1 implicit conversion - MOCK_EXPECT( v.display ).once().with( near( std::cref( expected ), std::cref( threshold ) ) ); - expected = 42; - threshold = 1; - c.add(0, 0); - c.add(41, 1); -} + mock_view v; + calculator c(v); + float_wrapper expected = 0, threshold = 0; + // This works even without the unwrap_ref + MOCK_EXPECT(v.display).once().with(near(expected, threshold)); + // This requires 2 implicit conversion: from reference_wrapper to float_wrapper, then to float + // so unwrap_ref in near is required as C++ allows only 1 implicit conversion + MOCK_EXPECT(v.display).once().with(near(std::cref(expected), std::cref(threshold))); + expected = 42; + threshold = 1; + c.add(0, 0); + c.add(41, 1); } +} // namespace near_constraint_cref_test #undef MOCK_MAX_ARGS //[ max_args @@ -169,12 +152,12 @@ BOOST_AUTO_TEST_CASE( near_constraint_works_with_with_float_wrapper_and_cref ) //] #if defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-parameter" #endif //[ custom_policy -template< typename Result > +template struct custom_policy { static Result abort() @@ -182,17 +165,17 @@ struct custom_policy // Notify the test framework that an error occurs which makes it impossible to continue the test. // This should most likely throw an exception of some kind. } - template< typename Context > - static void fail( const char* message, const Context& context, const char* file = "unknown location", int line = 0 ) + template + static void fail(const char* message, const Context& context, const char* file = "unknown location", int line = 0) { // Notify the test framework that an unexpected call has occurred. } - template< typename Context > - static void call( const Context& context, const char* file, int line ) + template + static void call(const Context& context, const char* file, int line) { // Notify the test framework that an expectation has been fulfilled. } - static void pass( const char* file, int line ) + static void pass(const char* file, int line) { // Notify the test framework that the test execution merely passed the given code location. } @@ -200,7 +183,7 @@ struct custom_policy //] #if defined(__GNUC__) -#pragma GCC diagnostic pop +# pragma GCC diagnostic pop #endif #undef MOCK_ERROR_POLICY diff --git a/doc/example/getting_started.cpp b/doc/example/getting_started.cpp index 4cf11fe..fa89366 100644 --- a/doc/example/getting_started.cpp +++ b/doc/example/getting_started.cpp @@ -7,15 +7,15 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include #include +#include std::function error_handler_abort; std::function error_handler_pass; std::function error_handler_call; std::function error_handler_fail; -template< typename Result > +template struct configurable_mock_error { static Result abort() @@ -24,25 +24,22 @@ struct configurable_mock_error return Result(); } - static void pass( const char* file, int line ) - { - error_handler_pass(file, line); - } + static void pass(const char* file, int line) { error_handler_pass(file, line); } - template< typename Context > - static void call( const Context& context, const char* file, int line ) + template + static void call(const Context& context, const char* file, int line) { std::stringstream s; s << context; - error_handler_call( s.str(), file, line ); + error_handler_call(s.str(), file, line); } - template< typename Context > - static void fail( const char* message, const Context& context, const char* file = "", int line = 0 ) + template + static void fail(const char* message, const Context& context, const char* file = "", int line = 0) { std::stringstream s; s << context; - error_handler_fail( message, s.str(), file, line ); + error_handler_fail(message, s.str(), file, line); } }; @@ -50,8 +47,8 @@ struct configurable_mock_error #define MOCK_USE_BOOST_TEST //[ prerequisite -#include #include +#include //] #include "calculator.hpp" #include "mock_view.hpp" @@ -69,124 +66,114 @@ struct Fixture BOOST_FIXTURE_TEST_SUITE(GettingStarted, Fixture) -namespace phases -{ +namespace phases { //[ phases -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero) { - mock_view v; // create mock objects - calculator c( v ); // create object under test - MOCK_EXPECT( v.display ).once().with( 0 ); // configure mock objects - c.add( 0, 0 ); // exercise object under test -} // verify mock objects + mock_view v; // create mock objects + calculator c(v); // create object under test + MOCK_EXPECT(v.display).once().with(0); // configure mock objects + c.add(0, 0); // exercise object under test +} // verify mock objects //] -} +} // namespace phases -namespace verify_reset -{ +namespace verify_reset { //[ verify_reset -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_reset ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_reset) { mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).once().with( 0 ); - c.add( 0, 0 ); - MOCK_VERIFY( v.display ); // verify all expectations are fulfilled for the 'display' method - mock::verify( v ); // verify all expectations are fulfilled for all methods of 'v' - mock::verify(); // verify all expectations are fulfilled for all existing mock objects - MOCK_RESET( v.display ); // reset all expectations for the 'display' method - mock::reset( v ); // reset all expectations for all methods of 'v' - mock::reset(); // reset all expectations for all existing mock objects -} // automatically verify all expectations are fulfilled for all mock objects going out of scope + calculator c(v); + MOCK_EXPECT(v.display).once().with(0); + c.add(0, 0); + MOCK_VERIFY(v.display); // verify all expectations are fulfilled for the 'display' method + mock::verify(v); // verify all expectations are fulfilled for all methods of 'v' + mock::verify(); // verify all expectations are fulfilled for all existing mock objects + MOCK_RESET(v.display); // reset all expectations for the 'display' method + mock::reset(v); // reset all expectations for all methods of 'v' + mock::reset(); // reset all expectations for all existing mock objects +} // automatically verify all expectations are fulfilled for all mock objects going out of scope //] -} +} // namespace verify_reset -namespace expectations -{ +namespace expectations { //[ expectations -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_expect ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_expect) { mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).once().with( 0 ); // this call must occur once (and only once) - MOCK_EXPECT( v.display ).with( 1 ); // this call can occur any number of times (including never) - c.add( 0, 0 ); + calculator c(v); + MOCK_EXPECT(v.display).once().with(0); // this call must occur once (and only once) + MOCK_EXPECT(v.display).with(1); // this call can occur any number of times (including never) + c.add(0, 0); } //] -} +} // namespace expectations -namespace sequence -{ +namespace sequence { //[ sequence -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_then_1_plus_0_is_1 ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_then_1_plus_0_is_1) { mock_view v; - calculator c( v ); + calculator c(v); mock::sequence s; - MOCK_EXPECT( v.display ).once().with( 0 ).in( s ); // add this expectation to the sequence - MOCK_EXPECT( v.display ).with( 1 ).in( s ); // add this expectation to the sequence after the previous call - c.add( 0, 0 ); - c.add( 1, 0 ); + MOCK_EXPECT(v.display).once().with(0).in(s); // add this expectation to the sequence + MOCK_EXPECT(v.display).with(1).in(s); // add this expectation to the sequence after the previous call + c.add(0, 0); + c.add(1, 0); } //] -} +} // namespace sequence -namespace several_sequences -{ +namespace several_sequences { //[ several_sequences -BOOST_AUTO_TEST_CASE( add_several_numbers_in_sequences ) +BOOST_AUTO_TEST_CASE(add_several_numbers_in_sequences) { mock_view v; - calculator c( v ); + calculator c(v); mock::sequence s1, s2; - MOCK_EXPECT( v.display ).once().with( 0 ).in( s1 ); - MOCK_EXPECT( v.display ).once().with( 1 ).in( s2 ); - MOCK_EXPECT( v.display ).with( 2 ).in( s1, s2 ); // add this expectation to both sequences after the previous calls - c.add( 0, 0 ); - c.add( 1, 0 ); - c.add( 1, 1 ); - c.add( 2, 0 ); + MOCK_EXPECT(v.display).once().with(0).in(s1); + MOCK_EXPECT(v.display).once().with(1).in(s2); + MOCK_EXPECT(v.display).with(2).in(s1, s2); // add this expectation to both sequences after the previous calls + c.add(0, 0); + c.add(1, 0); + c.add(1, 1); + c.add(2, 0); } //] -} +} // namespace several_sequences BOOST_AUTO_TEST_SUITE_END() -namespace action -{ +namespace action { //[ action_view class view { public: - virtual bool display( int result ) = 0; // returns a boolean + virtual bool display(int result) = 0; // returns a boolean }; //] -MOCK_BASE_CLASS( mock_view, view ) +MOCK_BASE_CLASS(mock_view, view) { - MOCK_METHOD( display, 1 ) + MOCK_METHOD(display, 1) }; class calculator { view& v; -public: - calculator( view& v ): v(v) {} - void add( int a, int b ){ v.display(a + b); } +public: + calculator(view& v) : v(v) {} + + void add(int a, int b) { v.display(a + b); } }; -struct CatchFailureFixture: Fixture +struct CatchFailureFixture : Fixture { static bool aborted; static std::string fail_msg; - static void abort() - { - aborted = true; - } - static void fail( const std::string& message, const std::string&, const char* = "", int = 0 ){ - fail_msg = message; - } + static void abort() { aborted = true; } + static void fail(const std::string& message, const std::string&, const char* = "", int = 0) { fail_msg = message; } CatchFailureFixture() { error_handler_abort = abort; @@ -201,22 +188,21 @@ struct CatchFailureFixture: Fixture bool CatchFailureFixture::aborted = false; std::string CatchFailureFixture::fail_msg; -struct AssertMissingAction: CatchFailureFixture{ - void teardown(){ - assert_failure("missing action"); - } +struct AssertMissingAction : CatchFailureFixture +{ + void teardown() { assert_failure("missing action"); } }; -BOOST_FIXTURE_TEST_SUITE( MissingReturnActionSuite, AssertMissingAction) +BOOST_FIXTURE_TEST_SUITE(MissingReturnActionSuite, AssertMissingAction) //[ action_test -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_with_action ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_with_action) { - mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).once().with( 0 ); // missing returns( true ) - c.add( 0, 0 ); + mock_view v; + calculator c(v); + MOCK_EXPECT(v.display).once().with(0); // missing returns( true ) + c.add(0, 0); } //] -} +} // namespace action BOOST_AUTO_TEST_SUITE_END() diff --git a/doc/example/limitations_const_parameter_warning.cpp b/doc/example/limitations_const_parameter_warning.cpp index 88a163c..8f0de3b 100644 --- a/doc/example/limitations_const_parameter_warning.cpp +++ b/doc/example/limitations_const_parameter_warning.cpp @@ -6,53 +6,46 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace -{ +namespace { //[ limitations_const_parameter_warning_problem - class base - { - public: - virtual void method( const int ) = 0; - }; -//] -} - -namespace limitations_const_parameter_warning_explanation +class base { +public: + virtual void method(const int) = 0; +}; +//] +} // namespace + +namespace limitations_const_parameter_warning_explanation { //[ limitations_const_parameter_warning_explanation - class derived : public base - { - public: - virtual void method( const int ); - }; - - void derived::method( int ) - {} -//] -} - -namespace +class derived : public base { -//[ limitations_const_parameter_warning_solution - MOCK_BASE_CLASS( mock_base, base ) - { - void method( const int i ) - { - method_stub( i ); - } - MOCK_METHOD( method_stub, 1, void( int ), method ) - }; +public: + virtual void method(const int); +}; + +void derived::method(int) {} //] -} +} // namespace limitations_const_parameter_warning_explanation + +namespace { +//[ limitations_const_parameter_warning_solution +MOCK_BASE_CLASS(mock_base, base) +{ + void method(const int i) { method_stub(i); } + MOCK_METHOD(method_stub, 1, void(int), method) +}; +//] +} // namespace BOOST_AUTO_TEST_CASE(check_method_stub_is_called) { mock_base b; MOCK_EXPECT(b.method).once().with(1); // Example user code taking a base* (or smart pointer variant) - auto callMethod = [](base* bPtr){ bPtr->method(1); }; + auto callMethod = [](base* bPtr) { bPtr->method(1); }; callMethod(&b); } diff --git a/doc/example/limitations_literal_zero.cpp b/doc/example/limitations_literal_zero.cpp index badd1c2..c838d23 100644 --- a/doc/example/limitations_literal_zero.cpp +++ b/doc/example/limitations_literal_zero.cpp @@ -6,35 +6,34 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace -{ +namespace { //[ limitations_literal_zero_problem - class base - { - public: - virtual void method( int* i ) = 0; - }; +class base +{ +public: + virtual void method(int* i) = 0; +}; - MOCK_BASE_CLASS( mock_base, base ) - { - MOCK_METHOD( method, 1 ) - }; +MOCK_BASE_CLASS(mock_base, base) +{ + MOCK_METHOD(method, 1) +}; //] -} +} // namespace -BOOST_AUTO_TEST_CASE( literal_zero ) +BOOST_AUTO_TEST_CASE(literal_zero) { mock_base m; -//[ limitations_literal_zero_solution_1 - MOCK_EXPECT( m.method ).with( mock::equal< int* >( 0 ) ); // this compiles -//] -//[ limitations_literal_zero_solution_2 - MOCK_EXPECT( m.method ).with( mock::negate ); -//] -//[ limitations_literal_zero_solution_3 - MOCK_EXPECT( m.method ).with( nullptr ); -//] + //[ limitations_literal_zero_solution_1 + MOCK_EXPECT(m.method).with(mock::equal(0)); // this compiles + //] + //[ limitations_literal_zero_solution_2 + MOCK_EXPECT(m.method).with(mock::negate); + //] + //[ limitations_literal_zero_solution_3 + MOCK_EXPECT(m.method).with(nullptr); + //] } diff --git a/doc/example/limitations_non_virtual_method.cpp b/doc/example/limitations_non_virtual_method.cpp index 27e1899..01c92d3 100644 --- a/doc/example/limitations_non_virtual_method.cpp +++ b/doc/example/limitations_non_virtual_method.cpp @@ -6,8 +6,8 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include //[ limitations_non_virtual_method_problem class base @@ -19,9 +19,9 @@ public: //] //[ limitations_non_virtual_method_problem_2 -MOCK_BASE_CLASS( mock_base, base ) +MOCK_BASE_CLASS(mock_base, base) { - MOCK_METHOD( method, 0 ) + MOCK_METHOD(method, 0) }; //] diff --git a/doc/example/limitations_protected_private_method.cpp b/doc/example/limitations_protected_private_method.cpp index 887b10f..ed969d1 100644 --- a/doc/example/limitations_protected_private_method.cpp +++ b/doc/example/limitations_protected_private_method.cpp @@ -6,31 +6,36 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace -{ +namespace { //[ limitations_protected_private_method_problem - class base +class base +{ +public: + void call() { - public: - void call(){ method_1(); method_2(); } - protected: - virtual void method_1() = 0; - private: - virtual void method_2() = 0; - }; + method_1(); + method_2(); + } + +protected: + virtual void method_1() = 0; + +private: + virtual void method_2() = 0; +}; //] //[ limitations_protected_private_method_solution - MOCK_BASE_CLASS( mock_base, base ) - { - MOCK_METHOD( method_1, 0, void() ) - MOCK_METHOD( method_2, 0, void() ) - }; +MOCK_BASE_CLASS(mock_base, base) +{ + MOCK_METHOD(method_1, 0, void()) + MOCK_METHOD(method_2, 0, void()) +}; //] -} +} // namespace BOOST_AUTO_TEST_CASE(mocked_methods_are_called) { diff --git a/doc/example/limitations_template_base_class_method.cpp b/doc/example/limitations_template_base_class_method.cpp index b8e6839..e026a25 100644 --- a/doc/example/limitations_template_base_class_method.cpp +++ b/doc/example/limitations_template_base_class_method.cpp @@ -6,30 +6,29 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace -{ +namespace { //[ limitations_template_base_class_method_problem - template< typename T > - class base - { - public: - virtual ~base() = default; +template +class base +{ +public: + virtual ~base() = default; - virtual void method() = 0; - }; + virtual void method() = 0; +}; //] - + //[ limitations_template_base_class_method_solution - template< typename T > - MOCK_BASE_CLASS( mock_base, base< T > ) - { - MOCK_METHOD( method, 0, void() ) - }; +template +MOCK_BASE_CLASS(mock_base, base) +{ + MOCK_METHOD(method, 0, void()) +}; //] -} +} // namespace BOOST_AUTO_TEST_CASE(call_method_from_templated_class) { diff --git a/doc/example/limitations_template_method.cpp b/doc/example/limitations_template_method.cpp index 598934e..3ca0629 100644 --- a/doc/example/limitations_template_method.cpp +++ b/doc/example/limitations_template_method.cpp @@ -6,32 +6,31 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace limitations_template_method_problem -{ +namespace limitations_template_method_problem { //[ limitations_template_method_problem class concept_class { public: - template< typename T > - void method( T t ); + template + void method(T t); }; -template< typename T > -void function_under_test( T t ) // T is supposed to model the previous concept +template +void function_under_test(T t) // T is supposed to model the previous concept { - t.method( 42 ); - t.method( "string" ); + t.method(42); + t.method("string"); } //] - + //[ limitations_template_method_solution -MOCK_CLASS( mock_concept ) +MOCK_CLASS(mock_concept) { - MOCK_METHOD( method, 1, void( int ), method_int ) - MOCK_METHOD( method, 1, void( const char* ), method_string ) + MOCK_METHOD(method, 1, void(int), method_int) + MOCK_METHOD(method, 1, void(const char*), method_string) }; //] @@ -42,46 +41,45 @@ BOOST_AUTO_TEST_CASE(mocked_templated_methods_are_called) MOCK_EXPECT(b.method_string).once().with(mock::equal(std::string("string"))); function_under_test(b); } -} +} // namespace limitations_template_method_problem -namespace limitations_template_method_problem_2 -{ +namespace limitations_template_method_problem_2 { //[ limitations_template_method_problem_2 class concept_class { public: - template< typename T > + template T create() { return T(); } }; -template< typename T > -void function_under_test( T t ) // T is supposed to model the previous concept +template +void function_under_test(T t) // T is supposed to model the previous concept { - t.template create< int >(); - t.template create< std::string >(); + t.template create(); + t.template create(); } //] - + //[ limitations_template_method_solution_2 -MOCK_CLASS( mock_concept ) +MOCK_CLASS(mock_concept) { - template< typename T > + template T create(); - MOCK_METHOD( create_int, 0, int(), create_int ) - MOCK_METHOD( create_string, 0, std::string(), create_string ) + MOCK_METHOD(create_int, 0, int(), create_int) + MOCK_METHOD(create_string, 0, std::string(), create_string) }; template<> -int mock_concept::create< int >() +int mock_concept::create() { return create_int(); } template<> -std::string mock_concept::create< std::string >() +std::string mock_concept::create() { return create_string(); } @@ -94,4 +92,4 @@ BOOST_AUTO_TEST_CASE(dispatch_methods_are_called) MOCK_EXPECT(b.create_string).once().returns(""); function_under_test(b); } -} +} // namespace limitations_template_method_problem_2 diff --git a/doc/example/limitations_throw_specifier.cpp b/doc/example/limitations_throw_specifier.cpp index 1c72731..5c1e872 100644 --- a/doc/example/limitations_throw_specifier.cpp +++ b/doc/example/limitations_throw_specifier.cpp @@ -6,31 +6,27 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace -{ +namespace { //[ limitations_throw_specifier_problem - struct base_class - { - virtual ~base_class() = default; +struct base_class +{ + virtual ~base_class() = default; - virtual void method() throw() = 0; - }; + virtual void method() throw() = 0; +}; //] //[ limitations_throw_specifier_solution - MOCK_BASE_CLASS( mock_class, base_class ) - { - void method() throw() override - { - method_proxy(); - } - MOCK_METHOD( method_proxy, 0, void(), method ) - }; +MOCK_BASE_CLASS(mock_class, base_class) +{ + void method() throw() override { method_proxy(); } + MOCK_METHOD(method_proxy, 0, void(), method) +}; //] -} +} // namespace BOOST_AUTO_TEST_CASE(call_method_proxy) { diff --git a/doc/example/mock_view.hpp b/doc/example/mock_view.hpp index 0633ae5..b2ba52a 100644 --- a/doc/example/mock_view.hpp +++ b/doc/example/mock_view.hpp @@ -9,14 +9,14 @@ #ifndef MOCK_VIEW #define MOCK_VIEW -#include #include "view.hpp" +#include //[ mock_view -MOCK_BASE_CLASS( mock_view, view ) // declare a 'mock_view' class implementing 'view' +MOCK_BASE_CLASS(mock_view, view) // declare a 'mock_view' class implementing 'view' { - MOCK_METHOD( display, 1 ) // implement the 'display' method from 'view' (taking 1 argument) + MOCK_METHOD(display, 1) // implement the 'display' method from 'view' (taking 1 argument) }; -//] + //] #endif // MOCK_VIEW diff --git a/doc/example/motivation.cpp b/doc/example/motivation.cpp index aadc975..100e3cb 100644 --- a/doc/example/motivation.cpp +++ b/doc/example/motivation.cpp @@ -6,42 +6,41 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include -#include #include "calculator.hpp" #include "mock_view.hpp" +#include +#include -namespace simple -{ +namespace simple { //[ simple_calculator class calculator { public: - int add( int a, int b ); + int add(int a, int b); }; //] -int calculator::add( int a, int b ){ return a + b; } +int calculator::add(int a, int b) +{ + return a + b; +} //[ simple_zero_plus_zero_is_zero -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero) { calculator c; - BOOST_CHECK_EQUAL( 0, c.add( 0, 0 ) ); + BOOST_CHECK_EQUAL(0, c.add(0, 0)); } //] -} +} // namespace simple -namespace without_mock_object -{ +namespace without_mock_object { //[ my_view class my_view : public view { public: - my_view() - : called( false ) - {} - virtual void display( int result ) + my_view() : called(false) {} + virtual void display(int result) { called = true; value = result; @@ -52,26 +51,26 @@ public: //] //[ zero_plus_zero_is_zero_without_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_without_mock_object ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_without_mock_object) { my_view v; - calculator c( v ); - c.add( 0, 0 ); - BOOST_REQUIRE( v.called ); - BOOST_CHECK_EQUAL( 0, v.value ); + calculator c(v); + c.add(0, 0); + BOOST_REQUIRE(v.called); + BOOST_CHECK_EQUAL(0, v.value); } //] -} +} // namespace without_mock_object -namespace with_mock_object -{ +namespace with_mock_object { //[ zero_plus_zero_is_zero_with_mock_object -BOOST_AUTO_TEST_CASE( zero_plus_zero_is_zero_with_mock_object ) +BOOST_AUTO_TEST_CASE(zero_plus_zero_is_zero_with_mock_object) { mock_view v; - calculator c( v ); - MOCK_EXPECT( v.display ).once().with( 0 ); // expect the 'display' method to be called once (and only once) with a parameter value equal to 0 - c.add( 0, 0 ); + calculator c(v); + MOCK_EXPECT(v.display).once().with( + 0); // expect the 'display' method to be called once (and only once) with a parameter value equal to 0 + c.add(0, 0); } //] -} +} // namespace with_mock_object diff --git a/doc/example/patterns_async_call.cpp b/doc/example/patterns_async_call.cpp index 0e8b779..5d18946 100644 --- a/doc/example/patterns_async_call.cpp +++ b/doc/example/patterns_async_call.cpp @@ -7,68 +7,66 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ async_call_problem -namespace mock_test +namespace mock_test { +class base_class { - class base_class - { - public: - virtual void method() = 0; - }; +public: + virtual void method() = 0; +}; - class my_class - { - base_class& b; - public: - explicit my_class( base_class& ); +class my_class +{ + base_class& b; - void flush(); // repetitively calling this method will in turn call base_class::method at some point - }; -} +public: + explicit my_class(base_class&); + + void flush(); // repetitively calling this method will in turn call base_class::method at some point +}; +} // namespace mock_test //] -namespace mock_test +namespace mock_test { +my_class::my_class(base_class& b) : b(b) {} +void my_class::flush() { - my_class::my_class( base_class& b): b(b){} - void my_class::flush() - { - static int counter = 7; - if(--counter == 0) - b.method(); - } + static int counter = 7; + if(--counter == 0) + b.method(); } +} // namespace mock_test //[ async_call_solution +#include #include #include -#include -namespace mock_test +namespace mock_test { +template +void check(bool& condition, F flush, int attempts = 100, int sleep = 100) { - template< typename F > - void check( bool& condition, F flush, int attempts = 100, int sleep = 100 ) + while(!condition && attempts > 0) { - while( !condition && attempts > 0 ) - { - --attempts; - boost::this_thread::sleep( boost::posix_time::milliseconds( sleep ) ); - flush(); - } + --attempts; + boost::this_thread::sleep(boost::posix_time::milliseconds(sleep)); + flush(); } +} - MOCK_BASE_CLASS( mock_base_class, base_class ) - { - MOCK_METHOD( method, 0 ) - }; +MOCK_BASE_CLASS(mock_base_class, base_class) +{ + MOCK_METHOD(method, 0) +}; -BOOST_AUTO_TEST_CASE( method_is_called ) +BOOST_AUTO_TEST_CASE(method_is_called) { mock_base_class m; - my_class c( m ); + my_class c(m); bool done = false; - MOCK_EXPECT( m.method ).once().calls( [&done](){ done = true; } ); - check( done, [&c](){ c.flush(); } ); // just wait on done, flushing from time to time + MOCK_EXPECT(m.method).once().calls([&done]() { done = true; }); + check(done, [&c]() { c.flush(); }); // just wait on done, flushing from time to time } -} +} // namespace mock_test //] diff --git a/doc/example/patterns_invoke_functor.cpp b/doc/example/patterns_invoke_functor.cpp index a66e471..f22b32a 100644 --- a/doc/example/patterns_invoke_functor.cpp +++ b/doc/example/patterns_invoke_functor.cpp @@ -13,14 +13,17 @@ static void someFunctor(int newValue); //[ invoke_functor_problem #include - class base_class - { - public: - virtual void method( const std::function< void( int ) >& functor ) = 0; - }; +class base_class +{ +public: + virtual void method(const std::function& functor) = 0; +}; - // the function will call 'method' with a functor to be applied - void function(base_class& c) { c.method(someFunctor); } +// the function will call 'method' with a functor to be applied +void function(base_class& c) +{ + c.method(someFunctor); +} //] // Some test-only code to verify what is described @@ -42,21 +45,22 @@ struct CheckReceivedValue #define BOOST_AUTO_TEST_CASE(name) BOOST_FIXTURE_TEST_CASE(name, CheckReceivedValue) //[ invoke_functor_solution -#include #include +#include -namespace +namespace { +MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_BASE_CLASS( mock_class, base_class ) - { - MOCK_METHOD( method, 1 ) - }; -} + MOCK_METHOD(method, 1) +}; +} // namespace -BOOST_AUTO_TEST_CASE( how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method ) +BOOST_AUTO_TEST_CASE(how_to_invoke_a_functor_passed_as_parameter_of_a_mock_method) { mock_class mock; - MOCK_EXPECT( mock.method ).calls( [](const auto &functor){ functor(42); } ); // whenever 'method' is called, invoke the functor with 42 - function( mock ); + MOCK_EXPECT(mock.method).calls([](const auto& functor) { + functor(42); + }); // whenever 'method' is called, invoke the functor with 42 + function(mock); } //] diff --git a/doc/example/patterns_quick_constraint.cpp b/doc/example/patterns_quick_constraint.cpp index 13bec6b..959dc78 100644 --- a/doc/example/patterns_quick_constraint.cpp +++ b/doc/example/patterns_quick_constraint.cpp @@ -7,31 +7,28 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ quick_constraint_problem -#include #include +#include #include -namespace +namespace { +class my_class { - class my_class - { - public: - explicit my_class( int data ) - : data_( data ) - {} - int data_; - }; +public: + explicit my_class(int data) : data_(data) {} + int data_; +}; - std::ostream& operator<<( std::ostream& os, const my_class& c ) // my_class is serializable to an std::ostream - { - return os << "my_class( " << c.data_ << " )"; - } - - MOCK_CLASS( my_mock ) - { - MOCK_METHOD( method, 1, void( const my_class& ) ) // how to simply write a custom constraint ? - }; +std::ostream& operator<<(std::ostream& os, const my_class& c) // my_class is serializable to an std::ostream +{ + return os << "my_class( " << c.data_ << " )"; } + +MOCK_CLASS(my_mock) +{ + MOCK_METHOD(method, 1, void(const my_class&)) // how to simply write a custom constraint ? +}; +} // namespace //] //[ quick_constraint_solution @@ -39,18 +36,21 @@ namespace namespace // in the same namespace as 'my_class' { - bool operator==( const my_class& actual, const std::string& expected ) // the first part of the trick is to compare to a string - { - std::ostringstream s; - s << actual; - return s.str() == expected; - } -} // mock +bool operator==(const my_class& actual, + const std::string& expected) // the first part of the trick is to compare to a string +{ + std::ostringstream s; + s << actual; + return s.str() == expected; +} +} // namespace -BOOST_AUTO_TEST_CASE( method_is_called ) +BOOST_AUTO_TEST_CASE(method_is_called) { my_mock mock; - MOCK_EXPECT( mock.method ).once().with( "my_class( 42 )" ); // the second part of the trick is to express the constraint as a string - mock.method( my_class( 42 ) ); + MOCK_EXPECT(mock.method) + .once() + .with("my_class( 42 )"); // the second part of the trick is to express the constraint as a string + mock.method(my_class(42)); } //] diff --git a/doc/example/patterns_retrieve_cref.cpp b/doc/example/patterns_retrieve_cref.cpp index be28298..86d5345 100644 --- a/doc/example/patterns_retrieve_cref.cpp +++ b/doc/example/patterns_retrieve_cref.cpp @@ -7,55 +7,59 @@ // http://www.boost.org/LICENSE_1_0.txt) //[ retrieve_cref_problem -namespace +namespace { +class base_class { - class base_class - { - public: - virtual void method( int value ) = 0; - }; +public: + virtual void method(int value) = 0; +}; - class my_class - { - public: - explicit my_class( base_class& ); +class my_class +{ +public: + explicit my_class(base_class&); - void process(); // the processing will call 'method' two times with the same value, but we don't know what value beforehand - }; -} + void process(); // the processing will call 'method' two times with the same value, but we don't know what value + // beforehand +}; +} // namespace //] -namespace +namespace { +static base_class* global_b = nullptr; +my_class::my_class(base_class& b) { - static base_class* global_b = nullptr; - my_class::my_class( base_class& b){ global_b = &b; } - void my_class::process() - { - int secret_value = 42; - global_b->method(secret_value); - global_b->method(secret_value); - } + global_b = &b; } +void my_class::process() +{ + int secret_value = 42; + global_b->method(secret_value); + global_b->method(secret_value); +} +} // namespace //[ retrieve_cref_solution -#include #include +#include -namespace +namespace { +MOCK_BASE_CLASS(mock_base_class, base_class) { - MOCK_BASE_CLASS( mock_base_class, base_class ) - { - MOCK_METHOD( method, 1 ) - }; -} + MOCK_METHOD(method, 1) +}; +} // namespace -BOOST_AUTO_TEST_CASE( method_is_called_two_times_with_the_same_value ) +BOOST_AUTO_TEST_CASE(method_is_called_two_times_with_the_same_value) { mock_base_class mock; - my_class c( mock ); + my_class c(mock); int value; - MOCK_EXPECT( mock.method ).once().with( mock::retrieve( value ) ); // on first call retrieve the value, this expectation takes precedence because it can never fail - MOCK_EXPECT( mock.method ).once().with( std::cref( value ) ); // on second call compare the previously retrieved value with the newly received one + MOCK_EXPECT(mock.method).once().with(mock::retrieve(value)); // on first call retrieve the value, this expectation + // takes precedence because it can never fail + MOCK_EXPECT(mock.method) + .once() + .with(std::cref(value)); // on second call compare the previously retrieved value with the newly received one c.process(); } //] diff --git a/doc/example/patterns_static_objects.cpp b/doc/example/patterns_static_objects.cpp index 7918531..0d6d82c 100644 --- a/doc/example/patterns_static_objects.cpp +++ b/doc/example/patterns_static_objects.cpp @@ -12,37 +12,36 @@ #define MOCK_MAKE_TEST_PASS 1 #if MOCK_MAKE_TEST_PASS -#undef BOOST_AUTO_TEST_CASE -#define BOOST_AUTO_TEST_CASE(name) BOOST_FIXTURE_TEST_CASE(name, mock::cleanup) +# undef BOOST_AUTO_TEST_CASE +# define BOOST_AUTO_TEST_CASE(name) BOOST_FIXTURE_TEST_CASE(name, mock::cleanup) #endif //[ static_objects_problem -#include #include +#include #include -namespace +namespace { +struct my_class { - struct my_class - { - my_class( int i ) : i_( i ) - {} + my_class(int i) : i_(i) {} - int i_; - }; + int i_; +}; - std::ostream& operator<<( std::ostream& os, const my_class* c ) - { - return os << "my_class " << c->i_; // the 'c' pointer must be valid when logging - } - - MOCK_FUNCTION( f, 1, void( my_class* ) ) // being static 'f' outlives the test case +std::ostream& operator<<(std::ostream& os, const my_class* c) +{ + return os << "my_class " << c->i_; // the 'c' pointer must be valid when logging } -BOOST_AUTO_TEST_CASE( static_objects_problem ) +MOCK_FUNCTION(f, 1, void(my_class*)) // being static 'f' outlives the test case +} // namespace + +BOOST_AUTO_TEST_CASE(static_objects_problem) { - my_class c( 42 ); - MOCK_EXPECT( f ).once().with( &c ); // the set expectation will also outlive the test case and leak into other test cases using 'f' + my_class c(42); + MOCK_EXPECT(f).once().with( + &c); // the set expectation will also outlive the test case and leak into other test cases using 'f' } // the 'c' instance goes out of scope and the '&c' pointer becomes dangling //] @@ -51,25 +50,28 @@ struct fixture { ~fixture() { - mock::reset(); // the use of a fixture ensures the reset will prevent the expectations from leaking into other test cases + mock::reset(); // the use of a fixture ensures the reset will prevent the expectations from leaking into other + // test cases } }; -BOOST_FIXTURE_TEST_CASE( static_object_partial_solution, fixture ) +BOOST_FIXTURE_TEST_CASE(static_object_partial_solution, fixture) { - my_class c( 42 ); - MOCK_EXPECT( f ).once().with( &c ); - f( &c ); + my_class c(42); + MOCK_EXPECT(f).once().with(&c); + f(&c); mock::verify(); // verify the expectations before local objects are destroyed and before the fixture resets them } //] //[ static_objects_solution -BOOST_FIXTURE_TEST_CASE( static_objects_solution, mock::cleanup ) // actually the library includes a ready to use fixture just like the one described +BOOST_FIXTURE_TEST_CASE( + static_objects_solution, + mock::cleanup) // actually the library includes a ready to use fixture just like the one described { - my_class c( 42 ); - MOCK_EXPECT( f ).once().with( &c ); - f( &c ); + my_class c(42); + MOCK_EXPECT(f).once().with(&c); + f(&c); mock::verify(); } //] diff --git a/doc/example/rationale.cpp b/doc/example/rationale.cpp index 9ece937..6d4f937 100644 --- a/doc/example/rationale.cpp +++ b/doc/example/rationale.cpp @@ -6,9 +6,9 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include "calculator.hpp" #include "mock_view.hpp" +#include #include #include #include @@ -16,18 +16,20 @@ // Dummy to detect if the assertion unexpectedly succeeded to test what is explained #undef BOOST_CHECK_THROW -#define BOOST_CHECK_THROW(expr, exc) \ - try { \ - expr; \ - } catch(const exc&) { \ - std::cerr << "Exception thrown but should not"; \ - } +#define BOOST_CHECK_THROW(expr, exc) \ + try \ + { \ + expr; \ + } catch(const exc&) \ + { \ + std::cerr << "Exception thrown but should not"; \ + } //[ overflow_throws -BOOST_AUTO_TEST_CASE( overflow_throws ) +BOOST_AUTO_TEST_CASE(overflow_throws) { mock_view v; - calculator c( v ); - BOOST_CHECK_THROW( c.add( (std::numeric_limits< int >::max)(), 1 ), std::exception ); + calculator c(v); + BOOST_CHECK_THROW(c.add((std::numeric_limits::max)(), 1), std::exception); } //] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index ae6ca2e..adec0b3 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -6,948 +6,924 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include #include +#include -namespace class_example_1 -{ +namespace class_example_1 { //[ class_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) {}; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_class ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_mock_class) { mock_class c; } //] -} +} // namespace class_example_1 -namespace class_example_2 -{ +namespace class_example_2 { //[ class_example_2 -template< typename T > -MOCK_CLASS( mock_class ) +template +MOCK_CLASS(mock_class) {}; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_mock_class ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_template_mock_class) { - mock_class< int > c; + mock_class c; } //] -} +} // namespace class_example_2 -namespace class_example_3 -{ +namespace class_example_3 { //[ class_example_3 struct base_class {}; -MOCK_BASE_CLASS( mock_class, base_class ) +MOCK_BASE_CLASS(mock_class, base_class) {}; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_derived_mock_class ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_derived_mock_class) { mock_class c; } //] -} +} // namespace class_example_3 -namespace class_example_4 -{ +namespace class_example_4 { //[ class_example_4 -template< typename T > +template struct base_class {}; -template< typename T > -MOCK_BASE_CLASS( mock_class, base_class< T > ) +template +MOCK_BASE_CLASS(mock_class, base_class) {}; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_template_derived_mock_class ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_template_derived_mock_class) { - mock_class< int > c; + mock_class c; } //] -} +} // namespace class_example_4 -namespace class_example_5 -{ +namespace class_example_5 { //[ class_example_5 struct name : mock::object // equivalent to using MOCK_CLASS {}; //] -} +} // namespace class_example_5 -namespace class_example_6 -{ +namespace class_example_6 { //[ class_example_6 -template< typename T > +template struct name : mock::object // equivalent to using MOCK_CLASS {}; //] -} +} // namespace class_example_6 -namespace class_example_7 -{ +namespace class_example_7 { //[ class_example_7 class base {}; struct name : base, mock::object // equivalent to using MOCK_BASE_CLASS { - typedef base base_type; // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS + typedef base + base_type; // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS }; //] -} +} // namespace class_example_7 -namespace class_example_8 -{ +namespace class_example_8 { //[ class_example_8 -template< typename T > +template struct base {}; -template< typename T > -struct name : base< T >, mock::object +template +struct name : base, mock::object { - typedef base< T > base_type; + typedef base base_type; }; //] -} +} // namespace class_example_8 -namespace member_function_example_1 -{ +namespace member_function_example_1 { //[ member_function_example_1 struct base_class { virtual ~base_class() = default; - virtual void method( int ) = 0; + virtual void method(int) = 0; }; -MOCK_BASE_CLASS( mock_class, base_class ) +MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_METHOD( method, 1 ) // only possible when referring unambiguously to a base class method + MOCK_METHOD(method, 1) // only possible when referring unambiguously to a base class method }; //] -} +} // namespace member_function_example_1 -namespace member_function_example_2 -{ +namespace member_function_example_2 { //[ member_function_example_2 struct base_class { virtual ~base_class() = default; - virtual void method( int, const std::string& ) = 0; - virtual void method( float ) = 0; + virtual void method(int, const std::string&) = 0; + virtual void method(float) = 0; }; -MOCK_BASE_CLASS( mock_class, base_class ) +MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_METHOD( method, 2, void( int, const std::string& ), identifier_1 ) // both the signature and identifier must be specified because of ambiguity due to overloading - MOCK_METHOD( method, 1, void( float ), identifier_2 ) // the identifier must differ from the previous one in order to fully disambiguate methods + MOCK_METHOD( + method, + 2, + void(int, const std::string&), + identifier_1) // both the signature and identifier must be specified because of ambiguity due to overloading + MOCK_METHOD(method, + 1, + void(float), + identifier_2) // the identifier must differ from the previous one in order to fully disambiguate methods }; //] -} +} // namespace member_function_example_2 -namespace member_function_example_3 -{ +namespace member_function_example_3 { //[ member_function_example_3 struct base_class { virtual ~base_class() = default; - virtual void method( float ) = 0; - virtual void method( float ) const = 0; + virtual void method(float) = 0; + virtual void method(float) const = 0; }; -MOCK_BASE_CLASS( mock_class, base_class ) +MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_METHOD( method, 1, void( float ) ) // this generates both const and non-const versions + MOCK_METHOD(method, 1, void(float)) // this generates both const and non-const versions }; //] -} +} // namespace member_function_example_3 -namespace member_function_example_4 -{ +namespace member_function_example_4 { //[ member_function_example_4 struct base_class { virtual ~base_class() = default; - virtual void method( float ) = 0; - virtual void method( float ) const = 0; + virtual void method(float) = 0; + virtual void method(float) const = 0; }; -MOCK_BASE_CLASS( mock_class, base_class ) +MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_CONST_METHOD( method, 1, void( float ), identifier_1 ) // this generates only the const version - MOCK_NON_CONST_METHOD( method, 1, void( float ), identifier_2 ) // this generates only the non-const version, with a different identifier + MOCK_CONST_METHOD(method, 1, void(float), identifier_1) // this generates only the const version + MOCK_NON_CONST_METHOD( + method, 1, void(float), identifier_2) // this generates only the non-const version, with a different identifier }; //] -} +} // namespace member_function_example_4 -namespace member_function_example_5 -{ +namespace member_function_example_5 { //[ member_function_example_5 struct base_class { virtual ~base_class() = default; - virtual void method( float ) = 0; + virtual void method(float) = 0; }; struct mock_class : base_class { typedef base_class base_type; // this is required for MOCK_METHOD to work when not using MOCK_BASE_CLASS - MOCK_METHOD( method, 1 ) + MOCK_METHOD(method, 1) }; //] -} +} // namespace member_function_example_5 -namespace member_function_example_6 -{ +namespace member_function_example_6 { //[ member_function_example_6 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_NON_CONST_METHOD( operator=, 1, mock_class&( const mock_class& ), assignment ) // operators require a custom identifier + MOCK_NON_CONST_METHOD(operator=, + 1, + mock_class &(const mock_class&), + assignment) // operators require a custom identifier }; //] -} +} // namespace member_function_example_6 -namespace member_function_example_7 -{ +namespace member_function_example_7 { //[ member_function_example_7 -template< typename T > -MOCK_CLASS( mock_class ) +template +MOCK_CLASS(mock_class) { - MOCK_METHOD_TPL( method, 1, void( const T& ) ) // the _TPL variants must be used if the signature includes a template parameter of the class + MOCK_METHOD_TPL( + method, + 1, + void(const T&)) // the _TPL variants must be used if the signature includes a template parameter of the class }; //] -} +} // namespace member_function_example_7 -namespace member_function_example_8 -{ +namespace member_function_example_8 { //[ member_function_example_8 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 0, BOOST_IDENTITY_TYPE((std::map< int, int >())) ) // the signature must be wrapped in BOOST_IDENTITY_TYPE if the return type contains a comma + MOCK_METHOD( + method, 0, BOOST_IDENTITY_TYPE((std::map()))) // the signature must be wrapped in BOOST_IDENTITY_TYPE if + // the return type contains a comma }; //] -} +} // namespace member_function_example_8 #ifdef BOOST_MSVC -namespace member_function_example_9 -{ +namespace member_function_example_9 { //[ member_function_example_9 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention + MOCK_METHOD(__stdcall method, + 0, + void(), + method) // all parameters must be provided when specifying a different calling convention }; //] -} +} // namespace member_function_example_9 #endif -namespace static_member_function_example_1 -{ +namespace static_member_function_example_1 { //[ static_member_function_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD( method, 1, float( int ) ) + MOCK_STATIC_METHOD(method, 1, float(int)) }; //] -} +} // namespace static_member_function_example_1 -namespace static_member_function_example_2 -{ +namespace static_member_function_example_2 { //[ static_member_function_example_2 -template< typename T > -MOCK_CLASS( mock_class ) +template +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD_TPL( method, 1, void( T ) ) + MOCK_STATIC_METHOD_TPL(method, 1, void(T)) }; //] -} +} // namespace static_member_function_example_2 #ifdef BOOST_MSVC -namespace static_member_function_example_3 -{ +namespace static_member_function_example_3 { //[ static_member_function_example_3 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD( __stdcall method, 0, void(), method ) // all parameters must be provided when specifying a different calling convention + MOCK_STATIC_METHOD(__stdcall method, + 0, + void(), + method) // all parameters must be provided when specifying a different calling convention }; //] -} +} // namespace static_member_function_example_3 #endif -namespace constructor_example_1 -{ +namespace constructor_example_1 { //[ constructor_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) + MOCK_CONSTRUCTOR(mock_class, 2, (int, const std::string&), identifier) }; //] -} +} // namespace constructor_example_1 -namespace constructor_example_2 -{ +namespace constructor_example_2 { //[ constructor_example_2 -template< typename T > -MOCK_CLASS( mock_class ) +template +MOCK_CLASS(mock_class) { - MOCK_CONSTRUCTOR( mock_class, 2, ( int, const std::string& ), identifier ) - MOCK_CONSTRUCTOR_TPL( mock_class, 2, ( T, const std::string& ), identifier_2 ) + MOCK_CONSTRUCTOR(mock_class, 2, (int, const std::string&), identifier) + MOCK_CONSTRUCTOR_TPL(mock_class, 2, (T, const std::string&), identifier_2) }; //] -} +} // namespace constructor_example_2 #ifdef BOOST_MSVC -namespace constructor_example_3 -{ +namespace constructor_example_3 { //[ constructor_example_3 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_CONSTRUCTOR( __stdcall mock_class, 0, (), constructor ) + MOCK_CONSTRUCTOR(__stdcall mock_class, 0, (), constructor) }; //] -} +} // namespace constructor_example_3 #endif -namespace destructor_example_1 -{ +namespace destructor_example_1 { //[ destructor_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_DESTRUCTOR( ~mock_class, destructor ) + MOCK_DESTRUCTOR(~mock_class, destructor) }; //] -} +} // namespace destructor_example_1 #ifdef BOOST_MSVC -namespace destructor_example_2 -{ +namespace destructor_example_2 { //[ destructor_example_2 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_DESTRUCTOR( __stdcall ~mock_class, destructor ) + MOCK_DESTRUCTOR(__stdcall ~mock_class, destructor) }; //] -} +} // namespace destructor_example_2 #endif -namespace conversion_operator_example_1 -{ +namespace conversion_operator_example_1 { //[ conversion_operator_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_CONVERSION_OPERATOR( operator, int, conversion_to_int ) - MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, conversion_to_string ) + MOCK_CONVERSION_OPERATOR(operator, int, conversion_to_int) + MOCK_CONST_CONVERSION_OPERATOR(operator, const std::string&, conversion_to_string) }; //] -} +} // namespace conversion_operator_example_1 -namespace conversion_operator_example_2 -{ +namespace conversion_operator_example_2 { //[ conversion_operator_example_2 -template< typename T > -MOCK_CLASS( mock_class ) +template +MOCK_CLASS(mock_class) { - MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion_to_T ) // the _TPL variants must be used if the signature includes a template parameter of the class - MOCK_CONST_CONVERSION_OPERATOR( operator, const std::string&, const_conversion_to_string ) - MOCK_NON_CONST_CONVERSION_OPERATOR( operator, const std::string&, non_const_conversion_to_string ) + MOCK_CONVERSION_OPERATOR_TPL(operator, T, conversion_to_T) // the _TPL variants must be used if the signature + // includes a template parameter of the class + MOCK_CONST_CONVERSION_OPERATOR(operator, const std::string&, const_conversion_to_string) + MOCK_NON_CONST_CONVERSION_OPERATOR(operator, const std::string&, non_const_conversion_to_string) }; //] -} +} // namespace conversion_operator_example_2 #ifdef BOOST_MSVC -namespace conversion_operator_example_3 -{ +namespace conversion_operator_example_3 { //[ conversion_operator_example_3 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_CONVERSION_OPERATOR( __stdcall operator, int, conversion_to_int ) + MOCK_CONVERSION_OPERATOR(__stdcall operator, int, conversion_to_int) }; //] -} +} // namespace conversion_operator_example_3 #endif -namespace function_example_1 -{ +namespace function_example_1 { //[ function_example_1 -MOCK_FUNCTION( f, 1, void( int ) ) +MOCK_FUNCTION(f, 1, void(int)) -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_function ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_mock_function) { MOCK_EXPECT(f).once().with(3); - f( 3 ); + f(3); } //] -} +} // namespace function_example_1 #ifdef BOOST_MSVC -namespace function_example_2 -{ +namespace function_example_2 { //[ function_example_2 -MOCK_FUNCTION( __stdcall f, 0, void(), f ) // all parameters must be provided when specifying a different calling convention +MOCK_FUNCTION(__stdcall f, + 0, + void(), + f) // all parameters must be provided when specifying a different calling convention //] -} +} // namespace function_example_2 #endif -namespace functor_example_1 -{ +namespace functor_example_1 { //[ functor_example_1 -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_mock_functor) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT(f).once().with(3); - f( 3 ); + MOCK_FUNCTOR(f, void(int)); + MOCK_EXPECT(f).once().with(3); + f(3); } //] -} +} // namespace functor_example_1 -namespace functor_example_2 -{ +namespace functor_example_2 { //[ functor_example_2 -template< typename T > +template struct mock_class { - MOCK_FUNCTOR( f, void( T ) ); + MOCK_FUNCTOR(f, void(T)); }; -BOOST_AUTO_TEST_CASE( demonstrates_instantiating_a_mock_functor_inside_a_class ) +BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_mock_functor_inside_a_class) { - mock_class< int > c; + mock_class c; MOCK_EXPECT(c.f).once().with(3); - c.f( 3 ); + c.f(3); } //] -} +} // namespace functor_example_2 -namespace expectation_example_1 -{ +namespace expectation_example_1 { //[ expectation_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, int( int ), method ) - MOCK_METHOD( method, 2, void( const std::string&, float ), method2 ) + MOCK_METHOD(method, 1, int(int), method) + MOCK_METHOD(method, 2, void(const std::string&, float), method2) }; -BOOST_AUTO_TEST_CASE( demonstrates_configuring_mock_objects ) +BOOST_AUTO_TEST_CASE(demonstrates_configuring_mock_objects) { mock_class c; mock::sequence s; - MOCK_EXPECT( c.method ).once().with( 0 ).in( s ).returns( 42 ); - MOCK_EXPECT( c.method2 ).never().with( "ok", mock::any ); - MOCK_EXPECT( c.method2 ).at_least( 2 ).in( s ).throws( std::runtime_error( "error !" ) ); + MOCK_EXPECT(c.method).once().with(0).in(s).returns(42); + MOCK_EXPECT(c.method2).never().with("ok", mock::any); + MOCK_EXPECT(c.method2).at_least(2).in(s).throws(std::runtime_error("error !")); BOOST_TEST(c.method(0) == 42); BOOST_CHECK_THROW(c.method("not ok", 1.f), std::runtime_error); BOOST_CHECK_THROW(c.method("not ok", 2.f), std::runtime_error); } //] -} +} // namespace expectation_example_1 -namespace invocation_example_1 -{ +namespace invocation_example_1 { //[ invocation_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 2, void( int, const std::string& ) ) - MOCK_METHOD( method2, 1, void( int ) ) + MOCK_METHOD(method, 2, void(int, const std::string&)) + MOCK_METHOD(method2, 1, void(int)) }; -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_invocations_on_a_mock_method ) +BOOST_AUTO_TEST_CASE(demonstrates_setting_up_invocations_on_a_mock_method) { mock_class c; - MOCK_EXPECT( c.method ).once(); // can only be called once - MOCK_EXPECT( c.method2 ); // can be called an unlimited number of times + MOCK_EXPECT(c.method).once(); // can only be called once + MOCK_EXPECT(c.method2); // can be called an unlimited number of times c.method(42, "Hello world!"); c.method2(42); c.method2(42); c.method2(42); } //] -} +} // namespace invocation_example_1 -namespace invocation_example_2 -{ +namespace invocation_example_2 { //[ invocation_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_functor ) +BOOST_AUTO_TEST_CASE(demonstrates_setting_up_an_invocation_on_a_mock_functor) { - MOCK_FUNCTOR( f, void( int, const std::string& ) ); - MOCK_EXPECT( f ).once(); + MOCK_FUNCTOR(f, void(int, const std::string&)); + MOCK_EXPECT(f).once(); f(42, "Hello world!"); } //] -} +} // namespace invocation_example_2 -namespace invocation_example_3 -{ +namespace invocation_example_3 { //[ invocation_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) +MOCK_FUNCTION(f, 1, void(int)) -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_function ) +BOOST_AUTO_TEST_CASE(demonstrates_setting_up_an_invocation_on_a_mock_function) { - MOCK_EXPECT( f ).once(); + MOCK_EXPECT(f).once(); f(42); } //] -} +} // namespace invocation_example_3 -namespace invocation_example_4 -{ +namespace invocation_example_4 { //[ invocation_example_4 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD( method1, 1, void( int ) ) - MOCK_STATIC_METHOD( method2, 1, void( int ) ) + MOCK_STATIC_METHOD(method1, 1, void(int)) + MOCK_STATIC_METHOD(method2, 1, void(int)) }; -BOOST_AUTO_TEST_CASE( demonstrates_setting_up_an_invocation_on_a_mock_static_method ) +BOOST_AUTO_TEST_CASE(demonstrates_setting_up_an_invocation_on_a_mock_static_method) { mock_class c; - MOCK_EXPECT( c.method1 ).once(); - MOCK_EXPECT( mock_class::method2 ).once(); // does the same (but for the other method) + MOCK_EXPECT(c.method1).once(); + MOCK_EXPECT(mock_class::method2).once(); // does the same (but for the other method) c.method1(42); c.method2(42); } //] -} +} // namespace invocation_example_4 -namespace constraints_example_1 -{ +namespace constraints_example_1 { //[ constraints_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method1, 2, void( int, const std::string& ) ) - MOCK_METHOD( method2, 2, void( int, const std::string& ) ) + MOCK_METHOD(method1, 2, void(int, const std::string&)) + MOCK_METHOD(method2, 2, void(int, const std::string&)) }; -BOOST_AUTO_TEST_CASE( demonstrates_adding_builtin_constraints ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_builtin_constraints) { - mock_class c; - MOCK_EXPECT( c.method1 ).with( mock::equal( 3 ), mock::equal( "some string" ) ); - MOCK_EXPECT( c.method2 ).with( 3, "some string" ); // similar to the previous one using short-cuts - c.method1(3, "some string"); - c.method2(3, "some string"); + mock_class c; + MOCK_EXPECT(c.method1).with(mock::equal(3), mock::equal("some string")); + MOCK_EXPECT(c.method2).with(3, "some string"); // similar to the previous one using short-cuts + c.method1(3, "some string"); + c.method2(3, "some string"); } //] -} +} // namespace constraints_example_1 -namespace constraints_example_2 -{ +namespace constraints_example_2 { //[ constraints_example_2 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, void( int ) ) + MOCK_METHOD(method, 1, void(int)) }; -bool custom_constraint( int actual ) +bool custom_constraint(int actual) { - return actual == 42; + return actual == 42; } -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_free_function ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_a_free_function) { - mock_class c; - MOCK_EXPECT( c.method ).with( &custom_constraint ); - c.method(42); + mock_class c; + MOCK_EXPECT(c.method).with(&custom_constraint); + c.method(42); } //] -} +} // namespace constraints_example_2 -namespace constraints_example_3 -{ +namespace constraints_example_3 { //[ constraints_example_3 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, void( int ) ) + MOCK_METHOD(method, 1, void(int)) }; -bool custom_constraint( int expected, int actual ) +bool custom_constraint(int expected, int actual) { - return expected == actual; + return expected == actual; } -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_a_standard_library_functor ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_a_standard_library_functor) { - mock_class c; - MOCK_EXPECT( c.method ).with( std::bind1st( std::ptr_fun( &custom_constraint ), 42 ) ); // std::ptr_fun creates an std::unary_function - c.method(42); + mock_class c; + MOCK_EXPECT(c.method).with( + std::bind1st(std::ptr_fun(&custom_constraint), 42)); // std::ptr_fun creates an std::unary_function + c.method(42); } //] -} +} // namespace constraints_example_3 -namespace constraints_example_4 -{ +namespace constraints_example_4 { //[ constraints_example_4 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, void( int ) ) + MOCK_METHOD(method, 1, void(int)) }; -bool custom_constraint( int expected, int actual ) +bool custom_constraint(int expected, int actual) { - return expected == actual; + return expected == actual; } -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_std_bind ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_std_bind) { - mock_class c; - using namespace std::placeholders; - MOCK_EXPECT( c.method ).with( std::bind( &custom_constraint, 42, _1 ) ); - c.method(42); + mock_class c; + using namespace std::placeholders; + MOCK_EXPECT(c.method).with(std::bind(&custom_constraint, 42, _1)); + c.method(42); } //] -} +} // namespace constraints_example_4 #ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC -#include +# include -namespace constraints_example_5 -{ +namespace constraints_example_5 { //[ constraints_example_5 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, void( int ) ) + MOCK_METHOD(method, 1, void(int)) }; -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_lambda ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_boost_lambda) { - mock_class c; - MOCK_EXPECT( c.method ).with( boost::lambda::_1 == 42 ); - c.method(42); + mock_class c; + MOCK_EXPECT(c.method).with(boost::lambda::_1 == 42); + c.method(42); } //] -} +} // namespace constraints_example_5 #endif // BOOST_MSVC #include -namespace constraints_example_6 -{ +namespace constraints_example_6 { //[ constraints_example_6 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method1, 1, void( int ) ) - MOCK_METHOD( method2, 1, void( int ) ) + MOCK_METHOD(method1, 1, void(int)) + MOCK_METHOD(method2, 1, void(int)) }; -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_custom_constraint_with_boost_phoenix ) -{ - mock_class c; - MOCK_EXPECT( c.method1 ).with( boost::phoenix::arg_names::arg1 == 42 ); - MOCK_EXPECT( c.method2 ).with( boost::phoenix::arg_names::_1 == 42 ); - c.method1(42); - c.method2(42); -} -//] -} - -namespace constraints_example_7 -{ -//[ constraints_example_7 -MOCK_CLASS( mock_class ) -{ - MOCK_METHOD( method, 1, void( int ) ) -}; - -BOOST_AUTO_TEST_CASE( demonstrates_adding_a_constraint_with_cxx11_lambda ) +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_boost_phoenix) { mock_class c; - MOCK_EXPECT( c.method ).with( []( int actual ) { return 42 == actual; } ); + MOCK_EXPECT(c.method1).with(boost::phoenix::arg_names::arg1 == 42); + MOCK_EXPECT(c.method2).with(boost::phoenix::arg_names::_1 == 42); + c.method1(42); + c.method2(42); +} +//] +} // namespace constraints_example_6 + +namespace constraints_example_7 { +//[ constraints_example_7 +MOCK_CLASS(mock_class) +{ + MOCK_METHOD(method, 1, void(int)) +}; + +BOOST_AUTO_TEST_CASE(demonstrates_adding_a_constraint_with_cxx11_lambda) +{ + mock_class c; + MOCK_EXPECT(c.method).with([](int actual) { return 42 == actual; }); c.method(42); } //] -} +} // namespace constraints_example_7 -namespace constraints_example_8 -{ +namespace constraints_example_8 { //[ constraints_example_8 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 2, void( int, const std::string& ) ) + MOCK_METHOD(method, 2, void(int, const std::string&)) }; -BOOST_AUTO_TEST_CASE( demonstrates_combining_constraints ) +BOOST_AUTO_TEST_CASE(demonstrates_combining_constraints) { - mock_class c; - MOCK_EXPECT( c.method ).with( mock::less( 4 ) && mock::greater( 2 ), ! mock::equal( "" ) ); - c.method(3, "Hello World!"); + mock_class c; + MOCK_EXPECT(c.method).with(mock::less(4) && mock::greater(2), !mock::equal("")); + c.method(3, "Hello World!"); } //] -} +} // namespace constraints_example_8 -namespace constraints_example_9 -{ +namespace constraints_example_9 { //[ constraints_example_9 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 2, void( const std::string&, std::size_t ) ) + MOCK_METHOD(method, 2, void(const std::string&, std::size_t)) }; -bool custom_constraint( const std::string& actual_1, std::size_t actual_2 ) +bool custom_constraint(const std::string& actual_1, std::size_t actual_2) { return actual_1.size() <= actual_2; } -BOOST_AUTO_TEST_CASE( demonstrates_one_constraint_for_all_arguments ) +BOOST_AUTO_TEST_CASE(demonstrates_one_constraint_for_all_arguments) { - mock_class c; - MOCK_EXPECT( c.method ).with( &custom_constraint ); - c.method("1234", 4); + mock_class c; + MOCK_EXPECT(c.method).with(&custom_constraint); + c.method("1234", 4); } //] -} +} // namespace constraints_example_9 -namespace sequence_example_1 -{ +namespace sequence_example_1 { //[ sequence_example_1 -MOCK_CLASS( mock_class_1 ) +MOCK_CLASS(mock_class_1) { - MOCK_METHOD( method_1, 0, void() ) + MOCK_METHOD(method_1, 0, void()) }; -MOCK_CLASS( mock_class_2 ) +MOCK_CLASS(mock_class_2) { - MOCK_METHOD( method_2, 0, void() ) + MOCK_METHOD(method_2, 0, void()) }; -MOCK_CLASS( mock_class_3 ) +MOCK_CLASS(mock_class_3) { - MOCK_METHOD( method_3, 0, void() ) + MOCK_METHOD(method_3, 0, void()) }; -BOOST_AUTO_TEST_CASE( demonstrates_enforcing_several_expectation_orders ) +BOOST_AUTO_TEST_CASE(demonstrates_enforcing_several_expectation_orders) { - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock::sequence s_1, s_2; - MOCK_EXPECT( c_1.method_1 ).in( s_1 ); - MOCK_EXPECT( c_2.method_2 ).in( s_2 ); // c_1.method_1 and c_2.method_2 are in different sequences and can be called in any order - MOCK_EXPECT( c_3.method_3 ).in( s_1, s_2 ); // c_3.method_3 must be called after both c_1.method_1 and c_2.method_2 - c_2.method_2(); - c_1.method_1(); - c_3.method_3(); + mock_class_1 c_1; + mock_class_2 c_2; + mock_class_3 c_3; + mock::sequence s_1, s_2; + MOCK_EXPECT(c_1.method_1).in(s_1); + MOCK_EXPECT(c_2.method_2) + .in(s_2); // c_1.method_1 and c_2.method_2 are in different sequences and can be called in any order + MOCK_EXPECT(c_3.method_3).in(s_1, s_2); // c_3.method_3 must be called after both c_1.method_1 and c_2.method_2 + c_2.method_2(); + c_1.method_1(); + c_3.method_3(); } //] -} +} // namespace sequence_example_1 -namespace action_example_1 -{ +namespace action_example_1 { //[ action_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 1, int( int ) ) + MOCK_METHOD(method, 1, int(int)) }; -int function( int i ) +int function(int i) { return i; } -BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions ) +BOOST_AUTO_TEST_CASE(demonstrates_configuring_actions) { - mock_class c; - MOCK_EXPECT( c.method ).once().returns( 42 ); - MOCK_EXPECT( c.method ).once().moves( 42 ); // returns by moving the value - MOCK_EXPECT( c.method ).once().throws( std::runtime_error( "error !" ) ); - MOCK_EXPECT( c.method ).once().calls( &function ); // forwards 'method' parameter to 'function' - MOCK_EXPECT( c.method ).once().calls( std::bind( &function, 42 ) ); // drops 'method' parameter and binds 42 as parameter to 'function' - MOCK_EXPECT( c.method ).once().calls( []( int i ) { return i; } ); // uses a C++11 lambda - BOOST_TEST(c.method(0) == 42); - BOOST_TEST(c.method(1) == 42); - BOOST_CHECK_THROW(c.method(0), std::runtime_error); - BOOST_TEST(c.method(2) == 2); - BOOST_TEST(c.method(3) == 42); - BOOST_TEST(c.method(4) == 4); + mock_class c; + MOCK_EXPECT(c.method).once().returns(42); + MOCK_EXPECT(c.method).once().moves(42); // returns by moving the value + MOCK_EXPECT(c.method).once().throws(std::runtime_error("error !")); + MOCK_EXPECT(c.method).once().calls(&function); // forwards 'method' parameter to 'function' + MOCK_EXPECT(c.method).once().calls( + std::bind(&function, 42)); // drops 'method' parameter and binds 42 as parameter to 'function' + MOCK_EXPECT(c.method).once().calls([](int i) { return i; }); // uses a C++11 lambda + BOOST_TEST(c.method(0) == 42); + BOOST_TEST(c.method(1) == 42); + BOOST_CHECK_THROW(c.method(0), std::runtime_error); + BOOST_TEST(c.method(2) == 2); + BOOST_TEST(c.method(3) == 42); + BOOST_TEST(c.method(4) == 4); } //] -} +} // namespace action_example_1 -namespace action_example_2 -{ +namespace action_example_2 { //[ action_example_2 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 0, int&() ) + MOCK_METHOD(method, 0, int&()) }; -BOOST_AUTO_TEST_CASE( demonstrates_configuring_actions_with_references ) +BOOST_AUTO_TEST_CASE(demonstrates_configuring_actions_with_references) { - mock_class c; - int i = 0; - MOCK_EXPECT( c.method ).returns( std::ref( i ) ); // wrap i to store a reference - c.method() = 42; // really change i and not just the stored copy - BOOST_CHECK_EQUAL( 42, i ); // indeed + mock_class c; + int i = 0; + MOCK_EXPECT(c.method).returns(std::ref(i)); // wrap i to store a reference + c.method() = 42; // really change i and not just the stored copy + BOOST_CHECK_EQUAL(42, i); // indeed } //] -} +} // namespace action_example_2 -namespace verification_example_1 -{ +namespace verification_example_1 { //[ verification_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 0, void() ) + MOCK_METHOD(method, 0, void()) }; -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_method ) +BOOST_AUTO_TEST_CASE(demonstrates_verifying_a_mock_method) { - mock_class c; - MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met - mock::verify( c ); // verifies all expectations set for all methods of 'c' - mock::verify(); // verifies all existing mock objects, functions and functors + mock_class c; + MOCK_VERIFY(c.method); // logs an error and returns false if not all expectations are met + mock::verify(c); // verifies all expectations set for all methods of 'c' + mock::verify(); // verifies all existing mock objects, functions and functors } //] -} +} // namespace verification_example_1 -namespace verification_example_2 -{ +namespace verification_example_2 { //[ verification_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_functor ) +BOOST_AUTO_TEST_CASE(demonstrates_verifying_a_mock_functor) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met - mock::verify( f ); // behaves the same as MOCK_VERIFY - mock::verify(); // verifies all existing mock objects, functions and functors + MOCK_FUNCTOR(f, void(int)); + MOCK_VERIFY(f); // logs an error and returns false if not all expectations are met + mock::verify(f); // behaves the same as MOCK_VERIFY + mock::verify(); // verifies all existing mock objects, functions and functors } //] -} +} // namespace verification_example_2 -namespace verification_example_3 -{ +namespace verification_example_3 { //[ verification_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) +MOCK_FUNCTION(f, 1, void(int)) -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_mock_function ) +BOOST_AUTO_TEST_CASE(demonstrates_verifying_a_mock_function) { - MOCK_VERIFY( f ); // logs an error and returns false if not all expectations are met - mock::verify(); // verifies all existing mock objects, functions and functors + MOCK_VERIFY(f); // logs an error and returns false if not all expectations are met + mock::verify(); // verifies all existing mock objects, functions and functors } //] -} +} // namespace verification_example_3 -namespace verification_example_4 -{ +namespace verification_example_4 { //[ verification_example_4 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD( method, 0, void() ) + MOCK_STATIC_METHOD(method, 0, void()) }; -BOOST_AUTO_TEST_CASE( demonstrates_verifying_a_static_mock_method ) +BOOST_AUTO_TEST_CASE(demonstrates_verifying_a_static_mock_method) { - mock_class c; - MOCK_VERIFY( c.method ); // logs an error and returns false if not all expectations are met - MOCK_VERIFY( mock_class::method ); // does the same - mock::verify(); // verifies all existing mock objects, functions and functors + mock_class c; + MOCK_VERIFY(c.method); // logs an error and returns false if not all expectations are met + MOCK_VERIFY(mock_class::method); // does the same + mock::verify(); // verifies all existing mock objects, functions and functors } //] -} +} // namespace verification_example_4 -namespace reset_example_1 -{ +namespace reset_example_1 { //[ reset_example_1 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_METHOD( method, 0, void() ) + MOCK_METHOD(method, 0, void()) }; -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_method ) +BOOST_AUTO_TEST_CASE(demonstrates_resetting_a_mock_method) { - mock_class c; - MOCK_RESET( c.method ); // resets all expectations set for 'c.method' - mock::reset( c ); // resets all expectations set on 'c' - mock::reset(); // resets all existing mock objects, functions and functors + mock_class c; + MOCK_RESET(c.method); // resets all expectations set for 'c.method' + mock::reset(c); // resets all expectations set on 'c' + mock::reset(); // resets all existing mock objects, functions and functors } //] -} +} // namespace reset_example_1 -namespace reset_example_2 -{ +namespace reset_example_2 { //[ reset_example_2 -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_functor ) +BOOST_AUTO_TEST_CASE(demonstrates_resetting_a_mock_functor) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_RESET( f ); // resets all expectations set for 'f' - mock::reset( f ); // behaves the same as MOCK_RESET - mock::reset(); // resets all existing mock objects, functions and functors + MOCK_FUNCTOR(f, void(int)); + MOCK_RESET(f); // resets all expectations set for 'f' + mock::reset(f); // behaves the same as MOCK_RESET + mock::reset(); // resets all existing mock objects, functions and functors } //] -} +} // namespace reset_example_2 -namespace reset_example_3 -{ +namespace reset_example_3 { //[ reset_example_3 -MOCK_FUNCTION( f, 1, void( int ) ) +MOCK_FUNCTION(f, 1, void(int)) -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_mock_function ) +BOOST_AUTO_TEST_CASE(demonstrates_resetting_a_mock_function) { - MOCK_RESET( f ); // resets all expectations set for 'f' - mock::reset(); // resets all existing mock objects, functions and functors + MOCK_RESET(f); // resets all expectations set for 'f' + mock::reset(); // resets all existing mock objects, functions and functors } //] -} +} // namespace reset_example_3 -namespace reset_example_4 -{ +namespace reset_example_4 { //[ reset_example_4 -MOCK_CLASS( mock_class ) +MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD( method, 0, void() ) + MOCK_STATIC_METHOD(method, 0, void()) }; -BOOST_AUTO_TEST_CASE( demonstrates_resetting_a_static_mock_method ) +BOOST_AUTO_TEST_CASE(demonstrates_resetting_a_static_mock_method) { - mock_class c; - MOCK_RESET( c.method ); // resets all expectations set for 'c::method' - MOCK_RESET( mock_class::method ); // resets all expectations set for 'c::method' - mock::reset(); // resets all existing mock objects, functions and functors + mock_class c; + MOCK_RESET(c.method); // resets all expectations set for 'c::method' + MOCK_RESET(mock_class::method); // resets all expectations set for 'c::method' + mock::reset(); // resets all existing mock objects, functions and functors } //] -} +} // namespace reset_example_4 -namespace helpers_example_1 -{ +namespace helpers_example_1 { //[ helpers_example_1 -MOCK_CONSTRAINT( any, true ) // this is how mock::any could be defined -MOCK_CONSTRAINT( forty_two, actual == 42 ) // this defines a 'forty_two' constraint +MOCK_CONSTRAINT(any, true) // this is how mock::any could be defined +MOCK_CONSTRAINT(forty_two, actual == 42) // this defines a 'forty_two' constraint -BOOST_AUTO_TEST_CASE( mock_constraint_0_arity ) +BOOST_AUTO_TEST_CASE(mock_constraint_0_arity) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( forty_two ); - MOCK_EXPECT( f ).with( any ); + MOCK_FUNCTOR(f, void(int)); + MOCK_EXPECT(f).with(forty_two); + MOCK_EXPECT(f).with(any); } //] -} +} // namespace helpers_example_1 -namespace helpers_example_2 -{ +namespace helpers_example_2 { //[ helpers_example_2 -MOCK_CONSTRAINT( equal, expected, actual == expected ) // this is how mock::equal could be defined -MOCK_CONSTRAINT( near, expected, std::abs( actual - expected ) < 0.01 ) // this defines a 'near' constraint which can be used as 'near( 42 )' +MOCK_CONSTRAINT(equal, expected, actual == expected) // this is how mock::equal could be defined +MOCK_CONSTRAINT(near, + expected, + std::abs(actual - expected) < + 0.01) // this defines a 'near' constraint which can be used as 'near( 42 )' -BOOST_AUTO_TEST_CASE( mock_constraint_1_arity ) +BOOST_AUTO_TEST_CASE(mock_constraint_1_arity) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42 ) ); - MOCK_EXPECT( f ).with( equal( 42 ) ); + MOCK_FUNCTOR(f, void(int)); + MOCK_EXPECT(f).with(near(42)); + MOCK_EXPECT(f).with(equal(42)); } //] -} +} // namespace helpers_example_2 -namespace helpers_example_3 -{ +namespace helpers_example_3 { //[ helpers_example_3 -MOCK_CONSTRAINT( near, expected, tolerance, std::abs( actual - expected ) < tolerance ) // this is how mock::near could be defined +MOCK_CONSTRAINT(near, + expected, + tolerance, + std::abs(actual - expected) < tolerance) // this is how mock::near could be defined -BOOST_AUTO_TEST_CASE( mock_constraint_2_arity ) +BOOST_AUTO_TEST_CASE(mock_constraint_2_arity) { - MOCK_FUNCTOR( f, void( int ) ); - MOCK_EXPECT( f ).with( near( 42, 0.001 ) ); + MOCK_FUNCTOR(f, void(int)); + MOCK_EXPECT(f).with(near(42, 0.001)); } //] -} +} // namespace helpers_example_3 diff --git a/doc/example/view.hpp b/doc/example/view.hpp index 797523a..82dfbd2 100644 --- a/doc/example/view.hpp +++ b/doc/example/view.hpp @@ -13,7 +13,7 @@ class view { public: - virtual void display( int result ) = 0; + virtual void display(int result) = 0; }; //] diff --git a/include/turtle/catch.hpp b/include/turtle/catch.hpp index dd9c8ad..77c753b 100644 --- a/include/turtle/catch.hpp +++ b/include/turtle/catch.hpp @@ -11,34 +11,33 @@ #include -template< typename Result > +template struct catch_mock_error_policy { static Result abort() { - FAIL( "Aborted" ); - throw std::runtime_error( "unreachable" ); + FAIL("Aborted"); + throw std::runtime_error("unreachable"); } - - template< typename Context > - static void fail( const char* message, const Context& context, - const char* file = "file://unknown-location", int line = 0 ) + + template + static void fail(const char* message, + const Context& context, + const char* file = "file://unknown-location", + int line = 0) { - CAPTURE( context ); - FAIL_CHECK( message << " in: " << file << ":" << line ); + CAPTURE(context); + FAIL_CHECK(message << " in: " << file << ":" << line); } - - template< typename Context > - static void call( const Context& context, const char* file, int line ) + + template + static void call(const Context& context, const char* file, int line) { - CAPTURE( context ); - INFO( file << ":" << line ); - } - - static void pass( const char* file, int line ) - { - INFO( file << ":" << line ); + CAPTURE(context); + INFO(file << ":" << line); } + + static void pass(const char* file, int line) { INFO(file << ":" << line); } }; #define MOCK_ERROR_POLICY catch_mock_error_policy diff --git a/include/turtle/cleanup.hpp b/include/turtle/cleanup.hpp index de49559..e2bde3d 100644 --- a/include/turtle/cleanup.hpp +++ b/include/turtle/cleanup.hpp @@ -10,30 +10,25 @@ #define MOCK_CLEANUP_HPP_INCLUDED #include "config.hpp" -#include "verify.hpp" #include "reset.hpp" +#include "verify.hpp" #ifdef MOCK_USE_BOOST_TEST -#include +# include #endif -namespace mock +namespace mock { +struct cleanup { - struct cleanup - { - ~cleanup() - { - mock::reset(); - } - }; + ~cleanup() { mock::reset(); } +}; #ifdef MOCK_USE_BOOST_TEST - BOOST_GLOBAL_FIXTURE( cleanup ) -#if BOOST_VERSION >= 105900 - ; -#endif +BOOST_GLOBAL_FIXTURE(cleanup) +# if BOOST_VERSION >= 105900 + ; +# endif #endif -} // mock - +} // namespace mock #endif // MOCK_CLEANUP_HPP_INCLUDED diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index f23084d..b2a0f68 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -14,29 +14,28 @@ #include #ifndef MOCK_ERROR_POLICY -# define MOCK_ERROR_POLICY mock::error -# define MOCK_USE_BOOST_TEST +# define MOCK_ERROR_POLICY mock::error +# define MOCK_USE_BOOST_TEST #endif #ifndef MOCK_MAX_ARGS -# define MOCK_MAX_ARGS 9 +# define MOCK_MAX_ARGS 9 #endif #ifndef MOCK_MAX_SEQUENCES -# define MOCK_MAX_SEQUENCES 10 +# define MOCK_MAX_SEQUENCES 10 #endif #if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) -# ifndef MOCK_NO_HDR_MUTEX -# define MOCK_HDR_MUTEX -# endif +# ifndef MOCK_NO_HDR_MUTEX +# define MOCK_HDR_MUTEX +# endif #endif -#if defined(__cpp_lib_uncaught_exceptions) || \ - defined(_MSC_VER) && (_MSC_VER >= 1900) -# ifndef MOCK_NO_UNCAUGHT_EXCEPTIONS -# define MOCK_UNCAUGHT_EXCEPTIONS -# endif +#if defined(__cpp_lib_uncaught_exceptions) || defined(_MSC_VER) && (_MSC_VER >= 1900) +# ifndef MOCK_NO_UNCAUGHT_EXCEPTIONS +# define MOCK_UNCAUGHT_EXCEPTIONS +# endif #endif #endif // MOCK_CONFIG_HPP_INCLUDED diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index 4708cf8..126ce5d 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -12,243 +12,284 @@ #include "config.hpp" #include "log.hpp" #include "unwrap_reference.hpp" -#include +#include #include -#include +#include #include #include -#include -#include +#include +#include #include #include -namespace mock +namespace mock { +template +struct constraint { - template< typename Constraint > - struct constraint - { - constraint() {} - constraint( const Constraint& c ) - : c_( c ) - {} - Constraint c_; - }; + constraint() {} + constraint(const Constraint& c) : c_(c) {} + Constraint c_; +}; -namespace detail -{ - template< typename Lhs, typename Rhs > +namespace detail { + template class and_ { public: - and_( const Lhs& lhs, const Rhs& rhs ) - : lhs_( lhs ) - , rhs_( rhs ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const + and_(const Lhs& lhs, const Rhs& rhs) : lhs_(lhs), rhs_(rhs) {} + template + bool operator()(const Actual& actual) const { - return lhs_( actual ) && rhs_( actual ); + return lhs_(actual) && rhs_(actual); } - friend std::ostream& operator<<( std::ostream& s, const and_& a ) + friend std::ostream& operator<<(std::ostream& s, const and_& a) { - return s << "( " << mock::format( a.lhs_ ) - << " && " << mock::format( a.rhs_ ) << " )"; + return s << "( " << mock::format(a.lhs_) << " && " << mock::format(a.rhs_) << " )"; } + private: Lhs lhs_; Rhs rhs_; }; - template< typename Lhs, typename Rhs > + template class or_ { public: - or_( const Lhs& lhs, const Rhs& rhs ) - : lhs_( lhs ) - , rhs_( rhs ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const + or_(const Lhs& lhs, const Rhs& rhs) : lhs_(lhs), rhs_(rhs) {} + template + bool operator()(const Actual& actual) const { - return lhs_( actual ) || rhs_( actual ); + return lhs_(actual) || rhs_(actual); } - friend std::ostream& operator<<( std::ostream& s, const or_& o ) + friend std::ostream& operator<<(std::ostream& s, const or_& o) { - return s << "( " << mock::format( o.lhs_ ) - << " || " << mock::format( o.rhs_ )<< " )"; + return s << "( " << mock::format(o.lhs_) << " || " << mock::format(o.rhs_) << " )"; } + private: Lhs lhs_; Rhs rhs_; }; - template< typename Constraint > + template class not_ { public: - explicit not_( const Constraint& c ) - : c_( c ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const + explicit not_(const Constraint& c) : c_(c) {} + template + bool operator()(const Actual& actual) const { - return ! c_( actual ); - } - friend std::ostream& operator<<( std::ostream& s, const not_& n ) - { - return s << "! " << mock::format( n.c_ ); + return !c_(actual); } + friend std::ostream& operator<<(std::ostream& s, const not_& n) { return s << "! " << mock::format(n.c_); } + private: Constraint c_; }; +} // namespace detail + +template +const constraint> operator||(const constraint& lhs, const constraint& rhs) +{ + return detail::or_(lhs.c_, rhs.c_); } - template< typename Lhs, typename Rhs > - const constraint< detail::or_< Lhs, Rhs > > - operator||( const constraint< Lhs >& lhs, - const constraint< Rhs >& rhs ) - { - return detail::or_< Lhs, Rhs >( lhs.c_, rhs.c_ ); - } +template +const constraint> operator&&(const constraint& lhs, const constraint& rhs) +{ + return detail::and_(lhs.c_, rhs.c_); +} - template< typename Lhs, typename Rhs > - const constraint< detail::and_< Lhs, Rhs > > - operator&&( const constraint< Lhs >& lhs, - const constraint< Rhs >& rhs ) - { - return detail::and_< Lhs, Rhs >( lhs.c_, rhs.c_ ); - } +template +const constraint> operator!(const constraint& c) +{ + return detail::not_(c.c_); +} +} // namespace mock - template< typename Constraint > - const constraint< detail::not_< Constraint > > - operator!( const constraint< Constraint >& c ) - { - return detail::not_< Constraint >( c.c_ ); - } -} // mock +#define MOCK_UNARY_CONSTRAINT(Name, n, Args, Expr) \ + namespace detail { \ + struct Name \ + { \ + template \ + bool operator()(const Actual& actual) const \ + { \ + (void)actual; \ + return Expr; \ + } \ + friend std::ostream& operator<<(std::ostream& s, const Name&) { return s << BOOST_STRINGIZE(Name); } \ + }; \ + } \ + const mock::constraint Name; -#define MOCK_UNARY_CONSTRAINT(Name, n, Args, Expr) \ - namespace detail \ - { \ - struct Name \ - { \ - template< typename Actual > \ - bool operator()( const Actual& actual ) const \ - { \ - (void) actual; return Expr; \ - } \ - friend std::ostream& operator<<( std::ostream& s, const Name& ) \ - { \ - return s << BOOST_STRINGIZE(Name); \ - } \ - }; \ - } \ - const mock::constraint< detail::Name > Name; +#define MOCK_CONSTRAINT_ASSIGN(z, n, d) expected##n(std::forward(e##n)) -#define MOCK_CONSTRAINT_ASSIGN(z, n, d) \ - expected##n( std::forward< T##n >(e##n) ) +#define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) mock::unwrap_ref(expected##n) -#define MOCK_CONSTRAINT_UNWRAP_REF(z, n, d) \ - mock::unwrap_ref( expected##n ) +#define MOCK_CONSTRAINT_FORMAT(z, n, d) BOOST_PP_IF(n, << ", " <<, ) mock::format(c.expected##n) -#define MOCK_CONSTRAINT_FORMAT(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) mock::format( c.expected##n ) +#define MOCK_CONSTRAINT_MEMBER(z, n, d) Expected_##n expected##n; -#define MOCK_CONSTRAINT_MEMBER(z, n, d) \ - Expected_##n expected##n; - -#define MOCK_CONSTRAINT_TPL_TYPE(z, n, d) \ - std::decay_t< const T##n > +#define MOCK_CONSTRAINT_TPL_TYPE(z, n, d) std::decay_t #define MOCK_CONSTRAINT_CREF_PARAM(z, n, Args) \ - const mock::unwrap_reference_t< Expected_##n >& \ - BOOST_PP_ARRAY_ELEM(n, Args) + const mock::unwrap_reference_t& BOOST_PP_ARRAY_ELEM(n, Args) -#define MOCK_CONSTRAINT_ARG(z, n, Args) \ - T##n&& BOOST_PP_ARRAY_ELEM(n, Args) +#define MOCK_CONSTRAINT_ARG(z, n, Args) T##n&& BOOST_PP_ARRAY_ELEM(n, Args) -#define MOCK_CONSTRAINT_ARGS(z, n, Args) \ - T##n&& e##n +#define MOCK_CONSTRAINT_ARGS(z, n, Args) T##n&& e##n -#define MOCK_CONSTRAINT_PARAM(z, n, Args) \ - std::forward< T##n >( BOOST_PP_ARRAY_ELEM(n, Args) ) +#define MOCK_CONSTRAINT_PARAM(z, n, Args) std::forward(BOOST_PP_ARRAY_ELEM(n, Args)) -#define MOCK_NARY_CONSTRAINT(Name, n, Args, Expr) \ - namespace detail \ - { \ - template< BOOST_PP_ENUM_PARAMS(n, typename Expected_) > \ - struct Name \ - { \ - template< BOOST_PP_ENUM_PARAMS(n, typename T) > \ - explicit Name( \ - BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ARGS, _) ) \ - : BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ASSIGN, _) \ - {} \ - template< typename Actual > \ - bool operator()( const Actual& actual ) const \ - { \ - return test( actual, \ - BOOST_PP_ENUM(n, MOCK_CONSTRAINT_UNWRAP_REF, _) ); \ - } \ - template< typename Actual > \ - bool test( const Actual& actual, \ - BOOST_PP_ENUM(n, \ - MOCK_CONSTRAINT_CREF_PARAM, (n, Args)) ) const \ - { \ - return Expr; \ - } \ - friend std::ostream& operator<<( std::ostream& s, const Name& c ) \ - { \ - return s << BOOST_STRINGIZE(Name) << "( " \ - << BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_FORMAT, _) \ - << " )"; \ - } \ - BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_MEMBER, _) \ - }; \ - } \ - template< BOOST_PP_ENUM_PARAMS(n, typename T) > \ - mock::constraint< \ - detail::Name< BOOST_PP_ENUM(n, MOCK_CONSTRAINT_TPL_TYPE, _) > \ - > Name( BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ARG, (n, Args)) ) \ - { \ - return detail::Name< BOOST_PP_ENUM(n, MOCK_CONSTRAINT_TPL_TYPE, _) >( \ - BOOST_PP_ENUM(n, MOCK_CONSTRAINT_PARAM, (n, Args)) ); \ +#define MOCK_NARY_CONSTRAINT(Name, n, Args, Expr) \ + namespace detail { \ + template \ + struct Name \ + { \ + template \ + explicit Name(BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ARGS, _)) : BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ASSIGN, _) \ + {} \ + template \ + bool operator()(const Actual& actual) const \ + { \ + return test(actual, BOOST_PP_ENUM(n, MOCK_CONSTRAINT_UNWRAP_REF, _)); \ + } \ + template \ + bool test(const Actual& actual, BOOST_PP_ENUM(n, MOCK_CONSTRAINT_CREF_PARAM, (n, Args))) const \ + { \ + return Expr; \ + } \ + friend std::ostream& operator<<(std::ostream& s, const Name& c) \ + { \ + return s << BOOST_STRINGIZE(Name) << "( " << BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_FORMAT, _) << " )"; \ + } \ + BOOST_PP_REPEAT(n, MOCK_CONSTRAINT_MEMBER, _) \ + }; \ + } \ + template \ + mock::constraint> Name( \ + BOOST_PP_ENUM(n, MOCK_CONSTRAINT_ARG, (n, Args))) \ + { \ + return detail::Name( \ + BOOST_PP_ENUM(n, MOCK_CONSTRAINT_PARAM, (n, Args))); \ } #define MOCK_CONSTRAINT_EXT(Name, n, Args, Expr) \ - BOOST_PP_IF(n, \ - MOCK_NARY_CONSTRAINT, \ - MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) + BOOST_PP_IF(n, MOCK_NARY_CONSTRAINT, MOCK_UNARY_CONSTRAINT)(Name, n, Args, Expr) #ifdef BOOST_MSVC -# define MOCK_VARIADIC_SIZE(...) \ +# define MOCK_VARIADIC_SIZE(...) \ BOOST_PP_CAT(MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ - 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ - 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ - 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),) + 32, \ + 31, \ + 30, \ + 29, \ + 28, \ + 27, \ + 26, \ + 25, \ + 24, \ + 23, \ + 22, \ + 21, \ + 20, \ + 19, \ + 18, \ + 17, \ + 16, \ + 15, \ + 14, \ + 13, \ + 12, \ + 11, \ + 10, \ + 9, \ + 8, \ + 7, \ + 6, \ + 5, \ + 4, \ + 3, \ + 2, \ + 1, ), ) #else // BOOST_MSVC -# define MOCK_VARIADIC_SIZE(...) \ +# define MOCK_VARIADIC_SIZE(...) \ MOCK_VARIADIC_SIZE_I(__VA_ARGS__, \ - 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, \ - 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, \ - 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,) + 32, \ + 31, \ + 30, \ + 29, \ + 28, \ + 27, \ + 26, \ + 25, \ + 24, \ + 23, \ + 22, \ + 21, \ + 20, \ + 19, \ + 18, \ + 17, \ + 16, \ + 15, \ + 14, \ + 13, \ + 12, \ + 11, \ + 10, \ + 9, \ + 8, \ + 7, \ + 6, \ + 5, \ + 4, \ + 3, \ + 2, \ + 1, ) #endif // BOOST_MSVC -#define MOCK_VARIADIC_SIZE_I( \ - e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, \ - e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, \ - e25, e26, e27, e28, e29, e30, e31, size, ...) size +#define MOCK_VARIADIC_SIZE_I(e0, \ + e1, \ + e2, \ + e3, \ + e4, \ + e5, \ + e6, \ + e7, \ + e8, \ + e9, \ + e10, \ + e11, \ + e12, \ + e13, \ + e14, \ + e15, \ + e16, \ + e17, \ + e18, \ + e19, \ + e20, \ + e21, \ + e22, \ + e23, \ + e24, \ + e25, \ + e26, \ + e27, \ + e28, \ + e29, \ + e30, \ + e31, \ + size, \ + ...) \ + size #define MOCK_CONSTRAINT_AUX_AUX(Name, n, Array) \ - MOCK_CONSTRAINT_EXT( \ - Name, n, \ - BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(Array)), \ - BOOST_PP_ARRAY_ELEM(n, Array)) + MOCK_CONSTRAINT_EXT(Name, n, BOOST_PP_ARRAY_TO_TUPLE(BOOST_PP_ARRAY_POP_BACK(Array)), BOOST_PP_ARRAY_ELEM(n, Array)) -#define MOCK_CONSTRAINT_AUX(Name, Size, Tuple) \ - MOCK_CONSTRAINT_AUX_AUX(Name, BOOST_PP_DEC(Size), (Size,Tuple)) +#define MOCK_CONSTRAINT_AUX(Name, Size, Tuple) MOCK_CONSTRAINT_AUX_AUX(Name, BOOST_PP_DEC(Size), (Size, Tuple)) -#define MOCK_CONSTRAINT(Name, ...) \ - MOCK_CONSTRAINT_AUX( \ - Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) +#define MOCK_CONSTRAINT(Name, ...) MOCK_CONSTRAINT_AUX(Name, MOCK_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)) #endif // MOCK_CONSTRAINT_HPP_INCLUDED diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index f29495a..14e5458 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -12,300 +12,243 @@ #include "config.hpp" #include "constraint.hpp" #include "detail/move_helper.hpp" -#include "unwrap_reference.hpp" #include "detail/void_t.hpp" +#include "unwrap_reference.hpp" #include #if BOOST_VERSION >= 107000 -#include +# include #else -#include +# include #endif #include #include #include -namespace mock -{ - MOCK_UNARY_CONSTRAINT( any, 0,, ((void)actual, true) ) - MOCK_UNARY_CONSTRAINT( affirm, 0,, !! actual ) - MOCK_UNARY_CONSTRAINT( negate, 0,, ! actual ) - MOCK_UNARY_CONSTRAINT( evaluate, 0,, actual() ) +namespace mock { +MOCK_UNARY_CONSTRAINT(any, 0, , ((void)actual, true)) +MOCK_UNARY_CONSTRAINT(affirm, 0, , !!actual) +MOCK_UNARY_CONSTRAINT(negate, 0, , !actual) +MOCK_UNARY_CONSTRAINT(evaluate, 0, , actual()) - MOCK_NARY_CONSTRAINT( less, 1, ( expected ), actual < expected ) - MOCK_NARY_CONSTRAINT( greater, 1, ( expected ), actual > expected ) - MOCK_NARY_CONSTRAINT( less_equal, 1, ( expected ), actual <= expected ) - MOCK_NARY_CONSTRAINT( greater_equal, 1, ( expected ), actual >= expected ) +MOCK_NARY_CONSTRAINT(less, 1, (expected), actual < expected) +MOCK_NARY_CONSTRAINT(greater, 1, (expected), actual > expected) +MOCK_NARY_CONSTRAINT(less_equal, 1, (expected), actual <= expected) +MOCK_NARY_CONSTRAINT(greater_equal, 1, (expected), actual >= expected) #if BOOST_VERSION < 105900 -# define MOCK_SMALL() \ - boost::test_tools::check_is_small( actual, tolerance ) -# define MOCK_PERCENT_TOLERANCE() \ - boost::test_tools::check_is_close( \ - actual, \ - expected, \ - boost::test_tools::percent_tolerance( tolerance ) ) -# define MOCK_FRACTION_TOLERANCE() \ - boost::test_tools::check_is_close( \ - actual, \ - expected, \ - boost::test_tools::fraction_tolerance( tolerance ) ) +# define MOCK_SMALL() boost::test_tools::check_is_small(actual, tolerance) +# define MOCK_PERCENT_TOLERANCE() \ + boost::test_tools::check_is_close(actual, expected, boost::test_tools::percent_tolerance(tolerance)) +# define MOCK_FRACTION_TOLERANCE() \ + boost::test_tools::check_is_close(actual, expected, boost::test_tools::fraction_tolerance(tolerance)) #else // BOOST_VERSION < 105900 -namespace detail -{ - template< typename T, typename Tolerance > - bool is_small( const T& t, const Tolerance& tolerance ) +namespace detail { + template + bool is_small(const T& t, const Tolerance& tolerance) { - return boost::math::fpc::small_with_tolerance< T >( tolerance )( t ); + return boost::math::fpc::small_with_tolerance(tolerance)(t); } - template< typename T1, typename T2, typename Tolerance > - bool is_close( const T1& t1, const T2& t2, const Tolerance& tolerance ) + template + bool is_close(const T1& t1, const T2& t2, const Tolerance& tolerance) { - typedef std::common_type_t< T1, T2 > common_type; - return boost::math::fpc::close_at_tolerance< common_type >( - tolerance, boost::math::fpc::FPC_STRONG )( t1, t2 ); + typedef std::common_type_t common_type; + return boost::math::fpc::close_at_tolerance(tolerance, boost::math::fpc::FPC_STRONG)(t1, t2); } -} +} // namespace detail -# define MOCK_SMALL() \ - detail::is_small( actual, tolerance ) -# define MOCK_PERCENT_TOLERANCE() \ - detail::is_close( actual, expected, \ - boost::math::fpc::percent_tolerance( tolerance ) ) -# define MOCK_FRACTION_TOLERANCE() \ - detail::is_close( actual, expected, tolerance ) +# define MOCK_SMALL() detail::is_small(actual, tolerance) +# define MOCK_PERCENT_TOLERANCE() detail::is_close(actual, expected, boost::math::fpc::percent_tolerance(tolerance)) +# define MOCK_FRACTION_TOLERANCE() detail::is_close(actual, expected, tolerance) #endif // BOOST_VERSION < 105900 #ifdef small -# pragma push_macro( "small" ) -# undef small -# define MOCK_SMALL_DEFINED +# pragma push_macro("small") +# undef small +# define MOCK_SMALL_DEFINED #endif - MOCK_NARY_CONSTRAINT( small, 1, ( tolerance ), - ( MOCK_SMALL() ) ) +MOCK_NARY_CONSTRAINT(small, 1, (tolerance), (MOCK_SMALL())) #ifdef MOCK_SMALL_DEFINED -# pragma pop_macro( "small" ) +# pragma pop_macro("small") #endif - MOCK_NARY_CONSTRAINT( close, 2, ( expected, tolerance ), - ( MOCK_PERCENT_TOLERANCE() ) ) +MOCK_NARY_CONSTRAINT(close, 2, (expected, tolerance), (MOCK_PERCENT_TOLERANCE())) - MOCK_NARY_CONSTRAINT( close_fraction, 2, ( expected, tolerance ), - ( MOCK_FRACTION_TOLERANCE() ) ) +MOCK_NARY_CONSTRAINT(close_fraction, 2, (expected, tolerance), (MOCK_FRACTION_TOLERANCE())) #undef MOCK_PERCENT_TOLERANCE #undef MOCK_FRACTION_TOLERANCE #ifdef near -# pragma push_macro( "near" ) -# undef near -# define MOCK_NEAR_DEFINED +# pragma push_macro("near") +# undef near +# define MOCK_NEAR_DEFINED #endif - MOCK_NARY_CONSTRAINT( near, 2, ( expected, tolerance ), - std::abs( actual - expected ) <= tolerance ) +MOCK_NARY_CONSTRAINT(near, 2, (expected, tolerance), std::abs(actual - expected) <= tolerance) #ifdef MOCK_NEAR_DEFINED -# pragma pop_macro( "near" ) +# pragma pop_macro("near") #endif -namespace detail -{ +namespace detail { template - struct has_equal_to: std::false_type + struct has_equal_to : std::false_type {}; template - struct has_equal_to() == std::declval())>>: std::true_type + struct has_equal_to() == std::declval())>> : std::true_type {}; - template< typename Expected > + template struct equal { - explicit equal( Expected expected ) - : expected_( expected ) - {} - template< typename Actual > - bool operator()( const Actual& actual, - std::enable_if_t< - has_equal_to< - Actual, - unwrap_reference_t< Expected > - >::value - >* = 0 ) const + explicit equal(Expected expected) : expected_(expected) {} + template + bool operator()(const Actual& actual, + std::enable_if_t>::value>* = 0) const { - return actual == unwrap_ref( expected_ ); + return actual == unwrap_ref(expected_); } - template< typename Actual > - bool operator()( const Actual& actual, - std::enable_if_t< - !has_equal_to< - Actual, - unwrap_reference_t< Expected > - >::value - >* = 0 ) const + template + bool operator()(const Actual& actual, + std::enable_if_t>::value>* = 0) const { - return actual && *actual == unwrap_ref( expected_ ); + return actual && *actual == unwrap_ref(expected_); } - friend std::ostream& operator<<( std::ostream& s, const equal& e ) + friend std::ostream& operator<<(std::ostream& s, const equal& e) { - return s << "equal( " << mock::format( e.expected_ ) << " )"; + return s << "equal( " << mock::format(e.expected_) << " )"; } Expected expected_; }; - template< typename Expected > + template struct same { - explicit same( const Expected& expected ) - : expected_( std::addressof( unwrap_ref( expected ) ) ) - {} - template< typename Actual > - bool operator()( const Actual& actual ) const + explicit same(const Expected& expected) : expected_(std::addressof(unwrap_ref(expected))) {} + template + bool operator()(const Actual& actual) const { - return std::addressof( actual ) == expected_; + return std::addressof(actual) == expected_; } - friend std::ostream& operator<<( std::ostream& os, const same& s ) + friend std::ostream& operator<<(std::ostream& os, const same& s) { - return os << "same( " << mock::format( *s.expected_ ) << " )"; + return os << "same( " << mock::format(*s.expected_) << " )"; } - const unwrap_reference_t< Expected >* expected_; + const unwrap_reference_t* expected_; }; - template< typename Expected > + template struct retrieve { - explicit retrieve( Expected& expected ) - : expected_( std::addressof( unwrap_ref( expected ) ) ) - {} - template< typename Actual > - bool operator()( const Actual& actual, - std::enable_if_t< - !std::is_convertible< - const Actual*, - unwrap_reference_t< Expected > - >::value - >* = 0 ) const + explicit retrieve(Expected& expected) : expected_(std::addressof(unwrap_ref(expected))) {} + template + bool operator()( + const Actual& actual, + std::enable_if_t>::value>* = 0) const { *expected_ = actual; return true; } - template< typename Actual > - bool operator()( Actual&& actual, - std::enable_if_t< - !std::is_convertible< - const Actual*, - unwrap_reference_t< Expected > - >::value - >* = 0 ) const + template + bool operator()( + Actual&& actual, + std::enable_if_t>::value>* = 0) const { - *expected_ = std::move( actual ); + *expected_ = std::move(actual); return true; } - template< typename Actual > - bool operator()( Actual& actual, - std::enable_if_t< - std::is_convertible< Actual*, - unwrap_reference_t< Expected > - >::value - >* = 0 ) const + template + bool operator()(Actual& actual, + std::enable_if_t>::value>* = 0) const { - *expected_ = std::addressof( actual ); + *expected_ = std::addressof(actual); return true; } - friend std::ostream& operator<<( std::ostream& s, const retrieve& r ) + friend std::ostream& operator<<(std::ostream& s, const retrieve& r) { - return s << "retrieve( " << mock::format( *r.expected_ ) << " )"; + return s << "retrieve( " << mock::format(*r.expected_) << " )"; } - unwrap_reference_t< Expected >* expected_; + unwrap_reference_t* expected_; }; - template< typename Expected > + template struct assign { - explicit assign( const Expected& expected ) - : expected_( expected ) - {} - template< typename Actual > - bool operator()( Actual& actual ) const + explicit assign(const Expected& expected) : expected_(expected) {} + template + bool operator()(Actual& actual) const { - actual = unwrap_ref( expected_ ); + actual = unwrap_ref(expected_); return true; } - template< typename Actual > - bool operator()( Actual* actual, - std::enable_if_t< - std::is_convertible< - unwrap_reference_t< Expected >, - Actual - >::value - >* = 0 ) const + template + bool operator()(Actual* actual, + std::enable_if_t, Actual>::value>* = 0) const { - if( ! actual ) + if(!actual) return false; - *actual = unwrap_ref( expected_ ); + *actual = unwrap_ref(expected_); return true; } - friend std::ostream& operator<<( std::ostream& s, const assign& a ) + friend std::ostream& operator<<(std::ostream& s, const assign& a) { - return s << "assign( " << mock::format( a.expected_ ) << " )"; + return s << "assign( " << mock::format(a.expected_) << " )"; } Expected expected_; }; - template< typename Expected > + template struct contain { - explicit contain( const Expected& expected ) - : expected_( expected ) - {} - bool operator()( const std::string& actual ) const + explicit contain(const Expected& expected) : expected_(expected) {} + bool operator()(const std::string& actual) const { - return actual.find( unwrap_ref( expected_ ) ) - != std::string::npos; + return actual.find(unwrap_ref(expected_)) != std::string::npos; } - friend std::ostream& operator<<( std::ostream& s, const contain& n ) + friend std::ostream& operator<<(std::ostream& s, const contain& n) { - return s << "contain( " << mock::format( n.expected_ ) << " )"; + return s << "contain( " << mock::format(n.expected_) << " )"; } Expected expected_; }; +} // namespace detail + +template +constraint> equal(T&& t) +{ + return detail::equal(std::forward(t)); } - template< typename T > - constraint< detail::equal< T > > equal( T&& t ) - { - return detail::equal< T >( std::forward< T >( t ) ); - } +template +constraint> same(T& t) +{ + return detail::same(t); +} +template +constraint> retrieve(T& t) +{ + return detail::retrieve(t); +} +template +constraint> assign(T t) +{ + return detail::assign(t); +} +template +constraint> contain(T t) +{ + return detail::contain(t); +} - template< typename T > - constraint< detail::same< T > > same( T& t ) - { - return detail::same< T >( t ); - } - template< typename T > - constraint< detail::retrieve< T > > retrieve( T& t ) - { - return detail::retrieve< T >( t ); - } - template< typename T > - constraint< detail::assign< T > > assign( T t ) - { - return detail::assign< T >( t ); - } - template< typename T > - constraint< detail::contain< T > > contain( T t ) - { - return detail::contain< T >( t ); - } - - template< typename T > - constraint< T > call( T t ) - { - return constraint< T >( t ); - } -} // mock +template +constraint call(T t) +{ + return constraint(t); +} +} // namespace mock #endif // MOCK_CONSTRAINTS_HPP_INCLUDED diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 714d61a..7bc5fa0 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -14,16 +14,13 @@ #include #include -namespace mock -{ -namespace detail -{ - template< typename Result, typename Signature > +namespace mock { namespace detail { + template class action_base { private: - typedef std::function< Signature > functor_type; - typedef std::function< Result() > action_type; + typedef std::function functor_type; + typedef std::function action_type; protected: // Meant to be subclassed and not be directly used @@ -33,41 +30,29 @@ namespace detail action_base(action_base&&) = delete; action_base& operator=(const action_base&) = delete; action_base& operator=(action_base&&) = delete; + public: + const functor_type& functor() const { return f_; } + bool valid() const { return f_ || a_; } + Result trigger() const { return a_(); } - const functor_type& functor() const + void calls(const functor_type& f) { - return f_; - } - bool valid() const - { - return f_ || a_; - } - Result trigger() const - { - return a_(); - } - - void calls( const functor_type& f ) - { - if( ! f ) - throw std::invalid_argument( "null functor" ); + if(!f) + throw std::invalid_argument("null functor"); f_ = f; } - template< typename Exception > - void throws( Exception e ) + template + void throws(Exception e) { a_ = [e]() -> Result { throw e; }; } protected: - void set( const action_type& a ) - { - a_ = a; - } - template< typename Y > - void set( const std::reference_wrapper< Y >& r ) + void set(const action_type& a) { a_ = a; } + template + void set(const std::reference_wrapper& r) { a_ = [r]() -> Result { return r.get(); }; } @@ -77,26 +62,26 @@ namespace detail action_type a_; }; - template< typename Result, typename Signature > - class action : public action_base< Result, Signature > + template + class action : public action_base { public: - template< typename Value > - void returns( const Value& v ) + template + void returns(const Value& v) { - this->set( std::ref( store( v ) ) ); + this->set(std::ref(store(v))); } - template< typename Y > - void returns( const std::reference_wrapper< Y >& r ) + template + void returns(const std::reference_wrapper& r) { - this->set( r ); + this->set(r); } - template< typename Value > - void moves( Value&& v ) + template + void moves(Value&& v) { - auto vRef = std::ref( store( std::move( v ) ) ); - this->set([vRef](){ return std::move(vRef.get()); }); + auto vRef = std::ref(store(std::move(v))); + this->set([vRef]() { return std::move(vRef.get()); }); } private: @@ -107,44 +92,43 @@ namespace detail value& operator=(const value&) = delete; virtual ~value() = default; }; - template< typename T > + template struct value_imp : value { typedef std::remove_const_t> type; - template< typename U > - value_imp( U&& t ) : t_( std::forward( t ) ) + template + value_imp(U&& t) : t_(std::forward(t)) {} type t_; }; - template< typename T > - typename value_imp::type& store( T&& t ) + template + typename value_imp::type& store(T&& t) { - v_ = std::make_unique< value_imp >( std::forward( t ) ); - return static_cast< value_imp< T >& >( *v_ ).t_; + v_ = std::make_unique>(std::forward(t)); + return static_cast&>(*v_).t_; } - template< typename T > - std::remove_reference_t< Result >& store( T* t ) + template + std::remove_reference_t& store(T* t) { - v_ = std::make_unique< value_imp >( t ); - return static_cast< value_imp< Result >& >( *v_ ).t_; + v_ = std::make_unique>(t); + return static_cast&>(*v_).t_; } - std::unique_ptr< value > v_; + std::unique_ptr v_; }; - template< typename Signature > - class action< void, Signature > : public action_base< void, Signature > + template + class action : public action_base { public: action() { - this->set( [](){} ); + this->set([]() {}); } }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_ACTION_HPP_INCLUDED diff --git a/include/turtle/detail/child.hpp b/include/turtle/detail/child.hpp index 992d397..a5621fb 100644 --- a/include/turtle/detail/child.hpp +++ b/include/turtle/detail/child.hpp @@ -10,43 +10,38 @@ #define MOCK_CHILD_HPP_INCLUDED #include "../config.hpp" -#include "type_name.hpp" #include "parent.hpp" -#include +#include "type_name.hpp" #include +#include #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class child { public: - child() - : parent_( 0 ) - {} - void update( parent& p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + child() : parent_(0) {} + void update(parent& p, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) { - if( instance != "?." || name_.empty() ) - p = parent( instance, type ); + if(instance != "?." || name_.empty()) + p = parent(instance, type); parent_ = &p; name_ = name; } - friend std::ostream& operator<<( std::ostream& s, const child& c ) + friend std::ostream& operator<<(std::ostream& s, const child& c) { - if( c.parent_ ) + if(c.parent_) s << *c.parent_; return s << c.name_; } + private: const parent* parent_; boost::unit_test::const_string name_; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_CHILD_HPP_INCLUDED diff --git a/include/turtle/detail/context.hpp b/include/turtle/detail/context.hpp index 3e46813..28fc98c 100644 --- a/include/turtle/detail/context.hpp +++ b/include/turtle/detail/context.hpp @@ -15,10 +15,7 @@ #include #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class verifiable; class context @@ -30,17 +27,16 @@ namespace detail virtual ~context() = default; - virtual void add( const void* p, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) = 0; - virtual void add( verifiable& v ) = 0; - virtual void remove( verifiable& v ) = 0; + virtual void add(const void* p, + verifiable& v, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) = 0; + virtual void add(verifiable& v) = 0; + virtual void remove(verifiable& v) = 0; - virtual void serialize( std::ostream& s, - const verifiable& v ) const = 0; + virtual void serialize(std::ostream& s, const verifiable& v) const = 0; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_CONTEXT_HPP_INCLUDED diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp index d3e74bd..3f42263 100644 --- a/include/turtle/detail/expectation_template.hpp +++ b/include/turtle/detail/expectation_template.hpp @@ -8,115 +8,83 @@ #include "matcher_base_template.hpp" -#define MOCK_EXPECTATION_INITIALIZE(z, n, d) \ - BOOST_PP_COMMA_IF(n) c##n##_( c##n ) +#define MOCK_EXPECTATION_INITIALIZE(z, n, d) BOOST_PP_COMMA_IF(n) c##n##_(c##n) -#define MOCK_EXPECTATION_MEMBER(z, n, d) \ - matcher< T##n, Constraint_##n > c##n##_; +#define MOCK_EXPECTATION_MEMBER(z, n, d) matcher c##n##_; -#define MOCK_EXPECTATION_IS_VALID(z, n, d) \ - BOOST_PP_IF(n, &&,) c##n##_( std::forward< T##n >( a##n ) ) +#define MOCK_EXPECTATION_IS_VALID(z, n, d) BOOST_PP_IF(n, &&, ) c##n##_(std::forward(a##n)) -#define MOCK_EXPECTATION_SERIALIZE(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) c##n##_ +#define MOCK_EXPECTATION_SERIALIZE(z, n, d) BOOST_PP_IF(n, << ", " <<, ) c##n##_ -#define MOCK_EXPECTATION_SERIALIZE_ANY(z, n, d) \ - BOOST_PP_IF(n, << ", " <<,) "any" +#define MOCK_EXPECTATION_SERIALIZE_ANY(z, n, d) BOOST_PP_IF(n, << ", " <<, ) "any" -#define MOCK_EXPECTATION_PARAM(z, n, Args) \ - std::forward< T##n >( a##n ) +#define MOCK_EXPECTATION_PARAM(z, n, Args) std::forward(a##n) -#define MOCK_REF_ARG(z, n, d) \ - typename ref_arg< T##n >::type a##n +#define MOCK_REF_ARG(z, n, d) typename ref_arg::type a##n -#define MOCK_REF_ARG_T(z, n, d) \ - typename ref_arg< T##n >::type +#define MOCK_REF_ARG_T(z, n, d) typename ref_arg::type -namespace mock -{ -namespace detail -{ - template< typename Signature > class default_matcher; +namespace mock { namespace detail { + template + class default_matcher; - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > - class default_matcher< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + template + class default_matcher : + public matcher_base { private: - virtual bool operator()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG_T, _) ) + virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG_T, _)) { return true; } + virtual void serialize(std::ostream& s) const { - return true; - } - virtual void serialize( std::ostream& s ) const - { - s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_SERIALIZE_ANY, _); + s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_SERIALIZE_ANY, _); } }; #ifndef MOCK_NUM_ARGS_0 - template< typename Constraint, typename Signature > class single_matcher; + template + class single_matcher; - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_), - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) - > - class single_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + template + class single_matcher : + public matcher_base { public: - single_matcher( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) - : BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_INITIALIZE, _) + single_matcher(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) + : BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_INITIALIZE, _) {} private: - virtual bool operator()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) + virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) { - return BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_IS_VALID, _); + return BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_IS_VALID, _); } - virtual void serialize( std::ostream& s ) const + virtual void serialize(std::ostream& s) const { - s << BOOST_PP_REPEAT(MOCK_NUM_ARGS, - MOCK_EXPECTATION_SERIALIZE, _); + s << BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_SERIALIZE, _); } private: - BOOST_PP_REPEAT( - MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _) -}; + BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _) + }; - template< typename F, typename Signature > class multi_matcher; + template + class multi_matcher; - template< typename F, - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > - class multi_matcher< F, void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + template + class multi_matcher : + public matcher_base { public: - multi_matcher( const F& f ) - : f_( f ) - {} + multi_matcher(const F& f) : f_(f) {} private: - virtual bool operator()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) + virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) { - return f_( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _) ); - } - virtual void serialize( std::ostream& s ) const - { - s << mock::format( f_ ); + return f_(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _)); } + virtual void serialize(std::ostream& s) const { s << mock::format(f_); } private: F f_; @@ -124,144 +92,103 @@ namespace detail #endif - template< typename Signature > class expectation; + template + class expectation; - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class expectation< R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > - : public action< R, R (BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS,T)) > + template + class expectation : + public action { public: expectation() - : invocation_( std::make_unique< unlimited >() ) - , matcher_( - std::make_unique< - default_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > () ) - , file_( "unknown location" ) - , line_( 0 ) + : invocation_(std::make_unique()), + matcher_(std::make_unique>()), + file_("unknown location"), line_(0) {} - expectation( const char* file, int line ) - : invocation_( std::make_unique< unlimited >() ) - , matcher_( - std::make_unique< - default_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > () ) - , file_( file ) - , line_( line ) + expectation(const char* file, int line) + : invocation_(std::make_unique()), + matcher_(std::make_unique>()), file_(file), + line_(line) {} - expectation(expectation &&) = default; + expectation(expectation&&) = default; expectation(expectation const&) = default; - expectation& operator=(expectation &&) = default; + expectation& operator=(expectation&&) = default; expectation& operator=(expectation const&) = default; ~expectation() { - for( auto& sequence: sequences_) - sequence->remove( this ); + for(auto& sequence : sequences_) + sequence->remove(this); } - void invoke( std::unique_ptr< invocation > i ) - { - invocation_ = std::move(i); - } + void invoke(std::unique_ptr i) { invocation_ = std::move(i); } #ifndef MOCK_NUM_ARGS_0 - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) - > - expectation& with( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) + template + expectation& with(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) { - matcher_ = std::make_unique< - single_matcher< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, Constraint_) ), - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - >>( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); + matcher_ = std::make_unique>( + BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c)); return *this; } -#if MOCK_NUM_ARGS > 1 - template< typename Constraint > - expectation& with( const Constraint& c ) +# if MOCK_NUM_ARGS > 1 + template + expectation& with(const Constraint& c) { - matcher_ = std::make_unique< - multi_matcher< - Constraint, - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - >>( c ); + matcher_ = std::make_unique>(c); return *this; } -#endif +# endif #endif - void add( sequence& s ) + void add(sequence& s) { - s.impl_->add( this ); - sequences_.push_back( s.impl_ ); + s.impl_->add(this); + sequences_.push_back(s.impl_); } - bool verify() const - { - return invocation_->verify(); - } + bool verify() const { return invocation_->verify(); } - bool is_valid( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) const + bool is_valid(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) const { - return !invocation_->exhausted() - && (*matcher_)( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _) ); + return !invocation_->exhausted() && (*matcher_)(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _)); } bool invoke() const { - for( auto& sequence: sequences_) + for(auto& sequence : sequences_) { - if( ! sequence->is_valid( this ) ) + if(!sequence->is_valid(this)) return false; } bool result = invocation_->invoke(); - for( auto& sequence: sequences_) - sequence->invalidate( this ); + for(auto& sequence : sequences_) + sequence->invalidate(this); return result; } - const char* file() const - { - return file_; - } - int line() const - { - return line_; - } + const char* file() const { return file_; } + int line() const { return line_; } - friend std::ostream& operator<<( std::ostream& s, const expectation& e ) + friend std::ostream& operator<<(std::ostream& s, const expectation& e) { - return s << ( e.invocation_->exhausted() ? 'v' : '.' ) - << ' ' << *e.invocation_ + return s << (e.invocation_->exhausted() ? 'v' : '.') << ' ' << *e.invocation_ #ifndef MOCK_NUM_ARGS_0 - << ".with( " << *e.matcher_ << " )" + << ".with( " << *e.matcher_ << " )" #endif - ; + ; } private: - std::unique_ptr< invocation > invocation_; - std::unique_ptr< - matcher_base< - void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > - > matcher_; - std::vector< std::shared_ptr > sequences_; + std::unique_ptr invocation_; + std::unique_ptr> matcher_; + std::vector> sequences_; const char* file_; int line_; }; -} -} // mock +}} // namespace mock::detail #undef MOCK_EXPECTATION_INITIALIZE #undef MOCK_EXPECTATION_MEMBER diff --git a/include/turtle/detail/formatter.hpp b/include/turtle/detail/formatter.hpp index b1377b9..a27923a 100644 --- a/include/turtle/detail/formatter.hpp +++ b/include/turtle/detail/formatter.hpp @@ -13,38 +13,29 @@ #include "../stream.hpp" #include -namespace mock -{ -namespace detail -{ - template< typename T > +namespace mock { namespace detail { + template struct formatter { - explicit formatter( const T& t ) - : t_( std::addressof( t ) ) - {} - void serialize( stream& s ) const - { - detail::serialize( s, *t_ ); - } + explicit formatter(const T& t) : t_(std::addressof(t)) {} + void serialize(stream& s) const { detail::serialize(s, *t_); } const T* t_; }; - template< typename T > - stream& operator<<( stream& s, const formatter< T >& f ) + template + stream& operator<<(stream& s, const formatter& f) { - f.serialize( s ); + f.serialize(s); return s; } - template< typename T > - std::ostream& operator<<( std::ostream& s, const formatter< T >& f ) + template + std::ostream& operator<<(std::ostream& s, const formatter& f) { - stream ss( s ); - f.serialize( ss ); + stream ss(s); + f.serialize(ss); return s; } -} -} // mock +}} // namespace mock::detail #endif // MOCK_FORMATTER_HPP_INCLUDED diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index e231a95..f5ae558 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -10,74 +10,62 @@ #define MOCK_FUNCTION_HPP_INCLUDED #include "../config.hpp" +#include "../constraints.hpp" #include "../error.hpp" #include "../log.hpp" -#include "../constraints.hpp" -#include "../sequence.hpp" #include "../matcher.hpp" +#include "../sequence.hpp" #include "action.hpp" -#include "verifiable.hpp" -#include "invocation.hpp" -#include "type_name.hpp" #include "context.hpp" -#include "mutex.hpp" +#include "invocation.hpp" #include "move_helper.hpp" -#include -#include -#include -#include +#include "mutex.hpp" +#include "type_name.hpp" +#include "verifiable.hpp" +#include #include #include +#include +#include +#include +#include #include #include -#include +#include #include #include -#include -namespace mock -{ -namespace detail -{ - template< typename R, typename E > +namespace mock { namespace detail { + template struct wrapper_base { - wrapper_base( E& e ) - : e_( &e ) - {} + wrapper_base(E& e) : e_(&e) {} - template< typename T > - void returns( T t ) + template + void returns(T t) { - e_->returns( t ); + e_->returns(t); } E* e_; }; - template< typename E > - struct wrapper_base< void, E > + template + struct wrapper_base { - wrapper_base( E& e ) - : e_( &e ) - {} + wrapper_base(E& e) : e_(&e) {} E* e_; }; - template< typename R, typename E > - struct wrapper_base< R*, E > + template + struct wrapper_base { - wrapper_base( E& e ) - : e_( &e ) - {} + wrapper_base(E& e) : e_(&e) {} - void returns( R* r ) + void returns(R* r) { e_->returns(r); } + template + void returns(const std::reference_wrapper& r) { - e_->returns( r ); - } - template< typename Y > - void returns( const std::reference_wrapper< Y >& r ) - { - e_->returns( r ); + e_->returns(r); } E* e_; @@ -92,8 +80,7 @@ namespace detail return std::uncaught_exception() ? 1 : 0; #endif } -} -} // mock +}} // namespace mock::detail #define MOCK_NUM_ARGS 0 #define MOCK_NUM_ARGS_0 diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl_template.hpp index ecf6667..c9db991 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl_template.hpp @@ -9,79 +9,65 @@ #include "expectation_template.hpp" #ifndef MOCK_ERROR_POLICY -# error no error policy has been set +# error no error policy has been set #endif -#define MOCK_FUNCTION_FORMAT(z, n, N) \ - << ' ' << mock::format( t##n ) \ - << BOOST_PP_IF(BOOST_PP_EQUAL(N,n), ' ', ',') +#define MOCK_FUNCTION_FORMAT(z, n, N) << ' ' << mock::format(t##n) << BOOST_PP_IF(BOOST_PP_EQUAL(N, n), ' ', ',') -#define MOCK_FUNCTION_CONTEXT \ - boost::unit_test::lazy_ostream::instance() \ - << lazy_context( this ) \ - << '(' BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_FORMAT, \ - BOOST_PP_DEC(MOCK_NUM_ARGS)) \ - << ')' \ - << lazy_expectations( this ) +#define MOCK_FUNCTION_CONTEXT \ + boost::unit_test::lazy_ostream::instance() \ + << lazy_context(this) << '(' BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_FORMAT, BOOST_PP_DEC(MOCK_NUM_ARGS)) \ + << ')' << lazy_expectations(this) -#define MOCK_FORWARD(z, n, d) \ - std::forward< T##n >( t##n ) +#define MOCK_FORWARD(z, n, d) std::forward(t##n) -namespace mock -{ -namespace detail -{ - template< typename Signature > class function_impl; +namespace mock { namespace detail { + template + class function_impl; - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > - : public verifiable, public std::enable_shared_from_this< - function_impl< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) )> > + template + class function_impl : + public verifiable, + public std::enable_shared_from_this> { public: - typedef safe_error< R, MOCK_ERROR_POLICY< R > > error_type; + typedef safe_error> error_type; public: - function_impl() - : context_( 0 ) - , valid_( true ) - , exceptions_( exceptions() ) - , mutex_( std::make_shared< mutex >() ) - {} + function_impl() : context_(0), valid_(true), exceptions_(exceptions()), mutex_(std::make_shared()) {} virtual ~function_impl() { - if( valid_ && exceptions_ >= exceptions() ) + if(valid_ && exceptions_ >= exceptions()) { - for( const auto& expectation: expectations_ ) + for(const auto& expectation : expectations_) { - if( ! expectation.verify() ) + if(!expectation.verify()) { - error_type::fail( "untriggered expectation", - boost::unit_test::lazy_ostream::instance() - << lazy_context( this ) - << lazy_expectations( this ), - expectation.file(), expectation.line() ); + error_type::fail("untriggered expectation", + boost::unit_test::lazy_ostream::instance() + << lazy_context(this) << lazy_expectations(this), + expectation.file(), + expectation.line()); } } } - if( context_ ) - context_->remove( *this ); + if(context_) + context_->remove(*this); } virtual bool verify() const { - lock _( mutex_ ); - for( const auto& expectation: expectations_ ) + lock _(mutex_); + for(const auto& expectation : expectations_) { - if( ! expectation.verify() ) + if(!expectation.verify()) { valid_ = false; - error_type::fail( "verification failed", - boost::unit_test::lazy_ostream::instance() - << lazy_context( this ) - << lazy_expectations( this ), - expectation.file(), expectation.line() ); + error_type::fail("verification failed", + boost::unit_test::lazy_ostream::instance() + << lazy_context(this) << lazy_expectations(this), + expectation.file(), + expectation.line()); } } return valid_; @@ -89,115 +75,103 @@ namespace detail virtual void reset() { - lock _( mutex_ ); + lock _(mutex_); valid_ = true; - std::shared_ptr< function_impl > guard = - this->shared_from_this(); + std::shared_ptr guard = this->shared_from_this(); expectations_.clear(); } private: - typedef expectation< - R( BOOST_PP_ENUM_PARAMS( MOCK_NUM_ARGS, T ) ) - > expectation_type; + typedef expectation expectation_type; - class wrapper : public wrapper_base< R, expectation_type > + class wrapper : public wrapper_base { private: - typedef wrapper_base< R, expectation_type > base_type; + typedef wrapper_base base_type; public: - wrapper( const std::shared_ptr< mutex >& m, expectation_type& e ) - : base_type( e ) - , lock_( m ) - {} + wrapper(const std::shared_ptr& m, expectation_type& e) : base_type(e), lock_(m) {} wrapper(const wrapper&) = delete; - wrapper( wrapper&& x ) = default; + wrapper(wrapper&& x) = default; wrapper& operator=(const wrapper&) = delete; - wrapper& operator=( wrapper&& x ) = default; + wrapper& operator=(wrapper&& x) = default; wrapper& once() { - this->e_->invoke( std::make_unique< detail::once >() ); + this->e_->invoke(std::make_unique()); return *this; } wrapper& never() { - this->e_->invoke( std::make_unique< detail::never >() ); + this->e_->invoke(std::make_unique()); return *this; } - wrapper& exactly( std::size_t count ) + wrapper& exactly(std::size_t count) { - this->e_->invoke( std::make_unique< detail::exactly >( count ) ); + this->e_->invoke(std::make_unique(count)); return *this; } - wrapper& at_least( std::size_t min ) + wrapper& at_least(std::size_t min) { - this->e_->invoke( std::make_unique< detail::at_least >( min ) ); + this->e_->invoke(std::make_unique(min)); return *this; } - wrapper& at_most( std::size_t max ) + wrapper& at_most(std::size_t max) { - this->e_->invoke( std::make_unique< detail::at_most >( max ) ); + this->e_->invoke(std::make_unique(max)); return *this; } - wrapper& between( std::size_t min, std::size_t max ) + wrapper& between(std::size_t min, std::size_t max) { - this->e_->invoke( std::make_unique< detail::between >( min, max ) ); + this->e_->invoke(std::make_unique(min, max)); return *this; } #ifndef MOCK_NUM_ARGS_0 - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename Constraint_) - > - wrapper& with( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c) ) + template + wrapper& with(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) { - this->e_->with( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c) ); + this->e_->with(BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c)); return *this; } -#if MOCK_NUM_ARGS > 1 - template< typename Constraint > - wrapper& with( const Constraint& c ) +# if MOCK_NUM_ARGS > 1 + template + wrapper& with(const Constraint& c) { - this->e_->with( c ); + this->e_->with(c); return *this; } -#endif +# endif #endif -#define MOCK_FUNCTION_IN_ADD(z, n, d) \ - this->e_->add( s##n ); +#define MOCK_FUNCTION_IN_ADD(z, n, d) this->e_->add(s##n); -#define MOCK_FUNCTION_IN(z, n, d) \ - wrapper& in( BOOST_PP_ENUM_PARAMS(n, sequence& s) ) \ - { \ - BOOST_PP_REPEAT(n, MOCK_FUNCTION_IN_ADD, _) \ - return *this; \ +#define MOCK_FUNCTION_IN(z, n, d) \ + wrapper& in(BOOST_PP_ENUM_PARAMS(n, sequence& s)) \ + { \ + BOOST_PP_REPEAT(n, MOCK_FUNCTION_IN_ADD, _) \ + return *this; \ } - BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES, - MOCK_FUNCTION_IN, _) + BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES, MOCK_FUNCTION_IN, _) #undef MOCK_FUNCTION_IN #undef MOCK_FUNCTION_IN_ADD - template< typename TT > - void calls( TT t ) + template + void calls(TT t) { - this->e_->calls( t ); + this->e_->calls(t); } - template< typename TT > - void throws( TT t ) + template + void throws(TT t) { - this->e_->throws( t ); + this->e_->throws(t); } - template< typename TT > - void moves( TT&& t ) + template + void moves(TT&& t) { - this->e_->moves( std::move( t ) ); + this->e_->moves(std::move(t)); } lock lock_; @@ -206,82 +180,78 @@ namespace detail public: typedef wrapper wrapper_type; - wrapper expect( const char* file, int line ) + wrapper expect(const char* file, int line) { - lock _( mutex_ ); - expectations_.emplace_back( file, line ); + lock _(mutex_); + expectations_.emplace_back(file, line); valid_ = true; - return wrapper( mutex_, expectations_.back() ); + return wrapper(mutex_, expectations_.back()); } wrapper expect() { - lock _( mutex_ ); - expectations_.emplace_back( ); + lock _(mutex_); + expectations_.emplace_back(); valid_ = true; - return wrapper( mutex_, expectations_.back() ); + return wrapper(mutex_, expectations_.back()); } - R operator()( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t) ) const + R operator()(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t)) const { - lock _( mutex_ ); + lock _(mutex_); valid_ = false; - for( const auto& expectation: expectations_ ) + for(const auto& expectation : expectations_) { - if( expectation.is_valid( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ) ) + if(expectation.is_valid(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _))) { - if( ! expectation.invoke() ) + if(!expectation.invoke()) { - error_type::fail( "sequence failed", - MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); + error_type::fail( + "sequence failed", MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line()); return error_type::abort(); } - if( ! expectation.valid() ) + if(!expectation.valid()) { - error_type::fail( "missing action", - MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); + error_type::fail( + "missing action", MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line()); return error_type::abort(); } valid_ = true; - error_type::call( MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line() ); - if( expectation.functor() ) - return expectation.functor()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ); + error_type::call(MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line()); + if(expectation.functor()) + return expectation.functor()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _)); return expectation.trigger(); } } - error_type::fail( "unexpected call", MOCK_FUNCTION_CONTEXT ); + error_type::fail("unexpected call", MOCK_FUNCTION_CONTEXT); return error_type::abort(); } - void add( context& c, const void* p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + void add(context& c, + const void* p, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) { - lock _( mutex_ ); - if( ! context_ ) - c.add( *this ); - c.add( p, *this, instance, type, name ); + lock _(mutex_); + if(!context_) + c.add(*this); + c.add(p, *this, instance, type, name); context_ = &c; } - friend std::ostream& operator<<( std::ostream& s, const function_impl& impl ) + friend std::ostream& operator<<(std::ostream& s, const function_impl& impl) { - lock _( impl.mutex_ ); - return s << lazy_context( &impl ) << lazy_expectations( &impl ); + lock _(impl.mutex_); + return s << lazy_context(&impl) << lazy_expectations(&impl); } struct lazy_context { - lazy_context( const function_impl* impl ) - : impl_( impl ) - {} - friend std::ostream& operator<<( std::ostream& s, const lazy_context& c ) + lazy_context(const function_impl* impl) : impl_(impl) {} + friend std::ostream& operator<<(std::ostream& s, const lazy_context& c) { - if( c.impl_->context_ ) - c.impl_->context_->serialize( s, *c.impl_ ); + if(c.impl_->context_) + c.impl_->context_->serialize(s, *c.impl_); else s << '?'; return s; @@ -291,26 +261,23 @@ namespace detail struct lazy_expectations { - lazy_expectations( const function_impl* impl ) - : impl_( impl ) - {} - friend std::ostream& operator<<( std::ostream& s, const lazy_expectations& e ) + lazy_expectations(const function_impl* impl) : impl_(impl) {} + friend std::ostream& operator<<(std::ostream& s, const lazy_expectations& e) { - for( const auto& expectation: e.impl_->expectations_ ) + for(const auto& expectation : e.impl_->expectations_) s << std::endl << expectation; return s; } const function_impl* impl_; }; - std::list< expectation_type > expectations_; + std::list expectations_; context* context_; mutable bool valid_; const int exceptions_; - const std::shared_ptr< mutex > mutex_; + const std::shared_ptr mutex_; }; -} -} // mock +}} // namespace mock::detail #undef MOCK_FUNCTION_FORMAT #undef MOCK_FUNCTION_CONTEXT diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp index e4de743..69a0e18 100644 --- a/include/turtle/detail/function_template.hpp +++ b/include/turtle/detail/function_template.hpp @@ -8,90 +8,68 @@ #include "function_impl_template.hpp" -#define MOCK_FORWARD(z, n, d) \ - std::forward< T##n >( t##n ) +#define MOCK_FORWARD(z, n, d) std::forward(t##n) -namespace mock -{ -namespace detail -{ - template< typename Signature > class function; +namespace mock { namespace detail { + template + class function; - template< typename R - BOOST_PP_ENUM_TRAILING_PARAMS(MOCK_NUM_ARGS, typename T) > - class function< R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + template + class function { private: - typedef function_impl< - R ( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) - > impl_type; + typedef function_impl impl_type; typedef typename impl_type::wrapper_type expectation_type; typedef typename impl_type::error_type error_type; public: - function() - : impl_( std::make_shared< impl_type >() ) - {} + function() : impl_(std::make_shared()) {} - bool verify() const + bool verify() const { return impl_->verify(); } + bool verify(const char* file, int line) const { + error_type::pass(file, line); return impl_->verify(); } - bool verify( const char* file, int line ) const + void reset() { impl_->reset(); } + void reset(const char* file, int line) { - error_type::pass( file, line ); - return impl_->verify(); - } - void reset() - { - impl_->reset(); - } - void reset( const char* file, int line ) - { - error_type::pass( file, line ); + error_type::pass(file, line); impl_->reset(); } - expectation_type expect( const char* file, int line ) + expectation_type expect(const char* file, int line) { - error_type::pass( file, line ); - return impl_->expect( file, line ); + error_type::pass(file, line); + return impl_->expect(file, line); } - expectation_type expect() + expectation_type expect() { return impl_->expect(); } + + R operator()(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t)) const { - return impl_->expect(); + return (*impl_)(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _)); } - R operator()( - BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t) ) const - { - return (*impl_)( BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _) ); - } + friend std::ostream& operator<<(std::ostream& s, const function& f) { return s << *f.impl_; } - friend std::ostream& operator<<( std::ostream& s, const function& f ) + function& operator()(context& c, boost::unit_test::const_string instance) { - return s << *f.impl_; - } - - function& operator()( context& c, - boost::unit_test::const_string instance ) - { - impl_->add( c, impl_.get(), instance, boost::none, "" ); + impl_->add(c, impl_.get(), instance, boost::none, ""); return *this; } - void configure( context& c, const void* p, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) const + void configure(context& c, + const void* p, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) const { - impl_->add( c, p, instance, type, name ); + impl_->add(c, p, instance, type, name); } private: - std::shared_ptr< impl_type > impl_; + std::shared_ptr impl_; }; -} -} // mock +}} // namespace mock::detail #undef MOCK_FORWARD diff --git a/include/turtle/detail/functor.hpp b/include/turtle/detail/functor.hpp index 53e776f..e4ce1e8 100644 --- a/include/turtle/detail/functor.hpp +++ b/include/turtle/detail/functor.hpp @@ -14,39 +14,32 @@ #include "mutex.hpp" #include "singleton.hpp" -namespace mock -{ -namespace detail -{ - class functor_mutex_t : - public singleton< functor_mutex_t >, - public mutex +namespace mock { namespace detail { + class functor_mutex_t : public singleton, public mutex { - MOCK_SINGLETON_CONS( functor_mutex_t ); + MOCK_SINGLETON_CONS(functor_mutex_t); }; - MOCK_SINGLETON_INST( functor_mutex ) + MOCK_SINGLETON_INST(functor_mutex) - template< typename Signature > - struct functor : function< Signature > + template + struct functor : function { functor() { - scoped_lock _( functor_mutex ); + scoped_lock _(functor_mutex); static functor* f = 0; - if( f ) + if(f) { *this = *f; f = 0; functor_mutex.unlock(); - } - else + } else { functor_mutex.lock(); f = this; } } }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_FUNCTOR_HPP_INCLUDED diff --git a/include/turtle/detail/group.hpp b/include/turtle/detail/group.hpp index 16ce5a3..d8a8e41 100644 --- a/include/turtle/detail/group.hpp +++ b/include/turtle/detail/group.hpp @@ -11,48 +11,39 @@ #include "../config.hpp" #include "verifiable.hpp" -#include #include +#include #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class group { public: - void add( verifiable& v ) + void add(verifiable& v) { verifiables_.push_back(&v); } + void remove(verifiable& v) { - verifiables_.push_back( &v ); - } - void remove( verifiable& v ) - { - verifiables_.erase( - std::remove( verifiables_.begin(), verifiables_.end(), &v ), - verifiables_.end() ); + verifiables_.erase(std::remove(verifiables_.begin(), verifiables_.end(), &v), verifiables_.end()); } bool verify() const { bool valid = true; - for( const auto* verifiable: verifiables_ ) - if( ! verifiable->verify() ) + for(const auto* verifiable : verifiables_) + if(!verifiable->verify()) valid = false; return valid; } void reset() { const auto verifiables = verifiables_; - for( auto* verifiable: verifiables ) - if( std::find( verifiables_.begin(), verifiables_.end(), verifiable ) != verifiables_.end() ) + for(auto* verifiable : verifiables) + if(std::find(verifiables_.begin(), verifiables_.end(), verifiable) != verifiables_.end()) verifiable->reset(); } private: - std::vector< verifiable* > verifiables_; + std::vector verifiables_; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_GROUP_HPP_INCLUDED diff --git a/include/turtle/detail/invocation.hpp b/include/turtle/detail/invocation.hpp index cf37dff..5b711e2 100644 --- a/include/turtle/detail/invocation.hpp +++ b/include/turtle/detail/invocation.hpp @@ -10,14 +10,11 @@ #define MOCK_INVOCATION_HPP_INCLUDED #include "../config.hpp" -#include -#include #include +#include +#include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class invocation { public: @@ -32,66 +29,51 @@ namespace detail virtual bool exhausted() const = 0; - friend std::ostream& operator<<( std::ostream& s, const invocation& i ) - { - return i.serialize( s ); - } + friend std::ostream& operator<<(std::ostream& s, const invocation& i) { return i.serialize(s); } private: - virtual std::ostream& serialize( std::ostream& s ) const = 0; + virtual std::ostream& serialize(std::ostream& s) const = 0; }; class between : public invocation { public: - between( std::size_t min, std::size_t max ) - : min_( min ) - , max_( max ) - , count_( 0 ) + between(std::size_t min, std::size_t max) : min_(min), max_(max), count_(0) { - if( min > max ) - throw std::invalid_argument( "'min' > 'max'" ); + if(min > max) + throw std::invalid_argument("'min' > 'max'"); } virtual bool invoke() { - if( count_ == max_ ) + if(count_ == max_) return false; ++count_; return true; } - virtual bool exhausted() const - { - return count_ >= max_; - } + virtual bool exhausted() const { return count_ >= max_; } - virtual bool verify() const - { - return min_ <= count_ && count_ <= max_; - } + virtual bool verify() const { return min_ <= count_ && count_ <= max_; } protected: const std::size_t min_, max_; std::size_t count_; private: - virtual std::ostream& serialize( std::ostream& s ) const + virtual std::ostream& serialize(std::ostream& s) const { - return s << "between( " << count_ - << "/[" << min_ << ',' << max_ << "] )"; + return s << "between( " << count_ << "/[" << min_ << ',' << max_ << "] )"; } }; class exactly : public between { public: - explicit exactly( std::size_t count ) - : between( count, count ) - {} + explicit exactly(std::size_t count) : between(count, count) {} private: - virtual std::ostream& serialize( std::ostream& s ) const + virtual std::ostream& serialize(std::ostream& s) const { return s << "exactly( " << count_ << '/' << max_ << " )"; } @@ -100,40 +82,28 @@ namespace detail class never : public exactly { public: - never() - : exactly( 0 ) - {} + never() : exactly(0) {} private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "never()"; - } + virtual std::ostream& serialize(std::ostream& s) const { return s << "never()"; } }; class once : public exactly { public: - once() - : exactly( 1 ) - {} + once() : exactly(1) {} private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "once()"; - } + virtual std::ostream& serialize(std::ostream& s) const { return s << "once()"; } }; class at_least : public between { public: - explicit at_least( std::size_t min ) - : between( min, (std::numeric_limits< std::size_t >::max)() ) - {} + explicit at_least(std::size_t min) : between(min, (std::numeric_limits::max)()) {} private: - virtual std::ostream& serialize( std::ostream& s ) const + virtual std::ostream& serialize(std::ostream& s) const { return s << "at_least( " << count_ << '/' << min_ << " )"; } @@ -142,12 +112,10 @@ namespace detail class at_most : public between { public: - explicit at_most( std::size_t max ) - : between( 0, max ) - {} + explicit at_most(std::size_t max) : between(0, max) {} private: - virtual std::ostream& serialize( std::ostream& s ) const + virtual std::ostream& serialize(std::ostream& s) const { return s << "at_most( " << count_ << '/' << max_ << " )"; } @@ -156,17 +124,11 @@ namespace detail class unlimited : public at_least { public: - unlimited() - : at_least( 0 ) - {} + unlimited() : at_least(0) {} private: - virtual std::ostream& serialize( std::ostream& s ) const - { - return s << "unlimited()"; - } + virtual std::ostream& serialize(std::ostream& s) const { return s << "unlimited()"; } }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_INVOCATION_HPP_INCLUDED diff --git a/include/turtle/detail/is_functor.hpp b/include/turtle/detail/is_functor.hpp index 066cb92..bcc0699 100644 --- a/include/turtle/detail/is_functor.hpp +++ b/include/turtle/detail/is_functor.hpp @@ -13,18 +13,14 @@ #include "void_t.hpp" #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { /// Trait to return true if F is a functor that can be called with a single argument Arg - template< typename F, typename Arg, class = void > + template struct is_functor : std::false_type {}; - template< typename F, typename Arg > - struct is_functor< F, Arg, void_t()( std::declval() ) )> >: std::true_type + template + struct is_functor()(std::declval()))>> : std::true_type {}; -} -} // mock +}} // namespace mock::detail #endif // MOCK_IS_FUNCTOR_HPP_INCLUDED diff --git a/include/turtle/detail/matcher_base_template.hpp b/include/turtle/detail/matcher_base_template.hpp index 931b8e9..8a6199d 100644 --- a/include/turtle/detail/matcher_base_template.hpp +++ b/include/turtle/detail/matcher_base_template.hpp @@ -6,18 +6,14 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define MOCK_REF_ARG(z, n, d) \ - typename ref_arg< T##n >::type +#define MOCK_REF_ARG(z, n, d) typename ref_arg::type -namespace mock -{ -namespace detail -{ - template< typename Signature > class matcher_base; +namespace mock { namespace detail { + template + class matcher_base; - template< - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, typename T) > - class matcher_base< void( BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, T) ) > + template + class matcher_base { public: matcher_base() = default; @@ -25,19 +21,17 @@ namespace detail matcher_base& operator=(const matcher_base&) = delete; virtual ~matcher_base() = default; - virtual bool operator()( - BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _) ) = 0; + virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) = 0; - friend std::ostream& operator<<( std::ostream& s, const matcher_base& m ) + friend std::ostream& operator<<(std::ostream& s, const matcher_base& m) { - m.serialize( s ); + m.serialize(s); return s; } private: - virtual void serialize( std::ostream& ) const = 0; + virtual void serialize(std::ostream&) const = 0; }; -} -} // mock +}} // namespace mock::detail #undef MOCK_REF_ARG diff --git a/include/turtle/detail/move_helper.hpp b/include/turtle/detail/move_helper.hpp index 9d910ff..18e303a 100644 --- a/include/turtle/detail/move_helper.hpp +++ b/include/turtle/detail/move_helper.hpp @@ -11,17 +11,9 @@ #include -namespace mock -{ -namespace detail -{ - template< typename T > - using ref_arg = std::conditional< - std::is_reference< T >::value, - T, - std::add_rvalue_reference_t< T > - >; -} -} +namespace mock { namespace detail { + template + using ref_arg = std::conditional::value, T, std::add_rvalue_reference_t>; +}} // namespace mock::detail -#endif // MOCK_MOVE_HELPER_HPP_INCLUDED +#endif // MOCK_MOVE_HELPER_HPP_INCLUDED diff --git a/include/turtle/detail/mutex.hpp b/include/turtle/detail/mutex.hpp index 793a666..d74d20d 100644 --- a/include/turtle/detail/mutex.hpp +++ b/include/turtle/detail/mutex.hpp @@ -15,65 +15,52 @@ #ifdef MOCK_THREAD_SAFE -#ifdef MOCK_HDR_MUTEX -#include -#else -#include -#include -#endif +# ifdef MOCK_HDR_MUTEX +# include +# else +# include +# include +# endif -namespace mock -{ -namespace detail -{ -#ifdef MOCK_HDR_MUTEX +namespace mock { namespace detail { +# ifdef MOCK_HDR_MUTEX typedef std::recursive_mutex mutex; - typedef std::lock_guard< mutex > scoped_lock; -#else + typedef std::lock_guard scoped_lock; +# else typedef boost::recursive_mutex mutex; - typedef boost::lock_guard< mutex > scoped_lock; -#endif + typedef boost::lock_guard scoped_lock; +# endif struct lock { public: - lock( const std::shared_ptr< mutex >& m ) - : m_( m ) - { - m_->lock(); - } + lock(const std::shared_ptr& m) : m_(m) { m_->lock(); } ~lock() { - if( m_ ) + if(m_) m_->unlock(); } - lock( const lock& ) = delete; - lock( lock&& x ) = default; - lock& operator=( const lock& ) = delete; - lock& operator=( lock&& x ) = default; + lock(const lock&) = delete; + lock(lock&& x) = default; + lock& operator=(const lock&) = delete; + lock& operator=(lock&& x) = default; private: - std::shared_ptr< mutex > m_; + std::shared_ptr m_; }; -} -} // mock +}} // namespace mock::detail #else // MOCK_THREAD_SAFE -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { struct mutex { mutex() = default; mutex(const mutex&) = delete; mutex& operator=(const mutex&) = delete; - void lock() - {} - void unlock() - {} + void lock() {} + void unlock() {} }; // Dummy lock classes. // Constructor + Destructor make it RAII classes for compilers and avoid unused variable warnings @@ -82,70 +69,66 @@ namespace detail scoped_lock(const scoped_lock&) = delete; scoped_lock& operator=(const scoped_lock&) = delete; - scoped_lock( mutex& ) {} + scoped_lock(mutex&) {} ~scoped_lock() {} }; class lock { public: - lock( const std::shared_ptr< mutex >& ) {} + lock(const std::shared_ptr&) {} ~lock() {} lock(const lock&) = delete; - lock( lock&& ) = default; - lock& operator=( const lock& ) = delete; - lock& operator=( lock&& ) = default; + lock(lock&&) = default; + lock& operator=(const lock&) = delete; + lock& operator=(lock&&) = default; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_THREAD_SAFE -namespace mock -{ -namespace detail -{ - class error_mutex_t : public singleton< error_mutex_t >, - public mutex +namespace mock { namespace detail { + class error_mutex_t : public singleton, public mutex { - MOCK_SINGLETON_CONS( error_mutex_t ); + MOCK_SINGLETON_CONS(error_mutex_t); }; - MOCK_SINGLETON_INST( error_mutex ) + MOCK_SINGLETON_INST(error_mutex) #ifdef BOOST_MSVC -# pragma warning( push ) -# pragma warning( disable: 4702 ) +# pragma warning(push) +# pragma warning(disable : 4702) #endif - template< typename Result, typename Error > + template struct safe_error { static Result abort() { - scoped_lock _( error_mutex ); + scoped_lock _(error_mutex); return Error::abort(); } - template< typename Context > - static void fail( const char* message, const Context& context, - const char* file = "unknown location", int line = 0 ) + template + static void fail(const char* message, + const Context& context, + const char* file = "unknown location", + int line = 0) { - scoped_lock _( error_mutex ); - Error::fail( message, context, file, line ); + scoped_lock _(error_mutex); + Error::fail(message, context, file, line); } - template< typename Context > - static void call( const Context& context, const char* file, int line ) + template + static void call(const Context& context, const char* file, int line) { - scoped_lock _( error_mutex ); - Error::call( context, file, line ); + scoped_lock _(error_mutex); + Error::call(context, file, line); } - static void pass( const char* file, int line ) + static void pass(const char* file, int line) { - scoped_lock _( error_mutex ); - Error::pass( file, line ); + scoped_lock _(error_mutex); + Error::pass(file, line); } }; #ifdef BOOST_MSVC -# pragma warning( pop ) +# pragma warning(pop) #endif -} -} // mock +}} // namespace mock::detail #endif // MOCK_MUTEX_HPP_INCLUDED diff --git a/include/turtle/detail/object_impl.hpp b/include/turtle/detail/object_impl.hpp index 6f5d4eb..081aeb2 100644 --- a/include/turtle/detail/object_impl.hpp +++ b/include/turtle/detail/object_impl.hpp @@ -10,56 +10,51 @@ #define MOCK_OBJECT_IMPL_HPP_INCLUDED #include "../config.hpp" -#include "root.hpp" -#include "parent.hpp" -#include "type_name.hpp" -#include "context.hpp" #include "child.hpp" +#include "context.hpp" #include "mutex.hpp" -#include +#include "parent.hpp" +#include "root.hpp" +#include "type_name.hpp" #include +#include -namespace mock -{ -namespace detail -{ - class object_impl : public context, public verifiable, - public std::enable_shared_from_this< object_impl > +namespace mock { namespace detail { + class object_impl : public context, public verifiable, public std::enable_shared_from_this { public: - object_impl() - : mutex_( std::make_shared< mutex >() ) - {} + object_impl() : mutex_(std::make_shared()) {} - virtual void add( const void* /*p*/, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + virtual void add(const void* /*p*/, + verifiable& v, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) { - lock _( mutex_ ); - if( children_.empty() ) - detail::root.add( *this ); - children_[ &v ].update( parent_, instance, type, name ); + lock _(mutex_); + if(children_.empty()) + detail::root.add(*this); + children_[&v].update(parent_, instance, type, name); } - virtual void add( verifiable& v ) + virtual void add(verifiable& v) { - lock _( mutex_ ); - group_.add( v ); + lock _(mutex_); + group_.add(v); } - virtual void remove( verifiable& v ) + virtual void remove(verifiable& v) { - lock _( mutex_ ); - group_.remove( v ); - children_.erase( &v ); - if( children_.empty() ) - detail::root.remove( *this ); + lock _(mutex_); + group_.remove(v); + children_.erase(&v); + if(children_.empty()) + detail::root.remove(*this); } - virtual void serialize( std::ostream& s, const verifiable& v ) const + virtual void serialize(std::ostream& s, const verifiable& v) const { - lock _( mutex_ ); - const auto it = children_.find( &v ); - if( it != children_.end() ) + lock _(mutex_); + const auto it = children_.find(&v); + if(it != children_.end()) s << it->second; else s << "?"; @@ -67,23 +62,22 @@ namespace detail virtual bool verify() const { - lock _( mutex_ ); + lock _(mutex_); return group_.verify(); } virtual void reset() { - lock _( mutex_ ); - std::shared_ptr< object_impl > guard = shared_from_this(); + lock _(mutex_); + std::shared_ptr guard = shared_from_this(); group_.reset(); } private: group group_; parent parent_; - std::map< const verifiable*, child > children_; - const std::shared_ptr< mutex > mutex_; + std::map children_; + const std::shared_ptr mutex_; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_OBJECT_IMPL_HPP_INCLUDED diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index b37ce58..34679b4 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -11,58 +11,55 @@ #include "../config.hpp" -namespace mock -{ -namespace detail -{ - template< class... > +namespace mock { namespace detail { + template struct tuple; - template< std::size_t I, class T > + template struct tuple_element; - - template< std::size_t I, class H, class... T > - struct tuple_element> : tuple_element> + + template + struct tuple_element> : tuple_element> {}; - - template< class H, class... T > + + template struct tuple_element<0, tuple> { - using type = H; + using type = H; }; - template< typename Signature > + template struct result_type; - template< typename R, typename... Args > - struct result_type< R(Args...) > + template + struct result_type { using type = R; }; - template< typename Signature > + template struct function_arity; - template< typename R, typename... Args > - struct function_arity< R(Args...) > + template + struct function_arity { static constexpr size_t value = sizeof...(Args); }; - template< typename Signature > + template struct parameter_types; - template< typename R, typename... Args > - struct parameter_types< R(Args...) > + template + struct parameter_types { using type = tuple; }; - template< typename Signature, int n > + template struct parameter { static_assert(n < function_arity::value, "Function signature has not that many parameters"); - using type = typename tuple_element< n, typename parameter_types::type >::type; + using type = typename tuple_element::type>::type; }; template @@ -74,7 +71,6 @@ namespace detail }; template using parameter_type_t = typename parameter_type::type; -} -} // mock +}} // namespace mock::detail #endif // MOCK_PARAMETER_HPP_INCLUDED diff --git a/include/turtle/detail/parent.hpp b/include/turtle/detail/parent.hpp index aedb373..8c3352e 100644 --- a/include/turtle/detail/parent.hpp +++ b/include/turtle/detail/parent.hpp @@ -11,35 +11,30 @@ #include "../config.hpp" #include "type_name.hpp" -#include #include +#include #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class parent { public: parent() = default; - parent( boost::unit_test::const_string instance, - boost::optional< type_name > type ) - : instance_( instance ) - , type_( type ) + parent(boost::unit_test::const_string instance, boost::optional type) + : instance_(instance), type_(type) {} - friend std::ostream& operator<<( std::ostream& s, const parent& p ) + friend std::ostream& operator<<(std::ostream& s, const parent& p) { s << p.instance_; - if( p.type_ ) + if(p.type_) s << *p.type_ << "::"; return s; } + private: boost::unit_test::const_string instance_; - boost::optional< type_name > type_; + boost::optional type_; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_PARENT_HPP_INCLUDED diff --git a/include/turtle/detail/root.hpp b/include/turtle/detail/root.hpp index 09c1f95..664ce0a 100644 --- a/include/turtle/detail/root.hpp +++ b/include/turtle/detail/root.hpp @@ -10,110 +10,96 @@ #define MOCK_ROOT_HPP_INCLUDED #include "../config.hpp" -#include "parent.hpp" -#include "group.hpp" -#include "context.hpp" #include "child.hpp" +#include "context.hpp" +#include "group.hpp" #include "mutex.hpp" +#include "parent.hpp" #include "singleton.hpp" #include -#include #include +#include -namespace mock -{ -namespace detail -{ - class root_t : public singleton< root_t >, public context +namespace mock { namespace detail { + class root_t : public singleton, public context { public: - virtual void add( const void* p, verifiable& v, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + virtual void add(const void* p, + verifiable& v, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) { - scoped_lock _( mutex_ ); - auto it = children_.lower_bound( &v ); - if( it == children_.end() || - children_.key_comp()( &v, it->first ) ) - it = children_.insert( it, - std::make_pair( &v, counter_child( parents_, p ) ) ); - it->second.update( instance, type, name ); + scoped_lock _(mutex_); + auto it = children_.lower_bound(&v); + if(it == children_.end() || children_.key_comp()(&v, it->first)) + it = children_.insert(it, std::make_pair(&v, counter_child(parents_, p))); + it->second.update(instance, type, name); } - virtual void add( verifiable& v ) + virtual void add(verifiable& v) { - scoped_lock _( mutex_ ); - group_.add( v ); + scoped_lock _(mutex_); + group_.add(v); } - virtual void remove( verifiable& v ) + virtual void remove(verifiable& v) { - scoped_lock _( mutex_ ); - group_.remove( v ); - children_.erase( &v ); + scoped_lock _(mutex_); + group_.remove(v); + children_.erase(&v); } bool verify() const { - scoped_lock _( mutex_ ); + scoped_lock _(mutex_); return group_.verify(); } void reset() { - scoped_lock _( mutex_ ); + scoped_lock _(mutex_); group_.reset(); } - virtual void serialize( std::ostream& s, const verifiable& v ) const + virtual void serialize(std::ostream& s, const verifiable& v) const { - scoped_lock _( mutex_ ); - const auto it = children_.find( &v ); - if( it != children_.end() ) + scoped_lock _(mutex_); + const auto it = children_.find(&v); + if(it != children_.end()) s << it->second; else s << "?"; } private: - typedef std::map< const void*, - std::pair< parent, std::size_t > > parents_t; + typedef std::map> parents_t; class counter_child { public: - counter_child( parents_t& parents, const void* p ) - : parents_( &parents ) - , it_( parents.insert( - std::make_pair( p, parents_t::mapped_type() ) ).first ) + counter_child(parents_t& parents, const void* p) + : parents_(&parents), it_(parents.insert(std::make_pair(p, parents_t::mapped_type())).first) { ++it_->second.second; } - counter_child( const counter_child& rhs ) - : parents_( rhs.parents_ ) - , it_( rhs.it_ ) - , child_( rhs.child_ ) + counter_child(const counter_child& rhs) : parents_(rhs.parents_), it_(rhs.it_), child_(rhs.child_) { ++it_->second.second; } ~counter_child() { - if( --it_->second.second == 0 ) - parents_->erase( it_ ); + if(--it_->second.second == 0) + parents_->erase(it_); } - void update( boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + void update(boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) { - child_.update( it_->second.first, instance, type, name ); - } - friend std::ostream& operator<<( std::ostream& s, - const counter_child& c ) - { - return s << c.child_; + child_.update(it_->second.first, instance, type, name); } + friend std::ostream& operator<<(std::ostream& s, const counter_child& c) { return s << c.child_; } private: - counter_child& operator=( const counter_child& ); + counter_child& operator=(const counter_child&); parents_t* parents_; parents_t::iterator it_; @@ -121,14 +107,13 @@ namespace detail }; parents_t parents_; - std::map< const verifiable*, counter_child > children_; + std::map children_; group group_; mutable mutex mutex_; - MOCK_SINGLETON_CONS( root_t ); + MOCK_SINGLETON_CONS(root_t); }; - MOCK_SINGLETON_INST( root ) -} -} // mock + MOCK_SINGLETON_INST(root) +}} // namespace mock::detail #endif // MOCK_ROOT_HPP_INCLUDED diff --git a/include/turtle/detail/sequence_impl.hpp b/include/turtle/detail/sequence_impl.hpp index f53fff9..79d6fa0 100644 --- a/include/turtle/detail/sequence_impl.hpp +++ b/include/turtle/detail/sequence_impl.hpp @@ -15,49 +15,41 @@ #include #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class sequence_impl { public: - sequence_impl() - : mutex_( std::make_shared< mutex >() ) - {} + sequence_impl() : mutex_(std::make_shared()) {} - void add( void* e ) + void add(void* e) { - lock _( mutex_ ); - elements_.push_back( e ); + lock _(mutex_); + elements_.push_back(e); } - void remove( void* e ) + void remove(void* e) { - lock _( mutex_ ); - elements_.erase( std::remove( elements_.begin(), - elements_.end(), e ), elements_.end() ); + lock _(mutex_); + elements_.erase(std::remove(elements_.begin(), elements_.end(), e), elements_.end()); } - bool is_valid( const void* e ) const + bool is_valid(const void* e) const { - lock _( mutex_ ); - return std::find( elements_.begin(), elements_.end(), e ) - != elements_.end(); + lock _(mutex_); + return std::find(elements_.begin(), elements_.end(), e) != elements_.end(); } - void invalidate( const void* e ) + void invalidate(const void* e) { - lock _( mutex_ ); - const auto it = std::find( elements_.begin(), elements_.end(), e ); - if( it != elements_.end() ) - elements_.erase( elements_.begin(), it ); + lock _(mutex_); + const auto it = std::find(elements_.begin(), elements_.end(), e); + if(it != elements_.end()) + elements_.erase(elements_.begin(), it); } private: - std::vector< void* > elements_; - const std::shared_ptr< mutex > mutex_; + std::vector elements_; + const std::shared_ptr mutex_; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_SEQUENCE_IMPL_HPP_INCLUDED diff --git a/include/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp index 9df1ee2..f76c7b0 100644 --- a/include/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -12,22 +12,23 @@ #include "../config.hpp" #include -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { #define MOCK_NOARG -#define MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ref) \ - template< typename R, typename... Args > \ - struct strip_function_qualifiers \ - { using type = R(Args...); }; \ - template< typename R, typename... Args > \ - struct strip_function_qualifiers \ - { using type = R(Args..., ...); }; +#define MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ref) \ + template \ + struct strip_function_qualifiers \ + { \ + using type = R(Args...); \ + }; \ + template \ + struct strip_function_qualifiers \ + { \ + using type = R(Args..., ...); \ + }; #define MOCK_STRIP_FUNCTION_QUALIFIERS_REF(cv) \ - MOCK_STRIP_FUNCTION_QUALIFIERS(cv,) \ - MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(cv, ) \ + MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &) \ MOCK_STRIP_FUNCTION_QUALIFIERS(cv, &&) template @@ -40,20 +41,20 @@ namespace detail #undef MOCK_STRIP_FUNCTION_QUALIFIERS #undef MOCK_STRIP_FUNCTION_QUALIFIERS_REF - template< typename M > + template struct signature; - template< typename R, typename... Args> - struct signature< R(Args...) > + template + struct signature { using type = R(Args...); }; - template< typename Sig, typename C> - struct signature< Sig(C::*) >: signature< typename strip_function_qualifiers::type > + template + struct signature : signature::type> {}; - template< typename T > + template struct base { typedef T base_type; @@ -62,16 +63,12 @@ namespace detail // if an error is generated by the line below it means // the method is ambiguous : specify its signature to // disambiguate - template< typename T > - T& ambiguous_method_requires_to_specify_signature( const T& ); -} -} // mock + template + T& ambiguous_method_requires_to_specify_signature(const T&); +}} // namespace mock::detail -#define MOCK_SIGNATURE(M) \ - mock::detail::signature< \ - std::remove_cv_t< std::remove_reference_t < decltype( \ - mock::detail::ambiguous_method_requires_to_specify_signature( &base_type::M ) \ - ) > > \ - >::type +#define MOCK_SIGNATURE(M) \ + mock::detail::signature>>::type #endif // MOCK_SIGNATURE_HPP_INCLUDED diff --git a/include/turtle/detail/singleton.hpp b/include/turtle/detail/singleton.hpp index c8f42d6..e1f4ae6 100644 --- a/include/turtle/detail/singleton.hpp +++ b/include/turtle/detail/singleton.hpp @@ -11,36 +11,34 @@ #include -namespace mock { -namespace detail { +namespace mock { namespace detail { -template< typename Derived > -class singleton { -public: - static Derived& instance() + template + class singleton { - static Derived the_inst; - return the_inst; - } + public: + static Derived& instance() + { + static Derived the_inst; + return the_inst; + } - BOOST_DELETED_FUNCTION(singleton(singleton const&)) - BOOST_DELETED_FUNCTION(singleton& operator=(singleton const&)) + singleton(singleton const&) = delete; + singleton& operator=(singleton const&) = delete; -protected: - BOOST_DEFAULTED_FUNCTION(singleton(), {}) - BOOST_DEFAULTED_FUNCTION(~singleton(), {}) -}; + protected: + singleton() = default; + ~singleton() = default; + }; -} // detail -} // mock +}} // namespace mock::detail // Add a private ctor to the type to prevent misuse -#define MOCK_SINGLETON_CONS( type ) \ -private: \ -friend class mock::detail::singleton< type >; \ -type() = default +#define MOCK_SINGLETON_CONS(type) \ +private: \ + friend class mock::detail::singleton; \ + type() = default -#define MOCK_SINGLETON_INST( inst ) \ -static BOOST_JOIN( inst, _t )& inst = BOOST_JOIN( inst, _t )::instance(); +#define MOCK_SINGLETON_INST(inst) static BOOST_JOIN(inst, _t)& inst = BOOST_JOIN(inst, _t)::instance(); #endif // MOCK_SINGLETON_HPP diff --git a/include/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp index 7f84193..bc97522 100644 --- a/include/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -10,37 +10,33 @@ #define MOCK_TYPE_NAME_HPP_INCLUDED #include "../config.hpp" -#include -#include #include +#include #include +#include #include -#include #include -#include #include +#include +#include #ifdef __GNUC__ -#include -#include +# include +# include #endif -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class type_name { public: - explicit type_name( const std::type_info& info ) - : info_( &info ) - {} - friend std::ostream& operator<<( std::ostream& s, const type_name& t ) + explicit type_name(const std::type_info& info) : info_(&info) {} + friend std::ostream& operator<<(std::ostream& s, const type_name& t) { - t.serialize( s, *t.info_ ); + t.serialize(s, *t.info_); return s; } + private: - static void serialize( std::ostream& s, const std::type_info& info ) + static void serialize(std::ostream& s, const std::type_info& info) { const char* name = info.name(); #ifdef __GNUC__ @@ -49,60 +45,59 @@ namespace detail { void operator()(const void* p) { std::free(const_cast(p)); } }; - std::unique_ptr< const char, Deleter > demangled( - abi::__cxa_demangle( name, 0, 0, &status )); - if( ! status && demangled ) - serialize( s, demangled.get() ); + std::unique_ptr demangled(abi::__cxa_demangle(name, 0, 0, &status)); + if(!status && demangled) + serialize(s, demangled.get()); else #endif - serialize( s, name ); + serialize(s, name); } typedef std::string::size_type size_type; - static void serialize( std::ostream& s, std::string name ) + static void serialize(std::ostream& s, std::string name) { - const size_type nm = rfind( name, ':' ) + 1; - const size_type tpl = name.find( '<', nm ); - s << clean( name.substr( nm, tpl - nm ) ); - if( tpl == std::string::npos ) + const size_type nm = rfind(name, ':') + 1; + const size_type tpl = name.find('<', nm); + s << clean(name.substr(nm, tpl - nm)); + if(tpl == std::string::npos) return; s << '<'; - list( s, name.substr( tpl + 1, name.rfind( '>' ) - tpl - 1 ) ); + list(s, name.substr(tpl + 1, name.rfind('>') - tpl - 1)); s << '>'; } - static void list( std::ostream& s, const std::string& name ) + static void list(std::ostream& s, const std::string& name) { - const size_type comma = rfind( name, ',' ); - if( comma != std::string::npos ) + const size_type comma = rfind(name, ','); + if(comma != std::string::npos) { - list( s, name.substr( 0, comma ) ); + list(s, name.substr(0, comma)); s << ", "; } - serialize( s, name.substr( comma + 1 ) ); + serialize(s, name.substr(comma + 1)); } - static std::string clean( std::string name ) + static std::string clean(std::string name) { - boost::algorithm::trim( name ); - boost::algorithm::erase_all( name, "class " ); - boost::algorithm::erase_all( name, "struct " ); - boost::algorithm::erase_all( name, "__ptr64" ); - boost::algorithm::replace_all( name, " &", "&" ); - boost::algorithm::replace_all( name, "& ", "&" ); - boost::algorithm::replace_all( name, " *", "*" ); - boost::algorithm::replace_all( name, "* ", "*" ); + boost::algorithm::trim(name); + boost::algorithm::erase_all(name, "class "); + boost::algorithm::erase_all(name, "struct "); + boost::algorithm::erase_all(name, "__ptr64"); + boost::algorithm::replace_all(name, " &", "&"); + boost::algorithm::replace_all(name, "& ", "&"); + boost::algorithm::replace_all(name, " *", "*"); + boost::algorithm::replace_all(name, "* ", "*"); return name; } - static size_type rfind( const std::string& name, char c ) + static size_type rfind(const std::string& name, char c) { size_type count = 0; - for( size_type i = name.size() - 1; i > 0; --i ) + for(size_type i = name.size() - 1; i > 0; --i) { - if( name[ i ] == '>' ) + if(name[i] == '>') ++count; - else if( name[ i ] == '<' ) + else if(name[i] == '<') --count; - if( name[ i ] == c && count == 0 ) + if(name[i] == c && count == 0) return i; } return std::string::npos; @@ -110,17 +105,16 @@ namespace detail const std::type_info* info_; }; - template< typename T > + template type_name make_type_name() { - return type_name( typeid(T) ); + return type_name(typeid(T)); } - template< typename T > - type_name make_type_name( const T& ) + template + type_name make_type_name(const T&) { - return type_name( typeid(T) ); + return type_name(typeid(T)); } -} -} // mock +}} // namespace mock::detail #endif // MOCK_TYPE_NAME_HPP_INCLUDED diff --git a/include/turtle/detail/verifiable.hpp b/include/turtle/detail/verifiable.hpp index 3390ec9..f6f2150 100644 --- a/include/turtle/detail/verifiable.hpp +++ b/include/turtle/detail/verifiable.hpp @@ -11,10 +11,7 @@ #include "../config.hpp" -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { class verifiable { public: @@ -27,7 +24,6 @@ namespace detail virtual void reset() = 0; }; -} -} // mock +}} // namespace mock::detail #endif // MOCK_VERIFIABLE_HPP_INCLUDED diff --git a/include/turtle/detail/void_t.hpp b/include/turtle/detail/void_t.hpp index 4c45e04..acc2b6b 100644 --- a/include/turtle/detail/void_t.hpp +++ b/include/turtle/detail/void_t.hpp @@ -9,10 +9,7 @@ #ifndef MOCK_VOID_T_HPP_INCLUDED #define MOCK_VOID_T_HPP_INCLUDED -namespace mock -{ -namespace detail -{ +namespace mock { namespace detail { template struct make_void { @@ -21,7 +18,6 @@ namespace detail /// Standard helper to implement the detection idiom. Returns always void template using void_t = typename make_void::type; -} -} // mock +}} // namespace mock::detail #endif // MOCK_VOID_T_HPP_INCLUDED diff --git a/include/turtle/error.hpp b/include/turtle/error.hpp index 95be42c..fd48a3e 100644 --- a/include/turtle/error.hpp +++ b/include/turtle/error.hpp @@ -11,69 +11,59 @@ #include "config.hpp" #ifdef MOCK_USE_BOOST_TEST -#include "exception.hpp" -#include -#include -#include -#include -#include +# include "exception.hpp" +# include +# include +# include +# include +# include -namespace mock +namespace mock { +template +struct error { - template< typename Result > - struct error + static Result abort() { - static Result abort() - { - boost::unit_test::framework::test_unit_aborted( - boost::unit_test::framework::current_test_case() ); - throw boost::enable_current_exception( exception() ); - } + boost::unit_test::framework::test_unit_aborted(boost::unit_test::framework::current_test_case()); + throw boost::enable_current_exception(exception()); + } - static void pass( const char* file, int line ) - { - boost::unit_test::unit_test_log.set_checkpoint( file, - static_cast< std::size_t >( line ) ); - } + static void pass(const char* file, int line) + { + boost::unit_test::unit_test_log.set_checkpoint(file, static_cast(line)); + } - template< typename Context > - static void fail( const char* message, const Context& context, - const char* file = "unknown location", int line = 0 ) - { - boost::unit_test::framework::assertion_result( -#if BOOST_VERSION < 105900 - false -#else - boost::unit_test::AR_FAILED -#endif - ); - boost::unit_test::unit_test_log - << boost::unit_test::log::begin( file, - static_cast< std::size_t >( line ) ) - << boost::unit_test::log_all_errors - << message << ": " << context - << boost::unit_test::log::end(); - } + template + static void fail(const char* message, const Context& context, const char* file = "unknown location", int line = 0) + { + boost::unit_test::framework::assertion_result( +# if BOOST_VERSION < 105900 + false +# else + boost::unit_test::AR_FAILED +# endif + ); + boost::unit_test::unit_test_log << boost::unit_test::log::begin(file, static_cast(line)) + << boost::unit_test::log_all_errors << message << ": " << context + << boost::unit_test::log::end(); + } - template< typename Context > - static void call( const Context& context, const char* file, int line ) - { - boost::unit_test::framework::assertion_result( -#if BOOST_VERSION < 105900 - true -#else - boost::unit_test::AR_PASSED -#endif - ); - boost::unit_test::unit_test_log - << boost::unit_test::log::begin( file, - static_cast< std::size_t >( line ) ) - << boost::unit_test::log_successful_tests - << "mock expectation fulfilled: " << context - << boost::unit_test::log::end(); - } - }; -} // mock + template + static void call(const Context& context, const char* file, int line) + { + boost::unit_test::framework::assertion_result( +# if BOOST_VERSION < 105900 + true +# else + boost::unit_test::AR_PASSED +# endif + ); + boost::unit_test::unit_test_log << boost::unit_test::log::begin(file, static_cast(line)) + << boost::unit_test::log_successful_tests + << "mock expectation fulfilled: " << context << boost::unit_test::log::end(); + } +}; +} // namespace mock #endif // MOCK_USE_BOOST_TEST diff --git a/include/turtle/exception.hpp b/include/turtle/exception.hpp index 4e7796c..ced9893 100644 --- a/include/turtle/exception.hpp +++ b/include/turtle/exception.hpp @@ -11,13 +11,12 @@ #include "config.hpp" #ifdef MOCK_USE_BOOST_TEST -#include +# include -namespace mock -{ - struct exception : virtual boost::execution_aborted - {}; -} // mock +namespace mock { +struct exception : virtual boost::execution_aborted +{}; +} // namespace mock #endif // MOCK_USE_BOOST_TEST diff --git a/include/turtle/format.hpp b/include/turtle/format.hpp index 6b4095c..56aa1e1 100644 --- a/include/turtle/format.hpp +++ b/include/turtle/format.hpp @@ -12,14 +12,13 @@ #include "config.hpp" #include "detail/formatter.hpp" -namespace mock +namespace mock { +template +detail::formatter format(const T& t) { - template< typename T > - detail::formatter< T > format( const T& t ) - { - return detail::formatter< T >( t ); - } + return detail::formatter(t); +} -} // mock +} // namespace mock #endif // MOCK_FORMAT_HPP_INCLUDED diff --git a/include/turtle/log.hpp b/include/turtle/log.hpp index 25a4392..c87b259 100644 --- a/include/turtle/log.hpp +++ b/include/turtle/log.hpp @@ -10,190 +10,187 @@ #define MOCK_LOG_HPP_INCLUDED #include "config.hpp" -#include "stream.hpp" #include "format.hpp" +#include "stream.hpp" #include #include #include #include -namespace boost -{ - template< typename T > class shared_ptr; - template< typename T > class weak_ptr; - template< typename T > class reference_wrapper; - template< typename T > class optional; +namespace boost { +template +class shared_ptr; +template +class weak_ptr; +template +class reference_wrapper; +template +class optional; -namespace phoenix -{ - template< typename T > struct actor; +namespace phoenix { + template + struct actor; } -namespace lambda -{ - template< typename T > class lambda_functor; -} -namespace assign_detail -{ - template< typename T > class generic_list; +namespace lambda { + template + class lambda_functor; } +namespace assign_detail { + template + class generic_list; } +} // namespace boost -namespace mock -{ -namespace detail -{ - template< typename T > - void serialize( stream& s, const T& begin, const T& end ) +namespace mock { +namespace detail { + template + void serialize(stream& s, const T& begin, const T& end) { s << '('; - for( T it = begin; it != end; ++it ) - s << (it == begin ? "" : ",") << mock::format( *it ); + for(T it = begin; it != end; ++it) + s << (it == begin ? "" : ",") << mock::format(*it); s << ')'; } template - struct is_callable_impl: std::false_type + struct is_callable_impl : std::false_type {}; template - struct is_callable_impl: std::true_type + struct is_callable_impl : std::true_type {}; template - struct is_callable: is_callable_impl< std::remove_cv_t > + struct is_callable : is_callable_impl> {}; +} // namespace detail + +template +stream& operator<<(stream& s, const std::pair& p) +{ + return s << '(' << mock::format(p.first) << ',' << mock::format(p.second) << ')'; } - template< typename T1, typename T2 > - stream& operator<<( stream& s, const std::pair< T1, T2 >& p ) - { - return s << '(' << mock::format( p.first ) - << ',' << mock::format( p.second ) << ')'; - } +template +stream& operator<<(stream& s, const std::deque& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::list& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::vector& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::map& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::multimap& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::set& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const std::multiset& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const boost::assign_detail::generic_list& t) +{ + detail::serialize(s, t.begin(), t.end()); + return s; +} +template +stream& operator<<(stream& s, const boost::reference_wrapper& t) +{ + return s << mock::format(t.get()); +} +template +stream& operator<<(stream& s, const std::reference_wrapper& t) +{ + return s << mock::format(t.get()); +} +template +stream& operator<<(stream& s, const boost::shared_ptr& t) +{ + return s << mock::format(t.get()); +} +template +stream& operator<<(stream& s, const boost::weak_ptr& t) +{ + return s << mock::format(t.lock()); +} +inline stream& operator<<(stream& s, const boost::none_t&) +{ + return s << "none"; +} +template +stream& operator<<(stream& s, const boost::optional& t) +{ + if(t) + return s << mock::format(t.get()); + return s << boost::none; +} - template< typename T, typename A > - stream& operator<<( stream& s, const std::deque< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename A > - stream& operator<<( stream& s, const std::list< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename A > - stream& operator<<( stream& s, const std::vector< T, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename K, typename T, typename C, typename A > - stream& operator<<( stream& s, const std::map< K, T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename K, typename T, typename C, typename A > - stream& operator<<( stream& s, const std::multimap< K, T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename C, typename A > - stream& operator<<( stream& s, const std::set< T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T, typename C, typename A > - stream& operator<<( stream& s, const std::multiset< T, C, A >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T > - stream& operator<<( stream& s, - const boost::assign_detail::generic_list< T >& t ) - { - detail::serialize( s, t.begin(), t.end() ); - return s; - } - template< typename T > - stream& operator<<( stream& s, const boost::reference_wrapper< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const std::reference_wrapper< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const boost::shared_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const boost::weak_ptr< T >& t ) - { - return s << mock::format( t.lock() ); - } - inline stream& operator<<( stream& s, const boost::none_t& ) - { - return s << "none"; - } - template< typename T > - stream& operator<<( stream& s, const boost::optional< T >& t ) - { - if( t ) - return s << mock::format( t.get() ); - return s << boost::none; - } +template +stream& operator<<(stream& s, const std::shared_ptr& t) +{ + return s << mock::format(t.get()); +} +template +stream& operator<<(stream& s, const std::weak_ptr& t) +{ + return s << mock::format(t.lock()); +} +template +stream& operator<<(stream& s, const std::unique_ptr& p) +{ + return s << mock::format(p.get()); +} - template< typename T > - stream& operator<<( stream& s, const std::shared_ptr< T >& t ) - { - return s << mock::format( t.get() ); - } - template< typename T > - stream& operator<<( stream& s, const std::weak_ptr< T >& t ) - { - return s << mock::format( t.lock() ); - } - template< typename T, typename D > - stream& operator<<( stream& s, const std::unique_ptr< T, D >& p ) - { - return s << mock::format( p.get() ); - } +template +stream& operator<<(stream& s, const boost::lambda::lambda_functor&) +{ + return s << '?'; +} +template +stream& operator<<(stream& s, const boost::phoenix::actor&) +{ + return s << '?'; +} - template< typename T > - stream& operator<<( stream& s, const boost::lambda::lambda_functor< T >& ) - { - return s << '?'; - } - template< typename T > - stream& operator<<( stream& s, const boost::phoenix::actor< T >& ) - { - return s << '?'; - } +inline stream& operator<<(stream& s, std::nullptr_t) +{ + return s << "nullptr"; +} - inline stream& operator<<( stream& s, std::nullptr_t ) - { - return s << "nullptr"; - } - - template< typename T > - std::enable_if_t< detail::is_callable< T >::value, stream& > - operator<<( stream& s, T* ) - { - return s << '?'; - } - template< typename T > - std::enable_if_t< !detail::is_callable< T >::value, stream& > - operator<<( stream& s, T* t ) - { - *s.s_ << t; - return s; - } -} // mock +template +std::enable_if_t::value, stream&> operator<<(stream& s, T*) +{ + return s << '?'; +} +template +std::enable_if_t::value, stream&> operator<<(stream& s, T* t) +{ + *s.s_ << t; + return s; +} +} // namespace mock #endif // MOCK_LOG_HPP_INCLUDED diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index f6dbd7d..249500f 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -10,95 +10,71 @@ #define MOCK_MATCHER_HPP_INCLUDED #include "config.hpp" -#include "log.hpp" #include "constraints.hpp" #include "detail/is_functor.hpp" #include "detail/move_helper.hpp" +#include "log.hpp" #include #include #include -namespace mock +namespace mock { +template +class matcher { - template< typename Actual, typename Expected, typename Enable = void > - class matcher +public: + explicit matcher(Expected expected) : expected_(expected) {} + bool operator()(std::add_lvalue_reference_t actual) { - public: - explicit matcher( Expected expected ) - : expected_( expected ) - {} - bool operator()( std::add_lvalue_reference_t< const Actual > actual ) - { - return mock::equal( mock::unwrap_ref( expected_ ) ).c_( actual ); - } - friend std::ostream& operator<<( std::ostream& s, const matcher& m ) - { - return s << mock::format( m.expected_ ); - } - private: - Expected expected_; - }; + return mock::equal(mock::unwrap_ref(expected_)).c_(actual); + } + friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.expected_); } - template<> - class matcher< const char*, const char* > - { - public: - explicit matcher( const char* expected ) - : expected_( expected ) - {} - bool operator()( const char* actual ) - { - return std::strcmp( actual, expected_ ) == 0; - } - friend std::ostream& operator<<( std::ostream& s, const matcher& m ) - { - return s << mock::format( m.expected_ ); - } - private: - const char* expected_; - }; +private: + Expected expected_; +}; - template< typename Actual, typename Constraint > - class matcher< Actual, mock::constraint< Constraint > > - { - public: - explicit matcher( const constraint< Constraint >& c ) - : c_( c.c_ ) - {} - bool operator()( typename detail::ref_arg< Actual >::type actual ) - { - return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); - } - friend std::ostream& operator<<( std::ostream& s, const matcher& m ) - { - return s << mock::format( m.c_ ); - } - private: - Constraint c_; - }; +template<> +class matcher +{ +public: + explicit matcher(const char* expected) : expected_(expected) {} + bool operator()(const char* actual) { return std::strcmp(actual, expected_) == 0; } + friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.expected_); } - template< typename Actual, typename Functor > - class matcher< Actual, Functor, - std::enable_if_t< - detail::is_functor< Functor, Actual >::value - > - > +private: + const char* expected_; +}; + +template +class matcher> +{ +public: + explicit matcher(const constraint& c) : c_(c.c_) {} + bool operator()(typename detail::ref_arg::type actual) { - public: - explicit matcher( const Functor& f ) - : c_( f ) - {} - bool operator()( typename detail::ref_arg< Actual >::type actual ) - { - return c_( std::forward< typename detail::ref_arg< Actual >::type >( actual ) ); - } - friend std::ostream& operator<<( std::ostream& s, const matcher& m ) - { - return s << mock::format( m.c_ ); - } - private: - Functor c_; - }; -} // mock + return c_(std::forward::type>(actual)); + } + friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.c_); } + +private: + Constraint c_; +}; + +template +class matcher::value>> +{ +public: + explicit matcher(const Functor& f) : c_(f) {} + bool operator()(typename detail::ref_arg::type actual) + { + return c_(std::forward::type>(actual)); + } + friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.c_); } + +private: + Functor c_; +}; +} // namespace mock #endif // MOCK_MATCHER_HPP_INCLUDED diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 17b5092..4d25f8d 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -9,168 +9,153 @@ #ifndef MOCK_MOCK_HPP_INCLUDED #define MOCK_MOCK_HPP_INCLUDED +#include "cleanup.hpp" #include "config.hpp" +#include "detail/function.hpp" +#include "detail/functor.hpp" +#include "detail/parameter.hpp" +#include "detail/signature.hpp" +#include "detail/type_name.hpp" #include "object.hpp" #include "reset.hpp" #include "verify.hpp" -#include "cleanup.hpp" -#include "detail/functor.hpp" -#include "detail/function.hpp" -#include "detail/type_name.hpp" -#include "detail/signature.hpp" -#include "detail/parameter.hpp" #include #include /// MOCK_CLASS( name ) /// Define a class -#define MOCK_CLASS(T) \ - struct T : mock::object +#define MOCK_CLASS(T) struct T : mock::object /// MOCK_PROTECT_FUNCTION_SIG( signature ) /// Use this with MOCK_FUNCTION/MOCK_*_METHOD if the return type contains commas -#define MOCK_PROTECT_FUNCTION_SIG(...) \ - mock::detail::parameter_type_t +#define MOCK_PROTECT_FUNCTION_SIG(...) mock::detail::parameter_type_t /// Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE /// TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG -#define MOCK_FUNCTION_TYPE(...) \ - std::remove_pointer_t< __VA_ARGS__ > +#define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> /// MOCK_BASE_CLASS( name, base ) /// Define a class deriving from a base class -#define MOCK_BASE_CLASS(T, ...) \ - struct T : __VA_ARGS__, mock::object, mock::detail::base< __VA_ARGS__ > +#define MOCK_BASE_CLASS(T, ...) struct T : __VA_ARGS__, mock::object, mock::detail::base<__VA_ARGS__> /// MOCK_FUNCTOR( name, signature ) /// Define a callable variable/member -#define MOCK_FUNCTOR(f, ...) \ - mock::detail::functor< MOCK_FUNCTION_TYPE(__VA_ARGS__) > f, f##_mock +#define MOCK_FUNCTOR(f, ...) mock::detail::functor f, f##_mock /// MOCK_FUNCTOR_TPL( name, signature ) #define MOCK_FUNCTOR_TPL(f, ...) static_assert(false, "MOCK_FUNCTOR_TPL has been replaced by MOCK_FUNCTOR") -#define MOCK_HELPER(t) \ - t##_mock( mock::detail::root, BOOST_PP_STRINGIZE(t) ) -#define MOCK_ANONYMOUS_HELPER(t) \ - t##_mock( mock::detail::root, "?." ) +#define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) +#define MOCK_ANONYMOUS_HELPER(t) t##_mock(mock::detail::root, "?.") -#define MOCK_METHOD_HELPER(S, t) \ - mutable mock::detail::function< MOCK_FUNCTION_TYPE(S) > t##_mock_; \ - mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ - const mock::detail::context&, \ - const boost::unit_test::const_string& instance ) const \ - { \ - mock::detail::configure( *this, t##_mock_, \ - instance.substr( 0, instance.rfind( BOOST_PP_STRINGIZE(t) ) ), \ - mock::detail::make_type_name(*this), \ - BOOST_PP_STRINGIZE(t) ); \ - return t##_mock_; \ +#define MOCK_METHOD_HELPER(S, t) \ + mutable mock::detail::function t##_mock_; \ + mock::detail::function& t##_mock(const mock::detail::context&, \ + const boost::unit_test::const_string& instance) const \ + { \ + mock::detail::configure(*this, \ + t##_mock_, \ + instance.substr(0, instance.rfind(BOOST_PP_STRINGIZE(t))), \ + mock::detail::make_type_name(*this), \ + BOOST_PP_STRINGIZE(t)); \ + return t##_mock_; \ } -#define MOCK_PARAM(S, tpn) \ - tpn mock::detail::parameter< MOCK_FUNCTION_TYPE(S) -#define MOCK_DECL_PARAM(z, n, d) \ - BOOST_PP_COMMA_IF(n) d, n >::type p##n -#define MOCK_DECL_PARAMS(n, S, tpn) \ - BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S, tpn)) +#define MOCK_PARAM(S, tpn) tpn mock::detail::parameter < MOCK_FUNCTION_TYPE(S) +#define MOCK_DECL_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > ::type p##n +#define MOCK_DECL_PARAMS(n, S, tpn) BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S, tpn)) #define MOCK_DECL(M, n, S, c, tpn) \ - tpn mock::detail::result_type< \ - MOCK_FUNCTION_TYPE(S) >::type M( \ - MOCK_DECL_PARAMS(n, S, tpn) ) c + tpn mock::detail::result_type::type M(MOCK_DECL_PARAMS(n, S, tpn)) c -#define MOCK_FORWARD_PARAM(z, n, d) \ - BOOST_PP_COMMA_IF(n) d, n >::type >( p##n ) -#define MOCK_FORWARD_PARAMS(n, S, tpn) \ - BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, \ - std::forward< MOCK_PARAM(S, tpn)) -#define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ - MOCK_DECL(M, n, S, c, tpn) \ - { \ - static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE(S) >::value, "Arity mismatch" ); \ - return MOCK_ANONYMOUS_HELPER(t)( \ - MOCK_FORWARD_PARAMS(n, S, tpn) ); \ +#define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > ::type > (p##n) +#define MOCK_FORWARD_PARAMS(n, S, tpn) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S, tpn)) +#define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ + MOCK_DECL(M, n, S, c, tpn) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S, tpn)); \ } -#define MOCK_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,,) \ - MOCK_METHOD_AUX(M, n, S, t, const,) \ +#define MOCK_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, , ) \ + MOCK_METHOD_AUX(M, n, S, t, const, ) \ MOCK_METHOD_HELPER(S, t) #define MOCK_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const,) \ + MOCK_METHOD_AUX(M, n, S, t, const, ) \ MOCK_METHOD_HELPER(S, t) #define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,,) \ + MOCK_METHOD_AUX(M, n, S, t, , ) \ MOCK_METHOD_HELPER(S, t) -#define MOCK_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,, typename) \ +#define MOCK_METHOD_EXT_TPL(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, , typename) \ MOCK_METHOD_AUX(M, n, S, t, const, typename) \ MOCK_METHOD_HELPER(S, t) -#define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ +#define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t, const, typename) \ MOCK_METHOD_HELPER(S, t) #define MOCK_NON_CONST_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t,, typename) \ + MOCK_METHOD_AUX(M, n, S, t, , typename) \ MOCK_METHOD_HELPER(S, t) /// MOCK_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) /// generates both const and non-const operators -#define MOCK_CONVERSION_OPERATOR(M, T, t) \ +#define MOCK_CONVERSION_OPERATOR(M, T, t) \ M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ MOCK_METHOD_HELPER(T(), t) /// MOCK_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) /// generates only a const operator -#define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ +#define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ MOCK_METHOD_HELPER(T(), t) /// MOCK_NON_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) /// generates only a non-const operator #define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ + M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ MOCK_METHOD_HELPER(T(), t) #define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONVERSION_OPERATOR(M, T, t) #define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONST_CONVERSION_OPERATOR(M, T, t) #define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) -#define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s mock::detail::function< MOCK_FUNCTION_TYPE(S) >& t##_mock( \ - mock::detail::context& context, \ - boost::unit_test::const_string instance ) \ - { \ - static mock::detail::function< MOCK_FUNCTION_TYPE(S) > f; \ - return f( context, instance ); \ +#define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ + s mock::detail::function& t##_mock(mock::detail::context& context, \ + boost::unit_test::const_string instance) \ + { \ + static mock::detail::function f; \ + return f(context, instance); \ } -#define MOCK_CONSTRUCTOR_AUX(T, n, A, t, tpn) \ - T( MOCK_DECL_PARAMS(n, void A, tpn) ) \ - { \ - MOCK_HELPER(t)( MOCK_FORWARD_PARAMS(n, void A, tpn) ); \ - } \ +#define MOCK_CONSTRUCTOR_AUX(T, n, A, t, tpn) \ + T(MOCK_DECL_PARAMS(n, void A, tpn)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A, tpn)); } \ MOCK_FUNCTION_HELPER(void A, t, static, tpn) /// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) /// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. -#define MOCK_CONSTRUCTOR(T, n, A, t) \ - MOCK_CONSTRUCTOR_AUX(T, n, A, t,) +#define MOCK_CONSTRUCTOR(T, n, A, t) MOCK_CONSTRUCTOR_AUX(T, n, A, t, ) /// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) /// must be used if the signature uses a template parameter of the class /// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. -#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) \ - MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) +#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) /// MOCK_DESTRUCTOR( [calling convention] ~name, identifier ) -#define MOCK_DESTRUCTOR(T, t) \ - T() { try { MOCK_ANONYMOUS_HELPER(t)(); } catch( ... ) {} } \ +#define MOCK_DESTRUCTOR(T, t) \ + T() \ + { \ + try \ + { \ + MOCK_ANONYMOUS_HELPER(t)(); \ + } catch(...) \ + {} \ + } \ MOCK_METHOD_HELPER(void(), t) -#define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ - MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s MOCK_DECL(F, n, S,,tpn) \ - { \ - static_assert( n == mock::detail::function_arity< MOCK_FUNCTION_TYPE(S) >::value, "Arity mismatch" ); \ - return MOCK_HELPER(t)( MOCK_FORWARD_PARAMS(n, S, tpn) ); \ +#define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ + MOCK_FUNCTION_HELPER(S, t, s, tpn) \ + s MOCK_DECL(F, n, S, , tpn) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S, tpn)); \ } #define MOCK_VARIADIC_ELEM_0(e0, ...) e0 @@ -179,79 +164,64 @@ /// MOCK_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates both const and non-const methods -#define MOCK_METHOD(M, ...) \ - MOCK_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_METHOD(M, ...) \ + MOCK_METHOD_EXT(M, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) /// MOCK_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the const version of the method -#define MOCK_CONST_METHOD(M, ...) \ - MOCK_CONST_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_CONST_METHOD(M, ...) \ + MOCK_CONST_METHOD_EXT(M, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) /// MOCK_NON_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the non-const version of the method -#define MOCK_NON_CONST_METHOD(M, ...) \ - MOCK_NON_CONST_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) - +#define MOCK_NON_CONST_METHOD(M, ...) \ + MOCK_NON_CONST_METHOD_EXT(M, \ + MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ + MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ + MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) /// MOCK_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) /// must be used if the signature uses a template parameter of the class /// generates both const and non-const methods #define MOCK_METHOD_TPL(M, n, ...) \ - MOCK_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) + MOCK_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) /// MOCK_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) /// must be used if the signature uses a template parameter of the class /// generates only the const version of the method #define MOCK_CONST_METHOD_TPL(M, n, ...) \ - MOCK_CONST_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) + MOCK_CONST_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) /// MOCK_NON_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) /// must be used if the signature uses a template parameter of the class /// generates only the non-const version of the method #define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ - MOCK_NON_CONST_METHOD_EXT_TPL(M, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) + MOCK_NON_CONST_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) /// MOCK_FUNCTION( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' #define MOCK_FUNCTION(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ - inline,) + MOCK_FUNCTION_AUX(F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), inline, ) /// MOCK_STATIC_METHOD( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' #define MOCK_STATIC_METHOD(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ - static,) + MOCK_FUNCTION_AUX(F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static, ) /// MOCK_STATIC_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) /// must be used if the signature uses a template parameter of the class /// if 'identifier' is omitted it will default to 'name' #define MOCK_STATIC_METHOD_TPL(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), \ - static, typename) + MOCK_FUNCTION_AUX( \ + F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static, typename) /// MOCK_EXPECT( identifier ) -#define MOCK_EXPECT(t) MOCK_HELPER(t).expect( __FILE__, __LINE__ ) +#define MOCK_EXPECT(t) MOCK_HELPER(t).expect(__FILE__, __LINE__) /// MOCK_RESET( identifier ) -#define MOCK_RESET(t) MOCK_HELPER(t).reset( __FILE__, __LINE__ ) +#define MOCK_RESET(t) MOCK_HELPER(t).reset(__FILE__, __LINE__) /// MOCK_VERIFY( identifier ) -#define MOCK_VERIFY(t) MOCK_HELPER(t).verify( __FILE__, __LINE__ ) +#define MOCK_VERIFY(t) MOCK_HELPER(t).verify(__FILE__, __LINE__) #endif // MOCK_MOCK_HPP_INCLUDED diff --git a/include/turtle/object.hpp b/include/turtle/object.hpp index 70f98fa..74da12f 100644 --- a/include/turtle/object.hpp +++ b/include/turtle/object.hpp @@ -10,61 +10,61 @@ #define MOCK_OBJECT_HPP_INCLUDED #include "config.hpp" +#include "detail/object_impl.hpp" #include "detail/root.hpp" #include "detail/type_name.hpp" -#include "detail/object_impl.hpp" -#include #include +#include #include #include -namespace mock -{ - class object; +namespace mock { +class object; -namespace detail -{ - template< typename E > - E& configure( const object& o, E& e, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ); - - template< typename T, typename E > - E& configure( const T& t, E& e, - boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name, - std::enable_if_t< !std::is_base_of< object, T >::value >* = 0 ) - { - e.configure( detail::root, &t, instance, type, name ); - return e; - } -} - class object - { - public: - object() - : impl_( std::make_shared< detail::object_impl >() ) - {} - protected: - ~object() = default; - public: - std::shared_ptr< detail::object_impl > impl_; - }; - -namespace detail -{ - template< typename E > - E& configure( const object& o, E& e, +namespace detail { + template + E& configure(const object& o, + E& e, boost::unit_test::const_string instance, - boost::optional< type_name > type, - boost::unit_test::const_string name ) + boost::optional type, + boost::unit_test::const_string name); + + template + E& configure(const T& t, + E& e, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name, + std::enable_if_t::value>* = 0) { - e.configure( *o.impl_, o.impl_.get(), instance, type, name ); + e.configure(detail::root, &t, instance, type, name); return e; } -} -} // mock +} // namespace detail +class object +{ +public: + object() : impl_(std::make_shared()) {} + +protected: + ~object() = default; + +public: + std::shared_ptr impl_; +}; + +namespace detail { + template + E& configure(const object& o, + E& e, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) + { + e.configure(*o.impl_, o.impl_.get(), instance, type, name); + return e; + } +} // namespace detail +} // namespace mock #endif // MOCK_OBJECT_HPP_INCLUDED diff --git a/include/turtle/reset.hpp b/include/turtle/reset.hpp index 20237b9..4315d4c 100644 --- a/include/turtle/reset.hpp +++ b/include/turtle/reset.hpp @@ -10,25 +10,24 @@ #define MOCK_RESET_HPP_INCLUDED #include "config.hpp" -#include "object.hpp" -#include "detail/root.hpp" #include "detail/functor.hpp" +#include "detail/root.hpp" +#include "object.hpp" -namespace mock +namespace mock { +inline void reset() { - inline void reset() - { - detail::root.reset(); - } - inline void reset( const object& o ) - { - o.impl_->reset(); - } - template< typename Signature > - void reset( detail::functor< Signature >& f ) - { - f.reset(); - } -} // mock + detail::root.reset(); +} +inline void reset(const object& o) +{ + o.impl_->reset(); +} +template +void reset(detail::functor& f) +{ + f.reset(); +} +} // namespace mock #endif // MOCK_RESET_HPP_INCLUDED diff --git a/include/turtle/sequence.hpp b/include/turtle/sequence.hpp index 377e920..a4a6281 100644 --- a/include/turtle/sequence.hpp +++ b/include/turtle/sequence.hpp @@ -13,17 +13,14 @@ #include "detail/sequence_impl.hpp" #include -namespace mock +namespace mock { +class sequence { - class sequence - { - public: - sequence() - : impl_( std::make_shared< detail::sequence_impl >() ) - {} +public: + sequence() : impl_(std::make_shared()) {} - std::shared_ptr< detail::sequence_impl > impl_; - }; -} // mock + std::shared_ptr impl_; +}; +} // namespace mock #endif // MOCK_SEQUENCE_HPP_INCLUDED diff --git a/include/turtle/stream.hpp b/include/turtle/stream.hpp index 9f5b0a1..52991ed 100644 --- a/include/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -13,33 +13,24 @@ #include #include -namespace mock +namespace mock { +struct stream { - struct stream - { - explicit stream( std::ostream& s ) - : s_( &s ) - {} - std::ostream* s_; - }; + explicit stream(std::ostream& s) : s_(&s) {} + std::ostream* s_; +}; #ifdef MOCK_USE_CONVERSIONS -namespace detail -{ -namespace conversion -{ +namespace detail { namespace conversion { struct sink { - template< typename T > - sink( const T& ) + template + sink(const T&) {} }; - inline std::ostream& operator<<( std::ostream& s, const sink& ) - { - return s << '?'; - } + inline std::ostream& operator<<(std::ostream& s, const sink&) { return s << '?'; } struct holder { @@ -48,16 +39,14 @@ namespace conversion holder& operator=(const holder&) = delete; virtual ~holder() = default; - virtual void serialize( std::ostream& s ) const = 0; + virtual void serialize(std::ostream& s) const = 0; }; - template< typename T > + template struct holder_imp : holder { - explicit holder_imp( const T& t ) - : t_( t ) - {} - virtual void serialize( std::ostream& s ) const + explicit holder_imp(const T& t) : t_(t) {} + virtual void serialize(std::ostream& s) const { // if an error about an ambiguous conversion is generated by the // line below the solution is to add a serialization operator to a @@ -69,72 +58,57 @@ namespace conversion struct any { - template< typename T > - any( const T& t ): h_( std::make_unique< holder_imp >( t ) ) + template + any(const T& t) : h_(std::make_unique>(t)) {} std::unique_ptr h_; }; -} -} +}} // namespace detail::conversion - inline stream& operator<<( stream& s, const detail::conversion::any& d ) - { - d.h_->serialize( *s.s_ ); - return s; - } +inline stream& operator<<(stream& s, const detail::conversion::any& d) +{ + d.h_->serialize(*s.s_); + return s; +} #else // MOCK_USE_CONVERSIONS -namespace detail -{ -namespace conversion -{ - template< typename S, typename T > - S& operator<<( S &s, const T& ) +namespace detail { namespace conversion { + template + S& operator<<(S& s, const T&) { return s << '?'; } -} -} +}} // namespace detail::conversion - template< typename T > - stream& operator<<( stream& s, const T& t ) - { - using namespace detail::conversion; - *s.s_ << t; - return s; - } +template +stream& operator<<(stream& s, const T& t) +{ + using namespace detail::conversion; + *s.s_ << t; + return s; +} #endif // MOCK_USE_CONVERSIONS -namespace detail -{ - template< typename T > - void serialize( stream& s, const T& t ) +namespace detail { + template + void serialize(stream& s, const T& t) { // if an error about an ambiguous conversion is generated by the // line below the solution is to add a serialization operator to a // mock::stream for T s << t; } - inline void serialize( stream& s, bool b ) - { - s << (b ? "true" : "false"); - } - template< typename C, typename T, typename A > - void serialize( stream& s, const std::basic_string< C, T, A >& str ) + inline void serialize(stream& s, bool b) { s << (b ? "true" : "false"); } + template + void serialize(stream& s, const std::basic_string& str) { s << '"' << str << '"'; } - inline void serialize( stream& s, const char* const str ) - { - s << '"' << str << '"'; - } - inline void serialize( stream& s, unsigned char c ) - { - s << static_cast< int >( c ); - } -} -} // mock + inline void serialize(stream& s, const char* const str) { s << '"' << str << '"'; } + inline void serialize(stream& s, unsigned char c) { s << static_cast(c); } +} // namespace detail +} // namespace mock #endif // MOCK_STREAM_HPP_INCLUDED diff --git a/include/turtle/unwrap_reference.hpp b/include/turtle/unwrap_reference.hpp index b450cff..93f6f5e 100644 --- a/include/turtle/unwrap_reference.hpp +++ b/include/turtle/unwrap_reference.hpp @@ -12,31 +12,30 @@ #include #include -namespace mock +namespace mock { +template +struct unwrap_reference { - template - struct unwrap_reference - { - using type = T; - }; - template - struct unwrap_reference> - { - using type = T; - }; - template - struct unwrap_reference> - { - using type = T; - }; - template - using unwrap_reference_t = typename unwrap_reference::type; + using type = T; +}; +template +struct unwrap_reference> +{ + using type = T; +}; +template +struct unwrap_reference> +{ + using type = T; +}; +template +using unwrap_reference_t = typename unwrap_reference::type; - template - BOOST_FORCEINLINE unwrap_reference_t& unwrap_ref( T& t ) noexcept - { - return t; - } +template +BOOST_FORCEINLINE unwrap_reference_t& unwrap_ref(T& t) noexcept +{ + return t; } +} // namespace mock -#endif // MOCK_UNWRAP_REFERENCE_HPP_INCLUDED +#endif // MOCK_UNWRAP_REFERENCE_HPP_INCLUDED diff --git a/include/turtle/verify.hpp b/include/turtle/verify.hpp index 61df6df..1995374 100644 --- a/include/turtle/verify.hpp +++ b/include/turtle/verify.hpp @@ -10,25 +10,24 @@ #define MOCK_VERIFY_HPP_INCLUDED #include "config.hpp" -#include "object.hpp" -#include "detail/root.hpp" #include "detail/functor.hpp" +#include "detail/root.hpp" +#include "object.hpp" -namespace mock +namespace mock { +inline bool verify() { - inline bool verify() - { - return detail::root.verify(); - } - inline bool verify( const object& o ) - { - return o.impl_->verify(); - } - template< typename Signature > - bool verify( const detail::functor< Signature >& f ) - { - return f.verify(); - } -} // mock + return detail::root.verify(); +} +inline bool verify(const object& o) +{ + return o.impl_->verify(); +} +template +bool verify(const detail::functor& f) +{ + return f.verify(); +} +} // namespace mock #endif // MOCK_VERIFY_HPP_INCLUDED diff --git a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp index 021d95b..53bebcd 100644 --- a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_30_args_30_max_args.cpp @@ -9,1129 +9,1938 @@ #define MOCK_MAX_ARGS 30 #include #ifdef _MSC_VER -#pragma warning( disable: 4505 ) +# pragma warning(disable : 4505) #endif -namespace +namespace { +class base_class { - class base_class - { - public: - virtual ~base_class() = default; - virtual void f1( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int, - int, int, int, int, int, int, int, int, int, int ) = 0; - }; +public: + virtual ~base_class() = default; + virtual void f1(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f2(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f3(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f4(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f5(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f6(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f7(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f8(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f9(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f10(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f11(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f12(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f13(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f14(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f15(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f16(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f17(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f18(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f19(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f20(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f21(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f22(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f23(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f24(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f25(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f26(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f27(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f28(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f29(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; + virtual void f30(int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int, + int) = 0; +}; - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 30 ) - MOCK_METHOD( f2, 30 ) - MOCK_METHOD( f3, 30 ) - MOCK_METHOD( f4, 30 ) - MOCK_METHOD( f5, 30 ) - MOCK_METHOD( f6, 30 ) - MOCK_METHOD( f7, 30 ) - MOCK_METHOD( f8, 30 ) - MOCK_METHOD( f9, 30 ) - MOCK_METHOD( f10, 30 ) - MOCK_METHOD( f11, 30 ) - MOCK_METHOD( f12, 30 ) - MOCK_METHOD( f13, 30 ) - MOCK_METHOD( f14, 30 ) - MOCK_METHOD( f15, 30 ) - MOCK_METHOD( f16, 30 ) - MOCK_METHOD( f17, 30 ) - MOCK_METHOD( f18, 30 ) - MOCK_METHOD( f19, 30 ) - MOCK_METHOD( f20, 30 ) - MOCK_METHOD( f21, 30 ) - MOCK_METHOD( f22, 30 ) - MOCK_METHOD( f23, 30 ) - MOCK_METHOD( f24, 30 ) - MOCK_METHOD( f25, 30 ) - MOCK_METHOD( f26, 30 ) - MOCK_METHOD( f27, 30 ) - MOCK_METHOD( f28, 30 ) - MOCK_METHOD( f29, 30 ) - MOCK_METHOD( f30, 30 ) - }; +MOCK_BASE_CLASS(mock_class_1, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_2, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_3, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_4, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_5, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_6, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_7, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_8, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_9, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_10, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_11, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_12, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_13, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_14, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_15, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_16, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_17, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_18, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_19, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_20, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_21, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_22, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_23, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_24, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_25, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_26, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_27, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_28, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_29, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; +MOCK_BASE_CLASS(mock_class_30, base_class) +{ + MOCK_METHOD(f1, 30) + MOCK_METHOD(f2, 30) + MOCK_METHOD(f3, 30) + MOCK_METHOD(f4, 30) + MOCK_METHOD(f5, 30) + MOCK_METHOD(f6, 30) + MOCK_METHOD(f7, 30) + MOCK_METHOD(f8, 30) + MOCK_METHOD(f9, 30) + MOCK_METHOD(f10, 30) + MOCK_METHOD(f11, 30) + MOCK_METHOD(f12, 30) + MOCK_METHOD(f13, 30) + MOCK_METHOD(f14, 30) + MOCK_METHOD(f15, 30) + MOCK_METHOD(f16, 30) + MOCK_METHOD(f17, 30) + MOCK_METHOD(f18, 30) + MOCK_METHOD(f19, 30) + MOCK_METHOD(f20, 30) + MOCK_METHOD(f21, 30) + MOCK_METHOD(f22, 30) + MOCK_METHOD(f23, 30) + MOCK_METHOD(f24, 30) + MOCK_METHOD(f25, 30) + MOCK_METHOD(f26, 30) + MOCK_METHOD(f27, 30) + MOCK_METHOD(f28, 30) + MOCK_METHOD(f29, 30) + MOCK_METHOD(f30, 30) +}; - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +mock_class_1 c_1; +mock_class_2 c_2; +mock_class_3 c_3; +mock_class_4 c_4; +mock_class_5 c_5; +mock_class_6 c_6; +mock_class_7 c_7; +mock_class_8 c_8; +mock_class_9 c_9; +mock_class_10 c_10; +mock_class_11 c_11; +mock_class_12 c_12; +mock_class_13 c_13; +mock_class_14 c_14; +mock_class_15 c_15; +mock_class_16 c_16; +mock_class_17 c_17; +mock_class_18 c_18; +mock_class_19 c_19; +mock_class_20 c_20; +mock_class_21 c_21; +mock_class_22 c_22; +mock_class_23 c_23; +mock_class_24 c_24; +mock_class_25 c_25; +mock_class_26 c_26; +mock_class_27 c_27; +mock_class_28 c_28; +mock_class_29 c_29; +mock_class_30 c_30; +} // namespace int main() { diff --git a/test/bench_30_classes_30_methods_9_args.cpp b/test/bench_30_classes_30_methods_9_args.cpp index 17c5a52..72def03 100644 --- a/test/bench_30_classes_30_methods_9_args.cpp +++ b/test/bench_30_classes_30_methods_9_args.cpp @@ -8,1069 +8,1068 @@ #include #ifdef _MSC_VER -#pragma warning( disable: 4505 ) +# pragma warning(disable : 4505) #endif -namespace +namespace { +class base_class { - class base_class - { - public: - virtual ~base_class() = default; - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; +public: + virtual ~base_class() = default; + virtual void f1(int, int, int, int, int, int, int, int, int) = 0; + virtual void f2(int, int, int, int, int, int, int, int, int) = 0; + virtual void f3(int, int, int, int, int, int, int, int, int) = 0; + virtual void f4(int, int, int, int, int, int, int, int, int) = 0; + virtual void f5(int, int, int, int, int, int, int, int, int) = 0; + virtual void f6(int, int, int, int, int, int, int, int, int) = 0; + virtual void f7(int, int, int, int, int, int, int, int, int) = 0; + virtual void f8(int, int, int, int, int, int, int, int, int) = 0; + virtual void f9(int, int, int, int, int, int, int, int, int) = 0; + virtual void f10(int, int, int, int, int, int, int, int, int) = 0; + virtual void f11(int, int, int, int, int, int, int, int, int) = 0; + virtual void f12(int, int, int, int, int, int, int, int, int) = 0; + virtual void f13(int, int, int, int, int, int, int, int, int) = 0; + virtual void f14(int, int, int, int, int, int, int, int, int) = 0; + virtual void f15(int, int, int, int, int, int, int, int, int) = 0; + virtual void f16(int, int, int, int, int, int, int, int, int) = 0; + virtual void f17(int, int, int, int, int, int, int, int, int) = 0; + virtual void f18(int, int, int, int, int, int, int, int, int) = 0; + virtual void f19(int, int, int, int, int, int, int, int, int) = 0; + virtual void f20(int, int, int, int, int, int, int, int, int) = 0; + virtual void f21(int, int, int, int, int, int, int, int, int) = 0; + virtual void f22(int, int, int, int, int, int, int, int, int) = 0; + virtual void f23(int, int, int, int, int, int, int, int, int) = 0; + virtual void f24(int, int, int, int, int, int, int, int, int) = 0; + virtual void f25(int, int, int, int, int, int, int, int, int) = 0; + virtual void f26(int, int, int, int, int, int, int, int, int) = 0; + virtual void f27(int, int, int, int, int, int, int, int, int) = 0; + virtual void f28(int, int, int, int, int, int, int, int, int) = 0; + virtual void f29(int, int, int, int, int, int, int, int, int) = 0; + virtual void f30(int, int, int, int, int, int, int, int, int) = 0; +}; - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; +MOCK_BASE_CLASS(mock_class_1, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_2, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_3, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_4, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_5, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_6, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_7, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_8, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_9, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_10, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_11, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_12, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_13, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_14, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_15, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_16, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_17, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_18, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_19, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_20, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_21, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_22, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_23, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_24, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_25, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_26, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_27, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_28, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_29, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_30, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +mock_class_1 c_1; +mock_class_2 c_2; +mock_class_3 c_3; +mock_class_4 c_4; +mock_class_5 c_5; +mock_class_6 c_6; +mock_class_7 c_7; +mock_class_8 c_8; +mock_class_9 c_9; +mock_class_10 c_10; +mock_class_11 c_11; +mock_class_12 c_12; +mock_class_13 c_13; +mock_class_14 c_14; +mock_class_15 c_15; +mock_class_16 c_16; +mock_class_17 c_17; +mock_class_18 c_18; +mock_class_19 c_19; +mock_class_20 c_20; +mock_class_21 c_21; +mock_class_22 c_22; +mock_class_23 c_23; +mock_class_24 c_24; +mock_class_25 c_25; +mock_class_26 c_26; +mock_class_27 c_27; +mock_class_28 c_28; +mock_class_29 c_29; +mock_class_30 c_30; +} // namespace int main() { diff --git a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp index 6a8023c..a69d3d9 100644 --- a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp @@ -9,1069 +9,1068 @@ #define MOCK_MAX_ARGS 10 #include #ifdef _MSC_VER -#pragma warning( disable: 4505 ) +# pragma warning(disable : 4505) #endif -namespace +namespace { +class base_class { - class base_class - { - public: - virtual ~base_class() = default; - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; +public: + virtual ~base_class() = default; + virtual void f1(int, int, int, int, int, int, int, int, int) = 0; + virtual void f2(int, int, int, int, int, int, int, int, int) = 0; + virtual void f3(int, int, int, int, int, int, int, int, int) = 0; + virtual void f4(int, int, int, int, int, int, int, int, int) = 0; + virtual void f5(int, int, int, int, int, int, int, int, int) = 0; + virtual void f6(int, int, int, int, int, int, int, int, int) = 0; + virtual void f7(int, int, int, int, int, int, int, int, int) = 0; + virtual void f8(int, int, int, int, int, int, int, int, int) = 0; + virtual void f9(int, int, int, int, int, int, int, int, int) = 0; + virtual void f10(int, int, int, int, int, int, int, int, int) = 0; + virtual void f11(int, int, int, int, int, int, int, int, int) = 0; + virtual void f12(int, int, int, int, int, int, int, int, int) = 0; + virtual void f13(int, int, int, int, int, int, int, int, int) = 0; + virtual void f14(int, int, int, int, int, int, int, int, int) = 0; + virtual void f15(int, int, int, int, int, int, int, int, int) = 0; + virtual void f16(int, int, int, int, int, int, int, int, int) = 0; + virtual void f17(int, int, int, int, int, int, int, int, int) = 0; + virtual void f18(int, int, int, int, int, int, int, int, int) = 0; + virtual void f19(int, int, int, int, int, int, int, int, int) = 0; + virtual void f20(int, int, int, int, int, int, int, int, int) = 0; + virtual void f21(int, int, int, int, int, int, int, int, int) = 0; + virtual void f22(int, int, int, int, int, int, int, int, int) = 0; + virtual void f23(int, int, int, int, int, int, int, int, int) = 0; + virtual void f24(int, int, int, int, int, int, int, int, int) = 0; + virtual void f25(int, int, int, int, int, int, int, int, int) = 0; + virtual void f26(int, int, int, int, int, int, int, int, int) = 0; + virtual void f27(int, int, int, int, int, int, int, int, int) = 0; + virtual void f28(int, int, int, int, int, int, int, int, int) = 0; + virtual void f29(int, int, int, int, int, int, int, int, int) = 0; + virtual void f30(int, int, int, int, int, int, int, int, int) = 0; +}; - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; +MOCK_BASE_CLASS(mock_class_1, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_2, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_3, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_4, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_5, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_6, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_7, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_8, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_9, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_10, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_11, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_12, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_13, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_14, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_15, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_16, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_17, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_18, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_19, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_20, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_21, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_22, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_23, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_24, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_25, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_26, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_27, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_28, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_29, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_30, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +mock_class_1 c_1; +mock_class_2 c_2; +mock_class_3 c_3; +mock_class_4 c_4; +mock_class_5 c_5; +mock_class_6 c_6; +mock_class_7 c_7; +mock_class_8 c_8; +mock_class_9 c_9; +mock_class_10 c_10; +mock_class_11 c_11; +mock_class_12 c_12; +mock_class_13 c_13; +mock_class_14 c_14; +mock_class_15 c_15; +mock_class_16 c_16; +mock_class_17 c_17; +mock_class_18 c_18; +mock_class_19 c_19; +mock_class_20 c_20; +mock_class_21 c_21; +mock_class_22 c_22; +mock_class_23 c_23; +mock_class_24 c_24; +mock_class_25 c_25; +mock_class_26 c_26; +mock_class_27 c_27; +mock_class_28 c_28; +mock_class_29 c_29; +mock_class_30 c_30; +} // namespace int main() { diff --git a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp index c36c91b..c245b25 100644 --- a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp @@ -9,1069 +9,1068 @@ #define MOCK_MAX_ARGS 20 #include #ifdef _MSC_VER -#pragma warning( disable: 4505 ) +# pragma warning(disable : 4505) #endif -namespace +namespace { +class base_class { - class base_class - { - public: - virtual ~base_class() = default; - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; +public: + virtual ~base_class() = default; + virtual void f1(int, int, int, int, int, int, int, int, int) = 0; + virtual void f2(int, int, int, int, int, int, int, int, int) = 0; + virtual void f3(int, int, int, int, int, int, int, int, int) = 0; + virtual void f4(int, int, int, int, int, int, int, int, int) = 0; + virtual void f5(int, int, int, int, int, int, int, int, int) = 0; + virtual void f6(int, int, int, int, int, int, int, int, int) = 0; + virtual void f7(int, int, int, int, int, int, int, int, int) = 0; + virtual void f8(int, int, int, int, int, int, int, int, int) = 0; + virtual void f9(int, int, int, int, int, int, int, int, int) = 0; + virtual void f10(int, int, int, int, int, int, int, int, int) = 0; + virtual void f11(int, int, int, int, int, int, int, int, int) = 0; + virtual void f12(int, int, int, int, int, int, int, int, int) = 0; + virtual void f13(int, int, int, int, int, int, int, int, int) = 0; + virtual void f14(int, int, int, int, int, int, int, int, int) = 0; + virtual void f15(int, int, int, int, int, int, int, int, int) = 0; + virtual void f16(int, int, int, int, int, int, int, int, int) = 0; + virtual void f17(int, int, int, int, int, int, int, int, int) = 0; + virtual void f18(int, int, int, int, int, int, int, int, int) = 0; + virtual void f19(int, int, int, int, int, int, int, int, int) = 0; + virtual void f20(int, int, int, int, int, int, int, int, int) = 0; + virtual void f21(int, int, int, int, int, int, int, int, int) = 0; + virtual void f22(int, int, int, int, int, int, int, int, int) = 0; + virtual void f23(int, int, int, int, int, int, int, int, int) = 0; + virtual void f24(int, int, int, int, int, int, int, int, int) = 0; + virtual void f25(int, int, int, int, int, int, int, int, int) = 0; + virtual void f26(int, int, int, int, int, int, int, int, int) = 0; + virtual void f27(int, int, int, int, int, int, int, int, int) = 0; + virtual void f28(int, int, int, int, int, int, int, int, int) = 0; + virtual void f29(int, int, int, int, int, int, int, int, int) = 0; + virtual void f30(int, int, int, int, int, int, int, int, int) = 0; +}; - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; +MOCK_BASE_CLASS(mock_class_1, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_2, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_3, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_4, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_5, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_6, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_7, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_8, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_9, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_10, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_11, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_12, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_13, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_14, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_15, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_16, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_17, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_18, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_19, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_20, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_21, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_22, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_23, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_24, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_25, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_26, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_27, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_28, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_29, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_30, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +mock_class_1 c_1; +mock_class_2 c_2; +mock_class_3 c_3; +mock_class_4 c_4; +mock_class_5 c_5; +mock_class_6 c_6; +mock_class_7 c_7; +mock_class_8 c_8; +mock_class_9 c_9; +mock_class_10 c_10; +mock_class_11 c_11; +mock_class_12 c_12; +mock_class_13 c_13; +mock_class_14 c_14; +mock_class_15 c_15; +mock_class_16 c_16; +mock_class_17 c_17; +mock_class_18 c_18; +mock_class_19 c_19; +mock_class_20 c_20; +mock_class_21 c_21; +mock_class_22 c_22; +mock_class_23 c_23; +mock_class_24 c_24; +mock_class_25 c_25; +mock_class_26 c_26; +mock_class_27 c_27; +mock_class_28 c_28; +mock_class_29 c_29; +mock_class_30 c_30; +} // namespace int main() { diff --git a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp index c9c4be2..b137336 100644 --- a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp @@ -9,1069 +9,1068 @@ #define MOCK_MAX_ARGS 30 #include #ifdef _MSC_VER -#pragma warning( disable: 4505 ) +# pragma warning(disable : 4505) #endif -namespace +namespace { +class base_class { - class base_class - { - public: - virtual ~base_class() = default; - virtual void f1( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f2( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f3( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f4( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f5( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f6( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f7( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f8( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f9( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f10( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f11( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f12( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f13( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f14( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f15( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f16( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f17( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f18( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f19( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f20( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f21( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f22( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f23( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f24( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f25( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f26( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f27( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f28( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f29( int, int, int, int, int, int, int, int, int ) = 0; - virtual void f30( int, int, int, int, int, int, int, int, int ) = 0; - }; +public: + virtual ~base_class() = default; + virtual void f1(int, int, int, int, int, int, int, int, int) = 0; + virtual void f2(int, int, int, int, int, int, int, int, int) = 0; + virtual void f3(int, int, int, int, int, int, int, int, int) = 0; + virtual void f4(int, int, int, int, int, int, int, int, int) = 0; + virtual void f5(int, int, int, int, int, int, int, int, int) = 0; + virtual void f6(int, int, int, int, int, int, int, int, int) = 0; + virtual void f7(int, int, int, int, int, int, int, int, int) = 0; + virtual void f8(int, int, int, int, int, int, int, int, int) = 0; + virtual void f9(int, int, int, int, int, int, int, int, int) = 0; + virtual void f10(int, int, int, int, int, int, int, int, int) = 0; + virtual void f11(int, int, int, int, int, int, int, int, int) = 0; + virtual void f12(int, int, int, int, int, int, int, int, int) = 0; + virtual void f13(int, int, int, int, int, int, int, int, int) = 0; + virtual void f14(int, int, int, int, int, int, int, int, int) = 0; + virtual void f15(int, int, int, int, int, int, int, int, int) = 0; + virtual void f16(int, int, int, int, int, int, int, int, int) = 0; + virtual void f17(int, int, int, int, int, int, int, int, int) = 0; + virtual void f18(int, int, int, int, int, int, int, int, int) = 0; + virtual void f19(int, int, int, int, int, int, int, int, int) = 0; + virtual void f20(int, int, int, int, int, int, int, int, int) = 0; + virtual void f21(int, int, int, int, int, int, int, int, int) = 0; + virtual void f22(int, int, int, int, int, int, int, int, int) = 0; + virtual void f23(int, int, int, int, int, int, int, int, int) = 0; + virtual void f24(int, int, int, int, int, int, int, int, int) = 0; + virtual void f25(int, int, int, int, int, int, int, int, int) = 0; + virtual void f26(int, int, int, int, int, int, int, int, int) = 0; + virtual void f27(int, int, int, int, int, int, int, int, int) = 0; + virtual void f28(int, int, int, int, int, int, int, int, int) = 0; + virtual void f29(int, int, int, int, int, int, int, int, int) = 0; + virtual void f30(int, int, int, int, int, int, int, int, int) = 0; +}; - MOCK_BASE_CLASS( mock_class_1, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_2, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_3, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_4, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_5, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_6, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_7, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_8, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_9, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_10, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_11, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_12, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_13, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_14, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_15, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_16, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_17, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_18, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_19, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_20, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_21, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_22, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_23, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_24, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_25, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_26, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_27, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_28, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_29, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; - MOCK_BASE_CLASS( mock_class_30, base_class ) - { - MOCK_METHOD( f1, 9 ) - MOCK_METHOD( f2, 9 ) - MOCK_METHOD( f3, 9 ) - MOCK_METHOD( f4, 9 ) - MOCK_METHOD( f5, 9 ) - MOCK_METHOD( f6, 9 ) - MOCK_METHOD( f7, 9 ) - MOCK_METHOD( f8, 9 ) - MOCK_METHOD( f9, 9 ) - MOCK_METHOD( f10, 9 ) - MOCK_METHOD( f11, 9 ) - MOCK_METHOD( f12, 9 ) - MOCK_METHOD( f13, 9 ) - MOCK_METHOD( f14, 9 ) - MOCK_METHOD( f15, 9 ) - MOCK_METHOD( f16, 9 ) - MOCK_METHOD( f17, 9 ) - MOCK_METHOD( f18, 9 ) - MOCK_METHOD( f19, 9 ) - MOCK_METHOD( f20, 9 ) - MOCK_METHOD( f21, 9 ) - MOCK_METHOD( f22, 9 ) - MOCK_METHOD( f23, 9 ) - MOCK_METHOD( f24, 9 ) - MOCK_METHOD( f25, 9 ) - MOCK_METHOD( f26, 9 ) - MOCK_METHOD( f27, 9 ) - MOCK_METHOD( f28, 9 ) - MOCK_METHOD( f29, 9 ) - MOCK_METHOD( f30, 9 ) - }; +MOCK_BASE_CLASS(mock_class_1, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_2, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_3, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_4, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_5, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_6, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_7, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_8, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_9, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_10, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_11, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_12, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_13, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_14, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_15, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_16, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_17, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_18, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_19, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_20, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_21, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_22, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_23, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_24, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_25, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_26, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_27, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_28, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_29, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; +MOCK_BASE_CLASS(mock_class_30, base_class) +{ + MOCK_METHOD(f1, 9) + MOCK_METHOD(f2, 9) + MOCK_METHOD(f3, 9) + MOCK_METHOD(f4, 9) + MOCK_METHOD(f5, 9) + MOCK_METHOD(f6, 9) + MOCK_METHOD(f7, 9) + MOCK_METHOD(f8, 9) + MOCK_METHOD(f9, 9) + MOCK_METHOD(f10, 9) + MOCK_METHOD(f11, 9) + MOCK_METHOD(f12, 9) + MOCK_METHOD(f13, 9) + MOCK_METHOD(f14, 9) + MOCK_METHOD(f15, 9) + MOCK_METHOD(f16, 9) + MOCK_METHOD(f17, 9) + MOCK_METHOD(f18, 9) + MOCK_METHOD(f19, 9) + MOCK_METHOD(f20, 9) + MOCK_METHOD(f21, 9) + MOCK_METHOD(f22, 9) + MOCK_METHOD(f23, 9) + MOCK_METHOD(f24, 9) + MOCK_METHOD(f25, 9) + MOCK_METHOD(f26, 9) + MOCK_METHOD(f27, 9) + MOCK_METHOD(f28, 9) + MOCK_METHOD(f29, 9) + MOCK_METHOD(f30, 9) +}; - mock_class_1 c_1; - mock_class_2 c_2; - mock_class_3 c_3; - mock_class_4 c_4; - mock_class_5 c_5; - mock_class_6 c_6; - mock_class_7 c_7; - mock_class_8 c_8; - mock_class_9 c_9; - mock_class_10 c_10; - mock_class_11 c_11; - mock_class_12 c_12; - mock_class_13 c_13; - mock_class_14 c_14; - mock_class_15 c_15; - mock_class_16 c_16; - mock_class_17 c_17; - mock_class_18 c_18; - mock_class_19 c_19; - mock_class_20 c_20; - mock_class_21 c_21; - mock_class_22 c_22; - mock_class_23 c_23; - mock_class_24 c_24; - mock_class_25 c_25; - mock_class_26 c_26; - mock_class_27 c_27; - mock_class_28 c_28; - mock_class_29 c_29; - mock_class_30 c_30; -} +mock_class_1 c_1; +mock_class_2 c_2; +mock_class_3 c_3; +mock_class_4 c_4; +mock_class_5 c_5; +mock_class_6 c_6; +mock_class_7 c_7; +mock_class_8 c_8; +mock_class_9 c_9; +mock_class_10 c_10; +mock_class_11 c_11; +mock_class_12 c_12; +mock_class_13 c_13; +mock_class_14 c_14; +mock_class_15 c_15; +mock_class_16 c_16; +mock_class_17 c_17; +mock_class_18 c_18; +mock_class_19 c_19; +mock_class_20 c_20; +mock_class_21 c_21; +mock_class_22 c_22; +mock_class_23 c_23; +mock_class_24 c_24; +mock_class_25 c_25; +mock_class_26 c_26; +mock_class_27 c_27; +mock_class_28 c_28; +mock_class_29 c_29; +mock_class_30 c_30; +} // namespace int main() { diff --git a/test/defined.hpp b/test/defined.hpp index e0587f6..8ea5946 100644 --- a/test/defined.hpp +++ b/test/defined.hpp @@ -10,11 +10,11 @@ #define MOCK_TEST_DEFINED_HPP_INCLUDED #ifdef BOOST_AUTO_TEST_MAIN -#undef BOOST_AUTO_TEST_MAIN +# undef BOOST_AUTO_TEST_MAIN #endif #include -MOCK_FUNCTION( f, 0, void(), f ) +MOCK_FUNCTION(f, 0, void(), f) #endif // MOCK_TEST_DEFINED_HPP_INCLUDED diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index a946fc9..f26176f 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -8,8 +8,8 @@ #include "../mock_error.hpp" #include "../undefined.hpp" -#include #include +#include #include #include #include @@ -17,334 +17,339 @@ // static -namespace -{ - std::function< void() > static_f; +namespace { +std::function static_f; - static_assert( std::is_same< void, decltype( mock::detail::function< void() >{}() ) >::value, "!"); - static_assert( std::is_same< int, decltype( mock::detail::function< int() >{}() ) >::value, "!"); - static_assert( std::is_same< void, decltype( mock::detail::function< void( float ) >{}( std::declval() ) ) >::value, "!"); - static_assert( std::is_same< int, decltype( mock::detail::function< int( float ) >{}( std::declval() ) ) >::value, "!"); -} +static_assert(std::is_same{}())>::value, "!"); +static_assert(std::is_same{}())>::value, "!"); +static_assert(std::is_same{}(std::declval()))>::value, "!"); +static_assert(std::is_same{}(std::declval()))>::value, "!"); +} // namespace // functor -BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(a_function_can_be_passed_as_functor, mock_error_fixture) { - mock::detail::function< void() > f; - std::function< void() > functor = f; + mock::detail::function f; + std::function functor = f; } -BOOST_FIXTURE_TEST_CASE( a_function_can_be_passed_as_functor_using_std_bind_and_std_ref, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(a_function_can_be_passed_as_functor_using_std_bind_and_std_ref, mock_error_fixture) { - mock::detail::function< void() > f; - std::function< void() > functor = std::bind( std::ref( f ) ); + mock::detail::function f; + std::function functor = std::bind(std::ref(f)); } // invocations -BOOST_FIXTURE_TEST_CASE( triggering_an_unconfigured_function_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_unconfigured_function_calls_unexpected_call_error, mock_error_fixture) { { - mock::detail::function< void() > f; - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); + mock::detail::function f; + CHECK_ERROR(f(), "unexpected call", 0, "?()"); } { - mock::detail::function< int( int, const std::string& ) > f; - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); + mock::detail::function f; + CHECK_ERROR(f(1, "s"), "unexpected call", 0, "?( 1, \"s\" )"); } } -BOOST_FIXTURE_TEST_CASE( triggering_a_never_expectation_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_a_never_expectation_calls_unexpected_call_error, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().never(); - CHECK_ERROR( f(), "unexpected call", 0, "?()\nv never()" ); + CHECK_ERROR(f(), "unexpected call", 0, "?()\nv never()"); } { - mock::detail::function< int( int, const std::string& ) > f; + mock::detail::function f; f.expect().never(); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )\nv never().with( any, any )" ); + CHECK_ERROR(f(1, "s"), "unexpected call", 0, "?( 1, \"s\" )\nv never().with( any, any )"); } } -BOOST_FIXTURE_TEST_CASE( triggering_an_unlimited_expectation_is_valid, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_unlimited_expectation_is_valid, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect(); f(); f(); - CHECK_CALLS( 2 ); + CHECK_CALLS(2); } { - mock::detail::function< void( int, std::string ) > f; + mock::detail::function f; f.expect(); - f( 1, "s1" ); - f( 2, "s2" ); - CHECK_CALLS( 2 ); + f(1, "s1"); + f(2, "s2"); + CHECK_CALLS(2); } { - mock::detail::function< void( int, const std::string& ) > f; + mock::detail::function f; f.expect(); - f( 1, "s1" ); - f( 2, "s2" ); - CHECK_CALLS( 2 ); + f(1, "s1"); + f(2, "s2"); + CHECK_CALLS(2); } } -BOOST_FIXTURE_TEST_CASE( triggering_several_once_expectations_is_valid, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_several_once_expectations_is_valid, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); f.expect().once(); f(); f(); - CHECK_CALLS( 2 ); + CHECK_CALLS(2); } { - mock::detail::function< void( int, std::string ) > f; - f.expect().once().with( 1, "s1" ); - f.expect().once().with( 2, "s2" ); - f( 1, "s1" ); - f( 2, "s2" ); - CHECK_CALLS( 2 ); + mock::detail::function f; + f.expect().once().with(1, "s1"); + f.expect().once().with(2, "s2"); + f(1, "s1"); + f(2, "s2"); + CHECK_CALLS(2); } { - mock::detail::function< void( int, const std::string& ) > f; - f.expect().once().with( 1, "s1" ); - f.expect().once().with( 2, "s2" ); - f( 1, "s1" ); - f( 2, "s2" ); - CHECK_CALLS( 2 ); + mock::detail::function f; + f.expect().once().with(1, "s1"); + f.expect().once().with(2, "s2"); + f(1, "s1"); + f(2, "s2"); + CHECK_CALLS(2); } } -BOOST_FIXTURE_TEST_CASE( triggering_a_once_expectation_calls_unexpected_call_error_after_one_call, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_a_once_expectation_calls_unexpected_call_error_after_one_call, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); f(); - CHECK_ERROR( f(), "unexpected call", 1, "?()\nv once()" ); + CHECK_ERROR(f(), "unexpected call", 1, "?()\nv once()"); } { - mock::detail::function< void( int, const std::string& ) > f; + mock::detail::function f; f.expect().once(); - f( 1, "s" ); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 1, "?( 1, \"s\" )\nv once().with( any, any )" ); + f(1, "s"); + CHECK_ERROR(f(1, "s"), "unexpected call", 1, "?( 1, \"s\" )\nv once().with( any, any )"); } } -BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_function_call_as_pointers, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(literal_zero_can_be_used_in_function_call_as_pointers, mock_error_fixture) { - mock::detail::function< void( int* ) > f; + mock::detail::function f; f.expect().once(); - f( 0 ); - CHECK_CALLS( 1 ); + f(0); + CHECK_CALLS(1); } // verify -BOOST_FIXTURE_TEST_CASE( verifying_an_unconfigured_function_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_an_unconfigured_function_succeeds, mock_error_fixture) { { - mock::detail::function< void() > f; - BOOST_CHECK( f.verify() ); + mock::detail::function f; + BOOST_CHECK(f.verify()); } { - mock::detail::function< int( int, const std::string& ) > f; - BOOST_CHECK( f.verify() ); + mock::detail::function f; + BOOST_CHECK(f.verify()); } } -BOOST_FIXTURE_TEST_CASE( verifying_an_unlimited_expectation_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_an_unlimited_expectation_succeeds, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 0 ); + BOOST_CHECK(f.verify()); + CHECK_CALLS(0); } { - mock::detail::function< int( int, const std::string& ) > f; + mock::detail::function f; f.expect(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 0 ); + BOOST_CHECK(f.verify()); + CHECK_CALLS(0); } } -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_one_call_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_a_once_expectation_after_one_call_succeeds, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); f(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); + BOOST_CHECK(f.verify()); + CHECK_CALLS(1); } { - mock::detail::function< void( int, const std::string& ) > f; + mock::detail::function f; f.expect().once(); - f( 1, "s" ); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); + f(1, "s"); + BOOST_CHECK(f.verify()); + CHECK_CALLS(1); } } -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_before_the_call_fails, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_a_once_expectation_before_the_call_fails, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!f.verify()), "verification failed", 0, "?\n. once()"); } { - mock::detail::function< int( int, const std::string& ) > f; + mock::detail::function f; f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once().with( any, any )" ); + CHECK_ERROR(BOOST_CHECK(!f.verify()), "verification failed", 0, "?\n. once().with( any, any )"); } } -BOOST_FIXTURE_TEST_CASE( verifying_a_once_expectation_after_a_verify_and_one_call_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_a_once_expectation_after_a_verify_and_one_call_succeeds, mock_error_fixture) { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); - CHECK_ERROR( BOOST_CHECK( ! f.verify() ), "verification failed", 0, "?\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!f.verify()), "verification failed", 0, "?\n. once()"); f(); - BOOST_CHECK( f.verify() ); - CHECK_CALLS( 1 ); + BOOST_CHECK(f.verify()); + CHECK_CALLS(1); } // reset -BOOST_FIXTURE_TEST_CASE( triggering_a_reset_function_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_a_reset_function_calls_unexpected_call_error, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect(); f.reset(); - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); + CHECK_ERROR(f(), "unexpected call", 0, "?()"); } { - mock::detail::function< int( int, const std::string& ) > f; + mock::detail::function f; f.expect(); f.reset(); - CHECK_ERROR( f( 1, "s" ), "unexpected call", 0, "?( 1, \"s\" )" ); + CHECK_ERROR(f(1, "s"), "unexpected call", 0, "?( 1, \"s\" )"); } } -BOOST_FIXTURE_TEST_CASE( verifying_a_reset_function_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_a_reset_function_succeeds, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect(); f.reset(); - BOOST_CHECK( f.verify() ); + BOOST_CHECK(f.verify()); } { - mock::detail::function< int( int, const std::string& ) > f; + mock::detail::function f; f.expect(); f.reset(); - BOOST_CHECK( f.verify() ); + BOOST_CHECK(f.verify()); } } // constraints -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_constraint_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( + triggering_an_expectation_with_wrong_parameter_value_in_equal_constraint_calls_unexpected_call_error, + mock_error_fixture) { { - mock::detail::function< void( int ) > f; - f.expect().with( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 0, "?( 43 )\n. unlimited().with( 42 )" ); + mock::detail::function f; + f.expect().with(42); + CHECK_ERROR(f(43), "unexpected call", 0, "?( 43 )\n. unlimited().with( 42 )"); } { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().with( 42, "expected" ); - CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( 42, \"expected\" )" ); + mock::detail::function f; + f.expect().with(42, "expected"); + CHECK_ERROR( + f(42, "actual"), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( 42, \"expected\" )"); } } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_or_less_constraint_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( + triggering_an_expectation_with_wrong_parameter_value_in_equal_or_less_constraint_calls_unexpected_call_error, + mock_error_fixture) { - mock::detail::function< void( int ) > f; - f.expect().with( mock::equal( 42 ) || mock::less( 42 ) ); - f( 41 ); - f( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 2, "?( 43 )\n. unlimited().with( ( equal( 42 ) || less( 42 ) ) )" ); + mock::detail::function f; + f.expect().with(mock::equal(42) || mock::less(42)); + f(41); + f(42); + CHECK_ERROR(f(43), "unexpected call", 2, "?( 43 )\n. unlimited().with( ( equal( 42 ) || less( 42 ) ) )"); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_wrong_parameter_value_in_equal_and_not_less_constraint_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( + triggering_an_expectation_with_wrong_parameter_value_in_equal_and_not_less_constraint_calls_unexpected_call_error, + mock_error_fixture) { - mock::detail::function< void( int ) > f; - f.expect().with( mock::equal( 42 ) && ! mock::less( 41 ) ); - f( 42 ); - CHECK_ERROR( f( 43 ), "unexpected call", 1, "?( 43 )\n. unlimited().with( ( equal( 42 ) && ! less( 41 ) ) )" ); + mock::detail::function f; + f.expect().with(mock::equal(42) && !mock::less(41)); + f(42); + CHECK_ERROR(f(43), "unexpected call", 1, "?( 43 )\n. unlimited().with( ( equal( 42 ) && ! less( 41 ) ) )"); } -namespace +namespace { +class my_interface { - class my_interface - { - public: - my_interface() = default; - my_interface(const my_interface&) = delete; - my_interface& operator=(const my_interface&) = delete; - virtual ~my_interface() = default; +public: + my_interface() = default; + my_interface(const my_interface&) = delete; + my_interface& operator=(const my_interface&) = delete; + virtual ~my_interface() = default; - private: - virtual void my_method() = 0; - }; - class my_implementation : public my_interface - { - virtual void my_method() {} - }; -} +private: + virtual void my_method() = 0; +}; +class my_implementation : public my_interface +{ + virtual void my_method() {} +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( passing_call_values_by_reference_is_transparent, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(passing_call_values_by_reference_is_transparent, mock_error_fixture) { { - mock::detail::function< void( my_interface& ) > f; + mock::detail::function f; my_implementation imp; - f.expect().with( mock::same( imp ) ); - f( imp ); - CHECK_CALLS( 1 ); + f.expect().with(mock::same(imp)); + f(imp); + CHECK_CALLS(1); } { - mock::detail::function< void( const my_interface& ) > f; + mock::detail::function f; my_implementation imp; - f.expect().with( mock::same( imp ) ); - f( imp ); - CHECK_CALLS( 1 ); + f.expect().with(mock::same(imp)); + f(imp); + CHECK_CALLS(1); } } -namespace +namespace { +bool custom_constraint(int) { - bool custom_constraint( int ) - { - return false; - } + return false; } +} // namespace -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_failing_custom_constraint_calls_unexpected_call_error, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_with_failing_custom_constraint_calls_unexpected_call_error, + mock_error_fixture) { { - mock::detail::function< void( int ) > f; - f.expect().with( &custom_constraint ); - CHECK_ERROR( f( 42 ), "unexpected call", 0, "?( 42 )\n. unlimited().with( ? )" ); + mock::detail::function f; + f.expect().with(&custom_constraint); + CHECK_ERROR(f(42), "unexpected call", 0, "?( 42 )\n. unlimited().with( ? )"); } { - mock::detail::function< int( int, const std::string& ) > f; - f.expect().with( &custom_constraint, "actual" ); - CHECK_ERROR( f( 42, "actual" ), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( ?, \"actual\" )" ); + mock::detail::function f; + f.expect().with(&custom_constraint, "actual"); + CHECK_ERROR(f(42, "actual"), "unexpected call", 0, "?( 42, \"actual\" )\n. unlimited().with( ?, \"actual\" )"); } } -//BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) +// BOOST_FIXTURE_TEST_CASE( literal_zero_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) //{ // mock::detail::function< void( int* ) > f; // f.expect().with( 0 ); @@ -352,513 +357,511 @@ BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_failing_custom_constrain // CHECK_CALLS( 1 ); //} -BOOST_FIXTURE_TEST_CASE( nullptr_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(nullptr_can_be_used_in_place_of_null_pointers_in_constraints, mock_error_fixture) { - mock::detail::function< void( int* ) > f; - f.expect().with( nullptr ); - f( 0 ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().with(nullptr); + f(0); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( unique_ptr_is_supported_as_parameter, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(unique_ptr_is_supported_as_parameter, mock_error_fixture) { - mock::detail::function< void( std::unique_ptr< int > ) > f; + mock::detail::function)> f; f.expect(); - std::unique_ptr< int > p( new int ); - f( std::move( p ) ); - CHECK_CALLS( 1 ); + std::unique_ptr p(new int); + f(std::move(p)); + CHECK_CALLS(1); } // result handling -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_with_no_return_set_calls_missing_action, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_with_no_return_set_calls_missing_action, mock_error_fixture) { { - mock::detail::function< int() > f; + mock::detail::function f; f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + CHECK_ERROR(f(), "missing action", 0, "?()\n. unlimited()"); } { - mock::detail::function< int&() > f; + mock::detail::function f; f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + CHECK_ERROR(f(), "missing action", 0, "?()\n. unlimited()"); } { - mock::detail::function< const std::string&() > f; + mock::detail::function f; f.expect(); - CHECK_ERROR( f(), "missing action", 0, "?()\n. unlimited()" ); + CHECK_ERROR(f(), "missing action", 0, "?()\n. unlimited()"); } } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_value, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_returns_the_set_value, mock_error_fixture) { { - mock::detail::function< int() > f; - f.expect().returns( 42 ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(42); + BOOST_CHECK_EQUAL(42, f()); + CHECK_CALLS(1); } { - mock::detail::function< int() > f; + mock::detail::function f; const int i = 42; - f.expect().returns( i ); - BOOST_CHECK_EQUAL( i, f() ); - CHECK_CALLS( 1 ); + f.expect().returns(i); + BOOST_CHECK_EQUAL(i, f()); + CHECK_CALLS(1); } { - mock::detail::function< int() > f; + mock::detail::function f; int i = 42; - f.expect().returns( std::ref( i ) ); + f.expect().returns(std::ref(i)); i = 43; - BOOST_CHECK_EQUAL( 43, f() ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(43, f()); + CHECK_CALLS(1); } { - mock::detail::function< int&() > f; - f.expect().returns( 42 ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(42); + BOOST_CHECK_EQUAL(42, f()); + CHECK_CALLS(1); } { - mock::detail::function< int&() > f; + mock::detail::function f; const int result = 42; - f.expect().returns( result ); - BOOST_CHECK_EQUAL( result, f() ); - CHECK_CALLS( 1 ); + f.expect().returns(result); + BOOST_CHECK_EQUAL(result, f()); + CHECK_CALLS(1); } { - mock::detail::function< int&() > f; + mock::detail::function f; int i = 42; - f.expect().returns( i ); + f.expect().returns(i); i = 43; - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(42, f()); + CHECK_CALLS(1); } { - mock::detail::function< int&() > f; + mock::detail::function f; int i = 42; - f.expect().returns( std::ref( i ) ); + f.expect().returns(std::ref(i)); i = 43; - BOOST_CHECK_EQUAL( 43, f() ); - BOOST_CHECK_EQUAL( 12, f() = 12 ); - BOOST_CHECK_EQUAL( 12, i ); - CHECK_CALLS( 2 ); + BOOST_CHECK_EQUAL(43, f()); + BOOST_CHECK_EQUAL(12, f() = 12); + BOOST_CHECK_EQUAL(12, i); + CHECK_CALLS(2); } { - mock::detail::function< std::string() > f; - f.expect().returns( "result" ); - BOOST_CHECK_EQUAL( "result", f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns("result"); + BOOST_CHECK_EQUAL("result", f()); + CHECK_CALLS(1); } { - mock::detail::function< const std::string&() > f; - f.expect().returns( "result" ); - BOOST_CHECK_EQUAL( "result", f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns("result"); + BOOST_CHECK_EQUAL("result", f()); + CHECK_CALLS(1); } { - mock::detail::function< int*() > f; - f.expect().returns( 0 ); - BOOST_CHECK( ! f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(0); + BOOST_CHECK(!f()); + CHECK_CALLS(1); } #ifdef BOOST_MSVC // this produces a warning with gcc { - mock::detail::function< int* const() > f; + mock::detail::function f; int i = 0; - f.expect().returns( &i ); - BOOST_CHECK_EQUAL( &i, f() ); - CHECK_CALLS( 1 ); + f.expect().returns(&i); + BOOST_CHECK_EQUAL(&i, f()); + CHECK_CALLS(1); } #endif { - mock::detail::function< int() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0, f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(0); + BOOST_CHECK_EQUAL(0, f()); + CHECK_CALLS(1); } { - mock::detail::function< int&() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0, f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(0); + BOOST_CHECK_EQUAL(0, f()); + CHECK_CALLS(1); } { - mock::detail::function< unsigned int() > f; - f.expect().returns( 0 ); - BOOST_CHECK_EQUAL( 0u, f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().returns(0); + BOOST_CHECK_EQUAL(0u, f()); + CHECK_CALLS(1); } } -namespace +namespace { +struct base { - struct base - { - virtual ~base() = default; - virtual void f() = 0; - }; - struct derived : base - { - virtual void f() - {} - }; -} + virtual ~base() = default; + virtual void f() = 0; +}; +struct derived : base +{ + virtual void f() {} +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_moves_the_set_lvalue, mock_error_fixture) { - mock::detail::function< int() > f; + mock::detail::function f; int i = 3; - f.expect().moves( i ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + f.expect().moves(i); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_const_lvalue, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_moves_the_set_const_lvalue, mock_error_fixture) { - mock::detail::function< int() > f; + mock::detail::function f; const int i = 3; - f.expect().moves( i ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + f.expect().moves(i); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_rvalue, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_moves_the_set_rvalue, mock_error_fixture) { - mock::detail::function< int() > f; - f.expect().moves( 3 ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function f; + f.expect().moves(3); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_moves_the_set_unique_ptr_lvalue, mock_error_fixture) { - mock::detail::function< std::unique_ptr< int >() > f; - std::unique_ptr< int > p( new int ); - f.expect().moves( std::move( p ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function()> f; + std::unique_ptr p(new int); + f.expect().moves(std::move(p)); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_moves_the_set_unique_ptr_rvalue, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_moves_the_set_unique_ptr_rvalue, mock_error_fixture) { { - mock::detail::function< std::unique_ptr< int >() > f; - f.expect().moves( std::unique_ptr< int >( new int ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function()> f; + f.expect().moves(std::unique_ptr(new int)); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_returns_the_set_shared_ptr_value, mock_error_fixture) { { - mock::detail::function< std::shared_ptr< base >() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function()> f; + f.expect().returns(new derived); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } { - mock::detail::function< const std::shared_ptr< base >&() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function&()> f; + f.expect().returns(new derived); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } { - mock::detail::function< std::shared_ptr< base >&() > f; - f.expect().returns( new derived ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + mock::detail::function&()> f; + f.expect().returns(new derived); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_returns_by_reference, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_returns_by_reference, mock_error_fixture) { { - mock::detail::function< base&() > f; + mock::detail::function f; derived b; - f.expect().returns( std::ref( b ) ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + f.expect().returns(std::ref(b)); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } { - mock::detail::function< base&() > f; + mock::detail::function f; derived b; - f.expect().returns( b ); - BOOST_CHECK_NO_THROW( f() ); - CHECK_CALLS( 1 ); + f.expect().returns(b); + BOOST_CHECK_NO_THROW(f()); + CHECK_CALLS(1); } { - mock::detail::function< undefined&() > f; - f.expect().returns( std::ref( get_undefined() ) ); + mock::detail::function f; + f.expect().returns(std::ref(get_undefined())); f.reset(); } } -namespace +namespace { +int custom_result() { - int custom_result() - { - return 42; - } + return 42; +} +} // namespace + +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_calls_the_custom_functor, mock_error_fixture) +{ + mock::detail::function f; + f.expect().calls(&custom_result); + BOOST_CHECK_EQUAL(42, f()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor, mock_error_fixture ) +namespace { +int custom_result_with_parameter(int i) { - mock::detail::function< int() > f; - f.expect().calls( &custom_result ); - BOOST_CHECK_EQUAL( 42, f() ); - CHECK_CALLS( 1 ); + return i; +} +} // namespace + +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_calls_the_custom_functor_with_parameters, mock_error_fixture) +{ + mock::detail::function f; + f.expect().calls(&custom_result_with_parameter); + BOOST_CHECK_EQUAL(42, f(42)); + CHECK_CALLS(1); } -namespace +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_std_bind, + mock_error_fixture) { - int custom_result_with_parameter( int i ) - { - return i; - } + mock::detail::function f; + f.expect().calls(std::bind(&custom_result)); + BOOST_CHECK_EQUAL(42, f(17)); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_with_parameters, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_an_expectation_throws_the_set_exception, mock_error_fixture) { - mock::detail::function< int( int ) > f; - f.expect().calls( &custom_result_with_parameter ); - BOOST_CHECK_EQUAL( 42, f( 42 ) ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_calls_the_custom_functor_without_parameters_thanks_to_std_bind, mock_error_fixture ) -{ - mock::detail::function< int( int ) > f; - f.expect().calls( std::bind( &custom_result ) ); - BOOST_CHECK_EQUAL( 42, f( 17 ) ); - CHECK_CALLS( 1 ); -} - -BOOST_FIXTURE_TEST_CASE( triggering_an_expectation_throws_the_set_exception, mock_error_fixture ) -{ - mock::detail::function< int() > f; - f.expect().throws( std::runtime_error( "some exception" ) ); + mock::detail::function f; + f.expect().throws(std::runtime_error("some exception")); try { f(); - } - catch( std::runtime_error& f ) + } catch(std::runtime_error& f) { - BOOST_CHECK_EQUAL( "some exception", f.what() ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL("some exception", f.what()); + CHECK_CALLS(1); return; } - BOOST_FAIL( "should have thrown" ); + BOOST_FAIL("should have thrown"); } // multiple expectations -BOOST_FIXTURE_TEST_CASE( expecting_twice_a_single_expectation_makes_it_callable_twice, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(expecting_twice_a_single_expectation_makes_it_callable_twice, mock_error_fixture) { { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); f.expect().once(); f(); f(); - CHECK_ERROR( f(), "unexpected call", 2, "?()\nv once()\nv once()" ); + CHECK_ERROR(f(), "unexpected call", 2, "?()\nv once()\nv once()"); } { - mock::detail::function< void( const std::string& ) > f; - f.expect().once().with( "first" ); - f.expect().once().with( "second" ); - f( "first" ); - f( "second" ); - CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); + mock::detail::function f; + f.expect().once().with("first"); + f.expect().once().with("second"); + f("first"); + f("second"); + CHECK_ERROR( + f("third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )"); } } -BOOST_FIXTURE_TEST_CASE( best_expectation_is_selected_first, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(best_expectation_is_selected_first, mock_error_fixture) { { - mock::detail::function< void( int ) > f; - f.expect().once().with( 1 ); - f.expect().once().with( 2 ); - f( 2 ); - f( 1 ); - CHECK_ERROR( f( 3 ), "unexpected call", 2, "?( 3 )\nv once().with( 1 )\nv once().with( 2 )" ); + mock::detail::function f; + f.expect().once().with(1); + f.expect().once().with(2); + f(2); + f(1); + CHECK_ERROR(f(3), "unexpected call", 2, "?( 3 )\nv once().with( 1 )\nv once().with( 2 )"); } { - mock::detail::function< void( const std::string& ) > f; - f.expect().once().with( "first" ); - f.expect().once().with( "second" ); - f( "second" ); - f( "first" ); - CHECK_ERROR( f( "third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )" ); + mock::detail::function f; + f.expect().once().with("first"); + f.expect().once().with("second"); + f("second"); + f("first"); + CHECK_ERROR( + f("third"), "unexpected call", 2, "?( \"third\" )\nv once().with( \"first\" )\nv once().with( \"second\" )"); } } // error report -namespace +namespace { +template +std::string to_string(const T& t) { - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << t; - return s.str(); - } + std::stringstream s; + s << t; + return s.str(); } +} // namespace -BOOST_FIXTURE_TEST_CASE( expectation_can_be_serialized_to_be_human_readable, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(expectation_can_be_serialized_to_be_human_readable, mock_error_fixture) { { - mock::detail::function< void( int ) > f; - f.expect().once().with( 1 ); - f.expect().once().with( 2 ); - BOOST_CHECK_NO_THROW( f( 2 ) ); + mock::detail::function f; + f.expect().once().with(1); + f.expect().once().with(2); + BOOST_CHECK_NO_THROW(f(2)); const std::string expected = "?\n" ". once().with( 1 )\n" "v once().with( 2 )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(expected, to_string(f)); + CHECK_CALLS(1); f.reset(); } { - mock::detail::function< void( int ) > f; - f.expect().never().with( 1 ); + mock::detail::function f; + f.expect().never().with(1); const std::string expected = "?\n" "v never().with( 1 )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); f.reset(); } { - mock::detail::function< void( const std::string& ) > f; - f.expect().never().with( mock::less( "first" ) ); - f.expect().exactly( 2 ).with( "second" ); - BOOST_CHECK_NO_THROW( f( "second" ) ); + mock::detail::function f; + f.expect().never().with(mock::less("first")); + f.expect().exactly(2).with("second"); + BOOST_CHECK_NO_THROW(f("second")); { const std::string expected = "?\n" "v never().with( less( \"first\" ) )\n" ". exactly( 1/2 ).with( \"second\" )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); } - BOOST_CHECK_NO_THROW( f( "second" ) ); + BOOST_CHECK_NO_THROW(f("second")); { const std::string expected = "?\n" "v never().with( less( \"first\" ) )\n" "v exactly( 2/2 ).with( \"second\" )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); - CHECK_CALLS( 2 ); + BOOST_CHECK_EQUAL(expected, to_string(f)); + CHECK_CALLS(2); } f.reset(); } { - mock::detail::function< void( int ) > f; + mock::detail::function f; f.expect().once(); const std::string expected = "?\n" ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); f.reset(); } { - mock::detail::function< void( int ) > f; - f.expect().once().with( mock::any ); + mock::detail::function f; + f.expect().once().with(mock::any); const std::string expected = "?\n" ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); f.reset(); } { - mock::detail::function< void( int ) > f; + mock::detail::function f; f.expect().once(); const std::string expected = "?\n" ". once().with( any )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); f.reset(); } { - mock::detail::function< void( int ) > f; - f.expect().once().with( &custom_constraint ); + mock::detail::function f; + f.expect().once().with(&custom_constraint); const std::string expected = "?\n" ". once().with( ? )"; - BOOST_CHECK_EQUAL( expected, to_string( f ) ); + BOOST_CHECK_EQUAL(expected, to_string(f)); f.reset(); } } -BOOST_FIXTURE_TEST_CASE( expectation_with_remaining_untriggered_matches_upon_destruction_calls_untriggered_expectation, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(expectation_with_remaining_untriggered_matches_upon_destruction_calls_untriggered_expectation, + mock_error_fixture) { - auto f = std::make_unique>(); + auto f = std::make_unique>(); f->expect().once(); - CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); + CHECK_ERROR(f.reset(), "untriggered expectation", 0, "?\n. once()"); } -BOOST_FIXTURE_TEST_CASE( verifying_expectation_with_remaining_matches_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE( + verifying_expectation_with_remaining_matches_disables_the_automatic_verification_upon_destruction, + mock_error_fixture) { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); - CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); + CHECK_ERROR(f.verify(), "verification failed", 0, "?\n. once()"); } -BOOST_FIXTURE_TEST_CASE( triggering_unexpected_call_call_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(triggering_unexpected_call_call_disables_the_automatic_verification_upon_destruction, + mock_error_fixture) { - mock::detail::function< void() > f; - CHECK_ERROR( f(), "unexpected call", 0, "?()" ); + mock::detail::function f; + CHECK_ERROR(f(), "unexpected call", 0, "?()"); } -BOOST_FIXTURE_TEST_CASE( adding_an_expectation_reactivates_the_verification_upon_destruction, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(adding_an_expectation_reactivates_the_verification_upon_destruction, mock_error_fixture) { - auto f = std::make_unique>(); - CHECK_ERROR( (*f)(), "unexpected call", 0, "?()" ); + auto f = std::make_unique>(); + CHECK_ERROR((*f)(), "unexpected call", 0, "?()"); f->expect().once(); - CHECK_ERROR( f.reset(), "untriggered expectation", 0, "?\n. once()" ); + CHECK_ERROR(f.reset(), "untriggered expectation", 0, "?\n. once()"); } -BOOST_FIXTURE_TEST_CASE( throwing_an_exception_disables_the_automatic_verification_upon_destruction, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(throwing_an_exception_disables_the_automatic_verification_upon_destruction, mock_error_fixture) { try { - mock::detail::function< void() > f; + mock::detail::function f; f.expect().once(); throw std::exception(); - } - catch( std::exception& ) + } catch(std::exception&) {} } -BOOST_FIXTURE_TEST_CASE( adding_file_and_line_number_information, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(adding_file_and_line_number_information, mock_error_fixture) { - mock::detail::function< void() > f; - f.expect( "file name", 42 ).once(); - CHECK_ERROR( f.verify(), "verification failed", 0, "?\n. once()" ); - BOOST_CHECK_EQUAL( "file name", mock_error_data.last_file ); - BOOST_CHECK_EQUAL( 42, mock_error_data.last_line ); + mock::detail::function f; + f.expect("file name", 42).once(); + CHECK_ERROR(f.verify(), "verification failed", 0, "?\n. once()"); + BOOST_CHECK_EQUAL("file name", mock_error_data.last_file); + BOOST_CHECK_EQUAL(42, mock_error_data.last_line); } #ifdef MOCK_THREAD_SAFE -#include +# include -namespace +namespace { +void iterate(mock::detail::function& f) { - void iterate( mock::detail::function< int() >& f ) + f.expect().once().returns(0); + try { - f.expect().once().returns( 0 ); - try - { - f(); - } - catch( ... ) - {} - } + f(); + } catch(...) + {} } +} // namespace -BOOST_FIXTURE_TEST_CASE( function_is_thread_safe, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(function_is_thread_safe, mock_error_fixture) { - mock::detail::function< int() > f; + mock::detail::function f; boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( [&f](){ iterate(f); } ); + for(int i = 0; i < 100; ++i) + group.create_thread([&f]() { iterate(f); }); group.join_all(); - CHECK_CALLS( 100 ); + CHECK_CALLS(100); } #endif // MOCK_THREAD_SAFE diff --git a/test/detail/test_invocation.cpp b/test/detail/test_invocation.cpp index 93ed575..be9957e 100644 --- a/test/detail/test_invocation.cpp +++ b/test/detail/test_invocation.cpp @@ -9,68 +9,68 @@ #include #include -BOOST_AUTO_TEST_CASE( unlimited ) +BOOST_AUTO_TEST_CASE(unlimited) { mock::detail::unlimited invocation; - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); } -BOOST_AUTO_TEST_CASE( once ) +BOOST_AUTO_TEST_CASE(once) { mock::detail::once invocation; - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); + BOOST_CHECK(!invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(invocation.exhausted()); + BOOST_CHECK(!invocation.invoke()); } -BOOST_AUTO_TEST_CASE( never ) +BOOST_AUTO_TEST_CASE(never) { mock::detail::never invocation; - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(invocation.exhausted()); + BOOST_CHECK(!invocation.invoke()); } -BOOST_AUTO_TEST_CASE( at_most ) +BOOST_AUTO_TEST_CASE(at_most) { - mock::detail::at_most invocation( 1 ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); + mock::detail::at_most invocation(1); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(invocation.exhausted()); + BOOST_CHECK(!invocation.invoke()); } -BOOST_AUTO_TEST_CASE( at_least ) +BOOST_AUTO_TEST_CASE(at_least) { - mock::detail::at_least invocation( 1 ); - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); + mock::detail::at_least invocation(1); + BOOST_CHECK(!invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); } -BOOST_AUTO_TEST_CASE( between ) +BOOST_AUTO_TEST_CASE(between) { - mock::detail::between invocation( 1, 2 ); - BOOST_CHECK( ! invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( ! invocation.exhausted() ); - BOOST_CHECK( invocation.invoke() ); - BOOST_CHECK( invocation.verify() ); - BOOST_CHECK( invocation.exhausted() ); - BOOST_CHECK( ! invocation.invoke() ); + mock::detail::between invocation(1, 2); + BOOST_CHECK(!invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(!invocation.exhausted()); + BOOST_CHECK(invocation.invoke()); + BOOST_CHECK(invocation.verify()); + BOOST_CHECK(invocation.exhausted()); + BOOST_CHECK(!invocation.invoke()); } diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 0b58b13..1a50e29 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -9,110 +9,115 @@ #include #include #ifdef BOOST_MSVC -#pragma warning( push, 0 ) +# pragma warning(push, 0) #endif #include #include #ifdef BOOST_MSVC -#pragma warning( pop ) +# pragma warning(pop) #endif -#include #include #include +#include #include #include -namespace +namespace { +struct declared_but_not_defined; +static_assert(!mock::detail::is_functor::value, "Should not be a functor"); + +template +void is_functor(T) { - struct declared_but_not_defined; - static_assert( !mock::detail::is_functor< declared_but_not_defined, int >::value, "Should not be a functor" ); - - template< typename T > - void is_functor( T ) - { - static_assert( mock::detail::is_functor< T, int >::value, "Should be a functor taking an int"); - } - template< typename T > - void is_not_functor( T ) - { - static_assert( !mock::detail::is_functor< T, int >::value, "Should not be a functor taking an int" ); - } - - void f0() {} - bool f1( int ) { return false; } - bool f2( std::string, int ) { return false; } + static_assert(mock::detail::is_functor::value, "Should be a functor taking an int"); +} +template +void is_not_functor(T) +{ + static_assert(!mock::detail::is_functor::value, "Should not be a functor taking an int"); } -BOOST_AUTO_TEST_CASE( data_is_not_functor ) +void f0() {} +bool f1(int) { - is_not_functor( 42 ); + return false; +} +bool f2(std::string, int) +{ + return false; +} +} // namespace + +BOOST_AUTO_TEST_CASE(data_is_not_functor) +{ + is_not_functor(42); } -BOOST_AUTO_TEST_CASE( function_is_functor ) +BOOST_AUTO_TEST_CASE(function_is_functor) { - is_not_functor( f0 ); - is_functor( f1 ); - is_not_functor( f2 ); + is_not_functor(f0); + is_functor(f1); + is_not_functor(f2); } -BOOST_AUTO_TEST_CASE( function_pointer_is_functor ) +BOOST_AUTO_TEST_CASE(function_pointer_is_functor) { - is_not_functor( &f0 ); - is_functor( &f1 ); - is_not_functor( &f2 ); + is_not_functor(&f0); + is_functor(&f1); + is_not_functor(&f2); } -BOOST_AUTO_TEST_CASE( std_ptr_fun_is_functor ) +BOOST_AUTO_TEST_CASE(std_ptr_fun_is_functor) { - is_functor( std::ptr_fun( &f1 ) ); - is_not_functor( std::ptr_fun( &f2 ) ); + is_functor(std::ptr_fun(&f1)); + is_not_functor(std::ptr_fun(&f2)); } -BOOST_AUTO_TEST_CASE( std_bind_first_is_functor ) +BOOST_AUTO_TEST_CASE(std_bind_first_is_functor) { - is_functor( std::bind1st( std::ptr_fun( &f2 ), "" ) ); + is_functor(std::bind1st(std::ptr_fun(&f2), "")); } -BOOST_AUTO_TEST_CASE( bind_is_functor ) +BOOST_AUTO_TEST_CASE(bind_is_functor) { { #if BOOST_VERSION >= 106000 using namespace boost::placeholders; #endif - is_functor( boost::bind( &f0 ) ); - is_functor( boost::bind( &f1, _1 ) ); - is_functor( boost::bind( &f2, "", _1 ) ); + is_functor(boost::bind(&f0)); + is_functor(boost::bind(&f1, _1)); + is_functor(boost::bind(&f2, "", _1)); } - is_functor( std::bind( &f0 ) ); - is_functor( std::bind( &f1, std::placeholders::_1 ) ); - is_functor( std::bind( &f2, "", std::placeholders::_1 ) ); + is_functor(std::bind(&f0)); + is_functor(std::bind(&f1, std::placeholders::_1)); + is_functor(std::bind(&f2, "", std::placeholders::_1)); } -BOOST_AUTO_TEST_CASE( boost_lambda_is_functor ) +BOOST_AUTO_TEST_CASE(boost_lambda_is_functor) { - is_functor( boost::lambda::_1 < 42 ); + is_functor(boost::lambda::_1 < 42); } -BOOST_AUTO_TEST_CASE( boost_phoenix_is_functor ) +BOOST_AUTO_TEST_CASE(boost_phoenix_is_functor) { - is_functor( boost::phoenix::arg_names::arg1 < 42 ); - is_functor( boost::phoenix::arg_names::_1 < 42 ); + is_functor(boost::phoenix::arg_names::arg1 < 42); + is_functor(boost::phoenix::arg_names::_1 < 42); } -BOOST_AUTO_TEST_CASE( boost_function_is_functor ) +BOOST_AUTO_TEST_CASE(boost_function_is_functor) { - is_functor( boost::function< void(int) >() ); + is_functor(boost::function()); } -BOOST_AUTO_TEST_CASE( std_function_is_functor ) +BOOST_AUTO_TEST_CASE(std_function_is_functor) { - is_functor( std::function< void(int) >() ); + is_functor(std::function()); } -BOOST_AUTO_TEST_CASE( cxx11_lambda_is_functor ) +BOOST_AUTO_TEST_CASE(cxx11_lambda_is_functor) { - is_not_functor( []() {} ); - is_functor( []( int ) {} ); - is_not_functor( []( const std::string&, int ) {} ); - is_not_functor( []( int, const std::string& ) {} ); + is_not_functor([]() {}); + is_functor([](int) {}); + is_not_functor([](const std::string&, int) {}); + is_not_functor([](int, const std::string&) {}); } diff --git a/test/detail/test_signature.cpp b/test/detail/test_signature.cpp index f20d2a3..ad8228d 100644 --- a/test/detail/test_signature.cpp +++ b/test/detail/test_signature.cpp @@ -10,18 +10,17 @@ #include #include -namespace +namespace { +struct base { - struct base - { - void method_1(); - float method_2( int ) const; - }; - typedef base base_type; -} + void method_1(); + float method_2(int) const; +}; +typedef base base_type; +} // namespace -BOOST_AUTO_TEST_CASE( mock_signature_generates_signature ) +BOOST_AUTO_TEST_CASE(mock_signature_generates_signature) { - static_assert( std::is_same< void(), MOCK_SIGNATURE(method_1) >::value, "!"); - static_assert( std::is_same< float( int ), MOCK_SIGNATURE(method_2) >::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); } diff --git a/test/detail/test_type_name.cpp b/test/detail/test_type_name.cpp index 0f577ef..ff643f3 100644 --- a/test/detail/test_type_name.cpp +++ b/test/detail/test_type_name.cpp @@ -10,218 +10,216 @@ #include #include -namespace +namespace { +template +std::string to_string(const T& t) { - template< typename T > - std::string to_string( const T& t) - { - std::ostringstream s; - s << mock::detail::make_type_name(t); - return s.str(); - } + std::ostringstream s; + s << mock::detail::make_type_name(t); + return s.str(); } +} // namespace -BOOST_AUTO_TEST_CASE( name_of_base_type_is_extracted ) +BOOST_AUTO_TEST_CASE(name_of_base_type_is_extracted) { - BOOST_CHECK_EQUAL( "char", to_string( 'a' ) ); - BOOST_CHECK_EQUAL( "bool", to_string( true ) ); - BOOST_CHECK_EQUAL( "int", to_string< int >( 0 ) ); - BOOST_CHECK_EQUAL( "short", to_string< short >( 0 ) ); - BOOST_CHECK_EQUAL( "long", to_string< long >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned int", to_string< unsigned int >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned short", to_string< unsigned short >( 0 ) ); - BOOST_CHECK_EQUAL( "unsigned long", to_string< unsigned long >( 0 ) ); + BOOST_CHECK_EQUAL("char", to_string('a')); + BOOST_CHECK_EQUAL("bool", to_string(true)); + BOOST_CHECK_EQUAL("int", to_string(0)); + BOOST_CHECK_EQUAL("short", to_string(0)); + BOOST_CHECK_EQUAL("long", to_string(0)); + BOOST_CHECK_EQUAL("unsigned int", to_string(0)); + BOOST_CHECK_EQUAL("unsigned short", to_string(0)); + BOOST_CHECK_EQUAL("unsigned long", to_string(0)); } struct my_type_in_default_namespace { - struct inner {}; + struct inner + {}; }; -BOOST_AUTO_TEST_CASE( name_of_type_in_default_namespace_is_extracted ) +BOOST_AUTO_TEST_CASE(name_of_type_in_default_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "my_type_in_default_namespace", to_string( my_type_in_default_namespace() ) ); + BOOST_CHECK_EQUAL("my_type_in_default_namespace", to_string(my_type_in_default_namespace())); } -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_type_in_default_namespace_is_extracted ) +BOOST_AUTO_TEST_CASE(name_of_inner_type_from_type_in_default_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "inner", to_string( my_type_in_default_namespace::inner() ) ); + BOOST_CHECK_EQUAL("inner", to_string(my_type_in_default_namespace::inner())); } -template< typename T > +template struct my_template_type_in_default_namespace { - struct inner {}; + struct inner + {}; }; -BOOST_AUTO_TEST_CASE( name_of_template_type_in_default_namespace_is_extracted ) +BOOST_AUTO_TEST_CASE(name_of_template_type_in_default_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "my_template_type_in_default_namespace", to_string( my_template_type_in_default_namespace() ) ); + BOOST_CHECK_EQUAL("my_template_type_in_default_namespace", + to_string(my_template_type_in_default_namespace())); } -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_default_namespace_is_extracted ) +BOOST_AUTO_TEST_CASE(name_of_inner_type_from_template_type_in_default_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type_in_default_namespace::inner() ) ); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type_in_default_namespace::inner())); } -namespace +namespace { +struct my_type_in_anonymous_namespace +{}; +} // namespace + +BOOST_AUTO_TEST_CASE(name_of_type_in_anonymous_namespace_is_extracted) { - struct my_type_in_anonymous_namespace {}; + BOOST_CHECK_EQUAL("my_type_in_anonymous_namespace", to_string(my_type_in_anonymous_namespace())); } -BOOST_AUTO_TEST_CASE( name_of_type_in_anonymous_namespace_is_extracted ) +namespace nm { +struct my_type_from_named_namespace +{}; +} // namespace nm + +BOOST_AUTO_TEST_CASE(name_of_type_from_named_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "my_type_in_anonymous_namespace", to_string( my_type_in_anonymous_namespace() ) ); + BOOST_CHECK_EQUAL("my_type_from_named_namespace", to_string(nm::my_type_from_named_namespace())); } -namespace nm -{ - struct my_type_from_named_namespace {}; -} - -BOOST_AUTO_TEST_CASE( name_of_type_from_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_from_named_namespace", to_string( nm::my_type_from_named_namespace() ) ); -} - -namespace nm -{ -namespace inner -{ - struct my_type_in_named_inner_namespace {}; -} -} - -BOOST_AUTO_TEST_CASE( name_of_type_in_named_inner_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_named_inner_namespace", to_string( nm::inner::my_type_in_named_inner_namespace() ) ); -} - -namespace -{ -namespace inner -{ - struct my_type_in_unnamed_inner_namespace {}; -} -} - -BOOST_AUTO_TEST_CASE( name_of_type_in_unnamed_inner_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_type_in_unnamed_inner_namespace", to_string( inner::my_type_in_unnamed_inner_namespace() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_local_type_is_extracted ) -{ - struct my_local_type {}; - BOOST_CHECK_EQUAL( "my_local_type", to_string( my_local_type() ) ); -} - -namespace -{ - template< typename T > - struct my_template_type - { - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_type_in_anonymous_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< int const*& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( my_template_type< std::exception const*& >() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_anonymous_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< int const*& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( my_template_type< std::exception const*& >::inner() ) ); -} - -namespace nm -{ - template< typename T > - struct my_template_type - { - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const* >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< int const*& >() ) ); - BOOST_CHECK_EQUAL( "my_template_type", to_string( nm::my_template_type< std::exception const*& >() ) ); -} - -BOOST_AUTO_TEST_CASE( name_of_inner_type_from_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const* >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< int const*& >::inner() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm::my_template_type< std::exception const*& >::inner() ) ); -} - -namespace nm2 -{ - template< typename T > - struct my_template_type - { - template< typename U > - struct inner {}; - }; -} - -BOOST_AUTO_TEST_CASE( name_of_template_inner_type_from_template_type_in_named_namespace_is_extracted ) -{ - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int >() ) ); - - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const* >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const* >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int const*& >::inner< int >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception const*& >::inner< int >() ) ); - - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const* >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const* >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< int >::inner< int const*& >() ) ); - BOOST_CHECK_EQUAL( "inner", to_string( nm2::my_template_type< std::exception >::inner< int const*& >() ) ); -} - -namespace -{ - template< typename T1, typename T2, typename T3 > - struct my_tpl +namespace nm { namespace inner { + struct my_type_in_named_inner_namespace {}; +}} // namespace nm::inner + +BOOST_AUTO_TEST_CASE(name_of_type_in_named_inner_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("my_type_in_named_inner_namespace", to_string(nm::inner::my_type_in_named_inner_namespace())); } -BOOST_AUTO_TEST_CASE( name_of_nested_template_with_multiple_arguments_is_extracted ) +namespace { namespace inner { + struct my_type_in_unnamed_inner_namespace + {}; +}} // namespace ::inner + +BOOST_AUTO_TEST_CASE(name_of_type_in_unnamed_inner_namespace_is_extracted) { - BOOST_CHECK_EQUAL( "vector>", to_string( std::vector< int >() ) ); - BOOST_CHECK_EQUAL( "vector>, allocator>>>", to_string( std::vector< std::vector< int > >() ) ); - BOOST_CHECK_EQUAL( "my_tpl, my_tpl, my_tpl>", to_string( my_tpl< my_tpl< int, int, int >, my_tpl< int, int, int >, my_tpl< int, int, int > >() ) ); + BOOST_CHECK_EQUAL("my_type_in_unnamed_inner_namespace", to_string(inner::my_type_in_unnamed_inner_namespace())); +} + +BOOST_AUTO_TEST_CASE(name_of_local_type_is_extracted) +{ + struct my_local_type + {}; + BOOST_CHECK_EQUAL("my_local_type", to_string(my_local_type())); +} + +namespace { +template +struct my_template_type +{ + struct inner + {}; +}; +} // namespace + +BOOST_AUTO_TEST_CASE(name_of_template_type_in_anonymous_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(my_template_type())); +} + +BOOST_AUTO_TEST_CASE(name_of_inner_type_from_template_type_in_anonymous_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(my_template_type::inner())); +} + +namespace nm { +template +struct my_template_type +{ + struct inner + {}; +}; +} // namespace nm + +BOOST_AUTO_TEST_CASE(name_of_template_type_in_named_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); + BOOST_CHECK_EQUAL("my_template_type", to_string(nm::my_template_type())); +} + +BOOST_AUTO_TEST_CASE(name_of_inner_type_from_template_type_in_named_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm::my_template_type::inner())); +} + +namespace nm2 { +template +struct my_template_type +{ + template + struct inner + {}; +}; +} // namespace nm2 + +BOOST_AUTO_TEST_CASE(name_of_template_inner_type_from_template_type_in_named_namespace_is_extracted) +{ + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); + BOOST_CHECK_EQUAL("inner", to_string(nm2::my_template_type::inner())); +} + +namespace { +template +struct my_tpl +{}; +} // namespace + +BOOST_AUTO_TEST_CASE(name_of_nested_template_with_multiple_arguments_is_extracted) +{ + BOOST_CHECK_EQUAL("vector>", to_string(std::vector())); + BOOST_CHECK_EQUAL("vector>, allocator>>>", + to_string(std::vector>())); + BOOST_CHECK_EQUAL("my_tpl, my_tpl, my_tpl>", + to_string(my_tpl, my_tpl, my_tpl>())); } diff --git a/test/fail_ambiguous_mock_method.cpp b/test/fail_ambiguous_mock_method.cpp index d1c03de..5f493e0 100644 --- a/test/fail_ambiguous_mock_method.cpp +++ b/test/fail_ambiguous_mock_method.cpp @@ -8,17 +8,16 @@ #include -namespace +namespace { +struct my_base { - struct my_base - { - virtual ~my_base() = default; - virtual void my_method() = 0; - virtual void my_method( int ) = 0; - }; + virtual ~my_base() = default; + virtual void my_method() = 0; + virtual void my_method(int) = 0; +}; - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 0 ) - }; -} +MOCK_BASE_CLASS(my_class, my_base) +{ + MOCK_METHOD(my_method, 0) +}; +} // namespace diff --git a/test/fail_constraint_functor_not_compatible.cpp b/test/fail_constraint_functor_not_compatible.cpp index e3d6aed..0fc5d83 100644 --- a/test/fail_constraint_functor_not_compatible.cpp +++ b/test/fail_constraint_functor_not_compatible.cpp @@ -12,7 +12,10 @@ MOCK_CLASS(my_class) { MOCK_METHOD_EXT(my_method, 1, void(int), my_method) }; -bool constraint(int, int) { return true; } +bool constraint(int, int) +{ + return true; +} void test_case() { diff --git a/test/fail_constraint_value_not_comparable.cpp b/test/fail_constraint_value_not_comparable.cpp index dec09ac..ee8b81d 100644 --- a/test/fail_constraint_value_not_comparable.cpp +++ b/test/fail_constraint_value_not_comparable.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + MOCK_METHOD_EXT(my_method, 1, void(int), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).with( "42" ); + MOCK_EXPECT(c.my_method).with("42"); } diff --git a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp index 8d18b82..4deaea0 100644 --- a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp +++ b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + MOCK_METHOD_EXT(my_method, 1, void(int), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).with( mock::equal( "42" ) ); + MOCK_EXPECT(c.my_method).with(mock::equal("42")); } diff --git a/test/fail_mismatch_type_in_returns_int_action.cpp b/test/fail_mismatch_type_in_returns_int_action.cpp index c4a5aed..8b5df96 100644 --- a/test/fail_mismatch_type_in_returns_int_action.cpp +++ b/test/fail_mismatch_type_in_returns_int_action.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 0, int(), my_method ) + MOCK_METHOD_EXT(my_method, 0, int(), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).returns( std::string() ); + MOCK_EXPECT(c.my_method).returns(std::string()); } diff --git a/test/fail_mismatch_type_in_returns_string_action.cpp b/test/fail_mismatch_type_in_returns_string_action.cpp index 885a4ac..dadcc33 100644 --- a/test/fail_mismatch_type_in_returns_string_action.cpp +++ b/test/fail_mismatch_type_in_returns_string_action.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 0, std::string(), my_method ) + MOCK_METHOD_EXT(my_method, 0, std::string(), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).returns( 42 ); + MOCK_EXPECT(c.my_method).returns(42); } diff --git a/test/fail_mismatch_type_in_returns_void_action.cpp b/test/fail_mismatch_type_in_returns_void_action.cpp index d3dd35c..ea7afd3 100644 --- a/test/fail_mismatch_type_in_returns_void_action.cpp +++ b/test/fail_mismatch_type_in_returns_void_action.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 0, void(), my_method ) + MOCK_METHOD_EXT(my_method, 0, void(), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).returns( "42" ); + MOCK_EXPECT(c.my_method).returns("42"); } diff --git a/test/fail_non_existing_base_class_method_in_mock_method.cpp b/test/fail_non_existing_base_class_method_in_mock_method.cpp index b30c9ef..07e483e 100644 --- a/test/fail_non_existing_base_class_method_in_mock_method.cpp +++ b/test/fail_non_existing_base_class_method_in_mock_method.cpp @@ -8,15 +8,14 @@ #include -namespace +namespace { +struct my_base { - struct my_base - { - virtual ~my_base() = default; - }; + virtual ~my_base() = default; +}; - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 0 ) - }; -} +MOCK_BASE_CLASS(my_class, my_base) +{ + MOCK_METHOD(my_method, 0) +}; +} // namespace diff --git a/test/fail_number_of_arguments_greater_than_max_constant.cpp b/test/fail_number_of_arguments_greater_than_max_constant.cpp index 4c59c70..ef7378a 100644 --- a/test/fail_number_of_arguments_greater_than_max_constant.cpp +++ b/test/fail_number_of_arguments_greater_than_max_constant.cpp @@ -8,18 +8,17 @@ #include -BOOST_STATIC_ASSERT( MOCK_MAX_ARGS == 9 ); +BOOST_STATIC_ASSERT(MOCK_MAX_ARGS == 9); -namespace +namespace { +struct my_base { - struct my_base - { - virtual ~my_base() = default; - virtual void my_method( int, int, int, int, int, int, int, int, int, int ) = 0; - }; + virtual ~my_base() = default; + virtual void my_method(int, int, int, int, int, int, int, int, int, int) = 0; +}; - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 10 ) - }; -} +MOCK_BASE_CLASS(my_class, my_base) +{ + MOCK_METHOD(my_method, 10) +}; +} // namespace diff --git a/test/fail_too_many_arguments_in_mock_method.cpp b/test/fail_too_many_arguments_in_mock_method.cpp index 7c08f7e..af18e2a 100644 --- a/test/fail_too_many_arguments_in_mock_method.cpp +++ b/test/fail_too_many_arguments_in_mock_method.cpp @@ -8,16 +8,15 @@ #include -namespace +namespace { +struct my_base { - struct my_base - { - virtual ~my_base() = default; - virtual void my_method( int ) = 0; - }; + virtual ~my_base() = default; + virtual void my_method(int) = 0; +}; - MOCK_BASE_CLASS( my_class, my_base ) - { - MOCK_METHOD( my_method, 2 ) - }; -} +MOCK_BASE_CLASS(my_class, my_base) +{ + MOCK_METHOD(my_method, 2) +}; +} // namespace diff --git a/test/fail_wrong_number_of_arguments_in_with.cpp b/test/fail_wrong_number_of_arguments_in_with.cpp index 033ffd8..d653265 100644 --- a/test/fail_wrong_number_of_arguments_in_with.cpp +++ b/test/fail_wrong_number_of_arguments_in_with.cpp @@ -8,12 +8,12 @@ #include -MOCK_CLASS( my_class ) +MOCK_CLASS(my_class) { - MOCK_METHOD_EXT( my_method, 1, void( int ), my_method ) + MOCK_METHOD_EXT(my_method, 1, void(int), my_method) }; void test_case() { my_class c; - MOCK_EXPECT( c.my_method ).with( 42, 42 ); + MOCK_EXPECT(c.my_method).with(42, 42); } diff --git a/test/mock_error.hpp b/test/mock_error.hpp index 5821f52..5ac02f6 100644 --- a/test/mock_error.hpp +++ b/test/mock_error.hpp @@ -12,10 +12,10 @@ #define MOCK_ERROR_POLICY mock_error #include #include -#include #include +#include -struct mock_error_data_t : mock::detail::singleton< mock_error_data_t > +struct mock_error_data_t : mock::detail::singleton { void reset() { @@ -24,10 +24,7 @@ struct mock_error_data_t : mock::detail::singleton< mock_error_data_t > last_message.clear(); last_context.clear(); } - bool verify() - { - return error_count == 0; - } + bool verify() { return error_count == 0; } void call() { @@ -35,9 +32,7 @@ struct mock_error_data_t : mock::detail::singleton< mock_error_data_t > last_message.clear(); ++call_count; } - void fail( const std::string& message, - const std::string& context, - const char* file, int line ) + void fail(const std::string& message, const std::string& context, const char* file, int line) { last_context = context; last_message = message; @@ -52,59 +47,56 @@ struct mock_error_data_t : mock::detail::singleton< mock_error_data_t > std::string last_context; std::string last_file; int last_line; - MOCK_SINGLETON_CONS( mock_error_data_t ); + MOCK_SINGLETON_CONS(mock_error_data_t); }; -MOCK_SINGLETON_INST( mock_error_data ) +MOCK_SINGLETON_INST(mock_error_data) -template< typename Result > +template struct mock_error { - static Result abort() - { - throw std::runtime_error( "aborted" ); - } + static Result abort() { throw std::runtime_error("aborted"); } - static void pass( const char* /*file*/, int /*line*/ ) - {} + static void pass(const char* /*file*/, int /*line*/) {} - template< typename Context > - static void call( const Context& /*context*/, const char* /*file*/, int /*line*/ ) + template + static void call(const Context& /*context*/, const char* /*file*/, int /*line*/) { mock_error_data.call(); } - template< typename Context > - static void fail( const std::string& message, const Context& context, const char* file = "", int line = 0 ) + template + static void fail(const std::string& message, const Context& context, const char* file = "", int line = 0) { std::ostringstream s; s << context; // Context can be streamed - mock_error_data.fail( message, s.str(), file, line ); + mock_error_data.fail(message, s.str(), file, line); } }; struct mock_error_fixture { - mock_error_fixture() - { - mock_error_data.reset(); - } + mock_error_fixture() { mock_error_data.reset(); } ~mock_error_fixture() { - BOOST_CHECK( mock_error_data.verify() ); - BOOST_CHECK_EQUAL( 0, mock_error_data.call_count ); + BOOST_CHECK(mock_error_data.verify()); + BOOST_CHECK_EQUAL(0, mock_error_data.call_count); } }; -#define CHECK_CALLS( calls ) \ - BOOST_CHECK_EQUAL( calls, mock_error_data.call_count ); \ +#define CHECK_CALLS(calls) \ + BOOST_CHECK_EQUAL(calls, mock_error_data.call_count); \ mock_error_data.call_count = 0; -#define CHECK_ERROR( expr, error, calls, context ) \ - BOOST_CHECK( mock_error_data.verify() ); \ - try { expr; } catch( ... ) {} \ - BOOST_CHECK_EQUAL( 1, mock_error_data.error_count ); \ - BOOST_CHECK_EQUAL( error, mock_error_data.last_message ); \ - BOOST_CHECK_EQUAL( context, mock_error_data.last_context ); \ - CHECK_CALLS( calls ); \ +#define CHECK_ERROR(expr, error, calls, context) \ + BOOST_CHECK(mock_error_data.verify()); \ + try \ + { \ + expr; \ + } catch(...) \ + {} \ + BOOST_CHECK_EQUAL(1, mock_error_data.error_count); \ + BOOST_CHECK_EQUAL(error, mock_error_data.last_message); \ + BOOST_CHECK_EQUAL(context, mock_error_data.last_context); \ + CHECK_CALLS(calls); \ mock_error_data.reset(); #endif // MOCK_TEST_MOCK_ERROR_HPP_INCLUDED diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index 58793f3..0eb525c 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -9,16 +9,15 @@ #include #include -namespace -{ - MOCK_CONSTRAINT( constraint_0, actual == 0 ) - MOCK_CONSTRAINT( constraint_1, expected, actual == expected ) - MOCK_CONSTRAINT( constraint_2, expected_0, expected_1, actual == expected_0 || actual == expected_1 ) -} +namespace { +MOCK_CONSTRAINT(constraint_0, actual == 0) +MOCK_CONSTRAINT(constraint_1, expected, actual == expected) +MOCK_CONSTRAINT(constraint_2, expected_0, expected_1, actual == expected_0 || actual == expected_1) +} // namespace -BOOST_AUTO_TEST_CASE( mock_constraint_is_supported_by_compilers_with_variadic_macros ) +BOOST_AUTO_TEST_CASE(mock_constraint_is_supported_by_compilers_with_variadic_macros) { - BOOST_CHECK( constraint_0.c_( 0 ) ); - BOOST_CHECK( constraint_1( 0 ).c_( 0 ) ); - BOOST_CHECK( constraint_2( 0, 0 ).c_( 0 ) ); + BOOST_CHECK(constraint_0.c_(0)); + BOOST_CHECK(constraint_1(0).c_(0)); + BOOST_CHECK(constraint_2(0, 0).c_(0)); } diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index b92f728..11c43fd 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -9,386 +9,372 @@ #include #include -BOOST_AUTO_TEST_CASE( all_comparison_constraints_can_be_instanciated ) +BOOST_AUTO_TEST_CASE(all_comparison_constraints_can_be_instanciated) { - mock::equal( 0 ); - mock::less( 0 ); - mock::greater( 0 ); - mock::less_equal( 0 ); - mock::greater_equal( 0 ); + mock::equal(0); + mock::less(0); + mock::greater(0); + mock::less_equal(0); + mock::greater_equal(0); } -BOOST_AUTO_TEST_CASE( constraints_can_be_negated_using_the_not_operator ) +BOOST_AUTO_TEST_CASE(constraints_can_be_negated_using_the_not_operator) { - ! mock::any; - ! mock::affirm; - ! mock::negate; - ! mock::evaluate; - ! mock::equal( 0 ); - ! mock::less( 0 ); - ! mock::greater( 0 ); - ! mock::less_equal( 0 ); - ! mock::greater_equal( 0 ); + !mock::any; + !mock::affirm; + !mock::negate; + !mock::evaluate; + !mock::equal(0); + !mock::less(0); + !mock::greater(0); + !mock::less_equal(0); + !mock::greater_equal(0); } -BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_or_operator ) +BOOST_AUTO_TEST_CASE(constraints_can_be_combined_using_the_or_operator) { - mock::less( 0 ) || mock::greater( 0 ); + mock::less(0) || mock::greater(0); } -BOOST_AUTO_TEST_CASE( constraints_can_be_combined_using_the_and_operator ) +BOOST_AUTO_TEST_CASE(constraints_can_be_combined_using_the_and_operator) { - mock::less( 0 ) && mock::greater( 0 ); + mock::less(0) && mock::greater(0); } -BOOST_AUTO_TEST_CASE( equal_constraint ) +BOOST_AUTO_TEST_CASE(equal_constraint) { - BOOST_CHECK( mock::equal( std::string( "string" ) ).c_( "string" ) ); - BOOST_CHECK( ! mock::equal( std::string( "string" ) ).c_( "not string" ) ); + BOOST_CHECK(mock::equal(std::string("string")).c_("string")); + BOOST_CHECK(!mock::equal(std::string("string")).c_("not string")); { std::string s; - auto c = mock::equal( std::cref( s ) ); + auto c = mock::equal(std::cref(s)); s = "string"; - BOOST_CHECK( c.c_( "string" ) ); + BOOST_CHECK(c.c_("string")); } { - std::unique_ptr< int > i; - std::unique_ptr< int > j( new int( 3 ) ); - BOOST_CHECK( ! mock::equal( i ).c_( j ) ); - BOOST_CHECK( ! mock::equal( j ).c_( i ) ); - BOOST_CHECK( mock::equal( i ).c_( i ) ); - BOOST_CHECK( mock::equal( j ).c_( j ) ); + std::unique_ptr i; + std::unique_ptr j(new int(3)); + BOOST_CHECK(!mock::equal(i).c_(j)); + BOOST_CHECK(!mock::equal(j).c_(i)); + BOOST_CHECK(mock::equal(i).c_(i)); + BOOST_CHECK(mock::equal(j).c_(j)); } } -BOOST_AUTO_TEST_CASE( equal_constraint_deref ) +BOOST_AUTO_TEST_CASE(equal_constraint_deref) { { int i = 3; - BOOST_CHECK( mock::equal( 3 ).c_( &i ) ); - BOOST_CHECK( ! mock::equal( 7 ).c_( &i ) ); + BOOST_CHECK(mock::equal(3).c_(&i)); + BOOST_CHECK(!mock::equal(7).c_(&i)); } { int* i = 0; - BOOST_CHECK( ! mock::equal( 3 ).c_( i ) ); + BOOST_CHECK(!mock::equal(3).c_(i)); } { - std::unique_ptr< int > j( new int( 3 ) ); - BOOST_CHECK( mock::equal( 3 ).c_( j ) ); - std::unique_ptr< int > i; - BOOST_CHECK( ! mock::equal( 3 ).c_( i ) ); + std::unique_ptr j(new int(3)); + BOOST_CHECK(mock::equal(3).c_(j)); + std::unique_ptr i; + BOOST_CHECK(!mock::equal(3).c_(i)); } } -BOOST_AUTO_TEST_CASE( same_constraint ) +BOOST_AUTO_TEST_CASE(same_constraint) { { int i = 0; int j = 0; - BOOST_CHECK_EQUAL( i, j ); - BOOST_CHECK( ! mock::same( i ).c_( j ) ); - BOOST_CHECK( mock::same( i ).c_( i ) ); + BOOST_CHECK_EQUAL(i, j); + BOOST_CHECK(!mock::same(i).c_(j)); + BOOST_CHECK(mock::same(i).c_(i)); } { int i = 0; int j = 0; - BOOST_CHECK_EQUAL( i, j ); - auto c = mock::same( i ); - BOOST_CHECK( ! c.c_( j ) ); - BOOST_CHECK( c.c_( i ) ); + BOOST_CHECK_EQUAL(i, j); + auto c = mock::same(i); + BOOST_CHECK(!c.c_(j)); + BOOST_CHECK(c.c_(i)); } { std::nullptr_t p; - BOOST_CHECK( mock::same( p ).c_( p ) ); + BOOST_CHECK(mock::same(p).c_(p)); } } -BOOST_AUTO_TEST_CASE( assign_constraint ) +BOOST_AUTO_TEST_CASE(assign_constraint) { { int i = 0; - BOOST_CHECK( mock::assign( 3 ).c_( i ) ); - BOOST_CHECK_EQUAL( 3, i ); + BOOST_CHECK(mock::assign(3).c_(i)); + BOOST_CHECK_EQUAL(3, i); } { int i = 0; - BOOST_CHECK( mock::assign( 3 ).c_( &i ) ); - BOOST_CHECK_EQUAL( 3, i ); + BOOST_CHECK(mock::assign(3).c_(&i)); + BOOST_CHECK_EQUAL(3, i); } { const int* i = 0; const int j = 1; - BOOST_CHECK( mock::assign( &j ).c_( i ) ); - BOOST_CHECK_EQUAL( &j, i ); + BOOST_CHECK(mock::assign(&j).c_(i)); + BOOST_CHECK_EQUAL(&j, i); } { int* i = 0; const int j = 1; - BOOST_CHECK( ! mock::assign( j ).c_( i ) ); - BOOST_CHECK( ! i ); + BOOST_CHECK(!mock::assign(j).c_(i)); + BOOST_CHECK(!i); } { int i = 0; int j = 1; - mock::constraint< - mock::detail::assign< - std::reference_wrapper< const int > - > - > c = mock::assign( std::cref( j ) ); - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( 1, i ); + mock::constraint>> c = mock::assign(std::cref(j)); + BOOST_CHECK(c.c_(i)); + BOOST_CHECK_EQUAL(1, i); j = 3; - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( 3, i ); + BOOST_CHECK(c.c_(i)); + BOOST_CHECK_EQUAL(3, i); } { int i = 0; int j = 1; - auto c = mock::assign( std::cref( j ) ); - BOOST_CHECK( c.c_( &i ) ); - BOOST_CHECK_EQUAL( 1, i ); + auto c = mock::assign(std::cref(j)); + BOOST_CHECK(c.c_(&i)); + BOOST_CHECK_EQUAL(1, i); j = 3; - BOOST_CHECK( c.c_( &i ) ); - BOOST_CHECK_EQUAL( 3, i ); + BOOST_CHECK(c.c_(&i)); + BOOST_CHECK_EQUAL(3, i); } { const int* i = 0; int k = 1; int* j = &k; - auto c = mock::assign( std::cref( j ) ); - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( j, i ); + auto c = mock::assign(std::cref(j)); + BOOST_CHECK(c.c_(i)); + BOOST_CHECK_EQUAL(j, i); j = 0; - BOOST_CHECK( c.c_( i ) ); - BOOST_CHECK_EQUAL( j, i ); + BOOST_CHECK(c.c_(i)); + BOOST_CHECK_EQUAL(j, i); } } -BOOST_AUTO_TEST_CASE( retrieve_constraint ) +BOOST_AUTO_TEST_CASE(retrieve_constraint) { { int i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, j); } { int* i = 0; int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( &j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(&j)); + BOOST_CHECK_EQUAL(i, &j); } { const int* i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { const int* i = 0; int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { int* i = 0; int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { const int* i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { int** i = 0; int* j = 0; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { const int** i = 0; const int* j = 0; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { int i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, j); } { const int* i = 0; const int j = 1; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { std::nullptr_t* i = 0; std::nullptr_t j; - BOOST_CHECK( mock::retrieve( i ).c_( j ) ); - BOOST_CHECK_EQUAL( i, &j ); + BOOST_CHECK(mock::retrieve(i).c_(j)); + BOOST_CHECK_EQUAL(i, &j); } { - std::unique_ptr< int > i; - std::unique_ptr< int > j( new int( 3 ) ); - BOOST_CHECK( mock::retrieve( i ).c_( std::move( j ) ) ); - BOOST_REQUIRE( i ); - BOOST_CHECK_EQUAL( 3, *i ); - BOOST_CHECK( !j ); + std::unique_ptr i; + std::unique_ptr j(new int(3)); + BOOST_CHECK(mock::retrieve(i).c_(std::move(j))); + BOOST_REQUIRE(i); + BOOST_CHECK_EQUAL(3, *i); + BOOST_CHECK(!j); } } -namespace +namespace { +struct A +{}; +struct B { - struct A - { - }; - struct B - { - B& operator=( const A& ) - { - return *this; - } - }; -} + B& operator=(const A&) { return *this; } +}; +} // namespace -BOOST_AUTO_TEST_CASE( retrieve_constraint_uses_assignment_operator ) +BOOST_AUTO_TEST_CASE(retrieve_constraint_uses_assignment_operator) { B b; const A a = A(); - mock::retrieve( b ).c_( a ); + mock::retrieve(b).c_(a); } -BOOST_AUTO_TEST_CASE( affirm_constraint ) +BOOST_AUTO_TEST_CASE(affirm_constraint) { { int* i = 0; int j; - BOOST_CHECK( ! mock::affirm.c_( i ) ); - BOOST_CHECK( mock::affirm.c_( &j ) ); + BOOST_CHECK(!mock::affirm.c_(i)); + BOOST_CHECK(mock::affirm.c_(&j)); } { - std::unique_ptr< int > i; - std::unique_ptr< int > j( new int( 3 ) ); - BOOST_CHECK( ! mock::affirm.c_( i ) ); - BOOST_CHECK( mock::affirm.c_( j ) ); + std::unique_ptr i; + std::unique_ptr j(new int(3)); + BOOST_CHECK(!mock::affirm.c_(i)); + BOOST_CHECK(mock::affirm.c_(j)); } } -BOOST_AUTO_TEST_CASE( negate_constraint ) +BOOST_AUTO_TEST_CASE(negate_constraint) { int* i = 0; int j; - BOOST_CHECK( mock::negate.c_( i ) ); - BOOST_CHECK( ! mock::negate.c_( &j ) ); + BOOST_CHECK(mock::negate.c_(i)); + BOOST_CHECK(!mock::negate.c_(&j)); } -namespace +namespace { +bool return_true() { - bool return_true() - { - return true; - } - bool return_false() - { - return false; - } + return true; +} +bool return_false() +{ + return false; +} +} // namespace + +BOOST_AUTO_TEST_CASE(call_constraint) +{ + BOOST_CHECK(mock::call(&return_true).c_()); + BOOST_CHECK(!mock::call(&return_false).c_()); } -BOOST_AUTO_TEST_CASE( call_constraint ) +BOOST_AUTO_TEST_CASE(evaluate_constraint) { - BOOST_CHECK( mock::call( &return_true ).c_() ); - BOOST_CHECK( ! mock::call( &return_false ).c_() ); + BOOST_CHECK(mock::evaluate.c_(&return_true)); + BOOST_CHECK(!mock::evaluate.c_(&return_false)); } -BOOST_AUTO_TEST_CASE( evaluate_constraint ) +BOOST_AUTO_TEST_CASE(contain_constraint_with_const_char_ptr) { - BOOST_CHECK( mock::evaluate.c_( &return_true ) ); - BOOST_CHECK( ! mock::evaluate.c_( &return_false ) ); -} - -BOOST_AUTO_TEST_CASE( contain_constraint_with_const_char_ptr ) -{ - BOOST_CHECK( mock::contain( "string" ).c_( "this is a string" ) ); - BOOST_CHECK( mock::contain( "string" ).c_( std::string( "this is a string" ) ) ); - BOOST_CHECK( ! mock::contain( "not found" ).c_( "this is a string" ) ); - BOOST_CHECK( ! mock::contain( "not found" ).c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(mock::contain("string").c_("this is a string")); + BOOST_CHECK(mock::contain("string").c_(std::string("this is a string"))); + BOOST_CHECK(!mock::contain("not found").c_("this is a string")); + BOOST_CHECK(!mock::contain("not found").c_(std::string("this is a string"))); { const char* s = 0; - auto c = mock::contain( std::cref( s ) ); + auto c = mock::contain(std::cref(s)); s = "string"; - BOOST_CHECK( c.c_( "this is a string" ) ); - BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(c.c_("this is a string")); + BOOST_CHECK(c.c_(std::string("this is a string"))); s = "not found"; - BOOST_CHECK( ! c.c_( "this is a string" ) ); - BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(!c.c_("this is a string")); + BOOST_CHECK(!c.c_(std::string("this is a string"))); } } -BOOST_AUTO_TEST_CASE( contain_constraint_with_strings ) +BOOST_AUTO_TEST_CASE(contain_constraint_with_strings) { - BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( "this is a string" ) ); - BOOST_CHECK( mock::contain( std::string( "string" ) ).c_( std::string( "this is a string" ) ) ); - BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( "this is a string" ) ); - BOOST_CHECK( ! mock::contain( std::string( "not found" ) ).c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(mock::contain(std::string("string")).c_("this is a string")); + BOOST_CHECK(mock::contain(std::string("string")).c_(std::string("this is a string"))); + BOOST_CHECK(!mock::contain(std::string("not found")).c_("this is a string")); + BOOST_CHECK(!mock::contain(std::string("not found")).c_(std::string("this is a string"))); { std::string s; - mock::constraint< - mock::detail::contain< - std::reference_wrapper< const std::string > - > - > c = mock::contain( std::cref( s ) ); + mock::constraint>> c = + mock::contain(std::cref(s)); s = "string"; - BOOST_CHECK( c.c_( "this is a string" ) ); - BOOST_CHECK( c.c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(c.c_("this is a string")); + BOOST_CHECK(c.c_(std::string("this is a string"))); s = "not found"; - BOOST_CHECK( ! c.c_( "this is a string" ) ); - BOOST_CHECK( ! c.c_( std::string( "this is a string" ) ) ); + BOOST_CHECK(!c.c_("this is a string")); + BOOST_CHECK(!c.c_(std::string("this is a string"))); } } -namespace +namespace { +struct type_with_overloaded_address_operator { - struct type_with_overloaded_address_operator - { - void operator&() {} - void operator&() const {} - }; -} + void operator&() {} + void operator&() const {} +}; +} // namespace -BOOST_AUTO_TEST_CASE( type_with_overloaded_address_operator_can_be_used_in_constraints ) +BOOST_AUTO_TEST_CASE(type_with_overloaded_address_operator_can_be_used_in_constraints) { type_with_overloaded_address_operator t; - mock::same( t ).c_( t ); - mock::retrieve( t ).c_( t ); + mock::same(t).c_(t); + mock::retrieve(t).c_(t); type_with_overloaded_address_operator* pt; - mock::retrieve( pt ).c_( t ); + mock::retrieve(pt).c_(t); } -BOOST_AUTO_TEST_CASE( close_constraint ) +BOOST_AUTO_TEST_CASE(close_constraint) { - BOOST_CHECK( mock::close( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::close( 12.0, 0.0001 ).c_( 13 ) ); + BOOST_CHECK(mock::close(12.0, 0.0001).c_(12)); + BOOST_CHECK(!mock::close(12.0, 0.0001).c_(13)); } -BOOST_AUTO_TEST_CASE( close_fraction_constraint ) +BOOST_AUTO_TEST_CASE(close_fraction_constraint) { - BOOST_CHECK( mock::close_fraction( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::close_fraction( 12.0, 0.0001 ).c_( 13 ) ); + BOOST_CHECK(mock::close_fraction(12.0, 0.0001).c_(12)); + BOOST_CHECK(!mock::close_fraction(12.0, 0.0001).c_(13)); } -BOOST_AUTO_TEST_CASE( small_constraint ) +BOOST_AUTO_TEST_CASE(small_constraint) { - BOOST_CHECK( mock::small( 0.0001 ).c_( 0. ) ); - BOOST_CHECK( ! mock::small( 0.0001 ).c_( 12. ) ); + BOOST_CHECK(mock::small(0.0001).c_(0.)); + BOOST_CHECK(!mock::small(0.0001).c_(12.)); } -BOOST_AUTO_TEST_CASE( near_constraint ) +BOOST_AUTO_TEST_CASE(near_constraint) { - BOOST_CHECK( mock::near( 12.0, 0.0001 ).c_( 12 ) ); - BOOST_CHECK( ! mock::near( 12.0, 0.0001 ).c_( 13 ) ); + BOOST_CHECK(mock::near(12.0, 0.0001).c_(12)); + BOOST_CHECK(!mock::near(12.0, 0.0001).c_(13)); } diff --git a/test/test_exception.cpp b/test/test_exception.cpp index a2bed75..6525a01 100644 --- a/test/test_exception.cpp +++ b/test/test_exception.cpp @@ -10,16 +10,14 @@ #include #include -BOOST_AUTO_TEST_CASE( a_mock_exception_is_not_an_std_exception_to_not_mess_with_user_exceptions ) +BOOST_AUTO_TEST_CASE(a_mock_exception_is_not_an_std_exception_to_not_mess_with_user_exceptions) { try { throw mock::exception(); - } - catch( std::exception& ) + } catch(std::exception&) { - BOOST_FAIL( "mock::exception must not be an std::exception" ); - } - catch( mock::exception& ) + BOOST_FAIL("mock::exception must not be an std::exception"); + } catch(mock::exception&) {} } diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 8b3cd93..aceccd5 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -9,775 +9,739 @@ #include "mock_error.hpp" #include "undefined.hpp" #include -#include #include +#include #include #include -namespace +namespace { +struct my_custom_mock { - struct my_custom_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - }; -} + MOCK_METHOD_EXT(my_method, 0, void(), my_tag) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros_and_without_inheriting_from_object, mock_error_fixture) { my_custom_mock m; - MOCK_EXPECT( m.my_tag ).once(); + MOCK_EXPECT(m.my_tag).once(); m.my_method(); - CHECK_CALLS( 1 ); + CHECK_CALLS(1); } -namespace +namespace { +struct my_custom_mock_object { - struct my_custom_mock_object - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - }; -} + MOCK_METHOD_EXT(my_method, 0, void(), my_tag) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros, mock_error_fixture) { my_custom_mock_object m; - MOCK_EXPECT( m.my_tag ).once(); + MOCK_EXPECT(m.my_tag).once(); m.my_method(); - CHECK_CALLS( 1 ); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(my_mock) { - MOCK_CLASS( my_mock ) - { - MOCK_METHOD_EXT( my_method, 1, int( int ), my_tag ) - }; -} + MOCK_METHOD_EXT(my_method, 1, int(int), my_tag) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( basic_mock_object_usage, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(basic_mock_object_usage, mock_error_fixture) { my_mock m; { - MOCK_EXPECT( m.my_tag ).once().returns( 0 ); - BOOST_CHECK_EQUAL( 0, m.my_method( 13 ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.my_tag).once().returns(0); + BOOST_CHECK_EQUAL(0, m.my_method(13)); + CHECK_CALLS(1); } mock::verify(); mock::reset(); { - MOCK_EXPECT( m.my_tag ).once().with( 42 ).returns( 7 ); - BOOST_CHECK_EQUAL( 7, m.my_method( 42 ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.my_tag).once().with(42).returns(7); + BOOST_CHECK_EQUAL(7, m.my_method(42)); + CHECK_CALLS(1); } mock::verify(); mock::reset(); { - MOCK_EXPECT( m.my_tag ).once().returns( 51 ); - BOOST_CHECK_EQUAL( 51, m.my_method( 27 ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.my_tag).once().returns(51); + BOOST_CHECK_EQUAL(51, m.my_method(27)); + CHECK_CALLS(1); } } -namespace +namespace { +class my_ambiguited_interface { - class my_ambiguited_interface - { - public: - my_ambiguited_interface() = default; - my_ambiguited_interface(const my_ambiguited_interface&) = delete; - my_ambiguited_interface& operator=(const my_ambiguited_interface&) = delete; - virtual ~my_ambiguited_interface() = default; - virtual void my_method() = 0; - virtual void my_method( int ) = 0; - }; +public: + my_ambiguited_interface() = default; + my_ambiguited_interface(const my_ambiguited_interface&) = delete; + my_ambiguited_interface& operator=(const my_ambiguited_interface&) = delete; + virtual ~my_ambiguited_interface() = default; + virtual void my_method() = 0; + virtual void my_method(int) = 0; +}; - MOCK_BASE_CLASS( my_ambiguited_mock, my_ambiguited_interface ) - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag1 ) - MOCK_METHOD_EXT( my_method, 1, void( int ), my_tag_2 ) - }; -} +MOCK_BASE_CLASS(my_ambiguited_mock, my_ambiguited_interface) +{ + MOCK_METHOD_EXT(my_method, 0, void(), my_tag1) + MOCK_METHOD_EXT(my_method, 1, void(int), my_tag_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_object_method_disambiguation, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_method_disambiguation, mock_error_fixture) { my_ambiguited_mock m; - MOCK_EXPECT( m.my_tag1 ); + MOCK_EXPECT(m.my_tag1); m.my_method(); - CHECK_ERROR( m.my_method( 12 ), "unexpected call", 1, "?.my_ambiguited_mock::my_tag_2( 12 )" ); + CHECK_ERROR(m.my_method(12), "unexpected call", 1, "?.my_ambiguited_mock::my_tag_2( 12 )"); } -namespace +namespace { +class my_const_ambiguited_interface { - class my_const_ambiguited_interface - { - public: - my_const_ambiguited_interface() = default; - my_const_ambiguited_interface(const my_const_ambiguited_interface&) = delete; - my_const_ambiguited_interface& operator=(const my_const_ambiguited_interface&) = delete; - virtual ~my_const_ambiguited_interface() = default; - virtual void my_method() = 0; - virtual void my_method() const = 0; - }; +public: + my_const_ambiguited_interface() = default; + my_const_ambiguited_interface(const my_const_ambiguited_interface&) = delete; + my_const_ambiguited_interface& operator=(const my_const_ambiguited_interface&) = delete; + virtual ~my_const_ambiguited_interface() = default; + virtual void my_method() = 0; + virtual void my_method() const = 0; +}; - MOCK_BASE_CLASS( my_const_ambiguited_mock, my_const_ambiguited_interface ) - { - MOCK_NON_CONST_METHOD_EXT( my_method, 0, void(), tag1 ) - MOCK_CONST_METHOD_EXT( my_method, 0, void(), tag_2 ) - }; -} +MOCK_BASE_CLASS(my_const_ambiguited_mock, my_const_ambiguited_interface) +{ + MOCK_NON_CONST_METHOD_EXT(my_method, 0, void(), tag1) + MOCK_CONST_METHOD_EXT(my_method, 0, void(), tag_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_object_method_const_disambiguation, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_method_const_disambiguation, mock_error_fixture) { my_const_ambiguited_mock mock; - MOCK_EXPECT( mock.tag1 ); - BOOST_CHECK_NO_THROW( mock.my_method() ); + MOCK_EXPECT(mock.tag1); + BOOST_CHECK_NO_THROW(mock.my_method()); const my_const_ambiguited_mock const_mock; - CHECK_ERROR( const_mock.my_method(), "unexpected call", 1, "?.my_const_ambiguited_mock::tag_2()" ); + CHECK_ERROR(const_mock.my_method(), "unexpected call", 1, "?.my_const_ambiguited_mock::tag_2()"); } -namespace +namespace { +MOCK_CLASS(my_undefined_mock) { - MOCK_CLASS( my_undefined_mock ) - { - MOCK_METHOD_EXT( m, 1, void( undefined& ), t ) - }; -} + MOCK_METHOD_EXT(m, 1, void(undefined&), t) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_object_method_with_declared_but_not_defined_parameter_is_valid, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_method_with_declared_but_not_defined_parameter_is_valid, mock_error_fixture) { my_undefined_mock mock; - MOCK_EXPECT( mock.t ); + MOCK_EXPECT(mock.t); } -namespace -{ - MOCK_FUNCTOR( gf, int( float, const std::string& ) ); +namespace { +MOCK_FUNCTOR(gf, int(float, const std::string&)); } -BOOST_FIXTURE_TEST_CASE( mock_functor_in_namespace_is_supported, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_in_namespace_is_supported, mock_error_fixture) { - std::function< int( float, const std::string& ) > func; - MOCK_EXPECT( gf ).once().with( 3, "op" ).returns( 42 ); + std::function func; + MOCK_EXPECT(gf).once().with(3, "op").returns(42); func = gf; - BOOST_CHECK_EQUAL( 42, func( 3, "op" ) ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(42, func(3, "op")); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( mock_functor_in_function_is_supported, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_in_function_is_supported, mock_error_fixture) { - std::function< int( float, const std::string& ) > func; + std::function func; { - MOCK_FUNCTOR( f, int( float, const std::string& ) ); - MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); + MOCK_FUNCTOR(f, int(float, const std::string&)); + MOCK_EXPECT(f).once().with(3, "op").returns(42); func = f; } - BOOST_CHECK_EQUAL( 42, func( 3, "op" ) ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(42, func(3, "op")); + CHECK_CALLS(1); } -namespace +namespace { +struct functor_fixture : mock_error_fixture { - struct functor_fixture : mock_error_fixture - { - MOCK_FUNCTOR( f, int( float, const std::string& ) ); - }; + MOCK_FUNCTOR(f, int(float, const std::string&)); +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(mock_functor_in_fixture_is_supported, functor_fixture) +{ + MOCK_EXPECT(f).once().with(3, "op").returns(42); + BOOST_CHECK_EQUAL(42, f(3.f, "op")); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( mock_functor_in_fixture_is_supported, functor_fixture ) +namespace { +template +struct my_template_mock { - MOCK_EXPECT( f ).once().with( 3, "op" ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, f( 3.f, "op" ) ); - CHECK_CALLS( 1 ); + MOCK_METHOD_EXT(my_method, 0, void(), my_tag) + MOCK_METHOD_EXT_TPL(my_method, 2, void(T, std::string), my_tpl_tag) + MOCK_METHOD_EXT_TPL(my_other_method, 0, void(), my_other_tag) +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(mocking_a_template_class_method_is_supported, mock_error_fixture) +{ + my_template_mock m; + MOCK_EXPECT(m.my_tpl_tag).with(3, ""); + m.my_method(3, ""); + BOOST_CHECK(MOCK_VERIFY(m.my_tpl_tag)); + CHECK_CALLS(1); } -namespace +namespace { +template +struct my_template_base_class { - template< typename T > - struct my_template_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT_TPL( my_method, 2, void( T, std::string ), my_tpl_tag ) - MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_tag ) - }; + virtual ~my_template_base_class() = default; + virtual void my_method(T) = 0; + virtual void my_other_method() = 0; +}; +template +MOCK_BASE_CLASS(my_template_base_class_mock, my_template_base_class) +{ + MOCK_METHOD_EXT_TPL(my_method, 1, void(T), my_method) + MOCK_METHOD_EXT_TPL(my_other_method, 0, void(), my_other_method) +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(mocking_a_template_base_class_method_is_supported, mock_error_fixture) +{ + my_template_base_class_mock m; + MOCK_EXPECT(m.my_method).once().with(3); + m.my_method(3); + BOOST_CHECK(MOCK_VERIFY(m.my_method)); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_method_is_supported, mock_error_fixture ) +namespace { +class my_observer { - my_template_mock< int > m; - MOCK_EXPECT( m.my_tpl_tag ).with( 3, "" ); - m.my_method( 3, "" ); - BOOST_CHECK( MOCK_VERIFY( m.my_tpl_tag ) ); - CHECK_CALLS( 1 ); -} +public: + my_observer() = default; + my_observer(const my_observer&) = delete; + my_observer& operator=(const my_observer&) = delete; + virtual ~my_observer() = default; + virtual void notify(int value) = 0; +}; -namespace +class my_manager { - template< typename T > - struct my_template_base_class - { - virtual ~my_template_base_class() = default; - virtual void my_method( T ) = 0; - virtual void my_other_method() = 0; - }; - template< typename T > - MOCK_BASE_CLASS( my_template_base_class_mock, my_template_base_class< T > ) - { - MOCK_METHOD_EXT_TPL( my_method, 1, void( T ), my_method ) - MOCK_METHOD_EXT_TPL( my_other_method, 0, void(), my_other_method ) - }; -} +public: + my_manager() = default; + my_manager(const my_manager&) = delete; + my_manager& operator=(const my_manager&) = delete; + virtual ~my_manager() = default; + virtual my_observer& get_observer() const = 0; +}; -BOOST_FIXTURE_TEST_CASE( mocking_a_template_base_class_method_is_supported, mock_error_fixture ) +class my_subject { - my_template_base_class_mock< int > m; - MOCK_EXPECT( m.my_method ).once().with( 3 ); - m.my_method( 3 ); - BOOST_CHECK( MOCK_VERIFY( m.my_method ) ); - CHECK_CALLS( 1 ); -} +public: + explicit my_subject(my_manager& f) : o_(f.get_observer()), value_(0) {} + void increment() { o_.notify(++value_); } -namespace +private: + my_observer& o_; + int value_; +}; + +MOCK_BASE_CLASS(my_mock_observer, my_observer) { - class my_observer - { - public: - my_observer() = default; - my_observer(const my_observer&) = delete; - my_observer& operator=(const my_observer&) = delete; - virtual ~my_observer() = default; - virtual void notify( int value ) = 0; - }; + MOCK_METHOD(notify, 1) +}; - class my_manager - { - public: - my_manager() = default; - my_manager(const my_manager&) = delete; - my_manager& operator=(const my_manager&) = delete; - virtual ~my_manager() = default; - virtual my_observer& get_observer() const = 0; - }; - - class my_subject - { - public: - explicit my_subject( my_manager& f ) - : o_( f.get_observer() ) - , value_( 0 ) - {} - void increment() - { - o_.notify( ++value_ ); - } - private: - my_observer& o_; - int value_; - }; - - MOCK_BASE_CLASS( my_mock_observer, my_observer ) - { - MOCK_METHOD( notify, 1 ) - }; - - MOCK_BASE_CLASS( my_mock_manager, my_manager ) - { - MOCK_METHOD( get_observer, 0 ) - }; - - struct fixture : mock_error_fixture - { - my_mock_manager manager; - my_mock_observer observer; - }; -} - -BOOST_FIXTURE_TEST_CASE( basic_mock_object_collaboration_usage, fixture ) +MOCK_BASE_CLASS(my_mock_manager, my_manager) { - MOCK_EXPECT( manager.get_observer ).returns( std::ref( observer ) ); - my_subject subject( manager ); - MOCK_EXPECT( observer.notify ).once().with( 1 ); + MOCK_METHOD(get_observer, 0) +}; + +struct fixture : mock_error_fixture +{ + my_mock_manager manager; + my_mock_observer observer; +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(basic_mock_object_collaboration_usage, fixture) +{ + MOCK_EXPECT(manager.get_observer).returns(std::ref(observer)); + my_subject subject(manager); + MOCK_EXPECT(observer.notify).once().with(1); subject.increment(); - MOCK_EXPECT( observer.notify ).once().with( 2 ); + MOCK_EXPECT(observer.notify).once().with(2); subject.increment(); - MOCK_EXPECT( observer.notify ).once().with( 3 ); + MOCK_EXPECT(observer.notify).once().with(3); subject.increment(); - CHECK_CALLS( 4 ); + CHECK_CALLS(4); } -namespace +namespace { +MOCK_CLASS(my_constructed_class) { - MOCK_CLASS( my_constructed_class ) - { - MOCK_CONSTRUCTOR( my_constructed_class, 2, ( int, const std::string& ), constructor ) - }; -} + MOCK_CONSTRUCTOR(my_constructed_class, 2, (int, const std::string&), constructor) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mocking_a_constructor, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mocking_a_constructor, mock_error_fixture) { - MOCK_EXPECT( my_constructed_class::constructor ).with( 42, "some text" ).once(); - my_constructed_class( 42, "some text" ); - BOOST_CHECK( MOCK_VERIFY( my_constructed_class::constructor ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(my_constructed_class::constructor).with(42, "some text").once(); + my_constructed_class(42, "some text"); + BOOST_CHECK(MOCK_VERIFY(my_constructed_class::constructor)); + CHECK_CALLS(1); } -namespace +namespace { +template +MOCK_CLASS(my_constructed_template_class) { - template< typename T > - MOCK_CLASS( my_constructed_template_class ) - { - MOCK_CONSTRUCTOR_TPL( my_constructed_template_class, 2, ( T, const std::string& ), constructor ) - }; -} + MOCK_CONSTRUCTOR_TPL(my_constructed_template_class, 2, (T, const std::string&), constructor) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mocking_a_template_class_constructor, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mocking_a_template_class_constructor, mock_error_fixture) { - MOCK_EXPECT( my_constructed_template_class< int >::constructor ).with( 42, "some text" ).once(); - my_constructed_template_class< int >( 42, "some text" ); - BOOST_CHECK( MOCK_VERIFY( my_constructed_template_class< int >::constructor ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(my_constructed_template_class::constructor).with(42, "some text").once(); + my_constructed_template_class(42, "some text"); + BOOST_CHECK(MOCK_VERIFY(my_constructed_template_class::constructor)); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(my_destroyed_class) { - MOCK_CLASS( my_destroyed_class ) - { - MOCK_DESTRUCTOR( ~my_destroyed_class, destructor ) - }; -} + MOCK_DESTRUCTOR(~my_destroyed_class, destructor) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mocking_a_destructor, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mocking_a_destructor, mock_error_fixture) { { my_destroyed_class c; - MOCK_EXPECT( c.destructor ).once(); + MOCK_EXPECT(c.destructor).once(); } - CHECK_CALLS( 1 ); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( failed_expectation_in_mocked_destructor_does_not_throw, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(failed_expectation_in_mocked_destructor_does_not_throw, mock_error_fixture) { CHECK_ERROR( - try - { - my_destroyed_class c; - throw std::runtime_error( "should not crash" ); - } - catch( std::runtime_error& ) - { - }, - "unexpected call", 0, "?.my_destroyed_class::destructor()" ); + try { + my_destroyed_class c; + throw std::runtime_error("should not crash"); + } catch(std::runtime_error&){}, + "unexpected call", + 0, + "?.my_destroyed_class::destructor()"); } -BOOST_FIXTURE_TEST_CASE( failed_sequence_in_mocked_destructor_does_not_throw, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(failed_sequence_in_mocked_destructor_does_not_throw, mock_error_fixture) { mock::sequence s; my_custom_mock m; CHECK_ERROR( - { - my_destroyed_class c; - MOCK_EXPECT( c.destructor ).once().in( s ); - MOCK_EXPECT( m.my_tag ).once().in( s ); - m.my_method(); - }, - "sequence failed", 1, "c.my_destroyed_class::destructor()\n. once()" ); + { + my_destroyed_class c; + MOCK_EXPECT(c.destructor).once().in(s); + MOCK_EXPECT(m.my_tag).once().in(s); + m.my_method(); + }, + "sequence failed", + 1, + "c.my_destroyed_class::destructor()\n. once()"); } -namespace +namespace { +MOCK_CLASS(boost_optional) { - MOCK_CLASS( boost_optional ) - { - MOCK_METHOD_EXT( method, 0, boost::optional< my_observer& >(), tag ) - }; -} + MOCK_METHOD_EXT(method, 0, boost::optional(), tag) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( boost_optional_on_base_class_reference_as_return_type_is_supported, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(boost_optional_on_base_class_reference_as_return_type_is_supported, mock_error_fixture) { boost_optional b; my_mock_observer o; - MOCK_EXPECT( b.tag ).once().returns( std::ref( o ) ); + MOCK_EXPECT(b.tag).once().returns(std::ref(o)); b.method(); - CHECK_CALLS( 1 ); + CHECK_CALLS(1); } -namespace -{ - bool serialized = false; +namespace { +bool serialized = false; - struct custom_argument +struct custom_argument +{ + friend std::ostream& operator<<(std::ostream& s, custom_argument) { - friend std::ostream& operator<<( std::ostream& s, custom_argument ) - { - serialized = true; - return s; - } - }; - struct custom_constraint + serialized = true; + return s; + } +}; +struct custom_constraint +{ + template + friend bool operator==(Actual, custom_constraint) { - template< typename Actual > - friend bool operator==( Actual, custom_constraint ) - { - return true; - } - friend std::ostream& operator<<( std::ostream& s, custom_constraint ) - { - serialized = true; - return s; - } - }; -} - -BOOST_FIXTURE_TEST_CASE( constraints_and_arguments_are_serialized_lazily, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, void( const custom_argument& ) ); - MOCK_EXPECT( f ).with( custom_constraint() ); - f( custom_argument() ); - BOOST_CHECK( ! serialized ); - CHECK_CALLS( 1 ); -} - -namespace -{ - struct custom_constraint_with_non_const_operator + return true; + } + friend std::ostream& operator<<(std::ostream& s, custom_constraint) { - template< typename Actual > - bool operator()( Actual actual ) - { - return actual == 42; - } - }; + serialized = true; + return s; + } +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(constraints_and_arguments_are_serialized_lazily, mock_error_fixture) +{ + MOCK_FUNCTOR(f, void(const custom_argument&)); + MOCK_EXPECT(f).with(custom_constraint()); + f(custom_argument()); + BOOST_CHECK(!serialized); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( custom_constraint_function_operator_does_not_need_to_be_const, mock_error_fixture ) +namespace { +struct custom_constraint_with_non_const_operator { - MOCK_FUNCTOR( f, void( float ) ); - MOCK_EXPECT( f ).with( mock::constraint< custom_constraint_with_non_const_operator >( custom_constraint_with_non_const_operator() ) ); - f( 42 ); - CHECK_CALLS( 1 ); + template + bool operator()(Actual actual) + { + return actual == 42; + } +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(custom_constraint_function_operator_does_not_need_to_be_const, mock_error_fixture) +{ + MOCK_FUNCTOR(f, void(float)); + MOCK_EXPECT(f).with( + mock::constraint(custom_constraint_with_non_const_operator())); + f(42); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( boost_reference_wrapper_is_supported_in_value_constraint, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(boost_reference_wrapper_is_supported_in_value_constraint, mock_error_fixture) { - MOCK_FUNCTOR( f, void( const std::string& ) ); + MOCK_FUNCTOR(f, void(const std::string&)); std::string s; - MOCK_EXPECT( f ).once().with( std::cref( s ) ); + MOCK_EXPECT(f).once().with(std::cref(s)); s = "string"; - f( "string" ); - CHECK_CALLS( 1 ); + f("string"); + CHECK_CALLS(1); } -namespace -{ - template< typename T > - void nothing( T ) - {} +namespace { +template +void nothing(T) +{} - struct member_pointer_mock_class - { - MOCK_CONST_METHOD_EXT( my_method, 0, void(), my_method ) - }; +struct member_pointer_mock_class +{ + MOCK_CONST_METHOD_EXT(my_method, 0, void(), my_method) +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(member_pointer_on_mock_method_is_valid, mock_error_fixture) +{ + nothing(&member_pointer_mock_class::my_method); } -BOOST_FIXTURE_TEST_CASE( member_pointer_on_mock_method_is_valid, mock_error_fixture ) -{ - nothing( &member_pointer_mock_class::my_method ); +namespace { +MOCK_FUNCTION(free_function, 1, void(int), free_function) } -namespace +BOOST_FIXTURE_TEST_CASE(a_free_function_can_be_mocked, mock_error_fixture) { - MOCK_FUNCTION( free_function, 1, void( int ), free_function ) -} - -BOOST_FIXTURE_TEST_CASE( a_free_function_can_be_mocked, mock_error_fixture ) -{ - MOCK_EXPECT( free_function ).once(); + MOCK_EXPECT(free_function).once(); CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( free_function ) ), - "verification failed", 0, "free_function\n. once().with( any )" ); - free_function( 42 ); - CHECK_CALLS( 1 ); - BOOST_CHECK( MOCK_VERIFY( free_function ) ); - MOCK_RESET( free_function ); + BOOST_CHECK(!MOCK_VERIFY(free_function)), "verification failed", 0, "free_function\n. once().with( any )"); + free_function(42); + CHECK_CALLS(1); + BOOST_CHECK(MOCK_VERIFY(free_function)); + MOCK_RESET(free_function); } -namespace +namespace { +struct some_class : mock::object { - struct some_class : mock::object - { - MOCK_STATIC_METHOD( some_static_method, 1, void( int ), some_static_method ) - }; + MOCK_STATIC_METHOD(some_static_method, 1, void(int), some_static_method) +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(a_static_method_can_be_mocked, mock_error_fixture) +{ + MOCK_EXPECT(some_class::some_static_method).once(); + CHECK_ERROR(BOOST_CHECK(!MOCK_VERIFY(some_class::some_static_method)), + "verification failed", + 0, + "some_class::some_static_method\n. once().with( any )"); + some_class::some_static_method(42); + CHECK_CALLS(1); + BOOST_CHECK(MOCK_VERIFY(some_class::some_static_method)); + MOCK_RESET(some_class::some_static_method); } -BOOST_FIXTURE_TEST_CASE( a_static_method_can_be_mocked, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(a_static_method_is_not_reset_when_resetting_an_instance_of_the_class, mock_error_fixture) { - MOCK_EXPECT( some_class::some_static_method ).once(); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), - "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); - some_class::some_static_method( 42 ); - CHECK_CALLS( 1 ); - BOOST_CHECK( MOCK_VERIFY( some_class::some_static_method ) ); - MOCK_RESET( some_class::some_static_method ); -} - -BOOST_FIXTURE_TEST_CASE( a_static_method_is_not_reset_when_resetting_an_instance_of_the_class, mock_error_fixture ) -{ - MOCK_EXPECT( some_class::some_static_method ).once(); + MOCK_EXPECT(some_class::some_static_method).once(); some_class c; - mock::reset( c ); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_class::some_static_method ) ), - "verification failed", 0, "some_class::some_static_method\n. once().with( any )" ); - MOCK_RESET( some_class::some_static_method ); + mock::reset(c); + CHECK_ERROR(BOOST_CHECK(!MOCK_VERIFY(some_class::some_static_method)), + "verification failed", + 0, + "some_class::some_static_method\n. once().with( any )"); + MOCK_RESET(some_class::some_static_method); } -namespace +namespace { +template +struct some_template_class { - template< typename T > - struct some_template_class - { - MOCK_STATIC_METHOD_TPL( some_static_method, 1, void( T ), some_static_method ) - }; + MOCK_STATIC_METHOD_TPL(some_static_method, 1, void(T), some_static_method) +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(a_static_method_in_a_template_class_can_be_mocked, mock_error_fixture) +{ + MOCK_EXPECT(some_template_class::some_static_method).once(); + CHECK_ERROR(BOOST_CHECK(!MOCK_VERIFY(some_template_class::some_static_method)), + "verification failed", + 0, + "some_template_class::some_static_method\n. once().with( any )"); + some_template_class::some_static_method(42); + BOOST_CHECK(mock::verify()); + BOOST_CHECK(MOCK_VERIFY(some_template_class::some_static_method)); + MOCK_RESET(some_template_class::some_static_method); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( a_static_method_in_a_template_class_can_be_mocked, mock_error_fixture ) +namespace { +MOCK_CLASS(mock_class) { - MOCK_EXPECT( some_template_class< int >::some_static_method ).once(); - CHECK_ERROR( - BOOST_CHECK( ! MOCK_VERIFY( some_template_class< int >::some_static_method ) ), - "verification failed", 0, "some_template_class< int >::some_static_method\n. once().with( any )" ); - some_template_class< int >::some_static_method( 42 ); - BOOST_CHECK( mock::verify() ); - BOOST_CHECK( MOCK_VERIFY( some_template_class< int >::some_static_method ) ); - MOCK_RESET( some_template_class< int >::some_static_method ); - CHECK_CALLS( 1 ); -} + MOCK_METHOD_EXT(m, 0, void(), t); +}; +} // namespace -namespace +BOOST_FIXTURE_TEST_CASE(resetting_referenced_mock_class_does_not_crash, mock_error_fixture) { - MOCK_CLASS( mock_class ) - { - MOCK_METHOD_EXT( m, 0, void(), t ); - }; -} - -BOOST_FIXTURE_TEST_CASE( resetting_referenced_mock_class_does_not_crash, mock_error_fixture ) -{ - MOCK_FUNCTOR( f, mock_class() ); + MOCK_FUNCTOR(f, mock_class()); { mock_class c; - MOCK_EXPECT( f ).returns( c ); - MOCK_EXPECT( c.t ); + MOCK_EXPECT(f).returns(c); + MOCK_EXPECT(c.t); } mock::reset(); } -namespace +namespace { +MOCK_CLASS(mock_class2) { - MOCK_CLASS( mock_class2 ) - { - MOCK_METHOD_EXT( m, 0, mock_class2(), t ); - }; -} + MOCK_METHOD_EXT(m, 0, mock_class2(), t); +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( resetting_self_referenced_mock_class_does_not_crash, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(resetting_self_referenced_mock_class_does_not_crash, mock_error_fixture) { { mock_class2 c; - MOCK_EXPECT( c.t ).returns( c ); + MOCK_EXPECT(c.t).returns(c); } mock::reset(); } -namespace -{ - template< typename T1, typename T2 > - struct my_base - {}; - MOCK_BASE_CLASS( my_comma_mock, my_base< int, int > ) - {}; - MOCK_BASE_CLASS( my_boost_pp_comma_mock, my_base< int BOOST_PP_COMMA() int > ) - {}; -} +namespace { +template +struct my_base +{}; +MOCK_BASE_CLASS(my_comma_mock, my_base) +{}; +MOCK_BASE_CLASS(my_boost_pp_comma_mock, my_base) +{}; +} // namespace #ifdef MOCK_THREAD_SAFE -#include +# include -namespace +namespace { +void create_class() { - void create_class() + my_mock m; + MOCK_EXPECT(m.my_tag).once().with(3).returns(42); + try { - my_mock m; - MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); - try - { - m.my_method( 3 ); - } - catch( ... ) - {} - } + m.my_method(3); + } catch(...) + {} } +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_class_creation_is_thread_safe, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_class_creation_is_thread_safe, mock_error_fixture) { boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( &create_class ); + for(int i = 0; i < 100; ++i) + group.create_thread(&create_class); group.join_all(); - CHECK_CALLS( 100 ); + CHECK_CALLS(100); } -namespace +namespace { +void create_functor(int i) { - void create_functor( int i ) + mock::detail::functor f; + boost::this_thread::sleep(boost::posix_time::milliseconds(100)); + mock::detail::functor f_mock; + MOCK_EXPECT(f).once().with(i); + try { - mock::detail::functor< void( int ) > f; - boost::this_thread::sleep( boost::posix_time::milliseconds( 100 ) ); - mock::detail::functor< void( int ) > f_mock; - MOCK_EXPECT( f ).once().with( i ); - try - { - f( i ); - } - catch( ... ) - {} - } + f(i); + } catch(...) + {} } +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_functor_creation_is_thread_safe, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_creation_is_thread_safe, mock_error_fixture) { boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( [i](){ create_functor( i ); } ); + for(int i = 0; i < 100; ++i) + group.create_thread([i]() { create_functor(i); }); group.join_all(); - CHECK_CALLS( 100 ); + CHECK_CALLS(100); } -namespace +namespace { +void iterate(my_mock& m) { - void iterate( my_mock& m ) - { - MOCK_EXPECT( m.my_tag ).once().with( 3 ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, m.my_method( 3 ) ); - } + MOCK_EXPECT(m.my_tag).once().with(3).returns(42); + BOOST_CHECK_EQUAL(42, m.my_method(3)); } +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_class_is_thread_safe, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_class_is_thread_safe, mock_error_fixture) { my_mock m; boost::thread_group group; - for( int i = 0; i < 100; ++i ) - group.create_thread( [&m](){ iterate(m); } ); + for(int i = 0; i < 100; ++i) + group.create_thread([&m]() { iterate(m); }); group.join_all(); - CHECK_CALLS( 100 ); + CHECK_CALLS(100); } #endif // MOCK_THREAD_SAFE -namespace +namespace { +MOCK_CLASS(my_multi_mock) { - MOCK_CLASS( my_multi_mock ) - { - MOCK_METHOD_EXT( m1, 1, void( int ), m1 ); - MOCK_METHOD_EXT( m2, 2, void( int, int ), m2 ); - }; -} + MOCK_METHOD_EXT(m1, 1, void(int), m1); + MOCK_METHOD_EXT(m2, 2, void(int, int), m2); +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_method_accepts_multi_constraint, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_method_accepts_multi_constraint, mock_error_fixture) { my_multi_mock m; - MOCK_FUNCTOR( f, bool( int, int ) ); - MOCK_EXPECT( m.m2 ).once().with( f ); - MOCK_EXPECT( f ).once().with( 1, 2 ).returns( true ); - m.m2( 1, 2 ); - CHECK_CALLS( 2 ); + MOCK_FUNCTOR(f, bool(int, int)); + MOCK_EXPECT(m.m2).once().with(f); + MOCK_EXPECT(f).once().with(1, 2).returns(true); + m.m2(1, 2); + CHECK_CALLS(2); } -namespace +namespace { +struct my_polymorphic_constraint { - struct my_polymorphic_constraint + template + bool operator()(T1, T2) const { - template< typename T1, typename T2 > - bool operator()( T1, T2 ) const - { - return true; - } - }; -} + return true; + } +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_method_accepts_polymorphic_multi_constraint, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_method_accepts_polymorphic_multi_constraint, mock_error_fixture) { my_multi_mock m; - MOCK_EXPECT( m.m2 ).once().with( my_polymorphic_constraint() ); - m.m2( 1, 2 ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.m2).once().with(my_polymorphic_constraint()); + m.m2(1, 2); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_action, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(std_unique_ptr_argument_is_supported_in_action, mock_error_fixture) { - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - std::unique_ptr< int > p; - MOCK_EXPECT( f ).once().calls( - []( std::unique_ptr< int > ) - { - } ); - f( std::unique_ptr< int >( new int( 7 ) ) ); - CHECK_CALLS( 1 ); + MOCK_FUNCTOR(f, void(std::unique_ptr)); + std::unique_ptr p; + MOCK_EXPECT(f).once().calls([](std::unique_ptr) {}); + f(std::unique_ptr(new int(7))); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_equal_constraint, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(std_unique_ptr_argument_is_supported_in_equal_constraint, mock_error_fixture) { { - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - MOCK_EXPECT( f ).once().with( mock::equal( 7 ) ); - f( std::unique_ptr< int >( new int( 7 ) ) ); - CHECK_CALLS( 1 ); + MOCK_FUNCTOR(f, void(std::unique_ptr)); + MOCK_EXPECT(f).once().with(mock::equal(7)); + f(std::unique_ptr(new int(7))); + CHECK_CALLS(1); } { - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - MOCK_EXPECT( f ).once().with( 7 ); - f( std::unique_ptr< int >( new int( 7 ) ) ); - CHECK_CALLS( 1 ); + MOCK_FUNCTOR(f, void(std::unique_ptr)); + MOCK_EXPECT(f).once().with(7); + f(std::unique_ptr(new int(7))); + CHECK_CALLS(1); } } -BOOST_FIXTURE_TEST_CASE( std_unique_ptr_argument_is_supported_in_retrieve_constraint, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(std_unique_ptr_argument_is_supported_in_retrieve_constraint, mock_error_fixture) { { - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - MOCK_EXPECT( f ).once().with( nullptr ); - f( 0 ); - CHECK_CALLS( 1 ); + MOCK_FUNCTOR(f, void(std::unique_ptr)); + MOCK_EXPECT(f).once().with(nullptr); + f(0); + CHECK_CALLS(1); } { - std::unique_ptr< int > i; - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - MOCK_EXPECT( f ).once().with( mock::retrieve( i ) ); - std::unique_ptr< int > j( new int( 7 ) ); - f( std::move( j ) ); - BOOST_CHECK( !j ); - BOOST_REQUIRE( i ); - BOOST_CHECK_EQUAL( 7, *i ); - CHECK_CALLS( 1 ); + std::unique_ptr i; + MOCK_FUNCTOR(f, void(std::unique_ptr)); + MOCK_EXPECT(f).once().with(mock::retrieve(i)); + std::unique_ptr j(new int(7)); + f(std::move(j)); + BOOST_CHECK(!j); + BOOST_REQUIRE(i); + BOOST_CHECK_EQUAL(7, *i); + CHECK_CALLS(1); } { - std::unique_ptr< int > i; - MOCK_FUNCTOR( f, void( std::unique_ptr< int > ) ); - MOCK_EXPECT( f ).once().with( nullptr ); - MOCK_EXPECT( f ).once().with( mock::retrieve( i ) ); - f( 0 ); - std::unique_ptr< int > j( new int( 7 ) ); - f( std::move( j ) ); - BOOST_CHECK( !j ); - BOOST_REQUIRE( i ); - BOOST_CHECK_EQUAL( 7, *i ); - CHECK_CALLS( 2 ); + std::unique_ptr i; + MOCK_FUNCTOR(f, void(std::unique_ptr)); + MOCK_EXPECT(f).once().with(nullptr); + MOCK_EXPECT(f).once().with(mock::retrieve(i)); + f(0); + std::unique_ptr j(new int(7)); + f(std::move(j)); + BOOST_CHECK(!j); + BOOST_REQUIRE(i); + BOOST_CHECK_EQUAL(7, *i); + CHECK_CALLS(2); } } struct my_unique_ptr_class { - MOCK_CONSTRUCTOR( my_unique_ptr_class, 1, ( std::unique_ptr< int > ), constructor ) - MOCK_METHOD_EXT( m, 1, void( std::unique_ptr< int > ), m ) - MOCK_STATIC_METHOD( ms, 1, void( std::unique_ptr< int > ), ms ) + MOCK_CONSTRUCTOR(my_unique_ptr_class, 1, (std::unique_ptr), constructor) + MOCK_METHOD_EXT(m, 1, void(std::unique_ptr), m) + MOCK_STATIC_METHOD(ms, 1, void(std::unique_ptr), ms) }; diff --git a/test/test_log.cpp b/test/test_log.cpp index a512ac6..623b6b1 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -7,667 +7,638 @@ // http://www.boost.org/LICENSE_1_0.txt) #include -#include #include -#include #include +#include +#include #ifdef BOOST_MSVC -#pragma warning( push, 0 ) +# pragma warning(push, 0) #endif -#include #include +#include #ifdef BOOST_MSVC -#pragma warning( pop ) +# pragma warning(pop) #endif #ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC -#include -#include +# include +# include #endif #include -#include -#include #include +#include #include #include #include #include +#include -namespace +namespace { +template +std::string to_string(const T& t) { - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << mock::format( t ); - return s.str(); - } - template< typename T > - std::string to_string( T* t ) - { - std::stringstream s; - s << mock::format( t ); - return s.str(); - } + std::stringstream s; + s << mock::format(t); + return s.str(); } +template +std::string to_string(T* t) +{ + std::stringstream s; + s << mock::format(t); + return s.str(); +} +} // namespace -BOOST_AUTO_TEST_CASE( pointer_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(pointer_yields_its_value_when_serialized) { { int i = 0; std::ostringstream s; s << &i; const std::string pointerValue = s.str(); - BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( pointerValue, to_string( &i ) ); + BOOST_CHECK_NE("?", to_string(&i)); + BOOST_CHECK_EQUAL(pointerValue, to_string(&i)); } { const int i = 0; std::ostringstream s; s << &i; const std::string pointerValue = s.str(); - BOOST_CHECK_NE( "?", to_string( &i ) ); - BOOST_CHECK_EQUAL( pointerValue, to_string( &i ) ); + BOOST_CHECK_NE("?", to_string(&i)); + BOOST_CHECK_EQUAL(pointerValue, to_string(&i)); } } -BOOST_AUTO_TEST_CASE( base_type_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(base_type_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "42", to_string( 42 ) ); + BOOST_CHECK_EQUAL("42", to_string(42)); } -BOOST_AUTO_TEST_CASE( booleans_are_serialized_as_bool_alpha ) +BOOST_AUTO_TEST_CASE(booleans_are_serialized_as_bool_alpha) { - BOOST_CHECK_EQUAL( "true", to_string( true ) ); - BOOST_CHECK_EQUAL( "false", to_string( false ) ); + BOOST_CHECK_EQUAL("true", to_string(true)); + BOOST_CHECK_EQUAL("false", to_string(false)); } -BOOST_AUTO_TEST_CASE( strings_are_serialized_with_double_quotes ) +BOOST_AUTO_TEST_CASE(strings_are_serialized_with_double_quotes) { - BOOST_CHECK_EQUAL( "\"string\"", to_string( "string" ) ); - BOOST_CHECK_EQUAL( "\"string\"", to_string( std::string( "string" ) ) ); + BOOST_CHECK_EQUAL("\"string\"", to_string("string")); + BOOST_CHECK_EQUAL("\"string\"", to_string(std::string("string"))); } -namespace +namespace { +struct non_serializable +{}; +} // namespace + +BOOST_AUTO_TEST_CASE(non_serializable_type_yields_a_question_mark_when_serialized) { - struct non_serializable - {}; + BOOST_CHECK_EQUAL("?", to_string(non_serializable())); } -BOOST_AUTO_TEST_CASE( non_serializable_type_yields_a_question_mark_when_serialized ) +namespace { +struct serializable +{}; +std::ostream& operator<<(std::ostream& s, const serializable&) { - BOOST_CHECK_EQUAL( "?", to_string( non_serializable() ) ); + return s << "serializable"; +} +} // namespace + +BOOST_AUTO_TEST_CASE(serializable_type_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("serializable", to_string(serializable())); } -namespace +namespace { +struct streamable +{}; +BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<(std::ostream& s, const streamable&) { - struct serializable - {}; - std::ostream& operator<<( std::ostream& s, const serializable& ) - { - return s << "serializable"; - } + BOOST_FAIL("should not have been called"); + return s; +} +mock::stream& operator<<(mock::stream& s, const streamable&) +{ + return s << "streamable"; +} +} // namespace + +BOOST_AUTO_TEST_CASE(streamable_type_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("streamable", to_string(streamable())); } -BOOST_AUTO_TEST_CASE( serializable_type_yields_its_value_when_serialized ) +namespace { +struct mock_streamable +{}; +BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<(std::ostream& s, const mock_streamable&) { - BOOST_CHECK_EQUAL( "serializable", to_string( serializable() ) ); + BOOST_FAIL("should not have been called"); + return s; +} +} // namespace +namespace mock { +stream& operator<<(stream& s, const mock_streamable&) +{ + return s << "mock_streamable"; +} +} // namespace mock + +BOOST_AUTO_TEST_CASE(mock_streamable_type_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("mock_streamable", to_string(mock_streamable())); } -namespace -{ - struct streamable - {}; - BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<( std::ostream& s, const streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - mock::stream& operator<<( mock::stream& s, const streamable& ) - { - return s << "streamable"; - } -} +namespace { +struct derived_from_serializable : serializable +{}; +} // namespace -BOOST_AUTO_TEST_CASE( streamable_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "streamable", to_string( streamable() ) ); -} - -namespace -{ - struct mock_streamable - {}; - BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<( std::ostream& s, const mock_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } -} -namespace mock -{ - stream& operator<<( stream& s, const mock_streamable& ) - { - return s << "mock_streamable"; - } -} // mock - -BOOST_AUTO_TEST_CASE( mock_streamable_type_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "mock_streamable", to_string( mock_streamable() ) ); -} - -namespace -{ - struct derived_from_serializable : serializable - {}; -} - -BOOST_AUTO_TEST_CASE( type_derived_from_serializable_yields_a_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE(type_derived_from_serializable_yields_a_question_mark_when_serialized) { #ifdef MOCK_USE_CONVERSIONS - BOOST_CHECK_EQUAL( "serializable", to_string( derived_from_serializable() ) ); + BOOST_CHECK_EQUAL("serializable", to_string(derived_from_serializable())); #else - BOOST_CHECK_EQUAL( "?", to_string( derived_from_serializable() ) ); + BOOST_CHECK_EQUAL("?", to_string(derived_from_serializable())); #endif } -namespace -{ - struct derived_from_streamable : streamable - {}; -} +namespace { +struct derived_from_streamable : streamable +{}; +} // namespace -BOOST_AUTO_TEST_CASE( type_derived_from_streamable_yields_a_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE(type_derived_from_streamable_yields_a_question_mark_when_serialized) { #ifdef MOCK_USE_CONVERSIONS - BOOST_CHECK_EQUAL( "streamable", to_string( derived_from_streamable() ) ); + BOOST_CHECK_EQUAL("streamable", to_string(derived_from_streamable())); #else - BOOST_CHECK_EQUAL( "?", to_string( derived_from_streamable() ) ); + BOOST_CHECK_EQUAL("?", to_string(derived_from_streamable())); #endif } -#ifndef MOCK_USE_CONVERSIONS // all this does not compile with conversions activated, which is precisely the purpose of having this compilation flag +#ifndef MOCK_USE_CONVERSIONS // all this does not compile with conversions activated, which is precisely the purpose of + // having this compilation flag -namespace +namespace { +struct convertible_to_base { - struct convertible_to_base - { - operator int() const; - }; + operator int() const; +}; +} // namespace + +BOOST_AUTO_TEST_CASE(type_convertible_to_base_yields_a_question_mark_when_serialized) +{ + BOOST_CHECK_EQUAL("?", to_string(convertible_to_base())); } -BOOST_AUTO_TEST_CASE( type_convertible_to_base_yields_a_question_mark_when_serialized ) +namespace { +struct convertible_to_serializable { - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_base() ) ); + operator serializable() const; +}; +} // namespace + +BOOST_AUTO_TEST_CASE(type_convertible_to_serializable_yields_a_question_mark_when_serialized) +{ + BOOST_CHECK_EQUAL("?", to_string(convertible_to_serializable())); } -namespace +namespace { +struct convertible_to_streamable { - struct convertible_to_serializable - { - operator serializable() const; - }; + operator streamable() const; +}; +} // namespace + +BOOST_AUTO_TEST_CASE(type_convertible_to_streamable_yields_a_question_mark_when_serialized) +{ + BOOST_CHECK_EQUAL("?", to_string(convertible_to_streamable())); } -BOOST_AUTO_TEST_CASE( type_convertible_to_serializable_yields_a_question_mark_when_serialized ) +namespace { +struct ambiguous_convertible { - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_serializable() ) ); + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template + operator T() const; +}; +} // namespace + +BOOST_AUTO_TEST_CASE(type_ambiguous_convertible_yields_a_question_mark_when_serialized) +{ + BOOST_CHECK_EQUAL("?", to_string(ambiguous_convertible())); } -namespace +namespace { +struct ambiguous_convertible_serializable { - struct convertible_to_streamable - { - operator streamable() const; - }; + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template + operator T() const; +}; +std::ostream& operator<<(std::ostream& s, const ambiguous_convertible_serializable&) +{ + return s << "ambiguous_convertible_serializable"; } +} // namespace -BOOST_AUTO_TEST_CASE( type_convertible_to_streamable_yields_a_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE(type_convertible_serializable_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "?", to_string( convertible_to_streamable() ) ); -} - -namespace -{ - struct ambiguous_convertible - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; -} - -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_yields_a_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( ambiguous_convertible() ) ); -} - -namespace -{ - struct ambiguous_convertible_serializable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_serializable& ) - { - return s << "ambiguous_convertible_serializable"; - } -} - -BOOST_AUTO_TEST_CASE( type_convertible_serializable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "ambiguous_convertible_serializable", to_string( ambiguous_convertible_serializable() ) ); + BOOST_CHECK_EQUAL("ambiguous_convertible_serializable", to_string(ambiguous_convertible_serializable())); } #endif // MOCK_USE_CONVERSIONS -namespace +namespace { +struct ambiguous_convertible_streamable { - struct ambiguous_convertible_streamable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - mock::stream& operator<<( mock::stream& s, const ambiguous_convertible_streamable& ) - { - return s << "ambiguous_convertible_streamable"; - } + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template + operator T() const; +}; +BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<(std::ostream& s, const ambiguous_convertible_streamable&) +{ + BOOST_FAIL("should not have been called"); + return s; +} +mock::stream& operator<<(mock::stream& s, const ambiguous_convertible_streamable&) +{ + return s << "ambiguous_convertible_streamable"; +} +} // namespace + +BOOST_AUTO_TEST_CASE(type_ambiguous_convertible_streamable_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("ambiguous_convertible_streamable", to_string(ambiguous_convertible_streamable())); } -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_streamable_yields_its_value_when_serialized ) +namespace { +struct ambiguous_convertible_mock_streamable { - BOOST_CHECK_EQUAL( "ambiguous_convertible_streamable", to_string( ambiguous_convertible_streamable() ) ); + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template + operator T() const; +}; +BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<(std::ostream& s, const ambiguous_convertible_mock_streamable&) +{ + BOOST_FAIL("should not have been called"); + return s; +} +} // namespace +namespace mock { +stream& operator<<(stream& s, const ambiguous_convertible_mock_streamable&) +{ + return s << "ambiguous_convertible_mock_streamable"; +} +} // namespace mock + +BOOST_AUTO_TEST_CASE(type_ambiguous_convertible_mock_streamable_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("ambiguous_convertible_mock_streamable", to_string(ambiguous_convertible_mock_streamable())); } -namespace +namespace { +template +struct template_serializable +{}; +template +std::ostream& operator<<(std::ostream& s, const template_serializable&) { - struct ambiguous_convertible_mock_streamable - { - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template< typename T > operator T() const; - }; - BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<( std::ostream& s, const ambiguous_convertible_mock_streamable& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } + return s << "template_serializable"; } -namespace mock -{ - stream& operator<<( stream& s, const ambiguous_convertible_mock_streamable& ) - { - return s << "ambiguous_convertible_mock_streamable"; - } -} // mock +} // namespace -BOOST_AUTO_TEST_CASE( type_ambiguous_convertible_mock_streamable_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(template_type_serializable_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "ambiguous_convertible_mock_streamable", to_string( ambiguous_convertible_mock_streamable() ) ); + BOOST_CHECK_EQUAL("template_serializable", to_string(template_serializable())); } -namespace +namespace { +template +struct template_streamable +{}; +template +std::ostream& operator<<(std::ostream& s, const template_streamable&) { - template< typename T > - struct template_serializable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) - { - return s << "template_serializable"; - } + BOOST_FAIL("should not have been called"); + return s; +} +template +mock::stream& operator<<(mock::stream& s, const template_streamable&) +{ + return s << "template_streamable"; +} +} // namespace + +BOOST_AUTO_TEST_CASE(template_template_streamable_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("template_streamable", to_string(template_streamable())); } -BOOST_AUTO_TEST_CASE( template_type_serializable_yields_its_value_when_serialized ) +namespace { +template +struct template_mock_streamable +{}; +template +std::ostream& operator<<(std::ostream& s, const template_mock_streamable&) { - BOOST_CHECK_EQUAL( "template_serializable", to_string( template_serializable< int >() ) ); + BOOST_FAIL("should not have been called"); + return s; +} +} // namespace +namespace mock { +template +stream& operator<<(stream& s, const template_mock_streamable&) +{ + return s << "template_mock_streamable"; +} +} // namespace mock + +BOOST_AUTO_TEST_CASE(template_mock_streamable_yields_its_value_when_serialized) +{ + BOOST_CHECK_EQUAL("template_mock_streamable", to_string(template_mock_streamable())); } -namespace +BOOST_AUTO_TEST_CASE(std_pairs_are_serialized) { - template< typename T > - struct template_streamable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } - template< typename T > - mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) - { - return s << "template_streamable"; - } + BOOST_CHECK_EQUAL("(3,42)", to_string(std::make_pair(3, 42.f))); } -BOOST_AUTO_TEST_CASE( template_template_streamable_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(boost_shared_ptr_are_serialized) { - BOOST_CHECK_EQUAL( "template_streamable", to_string( template_streamable< int >() ) ); + BOOST_CHECK_NE("?", to_string(boost::shared_ptr())); + BOOST_CHECK_NE("?", to_string(boost::shared_ptr(new int(42)))); } -namespace +BOOST_AUTO_TEST_CASE(boost_weak_ptr_are_serialized) { - template< typename T > - struct template_mock_streamable - {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_mock_streamable< T >& ) - { - BOOST_FAIL( "should not have been called" ); - return s; - } -} -namespace mock -{ - template< typename T > - stream& operator<<( stream& s, const template_mock_streamable< T >& ) - { - return s << "template_mock_streamable"; - } -} // mock - -BOOST_AUTO_TEST_CASE( template_mock_streamable_yields_its_value_when_serialized ) -{ - BOOST_CHECK_EQUAL( "template_mock_streamable", to_string( template_mock_streamable< int >() ) ); + BOOST_CHECK_NE("?", to_string(boost::weak_ptr(boost::shared_ptr()))); + BOOST_CHECK_NE("?", to_string(boost::weak_ptr(boost::shared_ptr(new int(42))))); } -BOOST_AUTO_TEST_CASE( std_pairs_are_serialized ) +BOOST_AUTO_TEST_CASE(std_shared_ptr_are_serialized) { - BOOST_CHECK_EQUAL( "(3,42)", to_string( std::make_pair( 3, 42.f ) ) ); + BOOST_CHECK_NE("?", to_string(std::shared_ptr())); + BOOST_CHECK_NE("?", to_string(std::shared_ptr(new int(42)))); } -BOOST_AUTO_TEST_CASE( boost_shared_ptr_are_serialized ) +BOOST_AUTO_TEST_CASE(std_weak_ptr_are_serialized) { - BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( boost::shared_ptr< int >( new int( 42 ) ) ) ); + BOOST_CHECK_NE("?", to_string(std::weak_ptr(std::shared_ptr()))); + BOOST_CHECK_NE("?", to_string(std::weak_ptr(std::shared_ptr(new int(42))))); } -BOOST_AUTO_TEST_CASE( boost_weak_ptr_are_serialized ) +BOOST_AUTO_TEST_CASE(std_unique_ptr_are_serialized) { - BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >() ) ) ); - BOOST_CHECK_NE( "?", to_string( boost::weak_ptr< int >( boost::shared_ptr< int >( new int( 42 ) ) ) ) ); + BOOST_CHECK_NE("?", to_string(std::unique_ptr())); + BOOST_CHECK_NE("?", to_string(std::unique_ptr(new int(42)))); } -BOOST_AUTO_TEST_CASE( std_shared_ptr_are_serialized ) +BOOST_AUTO_TEST_CASE(std_deques_are_serialized) { - BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::shared_ptr< int >( new int( 42 ) ) ) ); + std::deque d; + d.push_back(12); + d.push_back(42); + BOOST_CHECK_EQUAL("(12,42)", to_string(d)); } -BOOST_AUTO_TEST_CASE( std_weak_ptr_are_serialized ) +BOOST_AUTO_TEST_CASE(std_lists_are_serialized) { - BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >() ) ) ); - BOOST_CHECK_NE( "?", to_string( std::weak_ptr< int >( std::shared_ptr< int >( new int( 42 ) ) ) ) ); + std::list l; + l.push_back(12); + l.push_back(42); + BOOST_CHECK_EQUAL("(12,42)", to_string(l)); } -BOOST_AUTO_TEST_CASE( std_unique_ptr_are_serialized ) +BOOST_AUTO_TEST_CASE(std_vectors_are_serialized) { - BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >() ) ); - BOOST_CHECK_NE( "?", to_string( std::unique_ptr< int >( new int( 42 ) ) ) ); + std::vector v; + v.push_back(12); + v.push_back(42); + BOOST_CHECK_EQUAL("(12,42)", to_string(v)); } -BOOST_AUTO_TEST_CASE( std_deques_are_serialized ) +BOOST_AUTO_TEST_CASE(std_maps_are_serialized) { - std::deque< int > d; - d.push_back( 12 ); - d.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( d ) ); + std::map m; + m[12] = "12"; + m[42] = "42"; + BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(m)); } -BOOST_AUTO_TEST_CASE( std_lists_are_serialized ) +BOOST_AUTO_TEST_CASE(std_multimaps_are_serialized) { - std::list< int > l; - l.push_back( 12 ); - l.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( l ) ); + std::multimap m; + m.insert(std::make_pair(12, "12")); + m.insert(std::make_pair(42, "42")); + BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(m)); } -BOOST_AUTO_TEST_CASE( std_vectors_are_serialized ) +BOOST_AUTO_TEST_CASE(std_sets_are_serialized) { - std::vector< int > v; - v.push_back( 12 ); - v.push_back( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( v ) ); + std::set s; + s.insert(12); + s.insert(42); + BOOST_CHECK_EQUAL("(12,42)", to_string(s)); } -BOOST_AUTO_TEST_CASE( std_maps_are_serialized ) +BOOST_AUTO_TEST_CASE(std_multisets_are_serialized) { - std::map< int, std::string > m; - m[ 12 ] = "12"; - m[ 42 ] = "42"; - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); + std::multiset s; + s.insert(12); + s.insert(42); + BOOST_CHECK_EQUAL("(12,42)", to_string(s)); } -BOOST_AUTO_TEST_CASE( std_multimaps_are_serialized ) +BOOST_AUTO_TEST_CASE(std_deques_of_vectors_are_serialized) { - std::multimap< int, std::string > m; - m.insert( std::make_pair( 12, "12" )); - m.insert( std::make_pair( 42, "42" )); - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( m ) ); + std::deque> v; + std::vector v1, v2; + v1.push_back(12); + v2.push_back(42); + v2.push_back(77); + v.push_back(v1); + v.push_back(v2); + BOOST_CHECK_EQUAL("((12),(42,77))", to_string(v)); } -BOOST_AUTO_TEST_CASE( std_sets_are_serialized ) +BOOST_AUTO_TEST_CASE(std_vectors_of_deques_are_serialized) { - std::set< int > s; - s.insert( 12 ); - s.insert( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); + std::vector> v; + std::deque v1, v2; + v1.push_back(12); + v2.push_back(42); + v2.push_back(77); + v.push_back(v1); + v.push_back(v2); + BOOST_CHECK_EQUAL("((12),(42,77))", to_string(v)); } -BOOST_AUTO_TEST_CASE( std_multisets_are_serialized ) +BOOST_AUTO_TEST_CASE(boost_assign_list_of_are_serialized) { - std::multiset< int > s; - s.insert( 12 ); - s.insert( 42 ); - BOOST_CHECK_EQUAL( "(12,42)", to_string( s ) ); + BOOST_CHECK_EQUAL("(12,42)", to_string(boost::assign::list_of(12)(42))); } -BOOST_AUTO_TEST_CASE( std_deques_of_vectors_are_serialized ) +BOOST_AUTO_TEST_CASE(boost_assign_map_list_of_are_serialized) { - std::deque< std::vector< int > > v; - std::vector< int > v1, v2; - v1.push_back( 12 ); - v2.push_back( 42 ); - v2.push_back( 77 ); - v.push_back( v1 ); - v.push_back( v2 ); - BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); + BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(boost::assign::map_list_of(12, "12")(42, "42"))); } -BOOST_AUTO_TEST_CASE( std_vectors_of_deques_are_serialized ) -{ - std::vector< std::deque< int > > v; - std::deque< int > v1, v2; - v1.push_back( 12 ); - v2.push_back( 42 ); - v2.push_back( 77 ); - v.push_back( v1 ); - v.push_back( v2 ); - BOOST_CHECK_EQUAL( "((12),(42,77))", to_string( v ) ); -} - -BOOST_AUTO_TEST_CASE( boost_assign_list_of_are_serialized ) -{ - BOOST_CHECK_EQUAL( "(12,42)", to_string( boost::assign::list_of( 12 )( 42 ) ) ); -} - -BOOST_AUTO_TEST_CASE( boost_assign_map_list_of_are_serialized ) -{ - BOOST_CHECK_EQUAL( "((12,\"12\"),(42,\"42\"))", to_string( boost::assign::map_list_of( 12, "12" )( 42, "42" ) ) ); -} - -BOOST_AUTO_TEST_CASE( std_reference_wrappers_are_serialized ) +BOOST_AUTO_TEST_CASE(std_reference_wrappers_are_serialized) { const int i = 3; - BOOST_CHECK_EQUAL( "3", to_string( std::cref( i ) ) ); - BOOST_CHECK_EQUAL( "\"string\"", to_string( std::cref( "string" ) ) ); + BOOST_CHECK_EQUAL("3", to_string(std::cref(i))); + BOOST_CHECK_EQUAL("\"string\"", to_string(std::cref("string"))); } -namespace +namespace { +void callable_builtin() {} +} // namespace + +BOOST_AUTO_TEST_CASE(callable_builtin_yields_a_question_mark_when_serialized) { - void callable_builtin() - {} + BOOST_CHECK_EQUAL("?", to_string(callable_builtin)); + BOOST_CHECK_EQUAL("?", to_string(&callable_builtin)); } -BOOST_AUTO_TEST_CASE( callable_builtin_yields_a_question_mark_when_serialized ) +namespace { +struct serialized_using_format +{}; +std::ostream& operator<<(std::ostream& s, const serialized_using_format&) { - BOOST_CHECK_EQUAL( "?", to_string( callable_builtin ) ); - BOOST_CHECK_EQUAL( "?", to_string( &callable_builtin ) ); + return s << mock::format("string"); +} +} // namespace + +BOOST_AUTO_TEST_CASE(type_can_use_format_when_serialized) +{ + BOOST_CHECK_EQUAL("\"string\"", to_string(serialized_using_format())); } -namespace +namespace { +struct streamed_using_format +{}; +mock::stream& operator<<(mock::stream& s, const streamed_using_format&) { - struct serialized_using_format - {}; - std::ostream& operator<<( std::ostream& s, const serialized_using_format& ) - { - return s << mock::format( "string" ); - } + return s << mock::format("string"); +} +} // namespace + +BOOST_AUTO_TEST_CASE(type_can_use_format_when_streamed) +{ + BOOST_CHECK_EQUAL("\"string\"", to_string(streamed_using_format())); } -BOOST_AUTO_TEST_CASE( type_can_use_format_when_serialized ) +namespace { +struct std_string_streamed +{}; +mock::stream& operator<<(mock::stream& s, const std_string_streamed&) { - BOOST_CHECK_EQUAL( "\"string\"", to_string( serialized_using_format() ) ); + return s << std::string("string"); +} +} // namespace + +BOOST_AUTO_TEST_CASE(std_string_streamed_is_not_a_container) +{ + BOOST_CHECK_EQUAL("string", to_string(std_string_streamed())); } -namespace -{ - struct streamed_using_format - {}; - mock::stream& operator<<( mock::stream& s, const streamed_using_format& ) - { - return s << mock::format( "string" ); - } -} - -BOOST_AUTO_TEST_CASE( type_can_use_format_when_streamed ) -{ - BOOST_CHECK_EQUAL( "\"string\"", to_string( streamed_using_format() ) ); -} - -namespace -{ - struct std_string_streamed - {}; - mock::stream& operator<<( mock::stream& s, const std_string_streamed& ) - { - return s << std::string( "string" ); - } -} - -BOOST_AUTO_TEST_CASE( std_string_streamed_is_not_a_container ) -{ - BOOST_CHECK_EQUAL( "string", to_string( std_string_streamed() ) ); -} - -namespace mock -{ -namespace detail -{ - template< typename T > +namespace mock { namespace detail { + template struct template_serializable {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_serializable< T >& ) + template + std::ostream& operator<<(std::ostream& s, const template_serializable&) { return s << "mock::detail::template_serializable"; } -} -} // mock +}} // namespace mock::detail -BOOST_AUTO_TEST_CASE( mock_detail_template_type_serializable_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(mock_detail_template_type_serializable_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "mock::detail::template_serializable", to_string( mock::detail::template_serializable< int >() ) ); + BOOST_CHECK_EQUAL("mock::detail::template_serializable", to_string(mock::detail::template_serializable())); } -namespace mock -{ -namespace detail -{ - template< typename T > +namespace mock { namespace detail { + template struct template_streamable {}; - template< typename T > - std::ostream& operator<<( std::ostream& s, const template_streamable< T >& ) + template + std::ostream& operator<<(std::ostream& s, const template_streamable&) { - BOOST_FAIL( "should not have been called" ); + BOOST_FAIL("should not have been called"); return s; } - template< typename T > - mock::stream& operator<<( mock::stream& s, const template_streamable< T >& ) + template + mock::stream& operator<<(mock::stream& s, const template_streamable&) { return s << "mock::detail::template_streamable"; } -} -} // mock +}} // namespace mock::detail -BOOST_AUTO_TEST_CASE( mock_detail_template_template_streamable_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(mock_detail_template_template_streamable_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "mock::detail::template_streamable", to_string( mock::detail::template_streamable< int >() ) ); + BOOST_CHECK_EQUAL("mock::detail::template_streamable", to_string(mock::detail::template_streamable())); } -BOOST_AUTO_TEST_CASE( unsigned_char_is_serialized_as_int ) +BOOST_AUTO_TEST_CASE(unsigned_char_is_serialized_as_int) { - BOOST_CHECK_EQUAL( std::to_string( static_cast< int >( 'a' ) ), to_string< unsigned char >( 'a' ) ); + BOOST_CHECK_EQUAL(std::to_string(static_cast('a')), to_string('a')); } -namespace +namespace { +bool some_function() { - bool some_function() - { - return false; - } + return false; +} +} // namespace + +BOOST_AUTO_TEST_CASE(boost_phoenix_functor_yields_question_mark_when_serialized) +{ + BOOST_CHECK_EQUAL("?", to_string(boost::phoenix::bind(&some_function))); + BOOST_CHECK_EQUAL("?", to_string(boost::phoenix::arg_names::_1 < 42)); } -BOOST_AUTO_TEST_CASE( boost_phoenix_functor_yields_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE(bind_functor_yields_question_mark_when_serialized) { - BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::bind( &some_function ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( boost::phoenix::arg_names::_1 < 42 ) ); -} - -BOOST_AUTO_TEST_CASE( bind_functor_yields_question_mark_when_serialized ) -{ - BOOST_CHECK_EQUAL( "?", to_string( boost::bind( &some_function ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( std::bind( &some_function ) ) ); + BOOST_CHECK_EQUAL("?", to_string(boost::bind(&some_function))); + BOOST_CHECK_EQUAL("?", to_string(std::bind(&some_function))); } #ifndef BOOST_MSVC // this produces an ICE with all versions of MSVC -BOOST_AUTO_TEST_CASE( boost_lambda_functor_yields_question_mark_when_serialized ) +BOOST_AUTO_TEST_CASE(boost_lambda_functor_yields_question_mark_when_serialized) { - BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::bind( &some_function ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( boost::lambda::_1 < 42 ) ); + BOOST_CHECK_EQUAL("?", to_string(boost::lambda::bind(&some_function))); + BOOST_CHECK_EQUAL("?", to_string(boost::lambda::_1 < 42)); } #endif -BOOST_AUTO_TEST_CASE( nullptr_is_serialized ) +BOOST_AUTO_TEST_CASE(nullptr_is_serialized) { - BOOST_CHECK_EQUAL( "nullptr", to_string( nullptr ) ); + BOOST_CHECK_EQUAL("nullptr", to_string(nullptr)); } -BOOST_AUTO_TEST_CASE( mock_boost_optional_yields_its_value_when_serialized ) +BOOST_AUTO_TEST_CASE(mock_boost_optional_yields_its_value_when_serialized) { - BOOST_CHECK_EQUAL( "7", to_string( boost::optional< int >( 7 ) ) ); - BOOST_CHECK_EQUAL( "?", to_string( boost::optional< non_serializable >( non_serializable() ) ) ); - BOOST_CHECK_EQUAL( "none", to_string( boost::optional< int >() ) ); - BOOST_CHECK_EQUAL( "none", to_string( boost::optional< non_serializable >() ) ); - BOOST_CHECK_EQUAL( "none", to_string( boost::none ) ); + BOOST_CHECK_EQUAL("7", to_string(boost::optional(7))); + BOOST_CHECK_EQUAL("?", to_string(boost::optional(non_serializable()))); + BOOST_CHECK_EQUAL("none", to_string(boost::optional())); + BOOST_CHECK_EQUAL("none", to_string(boost::optional())); + BOOST_CHECK_EQUAL("none", to_string(boost::none)); } diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index 916f20b..b352a20 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -9,70 +9,66 @@ #include #include -namespace +namespace { +template +bool match(Expected expected, Actual actual) { - template< typename Expected, typename Actual > - bool match( Expected expected, Actual actual ) - { - return mock::matcher< Actual, Expected >( expected )( actual ); - } + return mock::matcher(expected)(actual); +} +} // namespace + +BOOST_AUTO_TEST_CASE(int_and_int_can_be_compared) +{ + BOOST_CHECK(match(3, 3)); + BOOST_CHECK(!match(3, 4)); + BOOST_CHECK(!match(4, 3)); } -BOOST_AUTO_TEST_CASE( int_and_int_can_be_compared ) -{ - BOOST_CHECK( match( 3, 3 ) ); - BOOST_CHECK( ! match( 3, 4 ) ); - BOOST_CHECK( ! match( 4, 3 ) ); -} - -BOOST_AUTO_TEST_CASE( ref_to_int_and_int_can_be_compared ) +BOOST_AUTO_TEST_CASE(ref_to_int_and_int_can_be_compared) { const int i = 3; - BOOST_CHECK( match( 3, std::cref( i ) ) ); - BOOST_CHECK( ! match( 4, std::cref( i ) ) ); + BOOST_CHECK(match(3, std::cref(i))); + BOOST_CHECK(!match(4, std::cref(i))); } -namespace +namespace { +struct fixture { - struct fixture + fixture() : text("same text"), actual(text.c_str()) { - fixture() - : text( "same text" ) - , actual( text.c_str() ) - { - const char* static_string = "same text"; - BOOST_REQUIRE( actual != static_string ); - BOOST_REQUIRE( actual == std::string( static_string ) ); - } - std::string text; - const char* actual; - }; -} + const char* static_string = "same text"; + BOOST_REQUIRE(actual != static_string); + BOOST_REQUIRE(actual == std::string(static_string)); + } + std::string text; + const char* actual; +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_pointer_can_be_compared, fixture ) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_pointer_can_be_compared, fixture) { const char* expected = "same text"; - BOOST_CHECK( match( expected, actual ) ); + BOOST_CHECK(match(expected, actual)); const char* unexpected = "different text"; - BOOST_CHECK( ! match( actual, unexpected ) ); + BOOST_CHECK(!match(actual, unexpected)); } -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_string_literal_can_be_compared, fixture ) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_string_literal_can_be_compared, fixture) { - BOOST_CHECK( match( "same text", actual ) ); - BOOST_CHECK( ! match( "different text", actual ) ); + BOOST_CHECK(match("same text", actual)); + BOOST_CHECK(!match("different text", actual)); } -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_const_char_array_can_be_compared, fixture ) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_array_can_be_compared, fixture) { const char expected[10] = "same text"; - BOOST_CHECK( match( expected, actual ) ); + BOOST_CHECK(match(expected, actual)); const char unexpected[15] = "different text"; - BOOST_CHECK( ! match( unexpected, actual ) ); + BOOST_CHECK(!match(unexpected, actual)); } -BOOST_FIXTURE_TEST_CASE( const_char_pointer_and_std_string_can_be_compared, fixture ) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixture) { - BOOST_CHECK( match( std::string( "same text" ), actual ) ); - BOOST_CHECK( ! match( std::string( "different text" ), actual ) ); + BOOST_CHECK(match(std::string("same text"), actual)); + BOOST_CHECK(!match(std::string("different text"), actual)); } diff --git a/test/test_max_args.cpp b/test/test_max_args.cpp index 7d74943..14ac35e 100644 --- a/test/test_max_args.cpp +++ b/test/test_max_args.cpp @@ -8,32 +8,31 @@ #include "mock_error.hpp" #include -#include #include +#include #define IDENTITY(z, n, d) d -namespace +namespace { +struct my_custom_mock { - struct my_custom_mock - { - MOCK_METHOD_EXT( method, MOCK_MAX_ARGS, void( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag ) - MOCK_METHOD_EXT( method2, MOCK_MAX_ARGS, int( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int) ), tag_2 ) - }; -} + MOCK_METHOD_EXT(method, MOCK_MAX_ARGS, void(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag) + MOCK_METHOD_EXT(method2, MOCK_MAX_ARGS, int(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(call_mock_method_with_max_number_of_args, mock_error_fixture) { my_custom_mock m; - MOCK_EXPECT( m.tag ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); - m.method( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.tag).once().with(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)); + m.method(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( call_mock_method_with_max_number_of_args_and_a_return_value, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(call_mock_method_with_max_number_of_args_and_a_return_value, mock_error_fixture) { my_custom_mock m; - MOCK_EXPECT( m.tag_2 ).once().with( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ).returns( 42 ); - BOOST_CHECK_EQUAL( 42, m.method2( BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0) ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.tag_2).once().with(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)).returns(42); + BOOST_CHECK_EQUAL(42, m.method2(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0))); + CHECK_CALLS(1); } diff --git a/test/test_mock.cpp b/test/test_mock.cpp index aecaa9a..edcea98 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -11,404 +11,385 @@ #include #include -namespace +namespace { +template +void my_function(T& t) { - template< typename T > - void my_function( T& t ) - { - t.my_method( "some parameter" ); - } - MOCK_CLASS( mock_class ) - { - MOCK_METHOD_EXT( my_method, 1, void( const std::string& ), my_tag ) - }; + t.my_method("some parameter"); } +MOCK_CLASS(mock_class) +{ + MOCK_METHOD_EXT(my_method, 1, void(const std::string&), my_tag) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_object_for_static_polymorphism, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_for_static_polymorphism, mock_error_fixture) { const mock_class m; - MOCK_EXPECT( m.my_tag ).once().with( "some parameter" ); - my_function( m ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.my_tag).once().with("some parameter"); + my_function(m); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(mock_class_with_operator) { - MOCK_CLASS( mock_class_with_operator ) - { - MOCK_CONST_METHOD_EXT( operator+=, 1, mock_class_with_operator&( int ), addition ) - }; -} + MOCK_CONST_METHOD_EXT(operator+=, 1, mock_class_with_operator &(int), addition) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_addition_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_addition_operator, mock_error_fixture) { mock_class_with_operator m; - MOCK_EXPECT( m.addition ).once().returns( std::ref( m ) ); + MOCK_EXPECT(m.addition).once().returns(std::ref(m)); m += 1; - CHECK_CALLS( 1 ); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(mock_class_with_conversion_operator) { - MOCK_CLASS( mock_class_with_conversion_operator ) - { - MOCK_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} + MOCK_CONVERSION_OPERATOR(operator, int, conversion) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_conversion_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_conversion_operator, mock_error_fixture) { mock_class_with_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.conversion).once().returns(42); + BOOST_CHECK_EQUAL(42, static_cast(m)); + CHECK_CALLS(1); } -namespace +namespace { +template +MOCK_CLASS(mock_template_class_with_conversion_operator) +{ MOCK_CONVERSION_OPERATOR_TPL(operator, T, conversion) }; +} // namespace + +BOOST_FIXTURE_TEST_CASE(mock_template_conversion_operator, mock_error_fixture) { - template< typename T > - MOCK_CLASS( mock_template_class_with_conversion_operator ) - { - MOCK_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; + mock_template_class_with_conversion_operator m; + MOCK_EXPECT(m.conversion).once().returns(42); + BOOST_CHECK_EQUAL(42, static_cast(m)); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( mock_template_conversion_operator, mock_error_fixture ) +namespace { +MOCK_CLASS(mock_class_with_const_conversion_operator) { - mock_template_class_with_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); -} + MOCK_CONST_CONVERSION_OPERATOR(operator, int, conversion) +}; +} // namespace -namespace -{ - MOCK_CLASS( mock_class_with_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} - -BOOST_FIXTURE_TEST_CASE( mock_const_conversion_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_const_conversion_operator, mock_error_fixture) { mock_class_with_const_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); + MOCK_EXPECT(m.conversion).once().returns(42); int i = m; - BOOST_CHECK_EQUAL( 42, i ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(42, i); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(mock_class_with_non_const_conversion_operator) { - MOCK_CLASS( mock_class_with_non_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR( operator, int, conversion ) - }; -} + MOCK_CONST_CONVERSION_OPERATOR(operator, int, conversion) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_non_const_conversion_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_non_const_conversion_operator, mock_error_fixture) { mock_class_with_non_const_conversion_operator m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); + MOCK_EXPECT(m.conversion).once().returns(42); int i = m; - BOOST_CHECK_EQUAL( 42, i ); - CHECK_CALLS( 1 ); + BOOST_CHECK_EQUAL(42, i); + CHECK_CALLS(1); } -namespace +namespace { +template +MOCK_CLASS(mock_template_class_with_const_conversion_operator) { - template< typename T > - MOCK_CLASS( mock_template_class_with_const_conversion_operator ) - { - MOCK_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; -} + MOCK_CONST_CONVERSION_OPERATOR_TPL(operator, T, conversion) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_template_const_conversion_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_template_const_conversion_operator, mock_error_fixture) { - mock_template_class_with_const_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); + mock_template_class_with_const_conversion_operator m; + MOCK_EXPECT(m.conversion).once().returns(42); + BOOST_CHECK_EQUAL(42, static_cast(m)); + CHECK_CALLS(1); } -namespace +namespace { +template +MOCK_CLASS(mock_template_class_with_non_const_conversion_operator) { - template< typename T > - MOCK_CLASS( mock_template_class_with_non_const_conversion_operator ) - { - MOCK_NON_CONST_CONVERSION_OPERATOR_TPL( operator, T, conversion ) - }; -} + MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(operator, T, conversion) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_template_non_const_conversion_operator, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_template_non_const_conversion_operator, mock_error_fixture) { - mock_template_class_with_non_const_conversion_operator< int > m; - MOCK_EXPECT( m.conversion ).once().returns( 42 ); - BOOST_CHECK_EQUAL( 42, static_cast< int >( m ) ); - CHECK_CALLS( 1 ); + mock_template_class_with_non_const_conversion_operator m; + MOCK_EXPECT(m.conversion).once().returns(42); + BOOST_CHECK_EQUAL(42, static_cast(m)); + CHECK_CALLS(1); } -namespace +namespace { +MOCK_CLASS(my_mock) { - MOCK_CLASS( my_mock ) - { - MOCK_CONST_METHOD_EXT( my_method, 1, void( int ), my_method ) - MOCK_CONST_METHOD_EXT( my_method_2, 1, void( int ), my_method_2 ) - }; -} + MOCK_CONST_METHOD_EXT(my_method, 1, void(int), my_method) + MOCK_CONST_METHOD_EXT(my_method_2, 1, void(int), my_method_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture) { my_mock m; - const auto f = std::bind( &my_mock::my_method, &m, 42 ); - (void) f; + const auto f = std::bind(&my_mock::my_method, &m, 42); + (void)f; } -BOOST_FIXTURE_TEST_CASE( MOCK_VERIFY_macro, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(MOCK_VERIFY_macro, mock_error_fixture) { my_mock m; - MOCK_VERIFY( m.my_method ); + MOCK_VERIFY(m.my_method); } -BOOST_FIXTURE_TEST_CASE( MOCK_RESET_macro, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(MOCK_RESET_macro, mock_error_fixture) { my_mock m; - MOCK_RESET( m.my_method ); + MOCK_RESET(m.my_method); } -BOOST_FIXTURE_TEST_CASE( MOCK_EXPECT_macro, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(MOCK_EXPECT_macro, mock_error_fixture) { my_mock m; - MOCK_EXPECT( m.my_method ).once().with( 42 ); - m.my_method( 42 ); - CHECK_CALLS( 1 ); + MOCK_EXPECT(m.my_method).once().with(42); + m.my_method(42); + CHECK_CALLS(1); } -namespace +namespace { +template +std::string to_string(const T& t) { - template< typename T > - std::string to_string( const T& t ) - { - std::stringstream s; - s << t; - return s.str(); - } + std::stringstream s; + s << t; + return s.str(); } +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_object_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_is_named, mock_error_fixture) { my_mock m; - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_method_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m.my_method ) ) ); - BOOST_CHECK_EQUAL( "m.my_mock::my_method", to_string( MOCK_HELPER( m.my_method ) ) ); + BOOST_CHECK_EQUAL("?.my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m.my_method))); + BOOST_CHECK_EQUAL("?.my_mock::my_method_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_method_2))); + BOOST_CHECK_EQUAL("m.my_mock::my_method", to_string(MOCK_HELPER(m.my_method))); + BOOST_CHECK_EQUAL("m.my_mock::my_method_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_method_2))); + BOOST_CHECK_EQUAL("m.my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m.my_method))); + BOOST_CHECK_EQUAL("m.my_mock::my_method", to_string(MOCK_HELPER(m.my_method))); } -BOOST_FIXTURE_TEST_CASE( mock_object_shared_pointer_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_shared_pointer_is_named, mock_error_fixture) { - std::shared_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + std::shared_ptr m(new my_mock); + BOOST_CHECK_EQUAL("?.my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_HELPER(m->my_method))); } -BOOST_FIXTURE_TEST_CASE( mock_object_const_shared_pointer_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_object_const_shared_pointer_is_named, mock_error_fixture) { - const std::shared_ptr< my_mock > m( new my_mock ); - BOOST_CHECK_EQUAL( "?.my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_ANONYMOUS_HELPER( m->my_method ) ) ); - BOOST_CHECK_EQUAL( "m->my_mock::my_method", to_string( MOCK_HELPER( m->my_method ) ) ); + const std::shared_ptr m(new my_mock); + BOOST_CHECK_EQUAL("?.my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_ANONYMOUS_HELPER(m->my_method))); + BOOST_CHECK_EQUAL("m->my_mock::my_method", to_string(MOCK_HELPER(m->my_method))); } -namespace +namespace { +struct my_custom_mock { - struct my_custom_mock - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) - }; -} + MOCK_METHOD_EXT(my_method, 0, void(), my_tag) + MOCK_METHOD_EXT(my_method_2, 0, void(), my_tag_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_and_without_inheriting_from_object_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros_and_without_inheriting_from_object_is_named, + mock_error_fixture) { my_custom_mock m; - BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "?.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL("?.my_custom_mock::my_tag", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("?.my_custom_mock::my_tag_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag_2))); + BOOST_CHECK_EQUAL("m.my_custom_mock::my_tag", to_string(MOCK_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("m.my_custom_mock::my_tag_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag_2))); + BOOST_CHECK_EQUAL("m.my_custom_mock::my_tag", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("m.my_custom_mock::my_tag", to_string(MOCK_HELPER(m.my_tag))); } -namespace +namespace { +struct my_custom_mock_object : mock::object { - struct my_custom_mock_object : mock::object - { - MOCK_METHOD_EXT( my_method, 0, void(), my_tag ) - MOCK_METHOD_EXT( my_method_2, 0, void(), my_tag_2 ) - }; -} + MOCK_METHOD_EXT(my_method, 0, void(), my_tag) + MOCK_METHOD_EXT(my_method_2, 0, void(), my_tag_2) +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( custom_mock_object_without_macros_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros_is_named, mock_error_fixture) { my_custom_mock_object m; - BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "?.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag_2", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag_2 ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_ANONYMOUS_HELPER( m.my_tag ) ) ); - BOOST_CHECK_EQUAL( "m.my_custom_mock_object::my_tag", to_string( MOCK_HELPER( m.my_tag ) ) ); + BOOST_CHECK_EQUAL("?.my_custom_mock_object::my_tag", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("?.my_custom_mock_object::my_tag_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag_2))); + BOOST_CHECK_EQUAL("m.my_custom_mock_object::my_tag", to_string(MOCK_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("m.my_custom_mock_object::my_tag_2", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag_2))); + BOOST_CHECK_EQUAL("m.my_custom_mock_object::my_tag", to_string(MOCK_ANONYMOUS_HELPER(m.my_tag))); + BOOST_CHECK_EQUAL("m.my_custom_mock_object::my_tag", to_string(MOCK_HELPER(m.my_tag))); } -BOOST_FIXTURE_TEST_CASE( mock_functor, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor, mock_error_fixture) { - MOCK_FUNCTOR( f1, void() ); - MOCK_FUNCTOR( f2, int( const std::string& ) ); + MOCK_FUNCTOR(f1, void()); + MOCK_FUNCTOR(f2, int(const std::string&)); } -namespace +namespace { +template +struct tpl_functor_class { - template< typename T > - struct tpl_functor_class - { - MOCK_FUNCTOR( f, void( T ) ); - }; -} + MOCK_FUNCTOR(f, void(T)); +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( mock_functor_reset, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_reset, mock_error_fixture) { - MOCK_FUNCTOR( f, void() ); - MOCK_RESET( f ); - mock::reset( f ); + MOCK_FUNCTOR(f, void()); + MOCK_RESET(f); + mock::reset(f); } -BOOST_FIXTURE_TEST_CASE( mock_functor_verify, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_verify, mock_error_fixture) { - MOCK_FUNCTOR( f, void() ); - MOCK_VERIFY( f ); - mock::verify( f ); + MOCK_FUNCTOR(f, void()); + MOCK_VERIFY(f); + mock::verify(f); } -BOOST_FIXTURE_TEST_CASE( mock_functor_is_named, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(mock_functor_is_named, mock_error_fixture) { - MOCK_FUNCTOR( f, void() ); - BOOST_CHECK_EQUAL( "f", to_string( MOCK_HELPER( f ) ) ); + MOCK_FUNCTOR(f, void()); + BOOST_CHECK_EQUAL("f", to_string(MOCK_HELPER(f))); } -namespace +namespace { +MOCK_FUNCTION(mock_function, 1, float(int), mock_function) +} + +BOOST_FIXTURE_TEST_CASE(mock_function_is_named, mock_error_fixture) { - MOCK_FUNCTION( mock_function, 1, float( int ), mock_function ) + BOOST_CHECK_EQUAL("mock_function", to_string(MOCK_HELPER(mock_function))); } -BOOST_FIXTURE_TEST_CASE( mock_function_is_named, mock_error_fixture ) +namespace { +MOCK_CLASS(static_function_class) { - BOOST_CHECK_EQUAL( "mock_function", to_string( MOCK_HELPER( mock_function ) ) ); -} + MOCK_STATIC_METHOD(f, 1, float(int), f) +}; +} // namespace -namespace +BOOST_FIXTURE_TEST_CASE(mock_static_function_is_named, mock_error_fixture) { - MOCK_CLASS( static_function_class ) - { - MOCK_STATIC_METHOD( f, 1, float( int ), f ) - }; + BOOST_CHECK_EQUAL("static_function_class::f", to_string(MOCK_HELPER(static_function_class::f))); } -BOOST_FIXTURE_TEST_CASE( mock_static_function_is_named, mock_error_fixture ) +namespace { +MOCK_CLASS(round_parenthesized_signature) { - BOOST_CHECK_EQUAL( "static_function_class::f", to_string( MOCK_HELPER( static_function_class::f ) ) ); -} + MOCK_METHOD_EXT(m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m0) + MOCK_STATIC_METHOD(m1, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m1) + MOCK_FUNCTOR(f0, MOCK_PROTECT_FUNCTION_SIG(std::map())); +}; +MOCK_FUNCTION(fun0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), fun0) +} // namespace -namespace +namespace { +struct base { - MOCK_CLASS( round_parenthesized_signature ) - { - MOCK_METHOD_EXT( m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), m0 ) - MOCK_STATIC_METHOD( m1, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), m1 ) - MOCK_FUNCTOR( f0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()) ); - }; - MOCK_FUNCTION( fun0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()), fun0 ) -} + virtual ~base() = default; -namespace + virtual void m1() = 0; + virtual void m10() const = 0; + virtual void m11() = 0; +}; + +MOCK_BASE_CLASS(variadic, base) { - struct base - { - virtual ~base() = default; + MOCK_METHOD(m1, 0) + MOCK_METHOD(m2, 0, void()) + MOCK_METHOD(m3, 0, void(), m3) + MOCK_CONST_METHOD(m10, 0) + MOCK_CONST_METHOD(m4, 0, void()) + MOCK_CONST_METHOD(m5, 0, void(), m5) + MOCK_NON_CONST_METHOD(m11, 0) + MOCK_NON_CONST_METHOD(m6, 0, void()) + MOCK_NON_CONST_METHOD(m7, 0, void(), m7) + MOCK_STATIC_METHOD(m8, 0, void()) + MOCK_STATIC_METHOD(m9, 0, void(), m9) +}; - virtual void m1() = 0; - virtual void m10() const = 0; - virtual void m11() = 0; - }; +template +MOCK_BASE_CLASS(variadic_tpl, base) +{ + MOCK_METHOD(m1, 0, void()) + MOCK_METHOD_TPL(m2, 0, T()) + MOCK_METHOD_TPL(m3, 0, T(), m3) + MOCK_CONST_METHOD_TPL(m4, 0, T()) + MOCK_CONST_METHOD_TPL(m5, 0, T(), m5) + MOCK_NON_CONST_METHOD_TPL(m6, 0, T()) + MOCK_NON_CONST_METHOD_TPL(m7, 0, T(), m7) + MOCK_STATIC_METHOD_TPL(m8, 0, T()) + MOCK_STATIC_METHOD_TPL(m9, 0, T(), m9) +}; - MOCK_BASE_CLASS( variadic, base ) - { - MOCK_METHOD( m1, 0 ) - MOCK_METHOD( m2, 0, void() ) - MOCK_METHOD( m3, 0, void(), m3 ) - MOCK_CONST_METHOD( m10, 0 ) - MOCK_CONST_METHOD( m4, 0, void() ) - MOCK_CONST_METHOD( m5, 0, void(), m5 ) - MOCK_NON_CONST_METHOD( m11, 0 ) - MOCK_NON_CONST_METHOD( m6, 0, void() ) - MOCK_NON_CONST_METHOD( m7, 0, void(), m7 ) - MOCK_STATIC_METHOD( m8, 0, void() ) - MOCK_STATIC_METHOD( m9, 0, void(), m9 ) - }; +MOCK_BASE_CLASS(comma_base, std::map) +{}; - template< typename T > - MOCK_BASE_CLASS( variadic_tpl, base ) - { - MOCK_METHOD( m1, 0, void() ) - MOCK_METHOD_TPL( m2, 0, T() ) - MOCK_METHOD_TPL( m3, 0, T(), m3 ) - MOCK_CONST_METHOD_TPL( m4, 0, T() ) - MOCK_CONST_METHOD_TPL( m5, 0, T(), m5 ) - MOCK_NON_CONST_METHOD_TPL( m6, 0, T() ) - MOCK_NON_CONST_METHOD_TPL( m7, 0, T(), m7 ) - MOCK_STATIC_METHOD_TPL( m8, 0, T() ) - MOCK_STATIC_METHOD_TPL( m9, 0, T(), m9 ) - }; +MOCK_FUNCTION(fun1, 0, void()) +MOCK_FUNCTION(fun2, 0, void(), fun2) +MOCK_FUNCTION(fun3, 0, MOCK_PROTECT_FUNCTION_SIG(std::map())) - MOCK_BASE_CLASS( comma_base, std::map< int, int > ) - {}; - - MOCK_FUNCTION( fun1, 0, void() ) - MOCK_FUNCTION( fun2, 0, void(), fun2 ) - MOCK_FUNCTION( fun3, 0, MOCK_PROTECT_FUNCTION_SIG(std::map< int, int >()) ) - - MOCK_FUNCTOR( f_variadic, std::map< int, int >() ); -} +MOCK_FUNCTOR(f_variadic, std::map()); +} // namespace #ifdef BOOST_MSVC -# define MOCK_STDCALL __stdcall +# define MOCK_STDCALL __stdcall #else -# define MOCK_STDCALL +# define MOCK_STDCALL #endif -namespace stdcall +namespace stdcall { +struct base { - struct base - { - virtual ~base() = default; + virtual ~base() = default; - virtual void MOCK_STDCALL m1() = 0; - }; + virtual void MOCK_STDCALL m1() = 0; +}; - MOCK_BASE_CLASS( derived, base ) - { - MOCK_CONSTRUCTOR( MOCK_STDCALL derived, 0, (), derived ) - MOCK_DESTRUCTOR( MOCK_STDCALL ~derived, derived ) - MOCK_CONVERSION_OPERATOR( MOCK_STDCALL operator, int, to_int ) - MOCK_METHOD_EXT( MOCK_STDCALL m1, 0, void(), m1 ) - MOCK_METHOD_EXT( MOCK_STDCALL m2, 0, void(), m2 ) - MOCK_METHOD( MOCK_STDCALL m3, 0, void(), m3 ) - MOCK_STATIC_METHOD( MOCK_STDCALL m4, 0, void(), m4 ) - }; +MOCK_BASE_CLASS(derived, base) +{ + MOCK_CONSTRUCTOR(MOCK_STDCALL derived, 0, (), derived) + MOCK_DESTRUCTOR(MOCK_STDCALL ~derived, derived) + MOCK_CONVERSION_OPERATOR(MOCK_STDCALL operator, int, to_int) + MOCK_METHOD_EXT(MOCK_STDCALL m1, 0, void(), m1) + MOCK_METHOD_EXT(MOCK_STDCALL m2, 0, void(), m2) + MOCK_METHOD(MOCK_STDCALL m3, 0, void(), m3) + MOCK_STATIC_METHOD(MOCK_STDCALL m4, 0, void(), m4) +}; - MOCK_FUNCTION( MOCK_STDCALL f, 0, void(), f ) -} +MOCK_FUNCTION(MOCK_STDCALL f, 0, void(), f) +} // namespace stdcall diff --git a/test/test_object.cpp b/test/test_object.cpp index bd11dc3..2c1e202 100644 --- a/test/test_object.cpp +++ b/test/test_object.cpp @@ -7,102 +7,81 @@ // http://www.boost.org/LICENSE_1_0.txt) #include "mock_error.hpp" +#include #include #include -#include #include #include -namespace -{ - struct object : mock::object - {}; +namespace { +struct object : mock::object +{}; - object static_o; -} +object static_o; +} // namespace -BOOST_FIXTURE_TEST_CASE( verifying_an_empty_object_succeeds, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_an_empty_object_succeeds, mock_error_fixture) { object o; - BOOST_CHECK( mock::verify( o ) ); + BOOST_CHECK(mock::verify(o)); } -namespace +namespace { +struct fixture : mock_error_fixture { - struct fixture : mock_error_fixture - { - fixture() - { - mock::detail::configure( o, e, "instance", mock::detail::make_type_name(o), "name" ); - } - object o; - mock::detail::function< void() > e; - }; -} + fixture() { mock::detail::configure(o, e, "instance", mock::detail::make_type_name(o), "name"); } + object o; + mock::detail::function e; +}; +} // namespace -BOOST_FIXTURE_TEST_CASE( verifying_an_object_containing_a_failing_expectation_fails, fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_an_object_containing_a_failing_expectation_fails, fixture) { e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - mock::reset( o ); - BOOST_CHECK( mock::verify( o ) ); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o)), "verification failed", 0, "instanceobject::name\n. once()"); + mock::reset(o); + BOOST_CHECK(mock::verify(o)); } -BOOST_FIXTURE_TEST_CASE( verifying_all_objects_with_one_of_them_containing_a_failing_expectation_fails, fixture ) +BOOST_FIXTURE_TEST_CASE(verifying_all_objects_with_one_of_them_containing_a_failing_expectation_fails, fixture) { e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify() ), - "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!mock::verify()), "verification failed", 0, "instanceobject::name\n. once()"); mock::reset(); - BOOST_CHECK( mock::verify() ); + BOOST_CHECK(mock::verify()); } -BOOST_FIXTURE_TEST_CASE( resetting_an_object_containing_a_failing_expectation_and_verifying_it_succeeds, fixture ) +BOOST_FIXTURE_TEST_CASE(resetting_an_object_containing_a_failing_expectation_and_verifying_it_succeeds, fixture) { e.expect().once(); - mock::reset( o ); - BOOST_CHECK( mock::verify( o ) ); + mock::reset(o); + BOOST_CHECK(mock::verify(o)); } -BOOST_FIXTURE_TEST_CASE( an_object_is_assignable_by_sharing_its_state, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(an_object_is_assignable_by_sharing_its_state, mock_error_fixture) { object o1; - mock::detail::function< void() > e; + mock::detail::function e; { object o2; - mock::detail::configure( o2, e, "instance", mock::detail::make_type_name(o2), "name" ); + mock::detail::configure(o2, e, "instance", mock::detail::make_type_name(o2), "name"); e.expect().once(); o1 = o2; - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o2 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o1)), "verification failed", 0, "instanceobject::name\n. once()"); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o2)), "verification failed", 0, "instanceobject::name\n. once()"); } - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o1)), "verification failed", 0, "instanceobject::name\n. once()"); } -BOOST_FIXTURE_TEST_CASE( an_object_is_copiable_by_sharing_its_state, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(an_object_is_copiable_by_sharing_its_state, mock_error_fixture) { auto o2 = std::make_unique(); - const object o1( *o2 ); - mock::detail::function< void() > e; - mock::detail::configure( *o2, e, "instance", mock::detail::make_type_name(*o2), "name" ); + const object o1(*o2); + mock::detail::function e; + mock::detail::configure(*o2, e, "instance", mock::detail::make_type_name(*o2), "name"); e.expect().once(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( *o2 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!mock::verify(*o2)), "verification failed", 0, "instanceobject::name\n. once()"); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o1)), "verification failed", 0, "instanceobject::name\n. once()"); o2.reset(); - CHECK_ERROR( - BOOST_CHECK( ! mock::verify( o1 ) ), - "verification failed", 0, "instanceobject::name\n. once()" ); + CHECK_ERROR(BOOST_CHECK(!mock::verify(o1)), "verification failed", 0, "instanceobject::name\n. once()"); } diff --git a/test/test_sequence.cpp b/test/test_sequence.cpp index 2a7b584..2415cf4 100644 --- a/test/test_sequence.cpp +++ b/test/test_sequence.cpp @@ -7,108 +7,110 @@ // http://www.boost.org/LICENSE_1_0.txt) #include "mock_error.hpp" -#include #include +#include #include -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture) { mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().once().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - CHECK_ERROR( e( 1 ), "sequence failed", 1, "?( 1 )\n. once().with( 1 )\nv once().with( 2 )" ); + mock::detail::function e; + e.expect().once().with(1).in(s); + e.expect().once().with(2).in(s); + BOOST_CHECK_NO_THROW(e(2)); + CHECK_ERROR(e(1), "sequence failed", 1, "?( 1 )\n. once().with( 1 )\nv once().with( 2 )"); } -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_out_of_order_multiple_invocations_throws, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_and_calling_out_of_order_multiple_invocations_throws, + mock_error_fixture) { mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - CHECK_ERROR( e( 1 ), "sequence failed", 2, "?( 1 )\n. unlimited().with( 1 )\nv once().with( 2 )" ); + mock::detail::function e; + e.expect().with(1).in(s); + e.expect().once().with(2).in(s); + BOOST_CHECK_NO_THROW(e(1)); + BOOST_CHECK_NO_THROW(e(2)); + CHECK_ERROR(e(1), "sequence failed", 2, "?( 1 )\n. unlimited().with( 1 )\nv once().with( 2 )"); } -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_calling_in_order_is_valid, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_and_calling_in_order_is_valid, mock_error_fixture) { mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().once().with( 1 ).in( s ); - e.expect().once().with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 2 ); + mock::detail::function e; + e.expect().once().with(1).in(s); + e.expect().once().with(2).in(s); + BOOST_CHECK_NO_THROW(e(1)); + BOOST_CHECK_NO_THROW(e(2)); + BOOST_CHECK(e.verify()); + CHECK_CALLS(2); } -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_and_multiply_calling_in_order_is_valid, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_and_multiply_calling_in_order_is_valid, mock_error_fixture) { mock::sequence s; - mock::detail::function< void( int ) > e; - e.expect().exactly( 2 ).with( 1 ).in( s ); - e.expect().exactly( 2 ).with( 2 ).in( s ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 1 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK_NO_THROW( e( 2 ) ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 4 ); + mock::detail::function e; + e.expect().exactly(2).with(1).in(s); + e.expect().exactly(2).with(2).in(s); + BOOST_CHECK_NO_THROW(e(1)); + BOOST_CHECK_NO_THROW(e(1)); + BOOST_CHECK_NO_THROW(e(2)); + BOOST_CHECK_NO_THROW(e(2)); + BOOST_CHECK(e.verify()); + CHECK_CALLS(4); } -BOOST_FIXTURE_TEST_CASE( registering_to_a_sequence_enforces_call_order_verification_between_two_different_expectations, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_enforces_call_order_verification_between_two_different_expectations, + mock_error_fixture) { mock::sequence s; - mock::detail::function< void() > e1, e2; - e1.expect().once().in( s ); - e2.expect().once().in( s ); - BOOST_CHECK_NO_THROW( e2() ); - CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); + mock::detail::function e1, e2; + e1.expect().once().in(s); + e2.expect().once().in(s); + BOOST_CHECK_NO_THROW(e2()); + CHECK_ERROR(e1(), "sequence failed", 1, "?()\n. once()"); } -BOOST_FIXTURE_TEST_CASE( destroying_a_sequence_does_not_remove_order_call_enforcement, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(destroying_a_sequence_does_not_remove_order_call_enforcement, mock_error_fixture) { - mock::detail::function< void() > e1, e2; + mock::detail::function e1, e2; { mock::sequence s; - e1.expect().once().in( s ); - e2.expect().once().in( s ); + e1.expect().once().in(s); + e2.expect().once().in(s); } - BOOST_CHECK_NO_THROW( e2() ); - CHECK_ERROR( e1(), "sequence failed", 1, "?()\n. once()" ); + BOOST_CHECK_NO_THROW(e2()); + CHECK_ERROR(e1(), "sequence failed", 1, "?()\n. once()"); } -BOOST_FIXTURE_TEST_CASE( resetting_an_expectation_removes_it_from_order_call_enforcement, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(resetting_an_expectation_removes_it_from_order_call_enforcement, mock_error_fixture) { mock::sequence s; - mock::detail::function< void() > e1, e2; - e1.expect().once().in( s ); - e2.expect().once().in( s ); + mock::detail::function e1, e2; + e1.expect().once().in(s); + e2.expect().once().in(s); e1.reset(); - BOOST_CHECK_NO_THROW( e2() ); - BOOST_CHECK( e1.verify() ); - BOOST_CHECK( e2.verify() ); - CHECK_CALLS( 1 ); + BOOST_CHECK_NO_THROW(e2()); + BOOST_CHECK(e1.verify()); + BOOST_CHECK(e2.verify()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( an_expectation_can_be_used_in_several_sequences, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(an_expectation_can_be_used_in_several_sequences, mock_error_fixture) { mock::sequence s1, s2; - mock::detail::function< void() > e; - e.expect().once().in( s1, s2 ); - BOOST_CHECK_NO_THROW( e() ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 1 ); + mock::detail::function e; + e.expect().once().in(s1, s2); + BOOST_CHECK_NO_THROW(e()); + BOOST_CHECK(e.verify()); + CHECK_CALLS(1); } -BOOST_FIXTURE_TEST_CASE( a_result_specification_is_set_after_a_sequence, mock_error_fixture ) +BOOST_FIXTURE_TEST_CASE(a_result_specification_is_set_after_a_sequence, mock_error_fixture) { mock::sequence s; - mock::detail::function< int() > e; - e.expect().once().in( s ).returns( 3 ); - BOOST_CHECK_EQUAL( 3, e() ); - BOOST_CHECK( e.verify() ); - CHECK_CALLS( 1 ); + mock::detail::function e; + e.expect().once().in(s).returns(3); + BOOST_CHECK_EQUAL(3, e()); + BOOST_CHECK(e.verify()); + CHECK_CALLS(1); } From bd0a4cfc7364d6bafe75e14d6e40867fe27464d4 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 24 Jan 2022 19:03:15 +0100 Subject: [PATCH 058/126] Reduce exposed interface (macros) Move implementation details to mock_impl.hpp and remove MOCK_*_TPL macros. Make sure all exposed macros (in mock.hpp) are properly documented. Closes #105 --- .clang-format | 10 -- doc/changelog.qbk | 2 +- doc/example/reference.cpp | 13 +- doc/reference.qbk | 26 +--- include/turtle/detail/mock_impl.hpp | 89 +++++++++++ include/turtle/detail/parameter.hpp | 6 +- include/turtle/mock.hpp | 226 +++++++++------------------- test/test_integration.cpp | 12 +- test/test_mock.cpp | 24 +-- 9 files changed, 191 insertions(+), 217 deletions(-) create mode 100644 include/turtle/detail/mock_impl.hpp diff --git a/.clang-format b/.clang-format index 3e0460e..69c1f29 100644 --- a/.clang-format +++ b/.clang-format @@ -134,27 +134,17 @@ StatementMacros: - MOCK_BASE_CLASS - MOCK_CLASS - MOCK_CONSTRUCTOR - - MOCK_CONSTRUCTOR_TPL - MOCK_CONST_CONVERSION_OPERATOR - - MOCK_CONST_CONVERSION_OPERATOR_TPL - MOCK_CONST_METHOD - MOCK_CONST_METHOD_EXT - - MOCK_CONST_METHOD_EXT_TPL - - MOCK_CONST_METHOD_TPL - MOCK_CONVERSION_OPERATOR - MOCK_DESTRUCTOR - MOCK_METHOD - MOCK_METHOD_EXT - - MOCK_METHOD_EXT_TPL - - MOCK_METHOD_TPL - MOCK_NON_CONST_CONVERSION_OPERATOR - - MOCK_NON_CONST_CONVERSION_OPERATOR_TPL - MOCK_NON_CONST_METHOD - MOCK_NON_CONST_METHOD_EXT - - MOCK_NON_CONST_METHOD_EXT_TPL - - MOCK_NON_CONST_METHOD_TPL - MOCK_STATIC_METHOD - - MOCK_STATIC_METHOD_TPL TabWidth: 4 UseCRLF: false UseTab: Never diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 20c3d4c..3ae5506 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -12,7 +12,7 @@ Released - * Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` * Replaced Boost facilities with std:: equivalents where existing in C++14 -* Deprecated MOCK_FUNCTOR_TPL as no longer required, use the non _TPL variant even for templates +* Deprecated MOCK_*_TPL as no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_FUNCTION_SIG to pass function signatures with commas in the return type [endsect] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index adec0b3..f322b7c 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -215,10 +215,8 @@ namespace member_function_example_7 { template MOCK_CLASS(mock_class) { - MOCK_METHOD_TPL( - method, - 1, - void(const T&)) // the _TPL variants must be used if the signature includes a template parameter of the class + MOCK_METHOD(method, 1, + void(const T&)) // includes a template parameter of the class }; //] } // namespace member_function_example_7 @@ -262,7 +260,7 @@ namespace static_member_function_example_2 { template MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD_TPL(method, 1, void(T)) + MOCK_STATIC_METHOD(method, 1, void(T)) // includes a template parameter of the class }; //] } // namespace static_member_function_example_2 @@ -296,7 +294,7 @@ template MOCK_CLASS(mock_class) { MOCK_CONSTRUCTOR(mock_class, 2, (int, const std::string&), identifier) - MOCK_CONSTRUCTOR_TPL(mock_class, 2, (T, const std::string&), identifier_2) + MOCK_CONSTRUCTOR(mock_class, 2, (T, const std::string&), identifier_2) // includes a template parameter of the class }; //] } // namespace constructor_example_2 @@ -347,8 +345,7 @@ namespace conversion_operator_example_2 { template MOCK_CLASS(mock_class) { - MOCK_CONVERSION_OPERATOR_TPL(operator, T, conversion_to_T) // the _TPL variants must be used if the signature - // includes a template parameter of the class + MOCK_CONVERSION_OPERATOR(operator, T, conversion_to_T) // includes a template parameter of the class MOCK_CONST_CONVERSION_OPERATOR(operator, const std::string&, const_conversion_to_string) MOCK_NON_CONST_CONVERSION_OPERATOR(operator, const std::string&, non_const_conversion_to_string) }; diff --git a/doc/reference.qbk b/doc/reference.qbk index dacce89..72dd7a9 100644 --- a/doc/reference.qbk +++ b/doc/reference.qbk @@ -90,16 +90,12 @@ Synopsis : MOCK_METHOD( [calling convention] name, arity[, signature[, identifier]] ) // generates both const and non-const methods MOCK_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) // generates only the const version of the method MOCK_NON_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) // generates only the non-const version of the method - - MOCK_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) // must be used if the signature uses a template parameter of the class, generates both const and non-const methods - MOCK_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) // must be used if the signature uses a template parameter of the class, generates only the const version of the method - MOCK_NON_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) // must be used if the signature uses a template parameter of the class, generates only the non-const version of the method [note If the identifier is omitted it will default to the method name.] [note If the method name is not ambiguous both the signature and the identifier can be omitted in the context of a derived MOCK_BASE_CLASS or base_type typedef.] -[note The signature cannot be omitted for the _TPL familly of macros, see the related [link turtle.limitations.template_base_class_methods_cannot_be_mocked_without_specifying_the_signature limitation section].] +[note The signature cannot be omitted if it uses a template parameter of the class, see the related [link turtle.limitations.template_base_class_methods_cannot_be_mocked_without_specifying_the_signature limitation section].] [note [link turtle.reference.creation.constructor Constructors], [link turtle.reference.creation.destructor destructors] and [link turtle.reference.creation.conversion_operator conversion operators] require special care.] @@ -107,13 +103,9 @@ Synopsis : Synopsis : - MOCK_METHOD_EXT( [calling convention] name, arity, signature, identifier ) // generates both const and non-const methods - MOCK_CONST_METHOD_EXT( [calling convention] name, arity, signature, identifier ) // generates only the const version of the method - MOCK_NON_CONST_METHOD_EXT( [calling convention] name, arity, signature, identifier ) // generates only the non-const version of the method - - MOCK_METHOD_EXT_TPL( [calling convention] name, arity, signature, identifier ) // must be used if the signature uses a template parameter of the class, generates both const and non-const methods - MOCK_CONST_METHOD_EXT_TPL( [calling convention] name, arity, signature, identifier ) // must be used if the signature uses a template parameter of the class, generates only the const version of the method - MOCK_NON_CONST_METHOD_EXT_TPL( [calling convention] name, arity, signature, identifier ) // must be used if the signature uses a template parameter of the class, generates only the non-const version of the method + MOCK_METHOD( [calling convention] name, arity, signature, identifier ) // generates both const and non-const methods + MOCK_CONST_METHOD( [calling convention] name, arity, signature, identifier ) // generates only the const version of the method + MOCK_NON_CONST_METHOD( [calling convention] name, arity, signature, identifier ) // generates only the non-const version of the method Example : @@ -158,8 +150,6 @@ Example for gcc : Synopsis : MOCK_STATIC_METHOD( [calling convention] name, arity, signature[, identifier] ) // if 'identifier' is omitted it will default to 'name' - - MOCK_STATIC_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) // must be used if the signature uses a template parameter of the class, if 'identifier' is omitted it will default to 'name' [note A static object is used behind the scene in order to keep track of the expectations of a mock static method, therefore to ensure all tests run in isolation it is strongly suggested to manually [link turtle.reference.verification verify] and [link turtle.reference.reset reset] the static method at the end of each test, see the related [link turtle.patterns.managing_static_mock_objects pattern section].] @@ -189,8 +179,6 @@ Synopsis : MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) - MOCK_CONSTRUCTOR_TPL( [calling convention] name, arity, parameters, identifier ) // must be used if the signature uses a template parameter of the class - [note As constructors do not have a return type, the usual signature gets restricted here to just the parameters.] Example : @@ -241,10 +229,6 @@ Synopsis : MOCK_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) // generates only a const operator MOCK_NON_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) // generates only a non-const operator - MOCK_CONVERSION_OPERATOR_TPL( [calling convention] name, type, identifier ) // must be used if the signature uses a template parameter of the class - MOCK_CONST_CONVERSION_OPERATOR_TPL( [calling convention] name, type, identifier ) // must be used if the signature uses a template parameter of the class - MOCK_NON_CONST_CONVERSION_OPERATOR_TPL( [calling convention] name, type, identifier ) // must be used if the signature uses a template parameter of the class - Example : [conversion_operator_example_1] @@ -293,8 +277,6 @@ Synopsis : MOCK_FUNCTOR( [calling convention] name, signature ); - MOCK_FUNCTOR_TPL( [calling convention] name, signature ); // must be used if the signature uses a template parameter - Example : [functor_example_1] diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp new file mode 100644 index 0000000..822f7a7 --- /dev/null +++ b/include/turtle/detail/mock_impl.hpp @@ -0,0 +1,89 @@ +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2008 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_MOCK_IMPL_HPP_INCLUDED +#define MOCK_MOCK_IMPL_HPP_INCLUDED + +#include "function.hpp" +#include "functor.hpp" +#include "parameter.hpp" +#include "signature.hpp" +#include "type_name.hpp" +#include +#include + +// Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE +// TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG +#define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> + +#define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) +#define MOCK_ANONYMOUS_HELPER(t) t##_mock(mock::detail::root, "?.") + +#define MOCK_METHOD_HELPER(S, t) \ + mutable mock::detail::function t##_mock_; \ + mock::detail::function& t##_mock(const mock::detail::context&, \ + const boost::unit_test::const_string& instance) const \ + { \ + mock::detail::configure(*this, \ + t##_mock_, \ + instance.substr(0, instance.rfind(BOOST_PP_STRINGIZE(t))), \ + mock::detail::make_type_name(*this), \ + BOOST_PP_STRINGIZE(t)); \ + return t##_mock_; \ + } + +#define MOCK_PARAM(S) mock::detail::parameter_t < MOCK_FUNCTION_TYPE(S) +#define MOCK_DECL_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > p##n +#define MOCK_DECL_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S)) +#define MOCK_DECL(M, n, S, c) mock::detail::result_type_t M(MOCK_DECL_PARAMS(n, S)) c + +#define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n >> (p##n) +#define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S)) +#define MOCK_METHOD_AUX(M, n, S, t, c) \ + MOCK_DECL(M, n, S, c) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ + } + +#define MOCK_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, ) \ + MOCK_METHOD_AUX(M, n, S, t, const) \ + MOCK_METHOD_HELPER(S, t) +#define MOCK_CONST_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, const) \ + MOCK_METHOD_HELPER(S, t) +#define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ + MOCK_METHOD_AUX(M, n, S, t, ) \ + MOCK_METHOD_HELPER(S, t) + +#define MOCK_FUNCTION_HELPER(S, t, s) \ + s mock::detail::function& t##_mock(mock::detail::context& context, \ + boost::unit_test::const_string instance) \ + { \ + static mock::detail::function f; \ + return f(context, instance); \ + } + +#define MOCK_CONSTRUCTOR_AUX(T, n, A, t) \ + T(MOCK_DECL_PARAMS(n, void A)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A)); } \ + MOCK_FUNCTION_HELPER(void A, t, static) + +#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ + MOCK_FUNCTION_HELPER(S, t, s) \ + s MOCK_DECL(F, n, S, ) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ + } + +#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 +#define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 +#define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 + +#endif // MOCK_MOCK_IMPL_HPP_INCLUDED diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index 34679b4..1db8228 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -36,6 +36,8 @@ namespace mock { namespace detail { { using type = R; }; + template + using result_type_t = typename result_type::type; template struct function_arity; @@ -55,12 +57,14 @@ namespace mock { namespace detail { using type = tuple; }; - template + template struct parameter { static_assert(n < function_arity::value, "Function signature has not that many parameters"); using type = typename tuple_element::type>::type; }; + template + using parameter_t = typename parameter::type; template struct parameter_type; diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 4d25f8d..991691b 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -11,159 +11,64 @@ #include "cleanup.hpp" #include "config.hpp" -#include "detail/function.hpp" -#include "detail/functor.hpp" -#include "detail/parameter.hpp" -#include "detail/signature.hpp" -#include "detail/type_name.hpp" +#include "detail/mock_impl.hpp" #include "object.hpp" #include "reset.hpp" #include "verify.hpp" -#include -#include /// MOCK_CLASS( name ) /// Define a class -#define MOCK_CLASS(T) struct T : mock::object +#define MOCK_CLASS(name) struct name : mock::object + +/// MOCK_BASE_CLASS( name, base ) +/// Define a class deriving from a base class +#define MOCK_BASE_CLASS(name, ...) struct name : __VA_ARGS__, mock::object, mock::detail::base<__VA_ARGS__> /// MOCK_PROTECT_FUNCTION_SIG( signature ) /// Use this with MOCK_FUNCTION/MOCK_*_METHOD if the return type contains commas #define MOCK_PROTECT_FUNCTION_SIG(...) mock::detail::parameter_type_t -/// Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE -/// TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG -#define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> - -/// MOCK_BASE_CLASS( name, base ) -/// Define a class deriving from a base class -#define MOCK_BASE_CLASS(T, ...) struct T : __VA_ARGS__, mock::object, mock::detail::base<__VA_ARGS__> - /// MOCK_FUNCTOR( name, signature ) /// Define a callable variable/member -#define MOCK_FUNCTOR(f, ...) mock::detail::functor f, f##_mock -/// MOCK_FUNCTOR_TPL( name, signature ) -#define MOCK_FUNCTOR_TPL(f, ...) static_assert(false, "MOCK_FUNCTOR_TPL has been replaced by MOCK_FUNCTOR") - -#define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) -#define MOCK_ANONYMOUS_HELPER(t) t##_mock(mock::detail::root, "?.") - -#define MOCK_METHOD_HELPER(S, t) \ - mutable mock::detail::function t##_mock_; \ - mock::detail::function& t##_mock(const mock::detail::context&, \ - const boost::unit_test::const_string& instance) const \ - { \ - mock::detail::configure(*this, \ - t##_mock_, \ - instance.substr(0, instance.rfind(BOOST_PP_STRINGIZE(t))), \ - mock::detail::make_type_name(*this), \ - BOOST_PP_STRINGIZE(t)); \ - return t##_mock_; \ - } - -#define MOCK_PARAM(S, tpn) tpn mock::detail::parameter < MOCK_FUNCTION_TYPE(S) -#define MOCK_DECL_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > ::type p##n -#define MOCK_DECL_PARAMS(n, S, tpn) BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S, tpn)) -#define MOCK_DECL(M, n, S, c, tpn) \ - tpn mock::detail::result_type::type M(MOCK_DECL_PARAMS(n, S, tpn)) c - -#define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > ::type > (p##n) -#define MOCK_FORWARD_PARAMS(n, S, tpn) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S, tpn)) -#define MOCK_METHOD_AUX(M, n, S, t, c, tpn) \ - MOCK_DECL(M, n, S, c, tpn) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S, tpn)); \ - } - -#define MOCK_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, , ) \ - MOCK_METHOD_AUX(M, n, S, t, const, ) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const, ) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, , ) \ - MOCK_METHOD_HELPER(S, t) - -#define MOCK_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, , typename) \ - MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_CONST_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const, typename) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_NON_CONST_METHOD_EXT_TPL(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, , typename) \ - MOCK_METHOD_HELPER(S, t) +#define MOCK_FUNCTOR(name, ...) mock::detail::functor name, name##_mock /// MOCK_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) -/// generates both const and non-const operators -#define MOCK_CONVERSION_OPERATOR(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t) +/// generates both const and non-const conversion operators +#define MOCK_CONVERSION_OPERATOR(M, T, identifier) \ + M T() const { return MOCK_ANONYMOUS_HELPER(identifier)(); } \ + M T() { return MOCK_ANONYMOUS_HELPER(identifier)(); } \ + MOCK_METHOD_HELPER(T(), identifier) /// MOCK_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) -/// generates only a const operator -#define MOCK_CONST_CONVERSION_OPERATOR(M, T, t) \ - M T() const { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t) +/// generates only a const conversion operator +#define MOCK_CONST_CONVERSION_OPERATOR(M, T, identifier) \ + M T() const { return MOCK_ANONYMOUS_HELPER(identifier)(); } \ + MOCK_METHOD_HELPER(T(), identifier) /// MOCK_NON_CONST_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) -/// generates only a non-const operator -#define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) \ - M T() { return MOCK_ANONYMOUS_HELPER(t)(); } \ - MOCK_METHOD_HELPER(T(), t) - -#define MOCK_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONVERSION_OPERATOR(M, T, t) -#define MOCK_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_CONST_CONVERSION_OPERATOR(M, T, t) -#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(M, T, t) MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, t) - -#define MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s mock::detail::function& t##_mock(mock::detail::context& context, \ - boost::unit_test::const_string instance) \ - { \ - static mock::detail::function f; \ - return f(context, instance); \ - } - -#define MOCK_CONSTRUCTOR_AUX(T, n, A, t, tpn) \ - T(MOCK_DECL_PARAMS(n, void A, tpn)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A, tpn)); } \ - MOCK_FUNCTION_HELPER(void A, t, static, tpn) +/// generates only a non-const conversion operator +#define MOCK_NON_CONST_CONVERSION_OPERATOR(M, T, identifier) \ + M T() { return MOCK_ANONYMOUS_HELPER(identifier)(); } \ + MOCK_METHOD_HELPER(T(), identifier) /// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) /// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. -#define MOCK_CONSTRUCTOR(T, n, A, t) MOCK_CONSTRUCTOR_AUX(T, n, A, t, ) -/// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) -/// must be used if the signature uses a template parameter of the class -/// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. -#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) MOCK_CONSTRUCTOR_AUX(T, n, A, t, typename) +#define MOCK_CONSTRUCTOR(T, arity, parameters, identifier) MOCK_CONSTRUCTOR_AUX(T, arity, parameters, identifier) /// MOCK_DESTRUCTOR( [calling convention] ~name, identifier ) -#define MOCK_DESTRUCTOR(T, t) \ - T() \ - { \ - try \ - { \ - MOCK_ANONYMOUS_HELPER(t)(); \ - } catch(...) \ - {} \ - } \ - MOCK_METHOD_HELPER(void(), t) - -#define MOCK_FUNCTION_AUX(F, n, S, t, s, tpn) \ - MOCK_FUNCTION_HELPER(S, t, s, tpn) \ - s MOCK_DECL(F, n, S, , tpn) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S, tpn)); \ - } - -#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 -#define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 -#define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 +#define MOCK_DESTRUCTOR(T, identifier) \ + T() \ + { \ + try \ + { \ + MOCK_ANONYMOUS_HELPER(identifier)(); \ + } catch(...) \ + {} \ + } \ + MOCK_METHOD_HELPER(void(), identifier) /// MOCK_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates both const and non-const methods +/// The 'signature' can be omitted if it can be uniquely identified from the base class +/// if 'identifier' is omitted it will default to 'name' #define MOCK_METHOD(M, ...) \ MOCK_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ @@ -171,6 +76,8 @@ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) /// MOCK_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the const version of the method +/// The 'signature' can be omitted if it can be uniquely identified from the base class +/// if 'identifier' is omitted it will default to 'name' #define MOCK_CONST_METHOD(M, ...) \ MOCK_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ @@ -178,50 +85,53 @@ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) /// MOCK_NON_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the non-const version of the method +/// The 'signature' can be omitted if it can be uniquely identified from the base class +/// if 'identifier' is omitted it will default to 'name' #define MOCK_NON_CONST_METHOD(M, ...) \ MOCK_NON_CONST_METHOD_EXT(M, \ MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) -/// MOCK_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) -/// must be used if the signature uses a template parameter of the class -/// generates both const and non-const methods -#define MOCK_METHOD_TPL(M, n, ...) \ - MOCK_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) -/// MOCK_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) -/// must be used if the signature uses a template parameter of the class -/// generates only the const version of the method -#define MOCK_CONST_METHOD_TPL(M, n, ...) \ - MOCK_CONST_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) -/// MOCK_NON_CONST_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) -/// must be used if the signature uses a template parameter of the class -/// generates only the non-const version of the method -#define MOCK_NON_CONST_METHOD_TPL(M, n, ...) \ - MOCK_NON_CONST_METHOD_EXT_TPL(M, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, M, )) - /// MOCK_FUNCTION( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' -#define MOCK_FUNCTION(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), inline, ) +#define MOCK_FUNCTION(F, arity, ...) \ + MOCK_FUNCTION_AUX(F, arity, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), inline) /// MOCK_STATIC_METHOD( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' -#define MOCK_STATIC_METHOD(F, n, ...) \ - MOCK_FUNCTION_AUX(F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static, ) - -/// MOCK_STATIC_METHOD_TPL( [calling convention] name, arity, signature[, identifier] ) -/// must be used if the signature uses a template parameter of the class -/// if 'identifier' is omitted it will default to 'name' -#define MOCK_STATIC_METHOD_TPL(F, n, ...) \ - MOCK_FUNCTION_AUX( \ - F, n, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static, typename) +#define MOCK_STATIC_METHOD(F, arity, ...) \ + MOCK_FUNCTION_AUX(F, arity, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static) /// MOCK_EXPECT( identifier ) -#define MOCK_EXPECT(t) MOCK_HELPER(t).expect(__FILE__, __LINE__) +/// Begin setting up expectation for the identifier +#define MOCK_EXPECT(identifier) MOCK_HELPER(identifier).expect(__FILE__, __LINE__) /// MOCK_RESET( identifier ) -#define MOCK_RESET(t) MOCK_HELPER(t).reset(__FILE__, __LINE__) +/// Reset all pending expectations for the identifier +#define MOCK_RESET(identifier) MOCK_HELPER(identifier).reset(__FILE__, __LINE__) /// MOCK_VERIFY( identifier ) -#define MOCK_VERIFY(t) MOCK_HELPER(t).verify(__FILE__, __LINE__) +/// Verify all expectations for the identifier have been met +#define MOCK_VERIFY(identifier) MOCK_HELPER(identifier).verify(__FILE__, __LINE__) + +// Replaced macros +#define MOCK_DETAIL_REPLACED_MACRO_ERROR(oldName, newName) \ + static_assert(false, #oldName " has been replaced by " #newName) +#define MOCK_CONST_CONVERSION_OPERATOR_TPL(...) \ + MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR) +#define MOCK_CONST_METHOD_EXT_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_EXT_TPL, MOCK_CONST_METHOD) +#define MOCK_CONST_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_TPL, MOCK_CONST_METHOD) +#define MOCK_CONVERSION_OPERATOR_TPL(...) \ + MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONVERSION_OPERATOR) +#define MOCK_FUNCTOR_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_FUNCTOR_TPL, MOCK_FUNCTOR) +#define MOCK_METHOD_EXT_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_METHOD_EXT_TPL, MOCK_METHOD) +#define MOCK_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_METHOD_TPL, MOCK_METHOD) +#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(...) \ + MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_CONVERSION_OPERATOR_TPL, MOCK_NON_CONST_CONVERSION_OPERATOR) +#define MOCK_NON_CONST_METHOD_EXT_TPL(...) \ + MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_EXT_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_NON_CONST_METHOD_TPL(...) \ + MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_STATIC_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_STATIC_METHOD_TPL, MOCK_STATIC_METHOD) +#define MOCK_CONSTRUCTOR_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONSTRUCTOR_TPL, MOCK_CONSTRUCTOR) #endif // MOCK_MOCK_HPP_INCLUDED diff --git a/test/test_integration.cpp b/test/test_integration.cpp index aceccd5..11aea83 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -187,8 +187,8 @@ template struct my_template_mock { MOCK_METHOD_EXT(my_method, 0, void(), my_tag) - MOCK_METHOD_EXT_TPL(my_method, 2, void(T, std::string), my_tpl_tag) - MOCK_METHOD_EXT_TPL(my_other_method, 0, void(), my_other_tag) + MOCK_METHOD_EXT(my_method, 2, void(T, std::string), my_tpl_tag) + MOCK_METHOD_EXT(my_other_method, 0, void(), my_other_tag) }; } // namespace @@ -212,8 +212,8 @@ struct my_template_base_class template MOCK_BASE_CLASS(my_template_base_class_mock, my_template_base_class) { - MOCK_METHOD_EXT_TPL(my_method, 1, void(T), my_method) - MOCK_METHOD_EXT_TPL(my_other_method, 0, void(), my_other_method) + MOCK_METHOD_EXT(my_method, 1, void(T), my_method) + MOCK_METHOD_EXT(my_other_method, 0, void(), my_other_method) }; } // namespace @@ -307,7 +307,7 @@ namespace { template MOCK_CLASS(my_constructed_template_class) { - MOCK_CONSTRUCTOR_TPL(my_constructed_template_class, 2, (T, const std::string&), constructor) + MOCK_CONSTRUCTOR(my_constructed_template_class, 2, (T, const std::string&), constructor) }; } // namespace @@ -511,7 +511,7 @@ namespace { template struct some_template_class { - MOCK_STATIC_METHOD_TPL(some_static_method, 1, void(T), some_static_method) + MOCK_STATIC_METHOD(some_static_method, 1, void(T), some_static_method) }; } // namespace diff --git a/test/test_mock.cpp b/test/test_mock.cpp index edcea98..5460838 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -64,7 +64,9 @@ BOOST_FIXTURE_TEST_CASE(mock_conversion_operator, mock_error_fixture) namespace { template MOCK_CLASS(mock_template_class_with_conversion_operator) -{ MOCK_CONVERSION_OPERATOR_TPL(operator, T, conversion) }; +{ + MOCK_CONVERSION_OPERATOR(operator, T, conversion) +}; } // namespace BOOST_FIXTURE_TEST_CASE(mock_template_conversion_operator, mock_error_fixture) @@ -111,7 +113,7 @@ namespace { template MOCK_CLASS(mock_template_class_with_const_conversion_operator) { - MOCK_CONST_CONVERSION_OPERATOR_TPL(operator, T, conversion) + MOCK_CONST_CONVERSION_OPERATOR(operator, T, conversion) }; } // namespace @@ -127,7 +129,7 @@ namespace { template MOCK_CLASS(mock_template_class_with_non_const_conversion_operator) { - MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(operator, T, conversion) + MOCK_NON_CONST_CONVERSION_OPERATOR(operator, T, conversion) }; } // namespace @@ -346,14 +348,14 @@ template MOCK_BASE_CLASS(variadic_tpl, base) { MOCK_METHOD(m1, 0, void()) - MOCK_METHOD_TPL(m2, 0, T()) - MOCK_METHOD_TPL(m3, 0, T(), m3) - MOCK_CONST_METHOD_TPL(m4, 0, T()) - MOCK_CONST_METHOD_TPL(m5, 0, T(), m5) - MOCK_NON_CONST_METHOD_TPL(m6, 0, T()) - MOCK_NON_CONST_METHOD_TPL(m7, 0, T(), m7) - MOCK_STATIC_METHOD_TPL(m8, 0, T()) - MOCK_STATIC_METHOD_TPL(m9, 0, T(), m9) + MOCK_METHOD(m2, 0, T()) + MOCK_METHOD(m3, 0, T(), m3) + MOCK_CONST_METHOD(m4, 0, T()) + MOCK_CONST_METHOD(m5, 0, T(), m5) + MOCK_NON_CONST_METHOD(m6, 0, T()) + MOCK_NON_CONST_METHOD(m7, 0, T(), m7) + MOCK_STATIC_METHOD(m8, 0, T()) + MOCK_STATIC_METHOD(m9, 0, T(), m9) }; MOCK_BASE_CLASS(comma_base, std::map) From 3fe72f66ea76fe6a20e57d904bc64e12592a8975 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 24 Jan 2022 19:11:08 +0100 Subject: [PATCH 059/126] Don't use MOCK_*_EXT in tests This is not really part of the public interface anymore as the variadic functions are enough. --- include/turtle/detail/mock_impl.hpp | 2 + include/turtle/mock.hpp | 27 ++++++------- ...fail_constraint_functor_not_compatible.cpp | 2 +- test/fail_constraint_value_not_comparable.cpp | 2 +- ...ue_of_wrong_type_in_builtin_constraint.cpp | 2 +- ...il_mismatch_type_in_returns_int_action.cpp | 2 +- ...mismatch_type_in_returns_string_action.cpp | 2 +- ...l_mismatch_type_in_returns_void_action.cpp | 2 +- ...fail_wrong_number_of_arguments_in_with.cpp | 2 +- test/test_integration.cpp | 40 +++++++++---------- test/test_max_args.cpp | 4 +- test/test_mock.cpp | 24 +++++------ 12 files changed, 55 insertions(+), 56 deletions(-) diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 822f7a7..6c50a29 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -17,6 +17,8 @@ #include #include +#define MOCK_REPLACED_MACRO_ERROR(oldName, newName) static_assert(false, #oldName " has been replaced by " #newName) + // Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE // TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG #define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 991691b..0a0e9ac 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -114,24 +114,21 @@ #define MOCK_VERIFY(identifier) MOCK_HELPER(identifier).verify(__FILE__, __LINE__) // Replaced macros -#define MOCK_DETAIL_REPLACED_MACRO_ERROR(oldName, newName) \ - static_assert(false, #oldName " has been replaced by " #newName) #define MOCK_CONST_CONVERSION_OPERATOR_TPL(...) \ - MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR) -#define MOCK_CONST_METHOD_EXT_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_EXT_TPL, MOCK_CONST_METHOD) -#define MOCK_CONST_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_TPL, MOCK_CONST_METHOD) + MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR) +#define MOCK_CONST_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_EXT_TPL, MOCK_CONST_METHOD) +#define MOCK_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_TPL, MOCK_CONST_METHOD) #define MOCK_CONVERSION_OPERATOR_TPL(...) \ - MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONVERSION_OPERATOR) -#define MOCK_FUNCTOR_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_FUNCTOR_TPL, MOCK_FUNCTOR) -#define MOCK_METHOD_EXT_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_METHOD_EXT_TPL, MOCK_METHOD) -#define MOCK_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_METHOD_TPL, MOCK_METHOD) + MOCK_REPLACED_MACRO_ERROR(MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONVERSION_OPERATOR) +#define MOCK_FUNCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_FUNCTOR_TPL, MOCK_FUNCTOR) +#define MOCK_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_EXT_TPL, MOCK_METHOD) +#define MOCK_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_TPL, MOCK_METHOD) #define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(...) \ - MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_CONVERSION_OPERATOR_TPL, MOCK_NON_CONST_CONVERSION_OPERATOR) + MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_CONVERSION_OPERATOR_TPL, MOCK_NON_CONST_CONVERSION_OPERATOR) #define MOCK_NON_CONST_METHOD_EXT_TPL(...) \ - MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_EXT_TPL, MOCK_NON_CONST_METHOD) -#define MOCK_NON_CONST_METHOD_TPL(...) \ - MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_TPL, MOCK_NON_CONST_METHOD) -#define MOCK_STATIC_METHOD_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_STATIC_METHOD_TPL, MOCK_STATIC_METHOD) -#define MOCK_CONSTRUCTOR_TPL(...) MOCK_DETAIL_REPLACED_MACRO_ERROR(MOCK_CONSTRUCTOR_TPL, MOCK_CONSTRUCTOR) + MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_EXT_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_NON_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_STATIC_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_STATIC_METHOD_TPL, MOCK_STATIC_METHOD) +#define MOCK_CONSTRUCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONSTRUCTOR_TPL, MOCK_CONSTRUCTOR) #endif // MOCK_MOCK_HPP_INCLUDED diff --git a/test/fail_constraint_functor_not_compatible.cpp b/test/fail_constraint_functor_not_compatible.cpp index 0fc5d83..d5534f8 100644 --- a/test/fail_constraint_functor_not_compatible.cpp +++ b/test/fail_constraint_functor_not_compatible.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 1, void(int), my_method) + MOCK_METHOD(my_method, 1, void(int), my_method) }; bool constraint(int, int) { diff --git a/test/fail_constraint_value_not_comparable.cpp b/test/fail_constraint_value_not_comparable.cpp index ee8b81d..1e97da6 100644 --- a/test/fail_constraint_value_not_comparable.cpp +++ b/test/fail_constraint_value_not_comparable.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 1, void(int), my_method) + MOCK_METHOD(my_method, 1, void(int), my_method) }; void test_case() { diff --git a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp index 4deaea0..67c97ab 100644 --- a/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp +++ b/test/fail_constraint_value_of_wrong_type_in_builtin_constraint.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 1, void(int), my_method) + MOCK_METHOD(my_method, 1, void(int), my_method) }; void test_case() { diff --git a/test/fail_mismatch_type_in_returns_int_action.cpp b/test/fail_mismatch_type_in_returns_int_action.cpp index 8b5df96..79386f3 100644 --- a/test/fail_mismatch_type_in_returns_int_action.cpp +++ b/test/fail_mismatch_type_in_returns_int_action.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 0, int(), my_method) + MOCK_METHOD(my_method, 0, int(), my_method) }; void test_case() { diff --git a/test/fail_mismatch_type_in_returns_string_action.cpp b/test/fail_mismatch_type_in_returns_string_action.cpp index dadcc33..b3cea88 100644 --- a/test/fail_mismatch_type_in_returns_string_action.cpp +++ b/test/fail_mismatch_type_in_returns_string_action.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 0, std::string(), my_method) + MOCK_METHOD(my_method, 0, std::string(), my_method) }; void test_case() { diff --git a/test/fail_mismatch_type_in_returns_void_action.cpp b/test/fail_mismatch_type_in_returns_void_action.cpp index ea7afd3..7a09043 100644 --- a/test/fail_mismatch_type_in_returns_void_action.cpp +++ b/test/fail_mismatch_type_in_returns_void_action.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 0, void(), my_method) + MOCK_METHOD(my_method, 0, void(), my_method) }; void test_case() { diff --git a/test/fail_wrong_number_of_arguments_in_with.cpp b/test/fail_wrong_number_of_arguments_in_with.cpp index d653265..f527e68 100644 --- a/test/fail_wrong_number_of_arguments_in_with.cpp +++ b/test/fail_wrong_number_of_arguments_in_with.cpp @@ -10,7 +10,7 @@ MOCK_CLASS(my_class) { - MOCK_METHOD_EXT(my_method, 1, void(int), my_method) + MOCK_METHOD(my_method, 1, void(int), my_method) }; void test_case() { diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 11aea83..2442b8f 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -17,7 +17,7 @@ namespace { struct my_custom_mock { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag) + MOCK_METHOD(my_method, 0, void(), my_tag) }; } // namespace @@ -32,7 +32,7 @@ BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros_and_without_inheriting namespace { struct my_custom_mock_object { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag) + MOCK_METHOD(my_method, 0, void(), my_tag) }; } // namespace @@ -47,7 +47,7 @@ BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros, mock_error_fixture) namespace { MOCK_CLASS(my_mock) { - MOCK_METHOD_EXT(my_method, 1, int(int), my_tag) + MOCK_METHOD(my_method, 1, int(int), my_tag) }; } // namespace @@ -89,8 +89,8 @@ public: MOCK_BASE_CLASS(my_ambiguited_mock, my_ambiguited_interface) { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag1) - MOCK_METHOD_EXT(my_method, 1, void(int), my_tag_2) + MOCK_METHOD(my_method, 0, void(), my_tag1) + MOCK_METHOD(my_method, 1, void(int), my_tag_2) }; } // namespace @@ -116,8 +116,8 @@ public: MOCK_BASE_CLASS(my_const_ambiguited_mock, my_const_ambiguited_interface) { - MOCK_NON_CONST_METHOD_EXT(my_method, 0, void(), tag1) - MOCK_CONST_METHOD_EXT(my_method, 0, void(), tag_2) + MOCK_NON_CONST_METHOD(my_method, 0, void(), tag1) + MOCK_CONST_METHOD(my_method, 0, void(), tag_2) }; } // namespace @@ -133,7 +133,7 @@ BOOST_FIXTURE_TEST_CASE(mock_object_method_const_disambiguation, mock_error_fixt namespace { MOCK_CLASS(my_undefined_mock) { - MOCK_METHOD_EXT(m, 1, void(undefined&), t) + MOCK_METHOD(m, 1, void(undefined&), t) }; } // namespace @@ -186,9 +186,9 @@ namespace { template struct my_template_mock { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag) - MOCK_METHOD_EXT(my_method, 2, void(T, std::string), my_tpl_tag) - MOCK_METHOD_EXT(my_other_method, 0, void(), my_other_tag) + MOCK_METHOD(my_method, 0, void(), my_tag) + MOCK_METHOD(my_method, 2, void(T, std::string), my_tpl_tag) + MOCK_METHOD(my_other_method, 0, void(), my_other_tag) }; } // namespace @@ -212,8 +212,8 @@ struct my_template_base_class template MOCK_BASE_CLASS(my_template_base_class_mock, my_template_base_class) { - MOCK_METHOD_EXT(my_method, 1, void(T), my_method) - MOCK_METHOD_EXT(my_other_method, 0, void(), my_other_method) + MOCK_METHOD(my_method, 1, void(T), my_method) + MOCK_METHOD(my_other_method, 0, void(), my_other_method) }; } // namespace @@ -366,7 +366,7 @@ BOOST_FIXTURE_TEST_CASE(failed_sequence_in_mocked_destructor_does_not_throw, moc namespace { MOCK_CLASS(boost_optional) { - MOCK_METHOD_EXT(method, 0, boost::optional(), tag) + MOCK_METHOD(method, 0, boost::optional(), tag) }; } // namespace @@ -451,7 +451,7 @@ void nothing(T) struct member_pointer_mock_class { - MOCK_CONST_METHOD_EXT(my_method, 0, void(), my_method) + MOCK_CONST_METHOD(my_method, 0, void(), my_method) }; } // namespace @@ -532,7 +532,7 @@ BOOST_FIXTURE_TEST_CASE(a_static_method_in_a_template_class_can_be_mocked, mock_ namespace { MOCK_CLASS(mock_class) { - MOCK_METHOD_EXT(m, 0, void(), t); + MOCK_METHOD(m, 0, void(), t); }; } // namespace @@ -550,7 +550,7 @@ BOOST_FIXTURE_TEST_CASE(resetting_referenced_mock_class_does_not_crash, mock_err namespace { MOCK_CLASS(mock_class2) { - MOCK_METHOD_EXT(m, 0, mock_class2(), t); + MOCK_METHOD(m, 0, mock_class2(), t); }; } // namespace @@ -646,8 +646,8 @@ BOOST_FIXTURE_TEST_CASE(mock_class_is_thread_safe, mock_error_fixture) namespace { MOCK_CLASS(my_multi_mock) { - MOCK_METHOD_EXT(m1, 1, void(int), m1); - MOCK_METHOD_EXT(m2, 2, void(int, int), m2); + MOCK_METHOD(m1, 1, void(int), m1); + MOCK_METHOD(m2, 2, void(int, int), m2); }; } // namespace @@ -742,6 +742,6 @@ BOOST_FIXTURE_TEST_CASE(std_unique_ptr_argument_is_supported_in_retrieve_constra struct my_unique_ptr_class { MOCK_CONSTRUCTOR(my_unique_ptr_class, 1, (std::unique_ptr), constructor) - MOCK_METHOD_EXT(m, 1, void(std::unique_ptr), m) + MOCK_METHOD(m, 1, void(std::unique_ptr), m) MOCK_STATIC_METHOD(ms, 1, void(std::unique_ptr), ms) }; diff --git a/test/test_max_args.cpp b/test/test_max_args.cpp index 14ac35e..147089c 100644 --- a/test/test_max_args.cpp +++ b/test/test_max_args.cpp @@ -16,8 +16,8 @@ namespace { struct my_custom_mock { - MOCK_METHOD_EXT(method, MOCK_MAX_ARGS, void(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag) - MOCK_METHOD_EXT(method2, MOCK_MAX_ARGS, int(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag_2) + MOCK_METHOD(method, MOCK_MAX_ARGS, void(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag) + MOCK_METHOD(method2, MOCK_MAX_ARGS, int(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag_2) }; } // namespace diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 5460838..51f6620 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -19,7 +19,7 @@ void my_function(T& t) } MOCK_CLASS(mock_class) { - MOCK_METHOD_EXT(my_method, 1, void(const std::string&), my_tag) + MOCK_METHOD(my_method, 1, void(const std::string&), my_tag) }; } // namespace @@ -34,7 +34,7 @@ BOOST_FIXTURE_TEST_CASE(mock_object_for_static_polymorphism, mock_error_fixture) namespace { MOCK_CLASS(mock_class_with_operator) { - MOCK_CONST_METHOD_EXT(operator+=, 1, mock_class_with_operator &(int), addition) + MOCK_CONST_METHOD(operator+=, 1, mock_class_with_operator &(int), addition) }; } // namespace @@ -144,12 +144,12 @@ BOOST_FIXTURE_TEST_CASE(mock_template_non_const_conversion_operator, mock_error_ namespace { MOCK_CLASS(my_mock) { - MOCK_CONST_METHOD_EXT(my_method, 1, void(int), my_method) - MOCK_CONST_METHOD_EXT(my_method_2, 1, void(int), my_method_2) + MOCK_CONST_METHOD(my_method, 1, void(int), my_method) + MOCK_CONST_METHOD(my_method_2, 1, void(int), my_method_2) }; } // namespace -BOOST_FIXTURE_TEST_CASE(MOCK_CONST_METHOD_EXT_macro_defines_a_bindable_method, mock_error_fixture) +BOOST_FIXTURE_TEST_CASE(MOCK_CONST_METHOD_macro_defines_a_bindable_method, mock_error_fixture) { my_mock m; const auto f = std::bind(&my_mock::my_method, &m, 42); @@ -218,8 +218,8 @@ BOOST_FIXTURE_TEST_CASE(mock_object_const_shared_pointer_is_named, mock_error_fi namespace { struct my_custom_mock { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag) - MOCK_METHOD_EXT(my_method_2, 0, void(), my_tag_2) + MOCK_METHOD(my_method, 0, void(), my_tag) + MOCK_METHOD(my_method_2, 0, void(), my_tag_2) }; } // namespace @@ -238,8 +238,8 @@ BOOST_FIXTURE_TEST_CASE(custom_mock_object_without_macros_and_without_inheriting namespace { struct my_custom_mock_object : mock::object { - MOCK_METHOD_EXT(my_method, 0, void(), my_tag) - MOCK_METHOD_EXT(my_method_2, 0, void(), my_tag_2) + MOCK_METHOD(my_method, 0, void(), my_tag) + MOCK_METHOD(my_method_2, 0, void(), my_tag_2) }; } // namespace @@ -312,7 +312,7 @@ BOOST_FIXTURE_TEST_CASE(mock_static_function_is_named, mock_error_fixture) namespace { MOCK_CLASS(round_parenthesized_signature) { - MOCK_METHOD_EXT(m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m0) + MOCK_METHOD(m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m0) MOCK_STATIC_METHOD(m1, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m1) MOCK_FUNCTOR(f0, MOCK_PROTECT_FUNCTION_SIG(std::map())); }; @@ -387,8 +387,8 @@ MOCK_BASE_CLASS(derived, base) MOCK_CONSTRUCTOR(MOCK_STDCALL derived, 0, (), derived) MOCK_DESTRUCTOR(MOCK_STDCALL ~derived, derived) MOCK_CONVERSION_OPERATOR(MOCK_STDCALL operator, int, to_int) - MOCK_METHOD_EXT(MOCK_STDCALL m1, 0, void(), m1) - MOCK_METHOD_EXT(MOCK_STDCALL m2, 0, void(), m2) + MOCK_METHOD(MOCK_STDCALL m1, 0, void(), m1) + MOCK_METHOD(MOCK_STDCALL m2, 0, void(), m2) MOCK_METHOD(MOCK_STDCALL m3, 0, void(), m3) MOCK_STATIC_METHOD(MOCK_STDCALL m4, 0, void(), m4) }; From dc9d98e5a5a97612d3089d10fc127cd6f3d4849e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 24 Jan 2022 19:14:51 +0100 Subject: [PATCH 060/126] Also move the error macros to the detail header --- include/turtle/detail/mock_impl.hpp | 21 +++++++++++++++++++-- include/turtle/mock.hpp | 18 ------------------ 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 6c50a29..4ac3b8a 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -17,8 +17,6 @@ #include #include -#define MOCK_REPLACED_MACRO_ERROR(oldName, newName) static_assert(false, #oldName " has been replaced by " #newName) - // Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE // TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG #define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> @@ -88,4 +86,23 @@ #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 #define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 +#define MOCK_REPLACED_MACRO_ERROR(oldName, newName) static_assert(false, #oldName " has been replaced by " #newName) +// Replaced macros +#define MOCK_CONST_CONVERSION_OPERATOR_TPL(...) \ + MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR) +#define MOCK_CONST_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_EXT_TPL, MOCK_CONST_METHOD) +#define MOCK_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_TPL, MOCK_CONST_METHOD) +#define MOCK_CONVERSION_OPERATOR_TPL(...) \ + MOCK_REPLACED_MACRO_ERROR(MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONVERSION_OPERATOR) +#define MOCK_FUNCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_FUNCTOR_TPL, MOCK_FUNCTOR) +#define MOCK_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_EXT_TPL, MOCK_METHOD) +#define MOCK_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_TPL, MOCK_METHOD) +#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(...) \ + MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_CONVERSION_OPERATOR_TPL, MOCK_NON_CONST_CONVERSION_OPERATOR) +#define MOCK_NON_CONST_METHOD_EXT_TPL(...) \ + MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_EXT_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_NON_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_TPL, MOCK_NON_CONST_METHOD) +#define MOCK_STATIC_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_STATIC_METHOD_TPL, MOCK_STATIC_METHOD) +#define MOCK_CONSTRUCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONSTRUCTOR_TPL, MOCK_CONSTRUCTOR) + #endif // MOCK_MOCK_IMPL_HPP_INCLUDED diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 0a0e9ac..7e610bf 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -113,22 +113,4 @@ /// Verify all expectations for the identifier have been met #define MOCK_VERIFY(identifier) MOCK_HELPER(identifier).verify(__FILE__, __LINE__) -// Replaced macros -#define MOCK_CONST_CONVERSION_OPERATOR_TPL(...) \ - MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_CONVERSION_OPERATOR_TPL, MOCK_CONST_CONVERSION_OPERATOR) -#define MOCK_CONST_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_EXT_TPL, MOCK_CONST_METHOD) -#define MOCK_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONST_METHOD_TPL, MOCK_CONST_METHOD) -#define MOCK_CONVERSION_OPERATOR_TPL(...) \ - MOCK_REPLACED_MACRO_ERROR(MOCK_CONVERSION_OPERATOR_TPL, MOCK_CONVERSION_OPERATOR) -#define MOCK_FUNCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_FUNCTOR_TPL, MOCK_FUNCTOR) -#define MOCK_METHOD_EXT_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_EXT_TPL, MOCK_METHOD) -#define MOCK_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_METHOD_TPL, MOCK_METHOD) -#define MOCK_NON_CONST_CONVERSION_OPERATOR_TPL(...) \ - MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_CONVERSION_OPERATOR_TPL, MOCK_NON_CONST_CONVERSION_OPERATOR) -#define MOCK_NON_CONST_METHOD_EXT_TPL(...) \ - MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_EXT_TPL, MOCK_NON_CONST_METHOD) -#define MOCK_NON_CONST_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_NON_CONST_METHOD_TPL, MOCK_NON_CONST_METHOD) -#define MOCK_STATIC_METHOD_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_STATIC_METHOD_TPL, MOCK_STATIC_METHOD) -#define MOCK_CONSTRUCTOR_TPL(...) MOCK_REPLACED_MACRO_ERROR(MOCK_CONSTRUCTOR_TPL, MOCK_CONSTRUCTOR) - #endif // MOCK_MOCK_HPP_INCLUDED From 374482367feb00104e1fca5d8fed1229c824b9e8 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 24 Jan 2022 19:16:25 +0100 Subject: [PATCH 061/126] Update changelog regarding TPL macros --- doc/changelog.qbk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 3ae5506..1a92be0 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -12,7 +12,7 @@ Released - * Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` * Replaced Boost facilities with std:: equivalents where existing in C++14 -* Deprecated MOCK_*_TPL as no longer required, use the non _TPL variant even for templates +* Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_FUNCTION_SIG to pass function signatures with commas in the return type [endsect] From 51fcd4f4b9fffd316f4522d11f5e26c0d3392b54 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 16:07:19 +0100 Subject: [PATCH 062/126] Remove usage of BOOST_IDENTITY_TYPE from official docs Replaced by MOCK_PROTECT_FUNCTION_SIG --- doc/example/reference.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index f322b7c..17ef2c7 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -225,11 +225,20 @@ namespace member_function_example_8 { //[ member_function_example_8 MOCK_CLASS(mock_class) { - MOCK_METHOD( - method, 0, BOOST_IDENTITY_TYPE((std::map()))) // the signature must be wrapped in BOOST_IDENTITY_TYPE if - // the return type contains a comma + // the signature must be wrapped in MOCK_PROTECT_FUNCTION_SIG if the return type contains a comma + MOCK_METHOD(method, 0, MOCK_PROTECT_FUNCTION_SIG(std::map())) }; //] +MOCK_CLASS(legacy_mock_class) +{ + MOCK_METHOD(method, 0, BOOST_IDENTITY_TYPE((std::map()))) +}; + +static_assert(std::is_same().method()), std::map>::value, + "Wrong return value"); +static_assert(std::is_same().method()), std::map>::value, + "Wrong return value"); + } // namespace member_function_example_8 #ifdef BOOST_MSVC From cdb4c1494af6ee5f4b20395444667d55c2cb5897 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 16:24:37 +0100 Subject: [PATCH 063/126] Document test/mock_error.hpp Those test-only macros and structs are a bit tricky to read. --- test/mock_error.hpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/test/mock_error.hpp b/test/mock_error.hpp index 5ac02f6..3f4224d 100644 --- a/test/mock_error.hpp +++ b/test/mock_error.hpp @@ -15,6 +15,7 @@ #include #include +/// Container to hold data about mocked function calls (and expectation errors) struct mock_error_data_t : mock::detail::singleton { void reset() @@ -41,16 +42,15 @@ struct mock_error_data_t : mock::detail::singleton ++error_count; } - int error_count; - int call_count; - std::string last_message; - std::string last_context; - std::string last_file; - int last_line; + int call_count = 0; + int error_count = 0; + std::string last_message, last_context, last_file; + int last_line = 0; MOCK_SINGLETON_CONS(mock_error_data_t); }; MOCK_SINGLETON_INST(mock_error_data) +/// Error handler that populates the mock_error_data singleton instead of failing template struct mock_error { @@ -73,6 +73,8 @@ struct mock_error } }; +/// Fixture to use CHECK_CALLS & CHECK_ERROR: Initializes the mock_error_data singleton +/// Verifies there are no pending verifications on end of the test struct mock_error_fixture { mock_error_fixture() { mock_error_data.reset(); } @@ -83,9 +85,15 @@ struct mock_error_fixture } }; +/// Check that the number of calls to mocked function equals the given amount +/// and resets them (for the next check and cleanup) #define CHECK_CALLS(calls) \ BOOST_CHECK_EQUAL(calls, mock_error_data.call_count); \ mock_error_data.call_count = 0; +/// Similar to BOOST_CHECK_THROW: +/// Checks that running `expr` leads to an error of the set expectations, +/// that the error message equals `error`, with the given `context` +/// and `calls` mocked functions were called. #define CHECK_ERROR(expr, error, calls, context) \ BOOST_CHECK(mock_error_data.verify()); \ try \ From c910d1db8cc4aece60736e917586909dc50ab0fa Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 17:18:11 +0100 Subject: [PATCH 064/126] [CMake] Add IDE target for the turtle headers Allows easier development in e.g. Visual Studio --- CMakeLists.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 957f3d7..5ddc100 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,8 @@ endif() find_package(Boost 1.58 REQUIRED) set(MOCK_VERSION "\"${PROJECT_VERSION}\"") -configure_file(version.hpp.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/version.hpp @ONLY) +set(_turtleVersionFile ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/version.hpp) +configure_file(version.hpp.cmake ${_turtleVersionFile} @ONLY) add_library(turtle INTERFACE) add_library(turtle::turtle ALIAS turtle) @@ -30,6 +31,14 @@ target_compile_features(turtle INTERFACE cxx_std_14) target_link_libraries(turtle INTERFACE Boost::boost Boost::disable_autolinking) +if(NOT CMAKE_VERSION VERSION_LESS 3.19) + file(GLOB _turtleHeaders include/turtle/*.hpp) + file(GLOB _turtleHeadersDetail include/turtle/detail/*.hpp) + source_group(turtle FILES ${_turtleHeaders} ${_turtleVersionFile}) + source_group(turtle/detail FILES ${_turtleHeadersDetail}) + target_sources(turtle PRIVATE ${_turtleHeaders} ${_turtleVersionFile} ${_turtleHeadersDetail}) +endif() + if(BUILD_TESTING) add_subdirectory(test) endif() From 3d5ac2b94a6be28a5c233357bf0401af363a4da0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 17:32:22 +0100 Subject: [PATCH 065/126] Remove support for BOOST_IDENTITY_TYPE MOCK_PROTECT_FUNCTION_SIG should be used instead which even requires less parentheses. Closes #109 --- doc/changelog.qbk | 1 + doc/example/reference.cpp | 6 --- include/turtle/detail/mock_impl.hpp | 68 +++++++++++++++-------------- include/turtle/mock.hpp | 4 +- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 1a92be0..df78622 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -14,6 +14,7 @@ Released - * Replaced Boost facilities with std:: equivalents where existing in C++14 * Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_FUNCTION_SIG to pass function signatures with commas in the return type +* Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_FUNCTION_SIG instead [endsect] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 17ef2c7..79a1c80 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -229,15 +229,9 @@ MOCK_CLASS(mock_class) MOCK_METHOD(method, 0, MOCK_PROTECT_FUNCTION_SIG(std::map())) }; //] -MOCK_CLASS(legacy_mock_class) -{ - MOCK_METHOD(method, 0, BOOST_IDENTITY_TYPE((std::map()))) -}; static_assert(std::is_same().method()), std::map>::value, "Wrong return value"); -static_assert(std::is_same().method()), std::map>::value, - "Wrong return value"); } // namespace member_function_example_8 diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 4ac3b8a..79f5d59 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -16,39 +16,42 @@ #include "type_name.hpp" #include #include +#include -// Internal compatibility macro if function signature is passed via BOOST_IDENTITY_TYPE -// TODO: Remove support for doing that and move remove_pointer_t to MOCK_PROTECT_FUNCTION_SIG -#define MOCK_FUNCTION_TYPE(...) std::remove_pointer_t<__VA_ARGS__> +namespace mock { namespace detail { + /// Used in MOCK_PROTECT_FUNCTION_SIG to unwrap the passed function signature + template + using unwrap_function_sig_t = std::remove_pointer_t>; +}} // namespace mock::detail #define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) #define MOCK_ANONYMOUS_HELPER(t) t##_mock(mock::detail::root, "?.") -#define MOCK_METHOD_HELPER(S, t) \ - mutable mock::detail::function t##_mock_; \ - mock::detail::function& t##_mock(const mock::detail::context&, \ - const boost::unit_test::const_string& instance) const \ - { \ - mock::detail::configure(*this, \ - t##_mock_, \ - instance.substr(0, instance.rfind(BOOST_PP_STRINGIZE(t))), \ - mock::detail::make_type_name(*this), \ - BOOST_PP_STRINGIZE(t)); \ - return t##_mock_; \ +#define MOCK_METHOD_HELPER(S, t) \ + mutable mock::detail::function t##_mock_; \ + mock::detail::function& t##_mock(const mock::detail::context&, const boost::unit_test::const_string& instance) \ + const \ + { \ + mock::detail::configure(*this, \ + t##_mock_, \ + instance.substr(0, instance.rfind(BOOST_PP_STRINGIZE(t))), \ + mock::detail::make_type_name(*this), \ + BOOST_PP_STRINGIZE(t)); \ + return t##_mock_; \ } -#define MOCK_PARAM(S) mock::detail::parameter_t < MOCK_FUNCTION_TYPE(S) +#define MOCK_PARAM(S) mock::detail::parameter_t < S #define MOCK_DECL_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > p##n #define MOCK_DECL_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S)) -#define MOCK_DECL(M, n, S, c) mock::detail::result_type_t M(MOCK_DECL_PARAMS(n, S)) c +#define MOCK_DECL(M, n, S, c) mock::detail::result_type_t M(MOCK_DECL_PARAMS(n, S)) c #define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n >> (p##n) #define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S)) -#define MOCK_METHOD_AUX(M, n, S, t, c) \ - MOCK_DECL(M, n, S, c) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ +#define MOCK_METHOD_AUX(M, n, S, t, c) \ + MOCK_DECL(M, n, S, c) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ } #define MOCK_METHOD_EXT(M, n, S, t) \ @@ -62,24 +65,23 @@ MOCK_METHOD_AUX(M, n, S, t, ) \ MOCK_METHOD_HELPER(S, t) -#define MOCK_FUNCTION_HELPER(S, t, s) \ - s mock::detail::function& t##_mock(mock::detail::context& context, \ - boost::unit_test::const_string instance) \ - { \ - static mock::detail::function f; \ - return f(context, instance); \ +#define MOCK_FUNCTION_HELPER(S, t, s) \ + s mock::detail::function& t##_mock(mock::detail::context& context, boost::unit_test::const_string instance) \ + { \ + static mock::detail::function f; \ + return f(context, instance); \ } #define MOCK_CONSTRUCTOR_AUX(T, n, A, t) \ T(MOCK_DECL_PARAMS(n, void A)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A)); } \ MOCK_FUNCTION_HELPER(void A, t, static) -#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ - MOCK_FUNCTION_HELPER(S, t, s) \ - s MOCK_DECL(F, n, S, ) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ +#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ + MOCK_FUNCTION_HELPER(S, t, s) \ + s MOCK_DECL(F, n, S, ) \ + { \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ } #define MOCK_VARIADIC_ELEM_0(e0, ...) e0 diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 7e610bf..c77b560 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -26,11 +26,11 @@ /// MOCK_PROTECT_FUNCTION_SIG( signature ) /// Use this with MOCK_FUNCTION/MOCK_*_METHOD if the return type contains commas -#define MOCK_PROTECT_FUNCTION_SIG(...) mock::detail::parameter_type_t +#define MOCK_PROTECT_FUNCTION_SIG(...) mock::detail::unwrap_function_sig_t /// MOCK_FUNCTOR( name, signature ) /// Define a callable variable/member -#define MOCK_FUNCTOR(name, ...) mock::detail::functor name, name##_mock +#define MOCK_FUNCTOR(name, ...) mock::detail::functor<__VA_ARGS__> name, name##_mock /// MOCK_CONVERSION_OPERATOR( [calling convention] name, type, identifier ) /// generates both const and non-const conversion operators From 95ec79f8f1f29e7866e5d4680869f273adfcca89 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 17:41:57 +0100 Subject: [PATCH 066/126] Enhance formatting in reference.cpp Due to the maximum line length some line breaks made the examples ugly. Move the comments in front of the code for those. --- doc/example/reference.cpp | 65 ++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 79a1c80..b29a4cf 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -88,8 +88,8 @@ class base struct name : base, mock::object // equivalent to using MOCK_BASE_CLASS { - typedef base - base_type; // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS + // this is required for the shortest form of MOCK_METHOD to work when not using MOCK_BASE_CLASS + using base_type = base; }; //] } // namespace class_example_7 @@ -103,7 +103,7 @@ struct base template struct name : base, mock::object { - typedef base base_type; + using base_type = base; }; //] } // namespace class_example_8 @@ -134,15 +134,10 @@ struct base_class MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_METHOD( - method, - 2, - void(int, const std::string&), - identifier_1) // both the signature and identifier must be specified because of ambiguity due to overloading - MOCK_METHOD(method, - 1, - void(float), - identifier_2) // the identifier must differ from the previous one in order to fully disambiguate methods + // both the signature and identifier must be specified because of ambiguity due to overloading + MOCK_METHOD(method, 2, void(int, const std::string&), identifier_1) + // the identifier must differ from the previous one in order to fully disambiguate methods + MOCK_METHOD(method, 1, void(float), identifier_2) }; //] } // namespace member_function_example_2 @@ -174,9 +169,10 @@ struct base_class MOCK_BASE_CLASS(mock_class, base_class) { - MOCK_CONST_METHOD(method, 1, void(float), identifier_1) // this generates only the const version - MOCK_NON_CONST_METHOD( - method, 1, void(float), identifier_2) // this generates only the non-const version, with a different identifier + // this generates only the const version + MOCK_CONST_METHOD(method, 1, void(float), identifier_1) + // this generates only the non-const version, with a different identifier + MOCK_NON_CONST_METHOD(method, 1, void(float), identifier_2) }; //] } // namespace member_function_example_4 @@ -191,7 +187,7 @@ struct base_class struct mock_class : base_class { - typedef base_class base_type; // this is required for MOCK_METHOD to work when not using MOCK_BASE_CLASS + using base_type = base_class; // this is required for MOCK_METHOD to work when not using MOCK_BASE_CLASS MOCK_METHOD(method, 1) }; @@ -215,8 +211,8 @@ namespace member_function_example_7 { template MOCK_CLASS(mock_class) { - MOCK_METHOD(method, 1, - void(const T&)) // includes a template parameter of the class + // includes a template parameter of the class + MOCK_METHOD(method, 1, void(const T&)) }; //] } // namespace member_function_example_7 @@ -240,10 +236,8 @@ namespace member_function_example_9 { //[ member_function_example_9 MOCK_CLASS(mock_class) { - MOCK_METHOD(__stdcall method, - 0, - void(), - method) // all parameters must be provided when specifying a different calling convention + // all parameters must be provided when specifying a different calling convention + MOCK_METHOD(__stdcall method, 0, void(), method) }; //] } // namespace member_function_example_9 @@ -273,10 +267,8 @@ namespace static_member_function_example_3 { //[ static_member_function_example_3 MOCK_CLASS(mock_class) { - MOCK_STATIC_METHOD(__stdcall method, - 0, - void(), - method) // all parameters must be provided when specifying a different calling convention + // all parameters must be provided when specifying a different calling convention + MOCK_STATIC_METHOD(__stdcall method, 0, void(), method) }; //] } // namespace static_member_function_example_3 @@ -381,10 +373,8 @@ BOOST_AUTO_TEST_CASE(demonstrates_instantiating_a_mock_function) #ifdef BOOST_MSVC namespace function_example_2 { //[ function_example_2 -MOCK_FUNCTION(__stdcall f, - 0, - void(), - f) // all parameters must be provided when specifying a different calling convention +// all parameters must be provided when specifying a different calling convention +MOCK_FUNCTION(__stdcall f, 0, void(), f) //] } // namespace function_example_2 #endif @@ -898,11 +888,10 @@ BOOST_AUTO_TEST_CASE(mock_constraint_0_arity) namespace helpers_example_2 { //[ helpers_example_2 -MOCK_CONSTRAINT(equal, expected, actual == expected) // this is how mock::equal could be defined -MOCK_CONSTRAINT(near, - expected, - std::abs(actual - expected) < - 0.01) // this defines a 'near' constraint which can be used as 'near( 42 )' +// this is how mock::equal could be defined +MOCK_CONSTRAINT(equal, expected, actual == expected) +// this defines a 'near' constraint which can be used as 'near( 42 )' +MOCK_CONSTRAINT(near, expected, std::abs(actual - expected) < 0.01) BOOST_AUTO_TEST_CASE(mock_constraint_1_arity) { @@ -915,10 +904,8 @@ BOOST_AUTO_TEST_CASE(mock_constraint_1_arity) namespace helpers_example_3 { //[ helpers_example_3 -MOCK_CONSTRAINT(near, - expected, - tolerance, - std::abs(actual - expected) < tolerance) // this is how mock::near could be defined +// this is how mock::near could be defined +MOCK_CONSTRAINT(near, expected, tolerance, std::abs(actual - expected) <= tolerance) BOOST_AUTO_TEST_CASE(mock_constraint_2_arity) { From df10c59d21f6933d929c0ddf2cfca41376f6fb72 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 18:05:06 +0100 Subject: [PATCH 067/126] Rename MOCK_PROTECT_FUNCTION_SIG to MOCK_PROTECT_SIGNATURE Shorter and avoids the abbreviation --- doc/changelog.qbk | 4 ++-- doc/example/reference.cpp | 4 ++-- include/turtle/detail/mock_impl.hpp | 4 ++-- include/turtle/mock.hpp | 4 ++-- test/test_mock.cpp | 10 +++++----- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index df78622..c608e81 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -13,8 +13,8 @@ Released - * Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` * Replaced Boost facilities with std:: equivalents where existing in C++14 * Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates -* Added MOCK_PROTECT_FUNCTION_SIG to pass function signatures with commas in the return type -* Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_FUNCTION_SIG instead +* Added MOCK_PROTECT_SIGNATURE to pass function signatures with commas in the return type +* Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_SIGNATURE instead [endsect] diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index b29a4cf..2b19a4e 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -221,8 +221,8 @@ namespace member_function_example_8 { //[ member_function_example_8 MOCK_CLASS(mock_class) { - // the signature must be wrapped in MOCK_PROTECT_FUNCTION_SIG if the return type contains a comma - MOCK_METHOD(method, 0, MOCK_PROTECT_FUNCTION_SIG(std::map())) + // the signature must be wrapped in MOCK_PROTECT_SIGNATURE if the return type contains a comma + MOCK_METHOD(method, 0, MOCK_PROTECT_SIGNATURE(std::map())) }; //] diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 79f5d59..606568c 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -19,9 +19,9 @@ #include namespace mock { namespace detail { - /// Used in MOCK_PROTECT_FUNCTION_SIG to unwrap the passed function signature + /// Used in MOCK_PROTECT_SIGNATURE to unwrap the passed function signature template - using unwrap_function_sig_t = std::remove_pointer_t>; + using unwrap_signature_t = std::remove_pointer_t>; }} // namespace mock::detail #define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index c77b560..9e78a4f 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -24,9 +24,9 @@ /// Define a class deriving from a base class #define MOCK_BASE_CLASS(name, ...) struct name : __VA_ARGS__, mock::object, mock::detail::base<__VA_ARGS__> -/// MOCK_PROTECT_FUNCTION_SIG( signature ) +/// MOCK_PROTECT_SIGNATURE( signature ) /// Use this with MOCK_FUNCTION/MOCK_*_METHOD if the return type contains commas -#define MOCK_PROTECT_FUNCTION_SIG(...) mock::detail::unwrap_function_sig_t +#define MOCK_PROTECT_SIGNATURE(...) mock::detail::unwrap_signature_t /// MOCK_FUNCTOR( name, signature ) /// Define a callable variable/member diff --git a/test/test_mock.cpp b/test/test_mock.cpp index 51f6620..a61c305 100644 --- a/test/test_mock.cpp +++ b/test/test_mock.cpp @@ -312,11 +312,11 @@ BOOST_FIXTURE_TEST_CASE(mock_static_function_is_named, mock_error_fixture) namespace { MOCK_CLASS(round_parenthesized_signature) { - MOCK_METHOD(m0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m0) - MOCK_STATIC_METHOD(m1, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), m1) - MOCK_FUNCTOR(f0, MOCK_PROTECT_FUNCTION_SIG(std::map())); + MOCK_METHOD(m0, 0, MOCK_PROTECT_SIGNATURE(std::map()), m0) + MOCK_STATIC_METHOD(m1, 0, MOCK_PROTECT_SIGNATURE(std::map()), m1) + MOCK_FUNCTOR(f0, MOCK_PROTECT_SIGNATURE(std::map())); }; -MOCK_FUNCTION(fun0, 0, MOCK_PROTECT_FUNCTION_SIG(std::map()), fun0) +MOCK_FUNCTION(fun0, 0, MOCK_PROTECT_SIGNATURE(std::map()), fun0) } // namespace namespace { @@ -363,7 +363,7 @@ MOCK_BASE_CLASS(comma_base, std::map) MOCK_FUNCTION(fun1, 0, void()) MOCK_FUNCTION(fun2, 0, void(), fun2) -MOCK_FUNCTION(fun3, 0, MOCK_PROTECT_FUNCTION_SIG(std::map())) +MOCK_FUNCTION(fun3, 0, MOCK_PROTECT_SIGNATURE(std::map())) MOCK_FUNCTOR(f_variadic, std::map()); } // namespace From 371859e81be1e10fa88bab745fff31a7e738da74 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 18:28:51 +0100 Subject: [PATCH 068/126] Enhance error message for parameter-trait Also add a comment for when this is usually triggered --- include/turtle/detail/parameter.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp index 1db8228..b21a19a 100644 --- a/include/turtle/detail/parameter.hpp +++ b/include/turtle/detail/parameter.hpp @@ -60,7 +60,9 @@ namespace mock { namespace detail { template struct parameter { - static_assert(n < function_arity::value, "Function signature has not that many parameters"); + // This assertion is usually triggered when the arity passed to e.g. MOCK_METHOD exceeds the number of + // parameters of the mocked function or the passed function signature + static_assert(n < function_arity::value, "Parameter index exceeds the number of parameters"); using type = typename tuple_element::type>::type; }; template From c00b03de4412b58f7b20a4c82c3fb3630c1fb6d6 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 18:45:32 +0100 Subject: [PATCH 069/126] Move the arity-mismatch assertion in front of the function Shows that error first before deep-diving into templates --- include/turtle/detail/mock_impl.hpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 606568c..d501002 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -47,12 +47,9 @@ namespace mock { namespace detail { #define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n >> (p##n) #define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S)) -#define MOCK_METHOD_AUX(M, n, S, t, c) \ - MOCK_DECL(M, n, S, c) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ - } +#define MOCK_METHOD_AUX(M, n, S, t, c) \ + static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ + MOCK_DECL(M, n, S, c) { return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); } #define MOCK_METHOD_EXT(M, n, S, t) \ MOCK_METHOD_AUX(M, n, S, t, ) \ From 0c20ca1ce92b684b85f736ddb0893b34dfc5308f Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 25 Jan 2022 18:46:18 +0100 Subject: [PATCH 070/126] Make MOCK_SIGNATURE macro shorter Put most of it into a template-alias as this may turn up in error messages --- include/turtle/detail/signature.hpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp index f76c7b0..ee8e577 100644 --- a/include/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -54,21 +54,22 @@ namespace mock { namespace detail { struct signature : signature::type> {}; + template + using signature_t = typename signature>>::type; + template struct base { typedef T base_type; }; - // if an error is generated by the line below it means - // the method is ambiguous : specify its signature to - // disambiguate + // if an error is generated by the line below it means the method is ambiguous: + // specify its signature to disambiguate template T& ambiguous_method_requires_to_specify_signature(const T&); }} // namespace mock::detail -#define MOCK_SIGNATURE(M) \ - mock::detail::signature>>::type +#define MOCK_SIGNATURE(M) \ + mock::detail::signature_t #endif // MOCK_SIGNATURE_HPP_INCLUDED From b802c51c2d15434b521e71b4211e7f59f1873b97 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 26 Jan 2022 14:15:06 +0100 Subject: [PATCH 071/126] Reduce number of template instantiations Combine result_type, function_arity, parameter_types into 1 trait. This reduces the amount of template classes instantiated by a factor of 3 which should improve compile times and memory consumption. Also improve tests and documentation of touched classes/traits. --- include/turtle/detail/mock_impl.hpp | 30 ++++---- include/turtle/detail/parameter.hpp | 82 ---------------------- include/turtle/detail/signature.hpp | 12 ++-- include/turtle/detail/signature_traits.hpp | 62 ++++++++++++++++ test/detail/test_signature.cpp | 74 +++++++++++++++++-- 5 files changed, 157 insertions(+), 103 deletions(-) delete mode 100644 include/turtle/detail/parameter.hpp create mode 100644 include/turtle/detail/signature_traits.hpp diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index d501002..211e81c 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -11,17 +11,26 @@ #include "function.hpp" #include "functor.hpp" -#include "parameter.hpp" #include "signature.hpp" +#include "signature_traits.hpp" #include "type_name.hpp" #include #include #include namespace mock { namespace detail { - /// Used in MOCK_PROTECT_SIGNATURE to unwrap the passed function signature + /// Simplified trait to extract the argument type of a function signature with 1 argument template - using unwrap_signature_t = std::remove_pointer_t>; + struct arg_type; + template + struct arg_type + { + using type = U; + }; + /// Used in MOCK_PROTECT_SIGNATURE to unwrap the passed function signature + /// T is something like `void(std::map)` + template + using unwrap_signature_t = std::remove_pointer_t::type>; }} // namespace mock::detail #define MOCK_HELPER(t) t##_mock(mock::detail::root, BOOST_PP_STRINGIZE(t)) @@ -47,8 +56,8 @@ namespace mock { namespace detail { #define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n >> (p##n) #define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S)) -#define MOCK_METHOD_AUX(M, n, S, t, c) \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ +#define MOCK_METHOD_AUX(M, n, S, t, c) \ + static_assert(n == mock::detail::function_arity_t::value, "Arity mismatch"); \ MOCK_DECL(M, n, S, c) { return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); } #define MOCK_METHOD_EXT(M, n, S, t) \ @@ -73,13 +82,10 @@ namespace mock { namespace detail { T(MOCK_DECL_PARAMS(n, void A)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A)); } \ MOCK_FUNCTION_HELPER(void A, t, static) -#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ - MOCK_FUNCTION_HELPER(S, t, s) \ - s MOCK_DECL(F, n, S, ) \ - { \ - static_assert(n == mock::detail::function_arity::value, "Arity mismatch"); \ - return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); \ - } +#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ + MOCK_FUNCTION_HELPER(S, t, s) \ + static_assert(n == mock::detail::function_arity_t::value, "Arity mismatch"); \ + s MOCK_DECL(F, n, S, ) { return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); } #define MOCK_VARIADIC_ELEM_0(e0, ...) e0 #define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 diff --git a/include/turtle/detail/parameter.hpp b/include/turtle/detail/parameter.hpp deleted file mode 100644 index b21a19a..0000000 --- a/include/turtle/detail/parameter.hpp +++ /dev/null @@ -1,82 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_PARAMETER_HPP_INCLUDED -#define MOCK_PARAMETER_HPP_INCLUDED - -#include "../config.hpp" - -namespace mock { namespace detail { - template - struct tuple; - - template - struct tuple_element; - - template - struct tuple_element> : tuple_element> - {}; - - template - struct tuple_element<0, tuple> - { - using type = H; - }; - - template - struct result_type; - - template - struct result_type - { - using type = R; - }; - template - using result_type_t = typename result_type::type; - - template - struct function_arity; - - template - struct function_arity - { - static constexpr size_t value = sizeof...(Args); - }; - - template - struct parameter_types; - - template - struct parameter_types - { - using type = tuple; - }; - - template - struct parameter - { - // This assertion is usually triggered when the arity passed to e.g. MOCK_METHOD exceeds the number of - // parameters of the mocked function or the passed function signature - static_assert(n < function_arity::value, "Parameter index exceeds the number of parameters"); - using type = typename tuple_element::type>::type; - }; - template - using parameter_t = typename parameter::type; - - template - struct parameter_type; - template - struct parameter_type - { - using type = U; - }; - template - using parameter_type_t = typename parameter_type::type; -}} // namespace mock::detail - -#endif // MOCK_PARAMETER_HPP_INCLUDED diff --git a/include/turtle/detail/signature.hpp b/include/turtle/detail/signature.hpp index ee8e577..cb4b3eb 100644 --- a/include/turtle/detail/signature.hpp +++ b/include/turtle/detail/signature.hpp @@ -54,19 +54,21 @@ namespace mock { namespace detail { struct signature : signature::type> {}; + /// Return the (non-member) function signature out of (any) signature template - using signature_t = typename signature>>::type; + using signature_t = typename signature::type; + /// CRTP class to define the base_type typedef template struct base { - typedef T base_type; + using base_type = T; }; - // if an error is generated by the line below it means the method is ambiguous: - // specify its signature to disambiguate + // If an error is generated by the line below it means the method is ambiguous. + // Specify its signature to disambiguate template - T& ambiguous_method_requires_to_specify_signature(const T&); + T ambiguous_method_requires_to_specify_signature(const T&); }} // namespace mock::detail #define MOCK_SIGNATURE(M) \ diff --git a/include/turtle/detail/signature_traits.hpp b/include/turtle/detail/signature_traits.hpp new file mode 100644 index 0000000..e6948f6 --- /dev/null +++ b/include/turtle/detail/signature_traits.hpp @@ -0,0 +1,62 @@ +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_PARAMETER_HPP_INCLUDED +#define MOCK_PARAMETER_HPP_INCLUDED + +#include "../config.hpp" +#include + +namespace mock { namespace detail { + /// Helper class to store a tuple/list of types + template + struct tuple; + + /// Get the type at the given index in the tuple + template + struct tuple_element; + + template + struct tuple_element> : tuple_element> + {}; + + template + struct tuple_element<0, tuple> + { + using type = H; + }; + + /// Provides information about a given function signature + /// Member types: return_type, args + /// Member constant: arity + template + struct signature_traits; + + template + struct signature_traits + { + using return_type = R; + static constexpr std::size_t arity = sizeof...(Args); + using args = tuple; + }; + + /// Return the result type of the function signature + template + using result_type_t = typename signature_traits::return_type; + + /// Return the arity of the function signature + template + using function_arity_t = std::integral_constant::arity>; + + /// Return the type at the given index of the function signature + template + using parameter_t = typename tuple_element::args>::type; + +}} // namespace mock::detail + +#endif // MOCK_PARAMETER_HPP_INCLUDED diff --git a/test/detail/test_signature.cpp b/test/detail/test_signature.cpp index ad8228d..fd4e3ef 100644 --- a/test/detail/test_signature.cpp +++ b/test/detail/test_signature.cpp @@ -6,21 +6,87 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include +#include #include namespace { struct base { void method_1(); - float method_2(int) const; + float method_2(int); + // Using templates in result and argument types + std::map method_3(std::map, short); + + // Qualified methods + float qual_1(int) &; + float qual_2(int) &&; + float qual_3(int) const; + float qual_4(int) const&; + float qual_5(int) const&&; + float qual_6(int) volatile; + float qual_7(int) volatile&; + float qual_8(int) volatile&&; + float qual_9(int) const volatile; + float qual_10(int) const volatile&; + float qual_11(int) const volatile&&; }; -typedef base base_type; } // namespace -BOOST_AUTO_TEST_CASE(mock_signature_generates_signature) +BOOST_AUTO_TEST_CASE(signature_traits_return_correct_values) { + using function1 = void(); + static_assert(std::is_same, void>::value, "!"); + static_assert(mock::detail::function_arity_t::value == 0, "!"); + + using function2 = float(int); + static_assert(std::is_same, float>::value, "!"); + static_assert(mock::detail::function_arity_t::value == 1, "!"); + static_assert(std::is_same, int>::value, "!"); + + using function3 = unsigned(short&, int, const char*, float, double, char, unsigned char, std::map); + static_assert(std::is_same, unsigned>::value, "!"); + static_assert(mock::detail::function_arity_t::value == 8, "!"); + static_assert(std::is_same, short&>::value, "!"); + static_assert(std::is_same, int>::value, "!"); + static_assert(std::is_same, const char*>::value, "!"); + static_assert(std::is_same, float>::value, "!"); + static_assert(std::is_same, double>::value, "!"); + static_assert(std::is_same, char>::value, "!"); + static_assert(std::is_same, unsigned char>::value, "!"); + static_assert(std::is_same, std::map>::value, "!"); +} + +BOOST_AUTO_TEST_CASE(MOCK_SIGNATURE_generates_signature) +{ + using base_type = base; // MOCK_SIGNATURE requires a visible base_type typedef in the current scope static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); + static_assert(std::is_same(std::map, short), MOCK_SIGNATURE(method_3)>::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); +} + +BOOST_AUTO_TEST_CASE(MOCK_PROTECT_SIGNATURE_keeps_signature) +{ + // MOCK_PROTECT_SIGNATURE is basically a no-op regarding its argument + // and only required to get it through a VAR_ARGS macro + // clang-format off + static_assert(std::is_same::value, "!"); + static_assert(std::is_same::value, "!"); + static_assert(std::is_same(std::map, short), MOCK_PROTECT_SIGNATURE( + std::map(std::map, short))>::value, "!"); + // clang-format on } From f186dfbab0e047ac934aeb2927e2eda6d9511953 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 7 Feb 2022 18:48:15 +0100 Subject: [PATCH 072/126] Fix root path of coverage upload The repo files were moved to a subfolder which confuses the coverage UI --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0ef951..f028933 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -146,6 +146,7 @@ jobs: with: path-to-lcov: ${{env.PROJECT_DIR}}/coverage.info github-token: ${{secrets.GITHUB_TOKEN}} + base-path: ${{env.PROJECT_DIR}} - name: Build required boost libs working-directory: boost-root From 50ea9982ed9b01db563b2bd28992a6af15b0ba45 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 8 Feb 2022 19:07:11 +0100 Subject: [PATCH 073/126] Move the boost-root to a sibling folder This keeps the correct paths of our files in the coverage data. --- .github/workflows/ci.yml | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f028933..4f0a495 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,20 +58,13 @@ jobs: timeout-minutes: 120 runs-on: ${{matrix.os}} - env: - BOOST_ROOT: ${{github.workspace}}/boost-root - PROJECT_DIR: ${{github.workspace}}/repo steps: - uses: actions/checkout@v2 - if: '!matrix.coverage' with: - path: ${{env.PROJECT_DIR}} - - uses: actions/checkout@v2 - if: 'matrix.coverage' - with: - path: ${{env.PROJECT_DIR}} - fetch-depth: 0 + # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' + fetch-depth: ${{ matrix.coverage && '0' || '1' }} + # Checking out Boost and all its submodules takes ages... - name: Cache Boost uses: actions/cache@v2 @@ -105,6 +98,9 @@ jobs: fi echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam + # Move the Boost root to a sibling folder + mv boost-root .. + echo "BOOST_ROOT=${{github.workspace}}/../boost-root" >> $GITHUB_ENV - name: Cache ccache uses: hendrikmuhs/ccache-action@v1 @@ -112,11 +108,10 @@ jobs: key: ${{matrix.os}}-${{matrix.compiler}}-${{matrix.boostBranch}} - name: Prepare boost - working-directory: boost-root + working-directory: ${{env.BOOST_ROOT}} run: ./bootstrap.sh && ./b2 headers - name: Boost build - working-directory: ${{env.PROJECT_DIR}} run: | if [[ "${{matrix.boostBranch}}" == "master" ]]; then B2_FLAGS="cxxstd=${{matrix.cxxstd}}" @@ -130,33 +125,30 @@ jobs: - name: Collect coverage if: matrix.coverage - working-directory: ${{env.PROJECT_DIR}} run: | lcov --version - lcov --gcov-tool=gcov-8 --directory "$PROJECT_DIR/test" --base-directory "$BOOST_ROOT" --capture --output-file all.info + lcov --gcov-tool=gcov-8 --directory "$GITHUB_WORKSPACE/test" --capture --output-file all.info # dump a summary on the console lcov --list all.info # Limit to our files (header-only in this case) - lcov --extract all.info "$PROJECT_DIR/include/*" --output-file coverage.info + lcov --extract all.info "$GITHUB_WORKSPACE/include/*" --output-file coverage.info # Output what was collected lcov --list coverage.info - name: Upload coverage if: matrix.coverage uses: coverallsapp/github-action@master with: - path-to-lcov: ${{env.PROJECT_DIR}}/coverage.info + path-to-lcov: ${{github.workspace}}/coverage.info github-token: ${{secrets.GITHUB_TOKEN}} - base-path: ${{env.PROJECT_DIR}} - name: Build required boost libs - working-directory: boost-root + working-directory: ${{env.BOOST_ROOT}} run: | ./b2 --toolset=$B2_TOOLSET --with-test --with-thread --with-chrono --with-system --with-atomic --with-date_time -a -j3 # Add lib folder to LD_LIBRARY_PATH, so the tests can load them echo "LD_LIBRARY_PATH=$PWD/stage/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV - name: CMake build - working-directory: ${{env.PROJECT_DIR}} run: | mkdir build && cd build CXX_STANDARD="${{matrix.cxxstd}}" @@ -164,7 +156,7 @@ jobs: cmake --build . --config Debug -- -j3 ctest --output-on-failure --build-config Debug -j3 - - name: Cleanup Boost folder + - name: Cleanup Boost folder to reduce cache usage if: ${{ always() }} - working-directory: boost-root + working-directory: ${{env.BOOST_ROOT}} run: git clean -fxd From 1a81536f3ca051a11b0c9b799a7711a877eecc34 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 9 Feb 2022 15:33:03 +0100 Subject: [PATCH 074/126] Improve tests - Check callability of function.expect.with(...) - Check serialization of MOCK_CONSTRAINT - Actually test some variations of MOCK_CONSTRAINT usages - Add more test for unique_ptr (move-only class) - Remove redundant stuff from test_log and change a few values to catch mistakes - Add test for *-matcher serialization --- test/detail/test_function.cpp | 37 ++++++++++++++++++ test/test_constraint.cpp | 31 +++++++++++++-- test/test_integration.cpp | 27 ++++++++++--- test/test_log.cpp | 72 +++++++++++++++-------------------- test/test_matcher.cpp | 51 +++++++++++++++++++++++++ 5 files changed, 168 insertions(+), 50 deletions(-) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index f26176f..01aaa85 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -10,6 +10,7 @@ #include "../undefined.hpp" #include #include +#include #include #include #include @@ -24,6 +25,42 @@ static_assert(std::is_same{}())>:: static_assert(std::is_same{}())>::value, "!"); static_assert(std::is_same{}(std::declval()))>::value, "!"); static_assert(std::is_same{}(std::declval()))>::value, "!"); + +template +using with_call_t = decltype(std::declval().expect().with(std::declval()...)); +template +struct with_is_callable : std::false_type +{}; +template +struct with_is_callable>, TFunction, TParams...> : + std::true_type +{}; +// Detect if we can call function.expect().with(params) +template +using with_is_callable_t = with_is_callable; + +// For function with no parameters `with` can never be called +using function_0_args = mock::detail::function; +static_assert(!with_is_callable_t::value, "Can't call with()"); +static_assert(!with_is_callable_t::value, "Can't call with(int)"); +static_assert(!with_is_callable_t::value, "Can't call with custom constraint"); + +// For functions with parameters `with` can be called with a custom constraint (taking all params) +// or exactly as many parameters as the function has (here 1 and 4 respectively) +using function_1_args = mock::detail::function; +static_assert(!with_is_callable_t::value, "Can't call with()"); +static_assert(with_is_callable_t::value, "Can call with(int)"); +static_assert(with_is_callable_t::value, "Can call with custom constraint"); +static_assert(!with_is_callable_t::value, "Can't call with(int, int)"); + +using function_4_args = mock::detail::function; +static_assert(!with_is_callable_t::value, "Can't call with()"); +static_assert(with_is_callable_t::value, "Can call with custom constraint"); +static_assert(!with_is_callable_t::value, "Can't call with(int, int)"); +static_assert(!with_is_callable_t::value, "Can't call with(int, int, int)"); +static_assert(with_is_callable_t::value, "Can call with(int, int, int, int)"); +static_assert(!with_is_callable_t::value, + "Can't call with(int, int, int, int, int)"); } // namespace // functor diff --git a/test/test_constraint.cpp b/test/test_constraint.cpp index 0eb525c..8e98ed9 100644 --- a/test/test_constraint.cpp +++ b/test/test_constraint.cpp @@ -8,16 +8,39 @@ #include #include +#include namespace { MOCK_CONSTRAINT(constraint_0, actual == 0) MOCK_CONSTRAINT(constraint_1, expected, actual == expected) MOCK_CONSTRAINT(constraint_2, expected_0, expected_1, actual == expected_0 || actual == expected_1) + +template +std::string to_string(const mock::constraint& t) +{ + std::ostringstream s; + s << t.c_; + return s.str(); +} } // namespace -BOOST_AUTO_TEST_CASE(mock_constraint_is_supported_by_compilers_with_variadic_macros) +BOOST_AUTO_TEST_CASE(mock_constraint_works_for_0_to_2_args) { - BOOST_CHECK(constraint_0.c_(0)); - BOOST_CHECK(constraint_1(0).c_(0)); - BOOST_CHECK(constraint_2(0, 0).c_(0)); + BOOST_TEST(constraint_0.c_(0)); + BOOST_TEST(!constraint_0.c_(42)); + + BOOST_TEST(constraint_1(0).c_(0)); + BOOST_TEST(!constraint_1(1).c_(0)); + BOOST_TEST(!constraint_1(42).c_(1337)); + + BOOST_TEST(constraint_2(42, 1337).c_(42)); + BOOST_TEST(constraint_2(42, 1337).c_(1337)); + BOOST_TEST(!constraint_2(42, 1337).c_(99)); +} + +BOOST_AUTO_TEST_CASE(mock_constraint_outputs_human_readable_representation) +{ + BOOST_TEST(to_string(constraint_0) == "constraint_0"); + BOOST_TEST(to_string(constraint_1(42)) == "constraint_1( 42 )"); + BOOST_TEST(to_string(constraint_2(42, 1337)) == "constraint_2( 42, 1337 )"); } diff --git a/test/test_integration.cpp b/test/test_integration.cpp index 2442b8f..ef0ca9b 100644 --- a/test/test_integration.cpp +++ b/test/test_integration.cpp @@ -726,12 +726,12 @@ BOOST_FIXTURE_TEST_CASE(std_unique_ptr_argument_is_supported_in_retrieve_constra } { std::unique_ptr i; - MOCK_FUNCTOR(f, void(std::unique_ptr)); - MOCK_EXPECT(f).once().with(nullptr); - MOCK_EXPECT(f).once().with(mock::retrieve(i)); - f(0); + MOCK_FUNCTOR(f, void(std::unique_ptr, std::unique_ptr, std::unique_ptr)); + MOCK_EXPECT(f).once().with(nullptr, nullptr, nullptr); + MOCK_EXPECT(f).once().with(nullptr, mock::retrieve(i), nullptr); + f(nullptr, nullptr, nullptr); std::unique_ptr j(new int(7)); - f(std::move(j)); + f(nullptr, std::move(j), nullptr); BOOST_CHECK(!j); BOOST_REQUIRE(i); BOOST_CHECK_EQUAL(7, *i); @@ -745,3 +745,20 @@ struct my_unique_ptr_class MOCK_METHOD(m, 1, void(std::unique_ptr), m) MOCK_STATIC_METHOD(ms, 1, void(std::unique_ptr), ms) }; + +BOOST_FIXTURE_TEST_CASE(unique_ptr_works_in_class, mock_error_fixture) +{ + MOCK_EXPECT(my_unique_ptr_class::constructor).once().with(nullptr); + MOCK_EXPECT(my_unique_ptr_class::ms).once().with(7); + my_unique_ptr_class instance(nullptr); + auto j = std::make_unique(7); + my_unique_ptr_class::ms(std::move(j)); + BOOST_TEST(!j); // Otherwise it wasn't a value parameter and we leak memory + MOCK_EXPECT(instance.ms).once().with(42); + j = std::make_unique(42); + instance.ms(std::move(j)); + BOOST_TEST(!j); // Same here + + BOOST_TEST(mock::verify()); + CHECK_CALLS(3); +} diff --git a/test/test_log.cpp b/test/test_log.cpp index 623b6b1..c26d3bb 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -32,18 +32,23 @@ #include #include +// Convention: +// "Serializable: Implements operator<<(std::ostream&, ...) +// "Streamable": Implements operator<<(mock::stream&, ...) +// "Mock Streamable": Implements operator<<(stream&, ...) in namespace mock + namespace { template std::string to_string(const T& t) { - std::stringstream s; + std::ostringstream s; s << mock::format(t); return s.str(); } template std::string to_string(T* t) { - std::stringstream s; + std::ostringstream s; s << mock::format(t); return s.str(); } @@ -56,7 +61,6 @@ BOOST_AUTO_TEST_CASE(pointer_yields_its_value_when_serialized) std::ostringstream s; s << &i; const std::string pointerValue = s.str(); - BOOST_CHECK_NE("?", to_string(&i)); BOOST_CHECK_EQUAL(pointerValue, to_string(&i)); } { @@ -64,7 +68,6 @@ BOOST_AUTO_TEST_CASE(pointer_yields_its_value_when_serialized) std::ostringstream s; s << &i; const std::string pointerValue = s.str(); - BOOST_CHECK_NE("?", to_string(&i)); BOOST_CHECK_EQUAL(pointerValue, to_string(&i)); } } @@ -178,6 +181,19 @@ BOOST_AUTO_TEST_CASE(type_derived_from_streamable_yields_a_question_mark_when_se #endif } +namespace { +// Class which can be converted to many other types making implicit conversions ambiguous +struct ambiguous_convertible +{ + operator float() const; + operator int() const; + operator serializable() const; + operator streamable() const; + template + operator T() const; +}; +} // namespace + #ifndef MOCK_USE_CONVERSIONS // all this does not compile with conversions activated, which is precisely the purpose of // having this compilation flag @@ -217,33 +233,14 @@ BOOST_AUTO_TEST_CASE(type_convertible_to_streamable_yields_a_question_mark_when_ BOOST_CHECK_EQUAL("?", to_string(convertible_to_streamable())); } -namespace { -struct ambiguous_convertible -{ - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template - operator T() const; -}; -} // namespace - BOOST_AUTO_TEST_CASE(type_ambiguous_convertible_yields_a_question_mark_when_serialized) { BOOST_CHECK_EQUAL("?", to_string(ambiguous_convertible())); } namespace { -struct ambiguous_convertible_serializable -{ - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template - operator T() const; -}; +struct ambiguous_convertible_serializable : public ambiguous_convertible +{}; std::ostream& operator<<(std::ostream& s, const ambiguous_convertible_serializable&) { return s << "ambiguous_convertible_serializable"; @@ -258,15 +255,8 @@ BOOST_AUTO_TEST_CASE(type_convertible_serializable_yields_its_value_when_seriali #endif // MOCK_USE_CONVERSIONS namespace { -struct ambiguous_convertible_streamable -{ - operator float() const; - operator int() const; - operator serializable() const; - operator streamable() const; - template - operator T() const; -}; +struct ambiguous_convertible_streamable : public ambiguous_convertible +{}; BOOST_ATTRIBUTE_UNUSED std::ostream& operator<<(std::ostream& s, const ambiguous_convertible_streamable&) { BOOST_FAIL("should not have been called"); @@ -435,17 +425,17 @@ BOOST_AUTO_TEST_CASE(std_vectors_are_serialized) BOOST_AUTO_TEST_CASE(std_maps_are_serialized) { std::map m; - m[12] = "12"; - m[42] = "42"; - BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(m)); + m[12] = "15"; + m[42] = "46"; + BOOST_CHECK_EQUAL("((12,\"15\"),(42,\"46\"))", to_string(m)); } BOOST_AUTO_TEST_CASE(std_multimaps_are_serialized) { std::multimap m; - m.insert(std::make_pair(12, "12")); - m.insert(std::make_pair(42, "42")); - BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(m)); + m.insert(std::make_pair(12, "15")); + m.insert(std::make_pair(42, "46")); + BOOST_CHECK_EQUAL("((12,\"15\"),(42,\"46\"))", to_string(m)); } BOOST_AUTO_TEST_CASE(std_sets_are_serialized) @@ -495,7 +485,7 @@ BOOST_AUTO_TEST_CASE(boost_assign_list_of_are_serialized) BOOST_AUTO_TEST_CASE(boost_assign_map_list_of_are_serialized) { - BOOST_CHECK_EQUAL("((12,\"12\"),(42,\"42\"))", to_string(boost::assign::map_list_of(12, "12")(42, "42"))); + BOOST_CHECK_EQUAL("((12,\"16\"),(42,\"43\"))", to_string(boost::assign::map_list_of(12, "16")(42, "43"))); } BOOST_AUTO_TEST_CASE(std_reference_wrappers_are_serialized) diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index b352a20..e966d2d 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -7,7 +7,9 @@ // http://www.boost.org/LICENSE_1_0.txt) #include +#include #include +#include namespace { template @@ -72,3 +74,52 @@ BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixtu BOOST_CHECK(match(std::string("same text"), actual)); BOOST_CHECK(!match(std::string("different text"), actual)); } + +namespace { +template +std::string serialize(const T& t) +{ + std::ostringstream s; + s << t; + return s.str(); +} +} // namespace + +BOOST_AUTO_TEST_CASE(default_matcher_is_serialized_to_any) +{ + using mock::detail::default_matcher; + BOOST_TEST(serialize(default_matcher{}) == ""); + BOOST_TEST(serialize(default_matcher{}) == "any"); + BOOST_TEST(serialize(default_matcher{}) == "any, any"); + BOOST_TEST(serialize(default_matcher{}) == "any, any, any, any, any"); +} + +namespace { +struct custom_constraint +{ + int expected_ = 42; + custom_constraint(int expected = 42) : expected_(expected) {} + friend std::ostream& operator<<(std::ostream& s, const custom_constraint& c) + { + return s << "custom" << c.expected_; + } + bool operator()(int actual) { return actual == expected_; } +}; +} // namespace + +BOOST_AUTO_TEST_CASE(single_matcher_serializes) +{ + using mock::detail::single_matcher; + BOOST_TEST(serialize(single_matcher(1)) == "1"); + BOOST_TEST(serialize(single_matcher(1, 2)) == "1, 2"); + BOOST_TEST( + serialize( + single_matcher, int, int), void(int, int, int, int, int)>( + 1, 2, custom_constraint(), 4, 5)) == "1, 2, custom42, 4, 5"); +} + +BOOST_AUTO_TEST_CASE(multi_matcher_serializes) +{ + using mock::detail::multi_matcher; + BOOST_TEST(serialize(multi_matcher(custom_constraint(1337))) == "custom1337"); +} From f19caf428c17d6fcc01fb74d133e4e6e87d266b0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 9 Feb 2022 14:33:10 +0100 Subject: [PATCH 075/126] Fixup coverage of type_name.hpp to 100% Reassign the demangled name to avoid the (always untaken) branch and reduce code duplication --- include/turtle/detail/type_name.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/turtle/detail/type_name.hpp b/include/turtle/detail/type_name.hpp index bc97522..1aaa79d 100644 --- a/include/turtle/detail/type_name.hpp +++ b/include/turtle/detail/type_name.hpp @@ -47,10 +47,9 @@ namespace mock { namespace detail { }; std::unique_ptr demangled(abi::__cxa_demangle(name, 0, 0, &status)); if(!status && demangled) - serialize(s, demangled.get()); - else + name = demangled.get(); #endif - serialize(s, name); + serialize(s, name); } typedef std::string::size_type size_type; From e2687dea1a0e5569d28b66bd450c56e1322d053b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 9 Feb 2022 14:59:46 +0100 Subject: [PATCH 076/126] Add missing test cases for the invocation class - error case where between was called with a min>max - Corner case for `between(x, x)` - Human readable output via stream operator of the base class --- test/detail/test_invocation.cpp | 118 ++++++++++++++++++++++---------- 1 file changed, 81 insertions(+), 37 deletions(-) diff --git a/test/detail/test_invocation.cpp b/test/detail/test_invocation.cpp index be9957e..ad7421e 100644 --- a/test/detail/test_invocation.cpp +++ b/test/detail/test_invocation.cpp @@ -8,69 +8,113 @@ #include #include +#include + +/// Serialize using the base class as done by e.g. the expectation class +std::string to_string(const mock::detail::invocation& invocation) +{ + std::ostringstream s; + s << invocation; + return s.str(); +} BOOST_AUTO_TEST_CASE(unlimited) { mock::detail::unlimited invocation; - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "unlimited()"); } BOOST_AUTO_TEST_CASE(once) { mock::detail::once invocation; - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "once()"); } BOOST_AUTO_TEST_CASE(never) { mock::detail::never invocation; - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "never()"); } BOOST_AUTO_TEST_CASE(at_most) { mock::detail::at_most invocation(1); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 0/1 )"); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 1/1 )"); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 1/1 )"); } BOOST_AUTO_TEST_CASE(at_least) { mock::detail::at_least invocation(1); - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_least( 0/1 )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "at_least( 1/1 )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "at_least( 2/1 )"); } BOOST_AUTO_TEST_CASE(between) { - mock::detail::between invocation(1, 2); - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + { + mock::detail::between invocation(1, 2); + BOOST_TEST(to_string(invocation) == "between( 0/[1,2] )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 1/[1,2] )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 2/[1,2] )"); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "between( 2/[1,2] )"); + } + { + mock::detail::between invocation(2, 2); + BOOST_TEST(to_string(invocation) == "between( 0/[2,2] )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 1/[2,2] )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 2/[2,2] )"); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "between( 2/[2,2] )"); + } + + // First must be equal or less than 2nd + BOOST_CHECK_THROW(mock::detail::between invalid(2, 1), std::invalid_argument); } From 23ac665c2211e47b34afa3cc3f380fc5b306ff1b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 9 Feb 2022 15:23:14 +0100 Subject: [PATCH 077/126] Add some more cases for the serialization test of expectations Make sure the various constraint names/values are kept (they are stored type-erased!) --- test/detail/test_function.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index 01aaa85..bd640a2 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -751,11 +751,18 @@ BOOST_FIXTURE_TEST_CASE(expectation_can_be_serialized_to_be_human_readable, mock { mock::detail::function f; f.expect().once().with(1); - f.expect().once().with(2); + f.expect().once().with(mock::close(3, 1)); + int target = 0; + f.expect().once().with(mock::retrieve(target)); + f.expect().once().with(mock::same(target)); BOOST_CHECK_NO_THROW(f(2)); - const std::string expected = "?\n" - ". once().with( 1 )\n" - "v once().with( 2 )"; + std::string expected = "?\n"; // Not in a current call context + expected += ". once().with( 1 )\n"; // Unmet/Unverified expectation with value + expected += "v once().with( close( 3, 1 ) )\n"; // Verified expectation with constraint + target = 42; + // (Unverified) expectation with retrieve/same constraint print current value + expected += ". once().with( retrieve( 42 ) )\n"; + expected += ". once().with( same( 42 ) )"; BOOST_CHECK_EQUAL(expected, to_string(f)); CHECK_CALLS(1); f.reset(); From 9e2223d4bec5cff8aff7fbd7548d9712f9acbc7a Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 10 Feb 2022 11:37:52 +0100 Subject: [PATCH 078/126] Remove BOOST_THREAD_USES_MOVE define from tests No longer needed as we require C++11/14 already and hence rvalue references can be used by Boost.Thread --- test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 39bb8ff..c43f646 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -54,7 +54,7 @@ foreach(testFile IN LISTS testFiles) target_compile_definitions(${name}_use_conversions PRIVATE MOCK_USE_CONVERSIONS) target_link_libraries(${name}_thread_safe PRIVATE Boost::thread) - target_compile_definitions(${name}_thread_safe PRIVATE MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE) + target_compile_definitions(${name}_thread_safe PRIVATE MOCK_THREAD_SAFE) endforeach() # Link test only to check for a regression From 68700d4c3ad4d5716585765a04c51f4d1f4506a0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 10 Feb 2022 11:42:33 +0100 Subject: [PATCH 079/126] Document mechanism used in the functor constructor --- include/turtle/detail/functor.hpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/include/turtle/detail/functor.hpp b/include/turtle/detail/functor.hpp index e4ce1e8..dfb793d 100644 --- a/include/turtle/detail/functor.hpp +++ b/include/turtle/detail/functor.hpp @@ -27,16 +27,25 @@ namespace mock { namespace detail { functor() { scoped_lock _(functor_mutex); - static functor* f = 0; + // MOCK_FUNCTOR creates 2 functor objects: + // The user-usable one with the passed name and a 2nd used by MOCK_EXPECT with a suffixed name + // We need the 2nd to be a copy of the first and use a static variable for storing a pointer to the first + static functor* f = nullptr; if(f) { - *this = *f; - f = 0; + // Release the lock from the first call (see below) so other threads can create functors again + // after the function exits (the scoped_lock still holds the mutex) functor_mutex.unlock(); + // Copy the first functor to the current (2nd) one + *this = *f; + f = nullptr; } else { - functor_mutex.lock(); + // This is the first object, store its pointer f = this; + // Lock the mutex again so only this thread can create new instances of a functor + // making sure that we copy the right instance above and not one from a concurrent thread + functor_mutex.lock(); } } }; From fca30e7780740d1d785bfb1844404a429503b6e4 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 31 Jan 2022 19:27:57 +0100 Subject: [PATCH 080/126] Replace Boost PP_Iterate by C++11 variadic templates This allows support for any number of arguments and makes setting MOCK_MAX_ARGS unnecessary. It also allows for easier debugging due to being able to step into actual code instead of preprocessor generated stuff --- doc/changelog.qbk | 1 + doc/customization.qbk | 18 -- doc/example/customization.cpp | 6 - include/turtle/config.hpp | 4 - include/turtle/detail/expectation.hpp | 184 ++++++++++++++++ .../turtle/detail/expectation_template.hpp | 201 ------------------ include/turtle/detail/function.hpp | 114 +++++----- ...on_impl_template.hpp => function_impl.hpp} | 136 +++++++++--- include/turtle/detail/function_iterate.hpp | 11 - include/turtle/detail/function_template.hpp | 75 ------- ...her_base_template.hpp => matcher_base.hpp} | 17 +- include/turtle/detail/signature_traits.hpp | 6 +- test/CMakeLists.txt | 3 +- test/Jamfile.jam | 1 - ...of_arguments_greater_than_max_constant.cpp | 24 --- test/test_matcher.cpp | 23 +- test/test_max_args.cpp | 16 +- 17 files changed, 368 insertions(+), 472 deletions(-) create mode 100644 include/turtle/detail/expectation.hpp delete mode 100644 include/turtle/detail/expectation_template.hpp rename include/turtle/detail/{function_impl_template.hpp => function_impl.hpp} (71%) delete mode 100644 include/turtle/detail/function_iterate.hpp delete mode 100644 include/turtle/detail/function_template.hpp rename include/turtle/detail/{matcher_base_template.hpp => matcher_base.hpp} (67%) delete mode 100644 test/fail_number_of_arguments_greater_than_max_constant.cpp diff --git a/doc/changelog.qbk b/doc/changelog.qbk index c608e81..326f21a 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -15,6 +15,7 @@ Released - * Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_SIGNATURE to pass function signatures with commas in the return type * Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_SIGNATURE instead +* Add support for unlimitted number of arguments making MOCK_MAX_ARGS superflous [endsect] diff --git a/doc/customization.qbk b/doc/customization.qbk index 6946cff..69e1835 100644 --- a/doc/customization.qbk +++ b/doc/customization.qbk @@ -110,24 +110,6 @@ For more information about the serialization operator and the use of mock::forma [endsect] -[section Number of arguments] - -The maximum number of arguments a mocked method can have is defined by MOCK_MAX_ARGS. -By default this value is set to 9, but if needed it can be changed before including the library : - -[max_args] - -This means methods with up to 20 arguments will then be accepted. - -The mock object library uses several boost libraries and will adjust some of their constants if they haven't already been defined : - -* Boost.Function with BOOST_FUNCTION_MAX_ARGS required at MOCK_MAX_ARGS or higher -* Boost.FunctionTypes with BOOST_FT_MAX_ARITY required at MOCK_MAX_ARGS + 1 or higher - -A compilation error will happen if one of those constants is already defined too low. - -[endsect] - [section Test framework integration] By default the library expects to be used in conjunction with Boost.Test e.g. : diff --git a/doc/example/customization.cpp b/doc/example/customization.cpp index 6e0c839..dae9ccb 100644 --- a/doc/example/customization.cpp +++ b/doc/example/customization.cpp @@ -145,12 +145,6 @@ BOOST_AUTO_TEST_CASE(near_constraint_works_with_with_float_wrapper_and_cref) } } // namespace near_constraint_cref_test -#undef MOCK_MAX_ARGS -//[ max_args -#define MOCK_MAX_ARGS 20 -#include -//] - #if defined(__GNUC__) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-parameter" diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index b2a0f68..d60fe72 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -18,10 +18,6 @@ # define MOCK_USE_BOOST_TEST #endif -#ifndef MOCK_MAX_ARGS -# define MOCK_MAX_ARGS 9 -#endif - #ifndef MOCK_MAX_SEQUENCES # define MOCK_MAX_SEQUENCES 10 #endif diff --git a/include/turtle/detail/expectation.hpp b/include/turtle/detail/expectation.hpp new file mode 100644 index 0000000..5c23895 --- /dev/null +++ b/include/turtle/detail/expectation.hpp @@ -0,0 +1,184 @@ +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2012 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_EXPECTATION_HPP_INCLUDED +#define MOCK_EXPECTATION_HPP_INCLUDED + +#include "../matcher.hpp" +#include "../sequence.hpp" +#include "action.hpp" +#include "invocation.hpp" +#include "matcher_base.hpp" +#include +#include +#include +#include + +namespace mock { namespace detail { + template + class default_matcher : public matcher_base + { + private: + bool operator()(typename ref_arg::type...) override { return true; } + void serialize(std::ostream& s) const override + { + for(unsigned i = 0; i < sizeof...(Args); ++i) + { + if(i) + s << ", "; + s << "any"; + } + } + }; + + template + class single_matcher; + + template + class single_matcher : public matcher_base + { + static_assert(sizeof...(Args) > 0, "This class is only useful for functions with arguments"); + static_assert(sizeof...(Constraints) == sizeof...(Args), "Need exactly 1 constraint per argument"); + + public: + single_matcher(Constraints... constraints) : matchers_(matcher(constraints)...) {} + + private: + template + bool is_valid_impl(std::index_sequence, typename ref_arg::type... t) + { + using expander = bool[]; + bool result = true; + (void)expander{ result &= std::get(matchers_)(std::forward(t))... }; + return result; + } + bool operator()(typename ref_arg::type... t) override + { + return is_valid_impl(std::make_index_sequence{}, std::forward(t)...); + } + template + void serialize_impl(std::index_sequence, std::ostream& s) const + { + using expander = int[]; + s << std::get<0>(matchers_); + (void)expander{ 0, (s << ", " << std::get(matchers_), 0)... }; + } + void serialize(std::ostream& s) const override + { + serialize_impl(std::make_index_sequence{}, s); + } + + private: + std::tuple...> matchers_; + }; + + template + class multi_matcher : public matcher_base + { + static_assert(sizeof...(Args) > 0, "This class is only useful for functions with arguments"); + + public: + multi_matcher(const F& f) : f_(f) {} + + private: + bool operator()(typename ref_arg::type... t) override { return f_(std::forward(t)...); } + void serialize(std::ostream& s) const override { s << mock::format(f_); } + + private: + F f_; + }; + + template + class expectation; + + template + class expectation : public action + { + static constexpr auto arity = sizeof...(Args); + + public: + expectation() : expectation("unknown location", 0) {} + expectation(const char* file, int line) + : invocation_(std::make_unique()), matcher_(std::make_unique>()), + file_(file), line_(line) + {} + + expectation(expectation&&) = default; + expectation(expectation const&) = default; + expectation& operator=(expectation&&) = default; + expectation& operator=(expectation const&) = default; + + ~expectation() + { + for(auto& sequence : sequences_) + sequence->remove(this); + } + + void invoke(std::unique_ptr i) { invocation_ = std::move(i); } + + template + std::enable_if_t<(arity > 0) && sizeof...(Constraints) == arity, expectation&> with(Constraints... c) + { + matcher_ = std::make_unique>(c...); + return *this; + } + template + std::enable_if_t<(Arity > 1), expectation&> with(const Constraint& c) + { + matcher_ = std::make_unique>(c); + return *this; + } + + void add(sequence& s) + { + s.impl_->add(this); + sequences_.push_back(s.impl_); + } + + bool verify() const { return invocation_->verify(); } + + bool is_valid(typename ref_arg::type... t) const + { + return !invocation_->exhausted() && (*matcher_)(std::forward(t)...); + } + + bool invoke() const + { + for(auto& sequence : sequences_) + { + if(!sequence->is_valid(this)) + return false; + } + bool result = invocation_->invoke(); + for(auto& sequence : sequences_) + sequence->invalidate(this); + return result; + } + + const char* file() const { return file_; } + int line() const { return line_; } + + friend std::ostream& operator<<(std::ostream& s, const expectation& e) + { + s << (e.invocation_->exhausted() ? 'v' : '.') << ' ' << *e.invocation_; + constexpr bool hasArguments = arity > 0u; + if(hasArguments) + s << ".with( " << *e.matcher_ << " )"; + return s; + } + + private: + std::unique_ptr invocation_; + std::unique_ptr> matcher_; + std::vector> sequences_; + const char* file_; + int line_; + }; +}} // namespace mock::detail + +#endif // MOCK_EXPECTATION_HPP_INCLUDED diff --git a/include/turtle/detail/expectation_template.hpp b/include/turtle/detail/expectation_template.hpp deleted file mode 100644 index 3f42263..0000000 --- a/include/turtle/detail/expectation_template.hpp +++ /dev/null @@ -1,201 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "matcher_base_template.hpp" - -#define MOCK_EXPECTATION_INITIALIZE(z, n, d) BOOST_PP_COMMA_IF(n) c##n##_(c##n) - -#define MOCK_EXPECTATION_MEMBER(z, n, d) matcher c##n##_; - -#define MOCK_EXPECTATION_IS_VALID(z, n, d) BOOST_PP_IF(n, &&, ) c##n##_(std::forward(a##n)) - -#define MOCK_EXPECTATION_SERIALIZE(z, n, d) BOOST_PP_IF(n, << ", " <<, ) c##n##_ - -#define MOCK_EXPECTATION_SERIALIZE_ANY(z, n, d) BOOST_PP_IF(n, << ", " <<, ) "any" - -#define MOCK_EXPECTATION_PARAM(z, n, Args) std::forward(a##n) - -#define MOCK_REF_ARG(z, n, d) typename ref_arg::type a##n - -#define MOCK_REF_ARG_T(z, n, d) typename ref_arg::type - -namespace mock { namespace detail { - template - class default_matcher; - - template - class default_matcher : - public matcher_base - { - private: - virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG_T, _)) { return true; } - virtual void serialize(std::ostream& s) const - { - s << "" BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_SERIALIZE_ANY, _); - } - }; - -#ifndef MOCK_NUM_ARGS_0 - - template - class single_matcher; - - template - class single_matcher : - public matcher_base - { - public: - single_matcher(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) - : BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_INITIALIZE, _) - {} - - private: - virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) - { - return BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_IS_VALID, _); - } - virtual void serialize(std::ostream& s) const - { - s << BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_SERIALIZE, _); - } - - private: - BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_EXPECTATION_MEMBER, _) - }; - - template - class multi_matcher; - - template - class multi_matcher : - public matcher_base - { - public: - multi_matcher(const F& f) : f_(f) {} - - private: - virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) - { - return f_(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _)); - } - virtual void serialize(std::ostream& s) const { s << mock::format(f_); } - - private: - F f_; - }; - -#endif - - template - class expectation; - - template - class expectation : - public action - { - public: - expectation() - : invocation_(std::make_unique()), - matcher_(std::make_unique>()), - file_("unknown location"), line_(0) - {} - expectation(const char* file, int line) - : invocation_(std::make_unique()), - matcher_(std::make_unique>()), file_(file), - line_(line) - {} - - expectation(expectation&&) = default; - expectation(expectation const&) = default; - expectation& operator=(expectation&&) = default; - expectation& operator=(expectation const&) = default; - - ~expectation() - { - for(auto& sequence : sequences_) - sequence->remove(this); - } - - void invoke(std::unique_ptr i) { invocation_ = std::move(i); } - -#ifndef MOCK_NUM_ARGS_0 - template - expectation& with(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) - { - matcher_ = std::make_unique>( - BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c)); - return *this; - } -# if MOCK_NUM_ARGS > 1 - template - expectation& with(const Constraint& c) - { - matcher_ = std::make_unique>(c); - return *this; - } -# endif -#endif - - void add(sequence& s) - { - s.impl_->add(this); - sequences_.push_back(s.impl_); - } - - bool verify() const { return invocation_->verify(); } - - bool is_valid(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) const - { - return !invocation_->exhausted() && (*matcher_)(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_EXPECTATION_PARAM, _)); - } - - bool invoke() const - { - for(auto& sequence : sequences_) - { - if(!sequence->is_valid(this)) - return false; - } - bool result = invocation_->invoke(); - for(auto& sequence : sequences_) - sequence->invalidate(this); - return result; - } - - const char* file() const { return file_; } - int line() const { return line_; } - - friend std::ostream& operator<<(std::ostream& s, const expectation& e) - { - return s << (e.invocation_->exhausted() ? 'v' : '.') << ' ' << *e.invocation_ -#ifndef MOCK_NUM_ARGS_0 - << ".with( " << *e.matcher_ << " )" -#endif - ; - } - - private: - std::unique_ptr invocation_; - std::unique_ptr> matcher_; - std::vector> sequences_; - const char* file_; - int line_; - }; -}} // namespace mock::detail - -#undef MOCK_EXPECTATION_INITIALIZE -#undef MOCK_EXPECTATION_MEMBER -#undef MOCK_EXPECTATION_IS_VALID -#undef MOCK_EXPECTATION_SERIALIZE -#undef MOCK_EXPECTATION_SERIALIZE_ANY -#undef MOCK_EXPECTATION_PARAM -#undef MOCK_REF_ARG -#undef MOCK_REF_ARG_T -#undef MOCK_RV_REF diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index f5ae558..288990a 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -10,88 +10,72 @@ #define MOCK_FUNCTION_HPP_INCLUDED #include "../config.hpp" -#include "../constraints.hpp" -#include "../error.hpp" #include "../log.hpp" -#include "../matcher.hpp" #include "../sequence.hpp" -#include "action.hpp" #include "context.hpp" -#include "invocation.hpp" -#include "move_helper.hpp" -#include "mutex.hpp" +#include "function_impl.hpp" #include "type_name.hpp" -#include "verifiable.hpp" #include -#include -#include -#include -#include -#include -#include #include -#include -#include #include -#include namespace mock { namespace detail { - template - struct wrapper_base - { - wrapper_base(E& e) : e_(&e) {} + template + class function; - template - void returns(T t) + template + class function + { + private: + typedef function_impl impl_type; + typedef typename impl_type::wrapper_type expectation_type; + typedef typename impl_type::error_type error_type; + + public: + function() : impl_(std::make_shared()) {} + + bool verify() const { return impl_->verify(); } + bool verify(const char* file, int line) const { - e_->returns(t); + error_type::pass(file, line); + return impl_->verify(); + } + void reset() { impl_->reset(); } + void reset(const char* file, int line) + { + error_type::pass(file, line); + impl_->reset(); } - E* e_; - }; - template - struct wrapper_base - { - wrapper_base(E& e) : e_(&e) {} - - E* e_; - }; - template - struct wrapper_base - { - wrapper_base(E& e) : e_(&e) {} - - void returns(R* r) { e_->returns(r); } - template - void returns(const std::reference_wrapper& r) + expectation_type expect(const char* file, int line) { - e_->returns(r); + error_type::pass(file, line); + return impl_->expect(file, line); + } + expectation_type expect() { return impl_->expect(); } + + R operator()(Ts... args) const { return (*impl_)(std::forward(args)...); } + + friend std::ostream& operator<<(std::ostream& s, const function& f) { return s << *f.impl_; } + + function& operator()(context& c, boost::unit_test::const_string instance) + { + impl_->add(c, impl_.get(), instance, boost::none, ""); + return *this; } - E* e_; - }; + void configure(context& c, + const void* p, + boost::unit_test::const_string instance, + boost::optional type, + boost::unit_test::const_string name) const + { + impl_->add(c, p, instance, type, name); + } - inline int exceptions() - { -#ifdef MOCK_UNCAUGHT_EXCEPTIONS - using namespace std; - return uncaught_exceptions(); -#else - return std::uncaught_exception() ? 1 : 0; -#endif - } + private: + std::shared_ptr impl_; + }; }} // namespace mock::detail -#define MOCK_NUM_ARGS 0 -#define MOCK_NUM_ARGS_0 -#include "function_template.hpp" -#undef MOCK_NUM_ARGS_0 -#undef MOCK_NUM_ARGS - -#define BOOST_PP_FILENAME_1 -#define BOOST_PP_ITERATION_LIMITS (1, MOCK_MAX_ARGS) -#include BOOST_PP_ITERATE() -#undef BOOST_PP_FILENAME_1 -#undef BOOST_PP_ITERATION_LIMITS - #endif // MOCK_FUNCTION_HPP_INCLUDED diff --git a/include/turtle/detail/function_impl_template.hpp b/include/turtle/detail/function_impl.hpp similarity index 71% rename from include/turtle/detail/function_impl_template.hpp rename to include/turtle/detail/function_impl.hpp index c9db991..8cbbd1f 100644 --- a/include/turtle/detail/function_impl_template.hpp +++ b/include/turtle/detail/function_impl.hpp @@ -6,29 +6,74 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include "expectation_template.hpp" +#ifndef MOCK_FUNCTION_IMPL_HPP_INCLUDED +#define MOCK_FUNCTION_IMPL_HPP_INCLUDED + +#include "../error.hpp" +#include "expectation.hpp" +#include "mutex.hpp" +#include "verifiable.hpp" +#include +#include +#include +#include +#include #ifndef MOCK_ERROR_POLICY # error no error policy has been set #endif -#define MOCK_FUNCTION_FORMAT(z, n, N) << ' ' << mock::format(t##n) << BOOST_PP_IF(BOOST_PP_EQUAL(N, n), ' ', ',') - -#define MOCK_FUNCTION_CONTEXT \ - boost::unit_test::lazy_ostream::instance() \ - << lazy_context(this) << '(' BOOST_PP_REPEAT(MOCK_NUM_ARGS, MOCK_FUNCTION_FORMAT, BOOST_PP_DEC(MOCK_NUM_ARGS)) \ - << ')' << lazy_expectations(this) - -#define MOCK_FORWARD(z, n, d) std::forward(t##n) - namespace mock { namespace detail { + template + struct wrapper_base + { + wrapper_base(E& e) : e_(&e) {} + + template + void returns(T t) + { + e_->returns(t); + } + + E* e_; + }; + template + struct wrapper_base + { + wrapper_base(E& e) : e_(&e) {} + + E* e_; + }; + template + struct wrapper_base + { + wrapper_base(E& e) : e_(&e) {} + + void returns(R* r) { e_->returns(r); } + template + void returns(const std::reference_wrapper& r) + { + e_->returns(r); + } + + E* e_; + }; + + inline int exceptions() + { +#ifdef MOCK_UNCAUGHT_EXCEPTIONS + using namespace std; + return uncaught_exceptions(); +#else + return std::uncaught_exception() ? 1 : 0; +#endif + } + template class function_impl; - template - class function_impl : - public verifiable, - public std::enable_shared_from_this> + template + class function_impl : public verifiable, public std::enable_shared_from_this> { public: typedef safe_error> error_type; @@ -82,12 +127,13 @@ namespace mock { namespace detail { } private: - typedef expectation expectation_type; + typedef expectation expectation_type; class wrapper : public wrapper_base { private: typedef wrapper_base base_type; + static constexpr auto arity = sizeof...(Args); public: wrapper(const std::shared_ptr& m, expectation_type& e) : base_type(e), lock_(m) {} @@ -126,24 +172,18 @@ namespace mock { namespace detail { return *this; } -#ifndef MOCK_NUM_ARGS_0 - template - wrapper& with(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, Constraint_, c)) + /// Callable only for functions taking arguments + /// Number of constraints must match the number of arguments + /// or a single constraint checking all arguments must be passed + template + std::enable_if_t<(arity > 0u && (sizeof...(Constraints) == arity || sizeof...(Constraints) == 1u)), + wrapper&> + with(Constraints... c) { - this->e_->with(BOOST_PP_ENUM_PARAMS(MOCK_NUM_ARGS, c)); + this->e_->with(c...); return *this; } -# if MOCK_NUM_ARGS > 1 - template - wrapper& with(const Constraint& c) - { - this->e_->with(c); - return *this; - } -# endif -#endif - #define MOCK_FUNCTION_IN_ADD(z, n, d) this->e_->add(s##n); #define MOCK_FUNCTION_IN(z, n, d) \ @@ -195,13 +235,17 @@ namespace mock { namespace detail { return wrapper(mutex_, expectations_.back()); } - R operator()(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t)) const + R operator()(Args... args) const { +// Due to lifetime rules of references this must be created and consumed in one line +#define MOCK_FUNCTION_CONTEXT \ + boost::unit_test::lazy_ostream::instance() << lazy_context(this) << lazy_args(args...) << lazy_expectations(this) + lock _(mutex_); valid_ = false; for(const auto& expectation : expectations_) { - if(expectation.is_valid(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _))) + if(expectation.is_valid(std::forward(args)...)) { if(!expectation.invoke()) { @@ -218,12 +262,13 @@ namespace mock { namespace detail { valid_ = true; error_type::call(MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line()); if(expectation.functor()) - return expectation.functor()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _)); + return expectation.functor()(std::forward(args)...); return expectation.trigger(); } } error_type::fail("unexpected call", MOCK_FUNCTION_CONTEXT); return error_type::abort(); +#undef MOCK_FUNCTION_CONTEXT } void add(context& c, @@ -271,6 +316,29 @@ namespace mock { namespace detail { const function_impl* impl_; }; + struct lazy_args + { + lazy_args(std::add_lvalue_reference_t... args) : args_(args...) {} + friend std::ostream& operator<<(std::ostream& s, const lazy_args& a) + { + return a.print_impl(std::make_index_sequence{}, s); + } + + private: + std::tuple...> args_; + + template + std::ostream& print_impl(std::index_sequence, std::ostream& s) const + { + s << '('; + using expander = int[]; + (void)expander{ + 0, (s << ' ' << mock::format(std::get(args_)) << (sizeof...(Args) - 1u == I ? ' ' : ','), 0)... + }; + return s << ')'; + } + }; + std::list expectations_; context* context_; mutable bool valid_; @@ -279,6 +347,4 @@ namespace mock { namespace detail { }; }} // namespace mock::detail -#undef MOCK_FUNCTION_FORMAT -#undef MOCK_FUNCTION_CONTEXT -#undef MOCK_FORWARD +#endif // MOCK_FUNCTION_IMPL_HPP_INCLUDED diff --git a/include/turtle/detail/function_iterate.hpp b/include/turtle/detail/function_iterate.hpp deleted file mode 100644 index f86538e..0000000 --- a/include/turtle/detail/function_iterate.hpp +++ /dev/null @@ -1,11 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2012 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_NUM_ARGS BOOST_PP_ITERATION() -#include "function_template.hpp" -#undef MOCK_NUM_ARGS diff --git a/include/turtle/detail/function_template.hpp b/include/turtle/detail/function_template.hpp deleted file mode 100644 index 69a0e18..0000000 --- a/include/turtle/detail/function_template.hpp +++ /dev/null @@ -1,75 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2008 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include "function_impl_template.hpp" - -#define MOCK_FORWARD(z, n, d) std::forward(t##n) - -namespace mock { namespace detail { - template - class function; - - template - class function - { - private: - typedef function_impl impl_type; - typedef typename impl_type::wrapper_type expectation_type; - typedef typename impl_type::error_type error_type; - - public: - function() : impl_(std::make_shared()) {} - - bool verify() const { return impl_->verify(); } - bool verify(const char* file, int line) const - { - error_type::pass(file, line); - return impl_->verify(); - } - void reset() { impl_->reset(); } - void reset(const char* file, int line) - { - error_type::pass(file, line); - impl_->reset(); - } - - expectation_type expect(const char* file, int line) - { - error_type::pass(file, line); - return impl_->expect(file, line); - } - expectation_type expect() { return impl_->expect(); } - - R operator()(BOOST_PP_ENUM_BINARY_PARAMS(MOCK_NUM_ARGS, T, t)) const - { - return (*impl_)(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_FORWARD, _)); - } - - friend std::ostream& operator<<(std::ostream& s, const function& f) { return s << *f.impl_; } - - function& operator()(context& c, boost::unit_test::const_string instance) - { - impl_->add(c, impl_.get(), instance, boost::none, ""); - return *this; - } - - void configure(context& c, - const void* p, - boost::unit_test::const_string instance, - boost::optional type, - boost::unit_test::const_string name) const - { - impl_->add(c, p, instance, type, name); - } - - private: - std::shared_ptr impl_; - }; -}} // namespace mock::detail - -#undef MOCK_FORWARD diff --git a/include/turtle/detail/matcher_base_template.hpp b/include/turtle/detail/matcher_base.hpp similarity index 67% rename from include/turtle/detail/matcher_base_template.hpp rename to include/turtle/detail/matcher_base.hpp index 8a6199d..de16e22 100644 --- a/include/turtle/detail/matcher_base_template.hpp +++ b/include/turtle/detail/matcher_base.hpp @@ -6,14 +6,15 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define MOCK_REF_ARG(z, n, d) typename ref_arg::type +#ifndef MOCK_MATCHER_BASE_HPP_INCLUDED +#define MOCK_MATCHER_BASE_HPP_INCLUDED + +#include "move_helper.hpp" +#include namespace mock { namespace detail { - template - class matcher_base; - - template - class matcher_base + template + class matcher_base { public: matcher_base() = default; @@ -21,7 +22,7 @@ namespace mock { namespace detail { matcher_base& operator=(const matcher_base&) = delete; virtual ~matcher_base() = default; - virtual bool operator()(BOOST_PP_ENUM(MOCK_NUM_ARGS, MOCK_REF_ARG, _)) = 0; + virtual bool operator()(typename ref_arg::type...) = 0; friend std::ostream& operator<<(std::ostream& s, const matcher_base& m) { @@ -34,4 +35,4 @@ namespace mock { namespace detail { }; }} // namespace mock::detail -#undef MOCK_REF_ARG +#endif // MOCK_MATCHER_BASE_HPP_INCLUDED diff --git a/include/turtle/detail/signature_traits.hpp b/include/turtle/detail/signature_traits.hpp index e6948f6..02c108f 100644 --- a/include/turtle/detail/signature_traits.hpp +++ b/include/turtle/detail/signature_traits.hpp @@ -6,8 +6,8 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef MOCK_PARAMETER_HPP_INCLUDED -#define MOCK_PARAMETER_HPP_INCLUDED +#ifndef MOCK_SIGNATURE_TRAITS_HPP_INCLUDED +#define MOCK_SIGNATURE_TRAITS_HPP_INCLUDED #include "../config.hpp" #include @@ -59,4 +59,4 @@ namespace mock { namespace detail { }} // namespace mock::detail -#endif // MOCK_PARAMETER_HPP_INCLUDED +#endif // MOCK_SIGNATURE_TRAITS_HPP_INCLUDED diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c43f646..486fdb7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -40,7 +40,7 @@ set(testsUsingUndefinedCPP test_function test_integration) foreach(testFile IN LISTS testFiles) get_filename_component(name ${testFile} NAME_WE) - foreach(testVariant IN ITEMS "" _max_args _use_conversions _thread_safe) + foreach(testVariant IN ITEMS "" _use_conversions _thread_safe) set(curName ${name}${testVariant}) add_executable(${curName} ${testFile}) if(name IN_LIST testsUsingUndefinedCPP) @@ -50,7 +50,6 @@ foreach(testFile IN LISTS testFiles) add_test(NAME ${curName} COMMAND ${curName}) endforeach() - target_compile_definitions(${name}_max_args PRIVATE MOCK_MAX_ARGS=21) target_compile_definitions(${name}_use_conversions PRIVATE MOCK_USE_CONVERSIONS) target_link_libraries(${name}_thread_safe PRIVATE Boost::thread) diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 3e8768b..4575a0e 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -24,7 +24,6 @@ alias mock_inspect : rule run-test ( name ) { run $(name) defined_1.cpp defined_2.cpp undefined.cpp /boost//unit_test_framework : : : : $(name)_ ; - run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_MAX_ARGS=21 : $(name)_max_args ; run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_USE_CONVERSIONS : $(name)_use_conversions ; run $(name) undefined.cpp /boost//unit_test_framework /boost//thread : : : MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE multi : $(name)_thread_safe ; } diff --git a/test/fail_number_of_arguments_greater_than_max_constant.cpp b/test/fail_number_of_arguments_greater_than_max_constant.cpp deleted file mode 100644 index ef7378a..0000000 --- a/test/fail_number_of_arguments_greater_than_max_constant.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include - -BOOST_STATIC_ASSERT(MOCK_MAX_ARGS == 9); - -namespace { -struct my_base -{ - virtual ~my_base() = default; - virtual void my_method(int, int, int, int, int, int, int, int, int, int) = 0; -}; - -MOCK_BASE_CLASS(my_class, my_base) -{ - MOCK_METHOD(my_method, 10) -}; -} // namespace diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index e966d2d..cc98be0 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -6,7 +6,7 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include #include @@ -88,16 +88,16 @@ std::string serialize(const T& t) BOOST_AUTO_TEST_CASE(default_matcher_is_serialized_to_any) { using mock::detail::default_matcher; - BOOST_TEST(serialize(default_matcher{}) == ""); - BOOST_TEST(serialize(default_matcher{}) == "any"); - BOOST_TEST(serialize(default_matcher{}) == "any, any"); - BOOST_TEST(serialize(default_matcher{}) == "any, any, any, any, any"); + BOOST_TEST(serialize(default_matcher<>{}) == ""); + BOOST_TEST(serialize(default_matcher{}) == "any"); + BOOST_TEST(serialize(default_matcher{}) == "any, any"); + BOOST_TEST(serialize(default_matcher{}) == "any, any, any, any, any"); } namespace { struct custom_constraint { - int expected_ = 42; + int expected_; custom_constraint(int expected = 42) : expected_(expected) {} friend std::ostream& operator<<(std::ostream& s, const custom_constraint& c) { @@ -110,16 +110,15 @@ struct custom_constraint BOOST_AUTO_TEST_CASE(single_matcher_serializes) { using mock::detail::single_matcher; - BOOST_TEST(serialize(single_matcher(1)) == "1"); - BOOST_TEST(serialize(single_matcher(1, 2)) == "1, 2"); + BOOST_TEST(serialize(single_matcher(1)) == "1"); + BOOST_TEST(serialize(single_matcher(1, 2)) == "1, 2"); BOOST_TEST( - serialize( - single_matcher, int, int), void(int, int, int, int, int)>( - 1, 2, custom_constraint(), 4, 5)) == "1, 2, custom42, 4, 5"); + serialize(single_matcher, int, int), int, int, int, int, int>( + 1, 2, custom_constraint(), 4, 5)) == "1, 2, custom42, 4, 5"); } BOOST_AUTO_TEST_CASE(multi_matcher_serializes) { using mock::detail::multi_matcher; - BOOST_TEST(serialize(multi_matcher(custom_constraint(1337))) == "custom1337"); + BOOST_TEST(serialize(multi_matcher(custom_constraint(1337))) == "custom1337"); } diff --git a/test/test_max_args.cpp b/test/test_max_args.cpp index 147089c..a062548 100644 --- a/test/test_max_args.cpp +++ b/test/test_max_args.cpp @@ -11,28 +11,30 @@ #include #include -#define IDENTITY(z, n, d) d +#define IDENTITY(z, n, text) text +// Number of arguments is (now) unlimited, so take any high value here +#define NUM_TEST_ARGS 100 namespace { struct my_custom_mock { - MOCK_METHOD(method, MOCK_MAX_ARGS, void(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag) - MOCK_METHOD(method2, MOCK_MAX_ARGS, int(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, int)), tag_2) + MOCK_METHOD(method, NUM_TEST_ARGS, void(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, int)), tag) + MOCK_METHOD(method2, NUM_TEST_ARGS, int(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, int)), tag_2) }; } // namespace BOOST_FIXTURE_TEST_CASE(call_mock_method_with_max_number_of_args, mock_error_fixture) { my_custom_mock m; - MOCK_EXPECT(m.tag).once().with(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)); - m.method(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)); + MOCK_EXPECT(m.tag).once().with(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, 0)); + m.method(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, 0)); CHECK_CALLS(1); } BOOST_FIXTURE_TEST_CASE(call_mock_method_with_max_number_of_args_and_a_return_value, mock_error_fixture) { my_custom_mock m; - MOCK_EXPECT(m.tag_2).once().with(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0)).returns(42); - BOOST_CHECK_EQUAL(42, m.method2(BOOST_PP_ENUM(MOCK_MAX_ARGS, IDENTITY, 0))); + MOCK_EXPECT(m.tag_2).once().with(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, 0)).returns(42); + BOOST_CHECK_EQUAL(42, m.method2(BOOST_PP_ENUM(NUM_TEST_ARGS, IDENTITY, 0))); CHECK_CALLS(1); } From baaaa154894710174ccd8411da825a8b2e0787c6 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Feb 2022 20:22:08 +0100 Subject: [PATCH 081/126] Workaround compiler issues (constant conditions, compiler bugs...) MSVC has issues with a tuple of references of incomplete classes and `virtual ~value() = default;` Some compilers warn for constant expressions in the for-loop-condition --- include/turtle/detail/action.hpp | 39 +++++++------- include/turtle/detail/expectation.hpp | 9 ++-- include/turtle/detail/function_impl.hpp | 70 ++++++++++++++++--------- 3 files changed, 70 insertions(+), 48 deletions(-) diff --git a/include/turtle/detail/action.hpp b/include/turtle/detail/action.hpp index 7bc5fa0..8b267e5 100644 --- a/include/turtle/detail/action.hpp +++ b/include/turtle/detail/action.hpp @@ -62,6 +62,27 @@ namespace mock { namespace detail { action_type a_; }; + /// Type erased value storage + struct value + { + value() = default; + value(const value&) = delete; + value& operator=(const value&) = delete; + virtual ~value() = default; + }; + /// Actual value storage, + /// holds an instance of T (stripped of reference qualifiers) + template + struct value_imp : value + { + using type = std::remove_const_t>; + + template + value_imp(U&& t) : t_(std::forward(t)) + {} + type t_; + }; + template class action : public action_base { @@ -85,24 +106,6 @@ namespace mock { namespace detail { } private: - struct value - { - value() = default; - value(const value&) = delete; - value& operator=(const value&) = delete; - virtual ~value() = default; - }; - template - struct value_imp : value - { - typedef std::remove_const_t> type; - - template - value_imp(U&& t) : t_(std::forward(t)) - {} - type t_; - }; - template typename value_imp::type& store(T&& t) { diff --git a/include/turtle/detail/expectation.hpp b/include/turtle/detail/expectation.hpp index 5c23895..cd107dc 100644 --- a/include/turtle/detail/expectation.hpp +++ b/include/turtle/detail/expectation.hpp @@ -27,7 +27,8 @@ namespace mock { namespace detail { bool operator()(typename ref_arg::type...) override { return true; } void serialize(std::ostream& s) const override { - for(unsigned i = 0; i < sizeof...(Args); ++i) + constexpr auto arity = sizeof...(Args); + for(unsigned i = 0; i < arity; ++i) { if(i) s << ", "; @@ -99,7 +100,7 @@ namespace mock { namespace detail { template class expectation : public action { - static constexpr auto arity = sizeof...(Args); + static constexpr std::size_t arity = sizeof...(Args); public: expectation() : expectation("unknown location", 0) {} @@ -122,13 +123,13 @@ namespace mock { namespace detail { void invoke(std::unique_ptr i) { invocation_ = std::move(i); } template - std::enable_if_t<(arity > 0) && sizeof...(Constraints) == arity, expectation&> with(Constraints... c) + std::enable_if_t<(arity > 0u) && sizeof...(Constraints) == arity, expectation&> with(Constraints... c) { matcher_ = std::make_unique>(c...); return *this; } template - std::enable_if_t<(Arity > 1), expectation&> with(const Constraint& c) + std::enable_if_t<(Arity > 1u), expectation&> with(const Constraint& c) { matcher_ = std::make_unique>(c); return *this; diff --git a/include/turtle/detail/function_impl.hpp b/include/turtle/detail/function_impl.hpp index 8cbbd1f..1c0bea4 100644 --- a/include/turtle/detail/function_impl.hpp +++ b/include/turtle/detail/function_impl.hpp @@ -69,6 +69,9 @@ namespace mock { namespace detail { #endif } + template + class lazy_args; + template class function_impl; @@ -133,7 +136,7 @@ namespace mock { namespace detail { { private: typedef wrapper_base base_type; - static constexpr auto arity = sizeof...(Args); + static constexpr std::size_t arity = sizeof...(Args); public: wrapper(const std::shared_ptr& m, expectation_type& e) : base_type(e), lock_(m) {} @@ -238,8 +241,9 @@ namespace mock { namespace detail { R operator()(Args... args) const { // Due to lifetime rules of references this must be created and consumed in one line -#define MOCK_FUNCTION_CONTEXT \ - boost::unit_test::lazy_ostream::instance() << lazy_context(this) << lazy_args(args...) << lazy_expectations(this) +#define MOCK_FUNCTION_CONTEXT \ + boost::unit_test::lazy_ostream::instance() \ + << lazy_context(this) << lazy_args(args...) << lazy_expectations(this) lock _(mutex_); valid_ = false; @@ -316,35 +320,49 @@ namespace mock { namespace detail { const function_impl* impl_; }; - struct lazy_args - { - lazy_args(std::add_lvalue_reference_t... args) : args_(args...) {} - friend std::ostream& operator<<(std::ostream& s, const lazy_args& a) - { - return a.print_impl(std::make_index_sequence{}, s); - } - - private: - std::tuple...> args_; - - template - std::ostream& print_impl(std::index_sequence, std::ostream& s) const - { - s << '('; - using expander = int[]; - (void)expander{ - 0, (s << ' ' << mock::format(std::get(args_)) << (sizeof...(Args) - 1u == I ? ' ' : ','), 0)... - }; - return s << ')'; - } - }; - std::list expectations_; context* context_; mutable bool valid_; const int exceptions_; const std::shared_ptr mutex_; }; + + template + class lazy_args : lazy_args + { + ArgFirst& arg_; + + public: + lazy_args(ArgFirst& arg, std::add_lvalue_reference_t... args) + : lazy_args(args...), arg_(arg) + {} + std::ostream& print(std::ostream& s) const + { + s << ' ' << mock::format(arg_) << ','; + return lazy_args::print(s); + } + }; + template + class lazy_args + { + ArgFirst& arg_; + + public: + lazy_args(ArgFirst& arg) : arg_(arg) {} + std::ostream& print(std::ostream& s) const { return s << ' ' << mock::format(arg_) << ' '; } + }; + template<> + class lazy_args<> + { + public: + std::ostream& print(std::ostream& s) const { return s; } + }; + template + std::ostream& operator<<(std::ostream& s, const lazy_args& a) + { + s << '('; + return a.print(s) << ')'; + } }} // namespace mock::detail #endif // MOCK_FUNCTION_IMPL_HPP_INCLUDED From f3dc82f3054474df666382a73adde5e77313441e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 7 Feb 2022 16:23:23 +0100 Subject: [PATCH 082/126] Rename move_helper.hpp to ref_arg.hpp and use template alias Shortens the call sites a lot: `typename ref_arg::type` -> `ref_arg_t` MSVC 2017 seems to have issues with std::conditional_t so use the C++11 variant here. --- include/turtle/constraints.hpp | 1 - include/turtle/detail/expectation.hpp | 16 ++++++++-------- include/turtle/detail/function.hpp | 2 +- include/turtle/detail/function_impl.hpp | 4 ++-- include/turtle/detail/matcher_base.hpp | 6 +++--- include/turtle/detail/move_helper.hpp | 19 ------------------- include/turtle/detail/ref_arg.hpp | 22 ++++++++++++++++++++++ include/turtle/matcher.hpp | 12 +++--------- 8 files changed, 39 insertions(+), 43 deletions(-) delete mode 100644 include/turtle/detail/move_helper.hpp create mode 100644 include/turtle/detail/ref_arg.hpp diff --git a/include/turtle/constraints.hpp b/include/turtle/constraints.hpp index 14e5458..572b7d9 100644 --- a/include/turtle/constraints.hpp +++ b/include/turtle/constraints.hpp @@ -11,7 +11,6 @@ #include "config.hpp" #include "constraint.hpp" -#include "detail/move_helper.hpp" #include "detail/void_t.hpp" #include "unwrap_reference.hpp" #include diff --git a/include/turtle/detail/expectation.hpp b/include/turtle/detail/expectation.hpp index cd107dc..18b9bb2 100644 --- a/include/turtle/detail/expectation.hpp +++ b/include/turtle/detail/expectation.hpp @@ -24,7 +24,7 @@ namespace mock { namespace detail { class default_matcher : public matcher_base { private: - bool operator()(typename ref_arg::type...) override { return true; } + bool operator()(ref_arg_t...) override { return true; } void serialize(std::ostream& s) const override { constexpr auto arity = sizeof...(Args); @@ -51,16 +51,16 @@ namespace mock { namespace detail { private: template - bool is_valid_impl(std::index_sequence, typename ref_arg::type... t) + bool is_valid_impl(std::index_sequence, ref_arg_t... t) { using expander = bool[]; bool result = true; - (void)expander{ result &= std::get(matchers_)(std::forward(t))... }; + (void)expander{ result &= std::get(matchers_)(static_cast>(t))... }; return result; } - bool operator()(typename ref_arg::type... t) override + bool operator()(ref_arg_t... t) override { - return is_valid_impl(std::make_index_sequence{}, std::forward(t)...); + return is_valid_impl(std::make_index_sequence{}, static_cast>(t)...); } template void serialize_impl(std::index_sequence, std::ostream& s) const @@ -87,7 +87,7 @@ namespace mock { namespace detail { multi_matcher(const F& f) : f_(f) {} private: - bool operator()(typename ref_arg::type... t) override { return f_(std::forward(t)...); } + bool operator()(ref_arg_t... t) override { return f_(static_cast>(t)...); } void serialize(std::ostream& s) const override { s << mock::format(f_); } private: @@ -143,9 +143,9 @@ namespace mock { namespace detail { bool verify() const { return invocation_->verify(); } - bool is_valid(typename ref_arg::type... t) const + bool is_valid(ref_arg_t... t) const { - return !invocation_->exhausted() && (*matcher_)(std::forward(t)...); + return !invocation_->exhausted() && (*matcher_)(static_cast>(t)...); } bool invoke() const diff --git a/include/turtle/detail/function.hpp b/include/turtle/detail/function.hpp index 288990a..e4e8c64 100644 --- a/include/turtle/detail/function.hpp +++ b/include/turtle/detail/function.hpp @@ -54,7 +54,7 @@ namespace mock { namespace detail { } expectation_type expect() { return impl_->expect(); } - R operator()(Ts... args) const { return (*impl_)(std::forward(args)...); } + R operator()(Ts... args) const { return (*impl_)(static_cast>(args)...); } friend std::ostream& operator<<(std::ostream& s, const function& f) { return s << *f.impl_; } diff --git a/include/turtle/detail/function_impl.hpp b/include/turtle/detail/function_impl.hpp index 1c0bea4..a396718 100644 --- a/include/turtle/detail/function_impl.hpp +++ b/include/turtle/detail/function_impl.hpp @@ -249,7 +249,7 @@ namespace mock { namespace detail { valid_ = false; for(const auto& expectation : expectations_) { - if(expectation.is_valid(std::forward(args)...)) + if(expectation.is_valid(static_cast>(args)...)) { if(!expectation.invoke()) { @@ -266,7 +266,7 @@ namespace mock { namespace detail { valid_ = true; error_type::call(MOCK_FUNCTION_CONTEXT, expectation.file(), expectation.line()); if(expectation.functor()) - return expectation.functor()(std::forward(args)...); + return expectation.functor()(static_cast>(args)...); return expectation.trigger(); } } diff --git a/include/turtle/detail/matcher_base.hpp b/include/turtle/detail/matcher_base.hpp index de16e22..abb1fb9 100644 --- a/include/turtle/detail/matcher_base.hpp +++ b/include/turtle/detail/matcher_base.hpp @@ -9,11 +9,11 @@ #ifndef MOCK_MATCHER_BASE_HPP_INCLUDED #define MOCK_MATCHER_BASE_HPP_INCLUDED -#include "move_helper.hpp" +#include "ref_arg.hpp" #include namespace mock { namespace detail { - template + template class matcher_base { public: @@ -22,7 +22,7 @@ namespace mock { namespace detail { matcher_base& operator=(const matcher_base&) = delete; virtual ~matcher_base() = default; - virtual bool operator()(typename ref_arg::type...) = 0; + virtual bool operator()(ref_arg_t...) = 0; friend std::ostream& operator<<(std::ostream& s, const matcher_base& m) { diff --git a/include/turtle/detail/move_helper.hpp b/include/turtle/detail/move_helper.hpp deleted file mode 100644 index 18e303a..0000000 --- a/include/turtle/detail/move_helper.hpp +++ /dev/null @@ -1,19 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2018 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef MOCK_MOVE_HELPER_HPP_INCLUDED -#define MOCK_MOVE_HELPER_HPP_INCLUDED - -#include - -namespace mock { namespace detail { - template - using ref_arg = std::conditional::value, T, std::add_rvalue_reference_t>; -}} // namespace mock::detail - -#endif // MOCK_MOVE_HELPER_HPP_INCLUDED diff --git a/include/turtle/detail/ref_arg.hpp b/include/turtle/detail/ref_arg.hpp new file mode 100644 index 0000000..abd755f --- /dev/null +++ b/include/turtle/detail/ref_arg.hpp @@ -0,0 +1,22 @@ +// http://turtle.sourceforge.net +// +// Copyright Mathieu Champlon 2018 +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef MOCK_REF_ARG_HPP_INCLUDED +#define MOCK_REF_ARG_HPP_INCLUDED + +#include + +namespace mock { namespace detail { + /// Make T a reference type: + /// If T is already a reference type, return T, else return an rvalue reference to T + /// Useful to pass along arguments keeping the ability to modify them (e.g. move from them) + template + using ref_arg_t = typename std::conditional::value, T, std::add_rvalue_reference_t>::type; +}} // namespace mock::detail + +#endif // MOCK_REF_ARG_HPP_INCLUDED diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index 249500f..7854d77 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -12,7 +12,7 @@ #include "config.hpp" #include "constraints.hpp" #include "detail/is_functor.hpp" -#include "detail/move_helper.hpp" +#include "detail/ref_arg.hpp" #include "log.hpp" #include #include @@ -51,10 +51,7 @@ class matcher> { public: explicit matcher(const constraint& c) : c_(c.c_) {} - bool operator()(typename detail::ref_arg::type actual) - { - return c_(std::forward::type>(actual)); - } + bool operator()(detail::ref_arg_t actual) { return c_(static_cast>(actual)); } friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.c_); } private: @@ -66,10 +63,7 @@ class matcher::type actual) - { - return c_(std::forward::type>(actual)); - } + bool operator()(detail::ref_arg_t actual) { return c_(static_cast>(actual)); } friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.c_); } private: From c34e4224fe54088d3480f093eec16c9817fde1b3 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 7 Feb 2022 16:31:20 +0100 Subject: [PATCH 083/126] Remove benchmarks using MOCK_MAX_ARGS No longer required. --- test/bench_0_class_10_max_args.cpp | 15 - test/bench_0_class_20_max_args.cpp | 15 - test/bench_0_class_30_max_args.cpp | 15 - ...> bench_30_classes_30_methods_30_args.cpp} | 1 - ..._classes_30_methods_9_args_10_max_args.cpp | 1078 ----------------- ..._classes_30_methods_9_args_20_max_args.cpp | 1078 ----------------- ..._classes_30_methods_9_args_30_max_args.cpp | 1078 ----------------- 7 files changed, 3280 deletions(-) delete mode 100644 test/bench_0_class_10_max_args.cpp delete mode 100644 test/bench_0_class_20_max_args.cpp delete mode 100644 test/bench_0_class_30_max_args.cpp rename test/{bench_30_classes_30_methods_30_args_30_max_args.cpp => bench_30_classes_30_methods_30_args.cpp} (99%) delete mode 100644 test/bench_30_classes_30_methods_9_args_10_max_args.cpp delete mode 100644 test/bench_30_classes_30_methods_9_args_20_max_args.cpp delete mode 100644 test/bench_30_classes_30_methods_9_args_30_max_args.cpp diff --git a/test/bench_0_class_10_max_args.cpp b/test/bench_0_class_10_max_args.cpp deleted file mode 100644 index 99fb400..0000000 --- a/test/bench_0_class_10_max_args.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 10 -#include - -int main() -{ - return 0; -} diff --git a/test/bench_0_class_20_max_args.cpp b/test/bench_0_class_20_max_args.cpp deleted file mode 100644 index 1a52cd5..0000000 --- a/test/bench_0_class_20_max_args.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 20 -#include - -int main() -{ - return 0; -} diff --git a/test/bench_0_class_30_max_args.cpp b/test/bench_0_class_30_max_args.cpp deleted file mode 100644 index 3eab294..0000000 --- a/test/bench_0_class_30_max_args.cpp +++ /dev/null @@ -1,15 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 30 -#include - -int main() -{ - return 0; -} diff --git a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp b/test/bench_30_classes_30_methods_30_args.cpp similarity index 99% rename from test/bench_30_classes_30_methods_30_args_30_max_args.cpp rename to test/bench_30_classes_30_methods_30_args.cpp index 53bebcd..7f14ebd 100644 --- a/test/bench_30_classes_30_methods_30_args_30_max_args.cpp +++ b/test/bench_30_classes_30_methods_30_args.cpp @@ -6,7 +6,6 @@ // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#define MOCK_MAX_ARGS 30 #include #ifdef _MSC_VER # pragma warning(disable : 4505) diff --git a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp b/test/bench_30_classes_30_methods_9_args_10_max_args.cpp deleted file mode 100644 index a69d3d9..0000000 --- a/test/bench_30_classes_30_methods_9_args_10_max_args.cpp +++ /dev/null @@ -1,1078 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 10 -#include -#ifdef _MSC_VER -# pragma warning(disable : 4505) -#endif - -namespace { -class base_class -{ -public: - virtual ~base_class() = default; - virtual void f1(int, int, int, int, int, int, int, int, int) = 0; - virtual void f2(int, int, int, int, int, int, int, int, int) = 0; - virtual void f3(int, int, int, int, int, int, int, int, int) = 0; - virtual void f4(int, int, int, int, int, int, int, int, int) = 0; - virtual void f5(int, int, int, int, int, int, int, int, int) = 0; - virtual void f6(int, int, int, int, int, int, int, int, int) = 0; - virtual void f7(int, int, int, int, int, int, int, int, int) = 0; - virtual void f8(int, int, int, int, int, int, int, int, int) = 0; - virtual void f9(int, int, int, int, int, int, int, int, int) = 0; - virtual void f10(int, int, int, int, int, int, int, int, int) = 0; - virtual void f11(int, int, int, int, int, int, int, int, int) = 0; - virtual void f12(int, int, int, int, int, int, int, int, int) = 0; - virtual void f13(int, int, int, int, int, int, int, int, int) = 0; - virtual void f14(int, int, int, int, int, int, int, int, int) = 0; - virtual void f15(int, int, int, int, int, int, int, int, int) = 0; - virtual void f16(int, int, int, int, int, int, int, int, int) = 0; - virtual void f17(int, int, int, int, int, int, int, int, int) = 0; - virtual void f18(int, int, int, int, int, int, int, int, int) = 0; - virtual void f19(int, int, int, int, int, int, int, int, int) = 0; - virtual void f20(int, int, int, int, int, int, int, int, int) = 0; - virtual void f21(int, int, int, int, int, int, int, int, int) = 0; - virtual void f22(int, int, int, int, int, int, int, int, int) = 0; - virtual void f23(int, int, int, int, int, int, int, int, int) = 0; - virtual void f24(int, int, int, int, int, int, int, int, int) = 0; - virtual void f25(int, int, int, int, int, int, int, int, int) = 0; - virtual void f26(int, int, int, int, int, int, int, int, int) = 0; - virtual void f27(int, int, int, int, int, int, int, int, int) = 0; - virtual void f28(int, int, int, int, int, int, int, int, int) = 0; - virtual void f29(int, int, int, int, int, int, int, int, int) = 0; - virtual void f30(int, int, int, int, int, int, int, int, int) = 0; -}; - -MOCK_BASE_CLASS(mock_class_1, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_2, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_3, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_4, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_5, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_6, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_7, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_8, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_9, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_10, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_11, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_12, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_13, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_14, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_15, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_16, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_17, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_18, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_19, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_20, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_21, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_22, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_23, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_24, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_25, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_26, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_27, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_28, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_29, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_30, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; - -mock_class_1 c_1; -mock_class_2 c_2; -mock_class_3 c_3; -mock_class_4 c_4; -mock_class_5 c_5; -mock_class_6 c_6; -mock_class_7 c_7; -mock_class_8 c_8; -mock_class_9 c_9; -mock_class_10 c_10; -mock_class_11 c_11; -mock_class_12 c_12; -mock_class_13 c_13; -mock_class_14 c_14; -mock_class_15 c_15; -mock_class_16 c_16; -mock_class_17 c_17; -mock_class_18 c_18; -mock_class_19 c_19; -mock_class_20 c_20; -mock_class_21 c_21; -mock_class_22 c_22; -mock_class_23 c_23; -mock_class_24 c_24; -mock_class_25 c_25; -mock_class_26 c_26; -mock_class_27 c_27; -mock_class_28 c_28; -mock_class_29 c_29; -mock_class_30 c_30; -} // namespace - -int main() -{ - return 0; -} diff --git a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp b/test/bench_30_classes_30_methods_9_args_20_max_args.cpp deleted file mode 100644 index c245b25..0000000 --- a/test/bench_30_classes_30_methods_9_args_20_max_args.cpp +++ /dev/null @@ -1,1078 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 20 -#include -#ifdef _MSC_VER -# pragma warning(disable : 4505) -#endif - -namespace { -class base_class -{ -public: - virtual ~base_class() = default; - virtual void f1(int, int, int, int, int, int, int, int, int) = 0; - virtual void f2(int, int, int, int, int, int, int, int, int) = 0; - virtual void f3(int, int, int, int, int, int, int, int, int) = 0; - virtual void f4(int, int, int, int, int, int, int, int, int) = 0; - virtual void f5(int, int, int, int, int, int, int, int, int) = 0; - virtual void f6(int, int, int, int, int, int, int, int, int) = 0; - virtual void f7(int, int, int, int, int, int, int, int, int) = 0; - virtual void f8(int, int, int, int, int, int, int, int, int) = 0; - virtual void f9(int, int, int, int, int, int, int, int, int) = 0; - virtual void f10(int, int, int, int, int, int, int, int, int) = 0; - virtual void f11(int, int, int, int, int, int, int, int, int) = 0; - virtual void f12(int, int, int, int, int, int, int, int, int) = 0; - virtual void f13(int, int, int, int, int, int, int, int, int) = 0; - virtual void f14(int, int, int, int, int, int, int, int, int) = 0; - virtual void f15(int, int, int, int, int, int, int, int, int) = 0; - virtual void f16(int, int, int, int, int, int, int, int, int) = 0; - virtual void f17(int, int, int, int, int, int, int, int, int) = 0; - virtual void f18(int, int, int, int, int, int, int, int, int) = 0; - virtual void f19(int, int, int, int, int, int, int, int, int) = 0; - virtual void f20(int, int, int, int, int, int, int, int, int) = 0; - virtual void f21(int, int, int, int, int, int, int, int, int) = 0; - virtual void f22(int, int, int, int, int, int, int, int, int) = 0; - virtual void f23(int, int, int, int, int, int, int, int, int) = 0; - virtual void f24(int, int, int, int, int, int, int, int, int) = 0; - virtual void f25(int, int, int, int, int, int, int, int, int) = 0; - virtual void f26(int, int, int, int, int, int, int, int, int) = 0; - virtual void f27(int, int, int, int, int, int, int, int, int) = 0; - virtual void f28(int, int, int, int, int, int, int, int, int) = 0; - virtual void f29(int, int, int, int, int, int, int, int, int) = 0; - virtual void f30(int, int, int, int, int, int, int, int, int) = 0; -}; - -MOCK_BASE_CLASS(mock_class_1, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_2, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_3, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_4, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_5, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_6, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_7, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_8, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_9, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_10, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_11, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_12, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_13, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_14, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_15, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_16, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_17, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_18, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_19, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_20, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_21, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_22, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_23, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_24, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_25, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_26, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_27, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_28, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_29, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_30, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; - -mock_class_1 c_1; -mock_class_2 c_2; -mock_class_3 c_3; -mock_class_4 c_4; -mock_class_5 c_5; -mock_class_6 c_6; -mock_class_7 c_7; -mock_class_8 c_8; -mock_class_9 c_9; -mock_class_10 c_10; -mock_class_11 c_11; -mock_class_12 c_12; -mock_class_13 c_13; -mock_class_14 c_14; -mock_class_15 c_15; -mock_class_16 c_16; -mock_class_17 c_17; -mock_class_18 c_18; -mock_class_19 c_19; -mock_class_20 c_20; -mock_class_21 c_21; -mock_class_22 c_22; -mock_class_23 c_23; -mock_class_24 c_24; -mock_class_25 c_25; -mock_class_26 c_26; -mock_class_27 c_27; -mock_class_28 c_28; -mock_class_29 c_29; -mock_class_30 c_30; -} // namespace - -int main() -{ - return 0; -} diff --git a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp b/test/bench_30_classes_30_methods_9_args_30_max_args.cpp deleted file mode 100644 index b137336..0000000 --- a/test/bench_30_classes_30_methods_9_args_30_max_args.cpp +++ /dev/null @@ -1,1078 +0,0 @@ -// http://turtle.sourceforge.net -// -// Copyright Mathieu Champlon 2011 -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#define MOCK_MAX_ARGS 30 -#include -#ifdef _MSC_VER -# pragma warning(disable : 4505) -#endif - -namespace { -class base_class -{ -public: - virtual ~base_class() = default; - virtual void f1(int, int, int, int, int, int, int, int, int) = 0; - virtual void f2(int, int, int, int, int, int, int, int, int) = 0; - virtual void f3(int, int, int, int, int, int, int, int, int) = 0; - virtual void f4(int, int, int, int, int, int, int, int, int) = 0; - virtual void f5(int, int, int, int, int, int, int, int, int) = 0; - virtual void f6(int, int, int, int, int, int, int, int, int) = 0; - virtual void f7(int, int, int, int, int, int, int, int, int) = 0; - virtual void f8(int, int, int, int, int, int, int, int, int) = 0; - virtual void f9(int, int, int, int, int, int, int, int, int) = 0; - virtual void f10(int, int, int, int, int, int, int, int, int) = 0; - virtual void f11(int, int, int, int, int, int, int, int, int) = 0; - virtual void f12(int, int, int, int, int, int, int, int, int) = 0; - virtual void f13(int, int, int, int, int, int, int, int, int) = 0; - virtual void f14(int, int, int, int, int, int, int, int, int) = 0; - virtual void f15(int, int, int, int, int, int, int, int, int) = 0; - virtual void f16(int, int, int, int, int, int, int, int, int) = 0; - virtual void f17(int, int, int, int, int, int, int, int, int) = 0; - virtual void f18(int, int, int, int, int, int, int, int, int) = 0; - virtual void f19(int, int, int, int, int, int, int, int, int) = 0; - virtual void f20(int, int, int, int, int, int, int, int, int) = 0; - virtual void f21(int, int, int, int, int, int, int, int, int) = 0; - virtual void f22(int, int, int, int, int, int, int, int, int) = 0; - virtual void f23(int, int, int, int, int, int, int, int, int) = 0; - virtual void f24(int, int, int, int, int, int, int, int, int) = 0; - virtual void f25(int, int, int, int, int, int, int, int, int) = 0; - virtual void f26(int, int, int, int, int, int, int, int, int) = 0; - virtual void f27(int, int, int, int, int, int, int, int, int) = 0; - virtual void f28(int, int, int, int, int, int, int, int, int) = 0; - virtual void f29(int, int, int, int, int, int, int, int, int) = 0; - virtual void f30(int, int, int, int, int, int, int, int, int) = 0; -}; - -MOCK_BASE_CLASS(mock_class_1, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_2, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_3, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_4, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_5, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_6, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_7, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_8, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_9, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_10, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_11, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_12, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_13, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_14, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_15, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_16, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_17, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_18, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_19, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_20, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_21, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_22, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_23, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_24, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_25, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_26, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_27, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_28, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_29, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; -MOCK_BASE_CLASS(mock_class_30, base_class) -{ - MOCK_METHOD(f1, 9) - MOCK_METHOD(f2, 9) - MOCK_METHOD(f3, 9) - MOCK_METHOD(f4, 9) - MOCK_METHOD(f5, 9) - MOCK_METHOD(f6, 9) - MOCK_METHOD(f7, 9) - MOCK_METHOD(f8, 9) - MOCK_METHOD(f9, 9) - MOCK_METHOD(f10, 9) - MOCK_METHOD(f11, 9) - MOCK_METHOD(f12, 9) - MOCK_METHOD(f13, 9) - MOCK_METHOD(f14, 9) - MOCK_METHOD(f15, 9) - MOCK_METHOD(f16, 9) - MOCK_METHOD(f17, 9) - MOCK_METHOD(f18, 9) - MOCK_METHOD(f19, 9) - MOCK_METHOD(f20, 9) - MOCK_METHOD(f21, 9) - MOCK_METHOD(f22, 9) - MOCK_METHOD(f23, 9) - MOCK_METHOD(f24, 9) - MOCK_METHOD(f25, 9) - MOCK_METHOD(f26, 9) - MOCK_METHOD(f27, 9) - MOCK_METHOD(f28, 9) - MOCK_METHOD(f29, 9) - MOCK_METHOD(f30, 9) -}; - -mock_class_1 c_1; -mock_class_2 c_2; -mock_class_3 c_3; -mock_class_4 c_4; -mock_class_5 c_5; -mock_class_6 c_6; -mock_class_7 c_7; -mock_class_8 c_8; -mock_class_9 c_9; -mock_class_10 c_10; -mock_class_11 c_11; -mock_class_12 c_12; -mock_class_13 c_13; -mock_class_14 c_14; -mock_class_15 c_15; -mock_class_16 c_16; -mock_class_17 c_17; -mock_class_18 c_18; -mock_class_19 c_19; -mock_class_20 c_20; -mock_class_21 c_21; -mock_class_22 c_22; -mock_class_23 c_23; -mock_class_24 c_24; -mock_class_25 c_25; -mock_class_26 c_26; -mock_class_27 c_27; -mock_class_28 c_28; -mock_class_29 c_29; -mock_class_30 c_30; -} // namespace - -int main() -{ - return 0; -} From bb77c1702f0e094dd0b01fa033c9a345fdf0ea1c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 7 Feb 2022 19:26:26 +0100 Subject: [PATCH 084/126] Add support for unlimited number of sequences in one call This removes the need for those preprocessor macros and the MOCK_MAX_SEQUENCES define. --- doc/changelog.qbk | 2 +- doc/reference.qbk | 7 ++----- include/turtle/config.hpp | 4 ---- include/turtle/detail/function_impl.hpp | 23 ++++++++--------------- test/test_sequence.cpp | 9 +++++++-- 5 files changed, 18 insertions(+), 27 deletions(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 326f21a..56a5f9c 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -15,7 +15,7 @@ Released - * Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_SIGNATURE to pass function signatures with commas in the return type * Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_SIGNATURE instead -* Add support for unlimitted number of arguments making MOCK_MAX_ARGS superflous +* Add support for unlimitted number of arguments and sequences making MOCK_MAX_ARGS and MOCK_MAX_SEQUENCES superflous [endsect] diff --git a/doc/reference.qbk b/doc/reference.qbk index 72dd7a9..8d1239e 100644 --- a/doc/reference.qbk +++ b/doc/reference.qbk @@ -449,10 +449,7 @@ Synopsis : Each sequence is an instance of mock::sequence. -The maximum number of sequences that can be set is MOCK_MAX_SEQUENCES which defaults to 10. If needed the value can be increased before including the library : - - #define MOCK_MAX_SEQUENCES 12 - #include +The maximum number of sequences that can be set is basically unlimited. Example : @@ -467,7 +464,7 @@ An action performs additional treatments after an expectation has been deemed va Synopsis : MOCK_EXPECT( identifier ).returns( value ); // stored internally by copy - MOCK_EXPECT( identifier ).moves( value ); // stored internally by copy + MOCK_EXPECT( identifier ).moves( value ); // stored internally by copy/move MOCK_EXPECT( identifier ).throws( exception ); // stored internally by copy MOCK_EXPECT( identifier ).calls( functor ); // stored internally by copy, throws std::invalid_argument if empty diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index d60fe72..111d09d 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -18,10 +18,6 @@ # define MOCK_USE_BOOST_TEST #endif -#ifndef MOCK_MAX_SEQUENCES -# define MOCK_MAX_SEQUENCES 10 -#endif - #if !defined(BOOST_NO_CXX11_HDR_MUTEX) && !defined(BOOST_NO_0X_HDR_MUTEX) # ifndef MOCK_NO_HDR_MUTEX # define MOCK_HDR_MUTEX diff --git a/include/turtle/detail/function_impl.hpp b/include/turtle/detail/function_impl.hpp index a396718..188a159 100644 --- a/include/turtle/detail/function_impl.hpp +++ b/include/turtle/detail/function_impl.hpp @@ -13,8 +13,6 @@ #include "expectation.hpp" #include "mutex.hpp" #include "verifiable.hpp" -#include -#include #include #include #include @@ -187,19 +185,14 @@ namespace mock { namespace detail { return *this; } -#define MOCK_FUNCTION_IN_ADD(z, n, d) this->e_->add(s##n); - -#define MOCK_FUNCTION_IN(z, n, d) \ - wrapper& in(BOOST_PP_ENUM_PARAMS(n, sequence& s)) \ - { \ - BOOST_PP_REPEAT(n, MOCK_FUNCTION_IN_ADD, _) \ - return *this; \ - } - - BOOST_PP_REPEAT(MOCK_MAX_SEQUENCES, MOCK_FUNCTION_IN, _) - -#undef MOCK_FUNCTION_IN -#undef MOCK_FUNCTION_IN_ADD + /// Ensure the expectation is met in the given sequence(s) + template + wrapper& in(sequence& s0, MockSequences&... s) + { + using expander = int[]; + (void)expander{ (e_->add(s0), 0), (e_->add(s), 0)... }; + return *this; + } template void calls(TT t) diff --git a/test/test_sequence.cpp b/test/test_sequence.cpp index 2415cf4..1f6ae98 100644 --- a/test/test_sequence.cpp +++ b/test/test_sequence.cpp @@ -10,6 +10,7 @@ #include #include #include +#include BOOST_FIXTURE_TEST_CASE(registering_to_a_sequence_and_calling_out_of_order_throws, mock_error_fixture) { @@ -97,9 +98,13 @@ BOOST_FIXTURE_TEST_CASE(resetting_an_expectation_removes_it_from_order_call_enfo BOOST_FIXTURE_TEST_CASE(an_expectation_can_be_used_in_several_sequences, mock_error_fixture) { - mock::sequence s1, s2; + std::array s; mock::detail::function e; - e.expect().once().in(s1, s2); + // One can use any amount of sequences if wanted + // clang-format off + e.expect().once().in(s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], + s[10], s[11], s[12], s[13], s[14], s[15], s[16], s[17], s[18], s[19]); + // clang-format on BOOST_CHECK_NO_THROW(e()); BOOST_CHECK(e.verify()); CHECK_CALLS(1); From 3845d57531d13186d0bda4e890e6a7a457672fe9 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 7 Feb 2022 19:56:26 +0100 Subject: [PATCH 085/126] Use BOOST_PP_VARIADIC_SIZE instead of custom implementation --- include/turtle/constraint.hpp | 111 +----------------------- include/turtle/detail/function_impl.hpp | 2 +- 2 files changed, 3 insertions(+), 110 deletions(-) diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index 126ce5d..8dddb22 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include @@ -178,118 +178,11 @@ const constraint> operator!(const constraintadd(s0), 0), (e_->add(s), 0)... }; + (void)expander{ (this->e_->add(s0), 0), (this->e_->add(s), 0)... }; return *this; } From c8c6af273e32c2b295741e5b7658a62c26ee89ef Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 8 Feb 2022 18:27:46 +0100 Subject: [PATCH 086/126] Don't return *this in expectation::with Chaining is done via the wrapper class not the expectation class --- include/turtle/detail/expectation.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/turtle/detail/expectation.hpp b/include/turtle/detail/expectation.hpp index 18b9bb2..d4e477a 100644 --- a/include/turtle/detail/expectation.hpp +++ b/include/turtle/detail/expectation.hpp @@ -123,16 +123,14 @@ namespace mock { namespace detail { void invoke(std::unique_ptr i) { invocation_ = std::move(i); } template - std::enable_if_t<(arity > 0u) && sizeof...(Constraints) == arity, expectation&> with(Constraints... c) + std::enable_if_t<(arity > 0u) && sizeof...(Constraints) == arity> with(Constraints... c) { matcher_ = std::make_unique>(c...); - return *this; } template - std::enable_if_t<(Arity > 1u), expectation&> with(const Constraint& c) + std::enable_if_t<(Arity > 1u)> with(const Constraint& c) { matcher_ = std::make_unique>(c); - return *this; } void add(sequence& s) From 528761b180b217e0ccc4d7f4acf3a951ba3e4feb Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Mon, 2 Jan 2023 17:30:54 +0000 Subject: [PATCH 087/126] Unit test nullptr C-style strings Added unit tests for the cases of matching and serializing C-style strings (char*) that are nullptr. (As of this revision, these new tests correctly fail, except for the test of mock::equal; fix to follow.) --- test/test_constraints.cpp | 9 +++++++++ test/test_log.cpp | 8 ++++++++ test/test_matcher.cpp | 10 +++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/test/test_constraints.cpp b/test/test_constraints.cpp index 11c43fd..92157df 100644 --- a/test/test_constraints.cpp +++ b/test/test_constraints.cpp @@ -80,6 +80,15 @@ BOOST_AUTO_TEST_CASE(equal_constraint_deref) } } +BOOST_AUTO_TEST_CASE(equal_null_c_string) +{ + const char* const null_str = nullptr; + + BOOST_CHECK(mock::equal(null_str).c_(null_str)); + BOOST_CHECK(!mock::equal(null_str).c_("non-null string")); + BOOST_CHECK(!mock::equal("non-null-string").c_(null_str)); +} + BOOST_AUTO_TEST_CASE(same_constraint) { { diff --git a/test/test_log.cpp b/test/test_log.cpp index c26d3bb..4c321fe 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -89,6 +89,14 @@ BOOST_AUTO_TEST_CASE(strings_are_serialized_with_double_quotes) BOOST_CHECK_EQUAL("\"string\"", to_string(std::string("string"))); } +BOOST_AUTO_TEST_CASE(null_c_strings_are_serialized_to_nullptr) +{ + const char* const null_str = nullptr; + BOOST_CHECK_EQUAL("nullptr", to_string(null_str)); + // Note the lack of double quotes in the output, as opposed to when the + // string "nullptr" is serialized. +} + namespace { struct non_serializable {}; diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index cc98be0..f7292b8 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -36,7 +36,7 @@ BOOST_AUTO_TEST_CASE(ref_to_int_and_int_can_be_compared) namespace { struct fixture { - fixture() : text("same text"), actual(text.c_str()) + fixture() : text("same text"), actual(text.c_str()), null_str(nullptr) { const char* static_string = "same text"; BOOST_REQUIRE(actual != static_string); @@ -44,6 +44,7 @@ struct fixture } std::string text; const char* actual; + const char* null_str; }; } // namespace @@ -75,6 +76,13 @@ BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixtu BOOST_CHECK(!match(std::string("different text"), actual)); } +BOOST_FIXTURE_TEST_CASE(null_const_char_pointers_can_be_compared, fixture) +{ + BOOST_CHECK(match(null_str, null_str)); + BOOST_CHECK(!match(null_str, "non-null string")); + BOOST_CHECK(!match("non-null string", null_str)); +} + namespace { template std::string serialize(const T& t) From dd7340e5f75f60deeb1ce37b35440a111664fb68 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Mon, 2 Jan 2023 17:38:26 +0000 Subject: [PATCH 088/126] Avoid dereferencing nullptr C-style strings Added runtime checks for C-style strings (char*) being nullptr during matching and serialization. This fix prevents nullptr dereferences in the case that the null character pointer (as opposed to the null nullptr_t) is expected and in the case that a non-null string is expected but nullptr is actually passed. --- include/turtle/matcher.hpp | 7 ++++++- include/turtle/stream.hpp | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index 7854d77..fc20a22 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -39,7 +39,12 @@ class matcher { public: explicit matcher(const char* expected) : expected_(expected) {} - bool operator()(const char* actual) { return std::strcmp(actual, expected_) == 0; } + bool operator()(const char* actual) + { + if (nullptr == actual || nullptr == expected_) + return actual == expected_; + return std::strcmp(actual, expected_) == 0; + } friend std::ostream& operator<<(std::ostream& s, const matcher& m) { return s << mock::format(m.expected_); } private: diff --git a/include/turtle/stream.hpp b/include/turtle/stream.hpp index 52991ed..e3bf273 100644 --- a/include/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -106,7 +106,13 @@ namespace detail { { s << '"' << str << '"'; } - inline void serialize(stream& s, const char* const str) { s << '"' << str << '"'; } + inline void serialize(stream& s, const char* const str) + { + if (nullptr != str) + s << '"' << str << '"'; + else + s << "nullptr"; + } inline void serialize(stream& s, unsigned char c) { s << static_cast(c); } } // namespace detail } // namespace mock From e55342385ec812971bbe4cdb6903e3ee53f38278 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Tue, 3 Jan 2023 16:28:27 +0000 Subject: [PATCH 089/126] Review corrections Corrected stylistic mistakes and simplified a couple of the new tests. --- include/turtle/matcher.hpp | 2 +- include/turtle/stream.hpp | 2 +- test/test_log.cpp | 3 +-- test/test_matcher.cpp | 6 +++--- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/turtle/matcher.hpp b/include/turtle/matcher.hpp index fc20a22..3bd9923 100644 --- a/include/turtle/matcher.hpp +++ b/include/turtle/matcher.hpp @@ -41,7 +41,7 @@ public: explicit matcher(const char* expected) : expected_(expected) {} bool operator()(const char* actual) { - if (nullptr == actual || nullptr == expected_) + if(!actual || !expected_) return actual == expected_; return std::strcmp(actual, expected_) == 0; } diff --git a/include/turtle/stream.hpp b/include/turtle/stream.hpp index e3bf273..979e6a7 100644 --- a/include/turtle/stream.hpp +++ b/include/turtle/stream.hpp @@ -108,7 +108,7 @@ namespace detail { } inline void serialize(stream& s, const char* const str) { - if (nullptr != str) + if(str) s << '"' << str << '"'; else s << "nullptr"; diff --git a/test/test_log.cpp b/test/test_log.cpp index 4c321fe..94db5c4 100644 --- a/test/test_log.cpp +++ b/test/test_log.cpp @@ -93,8 +93,7 @@ BOOST_AUTO_TEST_CASE(null_c_strings_are_serialized_to_nullptr) { const char* const null_str = nullptr; BOOST_CHECK_EQUAL("nullptr", to_string(null_str)); - // Note the lack of double quotes in the output, as opposed to when the - // string "nullptr" is serialized. + BOOST_CHECK_EQUAL("\"nullptr\"", to_string("nullptr")); } namespace { diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index f7292b8..547ecaa 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -36,7 +36,7 @@ BOOST_AUTO_TEST_CASE(ref_to_int_and_int_can_be_compared) namespace { struct fixture { - fixture() : text("same text"), actual(text.c_str()), null_str(nullptr) + fixture() : text("same text"), actual(text.c_str()) { const char* static_string = "same text"; BOOST_REQUIRE(actual != static_string); @@ -44,7 +44,6 @@ struct fixture } std::string text; const char* actual; - const char* null_str; }; } // namespace @@ -76,8 +75,9 @@ BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixtu BOOST_CHECK(!match(std::string("different text"), actual)); } -BOOST_FIXTURE_TEST_CASE(null_const_char_pointers_can_be_compared, fixture) +BOOST_AUTO_TEST_CASE(null_const_char_pointers_can_be_compared) { + const char* const null_str = nullptr; BOOST_CHECK(match(null_str, null_str)); BOOST_CHECK(!match(null_str, "non-null string")); BOOST_CHECK(!match("non-null string", null_str)); From 700ceb9f4d2659e686f2d5be2a2d742cf08aadf2 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 3 Jan 2023 18:13:00 +0100 Subject: [PATCH 090/126] Remove fixture of tests in test_matcher The fixture is not really required and can be replaced by definitions in each test which even improves readability. Also the tests are partially redundant due to implicit conversions so add test in test_function for actual usage testing of string comparisons. --- test/detail/test_function.cpp | 50 +++++++++++++++++++++++++++++++++++ test/test_matcher.cpp | 33 +++++++++-------------- 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/test/detail/test_function.cpp b/test/detail/test_function.cpp index bd640a2..59ed333 100644 --- a/test/detail/test_function.cpp +++ b/test/detail/test_function.cpp @@ -158,6 +158,56 @@ BOOST_FIXTURE_TEST_CASE(triggering_several_once_expectations_is_valid, mock_erro } } +BOOST_FIXTURE_TEST_CASE(string_likes_are_matched, mock_error_fixture) +{ + const char* c_string = "value"; + const char c_string2[] = "value"; + BOOST_REQUIRE(c_string != c_string2); // Different pointers + const std::string string = c_string; + { + mock::detail::function f; + + f.expect().once().with(string); + f(string); + BOOST_TEST(f.verify()); + + f.reset(); + f.expect().once().with(c_string); + f(string); + BOOST_TEST(f.verify()); + + f.reset(); + f.expect().once().with(c_string2); + f(string); + BOOST_TEST(f.verify()); + + CHECK_CALLS(3); + } + { + mock::detail::function f; + + f.expect().once().with(c_string); + f(c_string); + BOOST_TEST(f.verify()); + + f.reset(); + f.expect().once().with(c_string); + f(c_string2); + BOOST_TEST(f.verify()); + + f.reset(); + f.expect().once().with(c_string2); + f(c_string); + BOOST_TEST(f.verify()); + + f.reset(); + f.expect().once().with(string); + f(c_string); + BOOST_TEST(f.verify()); + CHECK_CALLS(4); + } +} + BOOST_FIXTURE_TEST_CASE(triggering_a_once_expectation_calls_unexpected_call_error_after_one_call, mock_error_fixture) { { diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index 547ecaa..f772182 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -33,46 +33,39 @@ BOOST_AUTO_TEST_CASE(ref_to_int_and_int_can_be_compared) BOOST_CHECK(!match(4, std::cref(i))); } -namespace { -struct fixture -{ - fixture() : text("same text"), actual(text.c_str()) - { - const char* static_string = "same text"; - BOOST_REQUIRE(actual != static_string); - BOOST_REQUIRE(actual == std::string(static_string)); - } - std::string text; - const char* actual; -}; -} // namespace - -BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_pointer_can_be_compared, fixture) +BOOST_AUTO_TEST_CASE(const_char_pointer_and_const_char_pointer_can_be_compared) { const char* expected = "same text"; + const char* actual = "same text"; + BOOST_REQUIRE(expected != actual); // Different pointer values BOOST_CHECK(match(expected, actual)); const char* unexpected = "different text"; BOOST_CHECK(!match(actual, unexpected)); } -BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_string_literal_can_be_compared, fixture) +BOOST_AUTO_TEST_CASE(const_char_pointer_and_string_literal_can_be_compared) { + const char* actual = "same text"; BOOST_CHECK(match("same text", actual)); BOOST_CHECK(!match("different text", actual)); } -BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_array_can_be_compared, fixture) +BOOST_AUTO_TEST_CASE(const_char_pointer_and_const_char_array_can_be_compared) { - const char expected[10] = "same text"; + const char* actual = "same text"; + const char expected[] = "same text"; BOOST_CHECK(match(expected, actual)); - const char unexpected[15] = "different text"; + const char unexpected[] = "different text"; BOOST_CHECK(!match(unexpected, actual)); } -BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixture) +BOOST_AUTO_TEST_CASE(const_char_pointer_and_std_string_can_be_compared) { + const char* actual = "same text"; BOOST_CHECK(match(std::string("same text"), actual)); + BOOST_CHECK(match(actual, std::string("same text"))); BOOST_CHECK(!match(std::string("different text"), actual)); + BOOST_CHECK(!match(actual, std::string("different text"))); } BOOST_AUTO_TEST_CASE(null_const_char_pointers_can_be_compared) From 6fecabcad5d53d455330634ee362fa33763a011d Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 3 Jan 2023 18:44:24 +0100 Subject: [PATCH 091/126] Bring back the fixture Without using a `std::string` the compiler may put the `const char*` C-Strings to the same memory address so our test might succeed when it should not. Add a short descriptive comment and check the property where it is used. --- test/test_matcher.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index f772182..5f1746d 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -10,6 +10,7 @@ #include #include #include +#include namespace { template @@ -33,35 +34,49 @@ BOOST_AUTO_TEST_CASE(ref_to_int_and_int_can_be_compared) BOOST_CHECK(!match(4, std::cref(i))); } -BOOST_AUTO_TEST_CASE(const_char_pointer_and_const_char_pointer_can_be_compared) +namespace { +struct fixture +{ + fixture() : text("same text") + { + // Get a pointer to unique memory containing "same text" + actual = text.c_str(); + } + const char* actual; + +private: + std::string text; +}; +} // namespace + +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_pointer_can_be_compared, fixture) { const char* expected = "same text"; - const char* actual = "same text"; - BOOST_REQUIRE(expected != actual); // Different pointer values + BOOST_REQUIRE(expected != actual); + BOOST_REQUIRE(std::string(expected) == actual); + BOOST_CHECK(match(expected, actual)); const char* unexpected = "different text"; - BOOST_CHECK(!match(actual, unexpected)); + BOOST_CHECK(!match(unexpected, actual)); } -BOOST_AUTO_TEST_CASE(const_char_pointer_and_string_literal_can_be_compared) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_string_literal_can_be_compared, fixture) { - const char* actual = "same text"; BOOST_CHECK(match("same text", actual)); BOOST_CHECK(!match("different text", actual)); } -BOOST_AUTO_TEST_CASE(const_char_pointer_and_const_char_array_can_be_compared) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_const_char_array_can_be_compared, fixture) { - const char* actual = "same text"; const char expected[] = "same text"; + BOOST_REQUIRE(expected != actual); BOOST_CHECK(match(expected, actual)); const char unexpected[] = "different text"; BOOST_CHECK(!match(unexpected, actual)); } -BOOST_AUTO_TEST_CASE(const_char_pointer_and_std_string_can_be_compared) +BOOST_FIXTURE_TEST_CASE(const_char_pointer_and_std_string_can_be_compared, fixture) { - const char* actual = "same text"; BOOST_CHECK(match(std::string("same text"), actual)); BOOST_CHECK(match(actual, std::string("same text"))); BOOST_CHECK(!match(std::string("different text"), actual)); From 9f5a8131aed466598654db25f9a31fdda93569be Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 3 Jan 2023 23:00:20 +0100 Subject: [PATCH 092/126] Download docbook DTD/XSL --- appveyor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 40f4560..eb4515a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,6 +33,10 @@ environment: CMAKE: true install: + - appveyor-retry powershell Invoke-WebRequest http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip -OutFile docbook-xml.zip + - appveyor-retry powershell Invoke-WebRequest https://github.com/docbook/xslt10-stylesheets/releases/download/release/1.79.2/docbook-xsl-1.79.2.zip -OutFile docbook-xsl.zip + - 7z x -oC:\Boost\share\docbook-xml docbook-xml.zip + - 7z x -oC:\Boost\share docbook-xsl.zip - mkdir %APPVEYOR_BUILD_FOLDER%\bin - cd %APPVEYOR_BUILD_FOLDER%\bin - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/iconv-1.9.2.win32.zip -OutFile iconv.zip From f191de5a5aa79746a1b56502e3721c8435a9b27d Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 7 Jan 2023 12:06:44 +0100 Subject: [PATCH 093/126] Add test for serializing a string or functor matcher --- test/test_matcher.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/test_matcher.cpp b/test/test_matcher.cpp index 5f1746d..5a53cb3 100644 --- a/test/test_matcher.cpp +++ b/test/test_matcher.cpp @@ -121,6 +121,11 @@ struct custom_constraint } bool operator()(int actual) { return actual == expected_; } }; + +bool custom_constraint_func(int) +{ + return false; +} } // namespace BOOST_AUTO_TEST_CASE(single_matcher_serializes) @@ -133,6 +138,30 @@ BOOST_AUTO_TEST_CASE(single_matcher_serializes) 1, 2, custom_constraint(), 4, 5)) == "1, 2, custom42, 4, 5"); } +BOOST_AUTO_TEST_CASE(string_matcher_serializes) +{ + using mock::detail::single_matcher; + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + BOOST_TEST(serialize(single_matcher("foo")) == "\"foo\""); + // Mixed types + BOOST_TEST(serialize(single_matcher("bar", 2)) == "\"bar\", 2"); +} + +BOOST_AUTO_TEST_CASE(functor_matcher_serializes) +{ + using mock::detail::single_matcher; + using Functor = decltype(custom_constraint_func); + BOOST_TEST(serialize(single_matcher(custom_constraint_func)) == "?"); + BOOST_TEST(serialize(single_matcher(custom_constraint_func)) == "?"); + // Mixed types + BOOST_TEST(serialize(single_matcher(custom_constraint_func, 2)) == "?, 2"); +} + BOOST_AUTO_TEST_CASE(multi_matcher_serializes) { using mock::detail::multi_matcher; From 5e196bac2912e26f463cf9035daece140500621e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 11 Aug 2023 14:13:04 +0200 Subject: [PATCH 094/126] Replace travis CI badge by GHA badge in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8be3b04..f4a8dff 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Distributed under the [Boost Software License, Version 1.0](http://boost.org/LICENSE_1_0.txt). -[![Build Status](https://travis-ci.org/mat007/turtle.svg)](https://travis-ci.org/mat007/turtle) +[![CI](https://github.com/mat007/turtle/actions/workflows/ci.yml/badge.svg)](https://github.com/mat007/turtle/actions/workflows/ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/459hvqkb5rts4hw7?svg=true)](https://ci.appveyor.com/project/mat007/turtle) [![Coverage Status](https://coveralls.io/repos/mat007/turtle/badge.png)](https://coveralls.io/r/mat007/turtle) From 4b9d9aa4cb1a8269e2a0aa4be725dc5f7d9495a7 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 11 Aug 2023 17:26:39 +0200 Subject: [PATCH 095/126] Update links for download doc generation deps on CI The FTP URLs don't seem to work anymore --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index eb4515a..340b58c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -39,13 +39,13 @@ install: - 7z x -oC:\Boost\share docbook-xsl.zip - mkdir %APPVEYOR_BUILD_FOLDER%\bin - cd %APPVEYOR_BUILD_FOLDER%\bin - - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/iconv-1.9.2.win32.zip -OutFile iconv.zip + - appveyor-retry powershell Invoke-WebRequest https://www.zlatkovic.com/pub/libxml/iconv-1.9.2.win32.zip -OutFile iconv.zip - 7z e iconv.zip iconv.dll -r - - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/libxml2-2.7.8.win32.zip -OutFile libxml2.zip + - appveyor-retry powershell Invoke-WebRequest https://www.zlatkovic.com/pub/libxml/libxml2-2.7.8.win32.zip -OutFile libxml2.zip - 7z e libxml2.zip libxml2.dll -r - - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/libxslt-1.1.26.win32.zip -OutFile libxslt.zip + - appveyor-retry powershell Invoke-WebRequest https://www.zlatkovic.com/pub/libxml/libxslt-1.1.26.win32.zip -OutFile libxslt.zip - 7z e libxslt.zip libexslt.dll libxslt.dll xsltproc.exe -r - - appveyor-retry powershell Invoke-WebRequest ftp://ftp.zlatkovic.com/libxml/zlib-1.2.5.win32.zip -OutFile zlib.zip + - appveyor-retry powershell Invoke-WebRequest https://www.zlatkovic.com/pub/libxml/zlib-1.2.5.win32.zip -OutFile zlib.zip - 7z e zlib.zip zlib1.dll -r - xsltproc -V From 418d12b6370e0becb4cbc75881521064ac5d0950 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 13 Aug 2023 19:39:43 +0200 Subject: [PATCH 096/126] GHA: Update deprecated images and workflows The Ubuntu 18.04 runners were deprecated and removed. `actions/checkout@v2` uses node12 which is deprecated. Same for `actions/cache@v2` --- .github/workflows/ci.yml | 36 +++++++++++++++++++++++------------ .github/workflows/release.yml | 4 ++-- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f0a495..1e71dfb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: Formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Formatting uses: DoozyX/clang-format-lint-action@v0.13 with: @@ -42,37 +42,49 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-18.04 } - - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-18.04 } - - { compiler: gcc-5, cxxstd: '14,1z', boostBranch: master, os: ubuntu-18.04 } - - { compiler: gcc-11,cxxstd: '14,17,20', boostBranch: master, os: ubuntu-20.04 } + - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } + - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } + - { compiler: gcc-12,cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } # Linux, clang - - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-18.04 } - - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-18.04 } - - { compiler: clang-5.0, cxxstd: '14,1z', boostBranch: master, os: ubuntu-18.04 } - - { compiler: clang-12, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-20.04 } + - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } + - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } + - { compiler: clang-14, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } - { name: Collect coverage, coverage: yes, compiler: gcc-8, cxxstd: '14', boostBranch: master, os: ubuntu-20.04 } timeout-minutes: 120 runs-on: ${{matrix.os}} + container: ${{matrix.container}} steps: - - uses: actions/checkout@v2 + - name: Prepare container environment + if: matrix.container + run: | + export DEBIAN_FRONTEND=noninteractive + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common curl + # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 + curl -sSL --retry ${NET_RETRY_COUNT:-5} 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE1DD270288B4E6030699E45FA1715D88E1DF1F24' | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg + for i in {1..${NET_RETRY_COUNT:-5}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ git cmake + git config --global pack.threads 0 + + - uses: actions/checkout@v3 with: # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' fetch-depth: ${{ matrix.coverage && '0' || '1' }} # Checking out Boost and all its submodules takes ages... - name: Cache Boost - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: boost-root key: boost-${{matrix.boostBranch}} - name: Checkout Boost - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: boostorg/boost ref: ${{matrix.boostBranch}} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 125ef33..db0b14d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,8 +17,8 @@ jobs: BOOST_VERSION: 1.71.0 BOOST_ROOT: ${{github.workspace}}/dependencies/boost steps: - - uses: actions/checkout@v2 - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + - uses: actions/checkout@v3 with: repository: boostorg/boost ref: boost-${{env.BOOST_VERSION}} From 5aff52fcca97892dc18a5a3b1fceb587a579b725 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 15 Aug 2023 09:47:38 +0200 Subject: [PATCH 097/126] Use newer CMake for Ubuntu 18 to make it find newer Boost --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e71dfb..ae8d64b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,10 +64,12 @@ jobs: run: | export DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common curl - # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common curl lsb-release + # Need (newer) git & cmake, and the older Ubuntu container may require requesting the key manually using port 80 curl -sSL --retry ${NET_RETRY_COUNT:-5} 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE1DD270288B4E6030699E45FA1715D88E1DF1F24' | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg for i in {1..${NET_RETRY_COUNT:-5}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + curl -sSL --retry ${NET_RETRY_COUNT:-5} 'https://apt.kitware.com/keys/kitware-archive-latest.asc' | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/kitware-archive-latest.gpg + for i in {1..${NET_RETRY_COUNT:-5}}; do sudo -E add-apt-repository -y "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" && break || sleep 10; done apt-get -o Acquire::Retries=$NET_RETRY_COUNT update apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ git cmake git config --global pack.threads 0 From f6f3990ddf28bb7624baec6a7c2032c182d26c6d Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 11:06:17 +0200 Subject: [PATCH 098/126] Rename master branch to main --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- appveyor.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae8d64b..89207f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: pull_request: push: branches: - - master + - main - develop - feature/** diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index db0b14d..e66080b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,7 +6,7 @@ name: Release on: push: - branches: [master] + branches: [main] tags: ['v*'] jobs: diff --git a/appveyor.yml b/appveyor.yml index 340b58c..faa42f7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,7 +9,7 @@ skip_branch_with_pr: true branches: only: - - master + - main environment: matrix: From 6b735c4c03a620103a057bc786be510018e3c82e Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 12:25:38 +0200 Subject: [PATCH 099/126] Bump actions/checkout to v4 --- .github/workflows/ci.yml | 6 +++--- .github/workflows/release.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89207f0..449b20a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: Formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Formatting uses: DoozyX/clang-format-lint-action@v0.13 with: @@ -74,7 +74,7 @@ jobs: apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ git cmake git config --global pack.threads 0 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' fetch-depth: ${{ matrix.coverage && '0' || '1' }} @@ -86,7 +86,7 @@ jobs: path: boost-root key: boost-${{matrix.boostBranch}} - name: Checkout Boost - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: boostorg/boost ref: ${{matrix.boostBranch}} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e66080b..2666c20 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,8 +17,8 @@ jobs: BOOST_VERSION: 1.71.0 BOOST_ROOT: ${{github.workspace}}/dependencies/boost steps: - - uses: actions/checkout@v3 - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + - uses: actions/checkout@v4 with: repository: boostorg/boost ref: boost-${{env.BOOST_VERSION}} From 80f8cc5e4981c2588d41406f5d67d23a07fd513e Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 12:42:25 +0200 Subject: [PATCH 100/126] Test more recent compiler and boost versions --- .github/workflows/ci.yml | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 449b20a..f84ed28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,17 +42,19 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } - - { compiler: gcc-5, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } - - { compiler: gcc-12,cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } - + - { compiler: gcc-7, cxxstd: '14,17', boostBranch: boost-1.86.0, os: ubuntu-20.04 } + - { compiler: gcc-10, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-22.04 } + - { compiler: gcc-12, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } + - { compiler: gcc-14, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 } + - { compiler: gcc-14, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 } + # Linux, clang - - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.65.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } - - { compiler: clang-5.0, cxxstd: '14', boostBranch: boost-1.77.0, os: ubuntu-22.04, container: 'ubuntu:18.04' } - - { compiler: clang-14, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } + - { compiler: clang-14, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 } + - { compiler: clang-18, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 } + - { compiler: clang-18, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 } - { name: Collect coverage, coverage: yes, - compiler: gcc-8, cxxstd: '14', boostBranch: master, os: ubuntu-20.04 } + compiler: gcc-8, cxxstd: '14', boostBranch: boost-1.86.0, os: ubuntu-20.04 } timeout-minutes: 120 runs-on: ${{matrix.os}} @@ -127,11 +129,7 @@ jobs: - name: Boost build run: | - if [[ "${{matrix.boostBranch}}" == "master" ]]; then - B2_FLAGS="cxxstd=${{matrix.cxxstd}}" - else - B2_FLAGS="cxxflags=-std=c++${{matrix.cxxstd}}" - fi + B2_FLAGS="cxxstd=${{matrix.cxxstd}}" if [[ "${{matrix.coverage}}" == "yes" ]]; then B2_FLAGS="$B2_FLAGS cxxflags=--coverage linkflags=--coverage" fi From ebadb64b6e8ba81271bc5aef9f8ee6d19aa0bfe7 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 12:13:32 +0200 Subject: [PATCH 101/126] Prepare v2.0.0 release --- doc/changelog.qbk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/changelog.qbk b/doc/changelog.qbk index 56a5f9c..e659c1c 100644 --- a/doc/changelog.qbk +++ b/doc/changelog.qbk @@ -7,15 +7,15 @@ [section Changelog] -[section Unreleased] -Released - +[section 2.0.0] +Released 29 September 2024 * Allow auto-deducing signature in `MOCK_METHOD_(NON_)CONST` * Replaced Boost facilities with std:: equivalents where existing in C++14 * Removed MOCK_*_TPL as they are no longer required, use the non _TPL variant even for templates * Added MOCK_PROTECT_SIGNATURE to pass function signatures with commas in the return type * Remove support for protecting function signatures via BOOST_IDENTITY_TYPE, use MOCK_PROTECT_SIGNATURE instead -* Add support for unlimitted number of arguments and sequences making MOCK_MAX_ARGS and MOCK_MAX_SEQUENCES superflous +* Add support for unlimited number of arguments and sequences making MOCK_MAX_ARGS and MOCK_MAX_SEQUENCES superflous [endsect] From 9d5689a5883bcdf9da5c57b7cdc9435c2c25a08e Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 12:15:32 +0200 Subject: [PATCH 102/126] Bump requirement to a C++14 compiler --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4a8dff..e9e284c 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,4 @@ Distributed under the [Boost Software License, Version 1.0](http://boost.org/LIC [![Build status](https://ci.appveyor.com/api/projects/status/459hvqkb5rts4hw7?svg=true)](https://ci.appveyor.com/project/mat007/turtle) [![Coverage Status](https://coveralls.io/repos/mat007/turtle/badge.png)](https://coveralls.io/r/mat007/turtle) -Boost and a C++11 compatible compiler is required. +Boost and a C++14 compatible compiler is required. From 5b498ff5518b221412aafab29d27fd42f9b9e867 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sat, 28 Sep 2024 12:21:38 +0200 Subject: [PATCH 103/126] Add more prominent link to documentation --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e9e284c..d205f36 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,5 @@ Distributed under the [Boost Software License, Version 1.0](http://boost.org/LIC [![Coverage Status](https://coveralls.io/repos/mat007/turtle/badge.png)](https://coveralls.io/r/mat007/turtle) Boost and a C++14 compatible compiler is required. + +More information in the [documentation](http://turtle.sourceforge.net). From e9f6716aa89a1cb4be3b813a0af4589837bfdc54 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Sun, 29 Sep 2024 20:42:36 +0200 Subject: [PATCH 104/126] Bump version to 2.0.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ddc100..be50c29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ # See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt cmake_minimum_required(VERSION 3.8) -project(turtle VERSION 1.3.2 LANGUAGES CXX) +project(turtle VERSION 2.0.0 LANGUAGES CXX) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) set(IS_ROOT_PROJECT ON) From d675a05d9530b5f9e5a825ca4d16e68102b87772 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Apr 2025 18:27:25 +0200 Subject: [PATCH 105/126] Require CMake 3.16 With CMake 4 compatibility with CMake 3.5 was dropped and 3.10 deprecated. Use a reasonably new lower bound based on Ubuntu 20 --- CMakeLists.txt | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be50c29..d65ba4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ -# Copyright 2019 Alexander Grund +# Copyright 2019-2025 Alexander Grund # Distributed under the Boost Software License, Version 1.0. # See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.16..3.20) project(turtle VERSION 2.0.0 LANGUAGES CXX) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) @@ -67,14 +67,7 @@ if(TURTLE_INSTALL) INSTALL_DESTINATION ${configInstallDestination} ) - if(NOT CMAKE_VERSION VERSION_LESS 3.14) - write_basic_package_version_file(${versionFile} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT) - else() - set(OLD_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) - set(CMAKE_SIZEOF_VOID_P "") - write_basic_package_version_file(${versionFile} COMPATIBILITY SameMajorVersion) - set(CMAKE_SIZEOF_VOID_P ${OLD_CMAKE_SIZEOF_VOID_P}) - endif() + write_basic_package_version_file(${versionFile} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT) install(FILES ${configFile} ${versionFile} DESTINATION ${configInstallDestination}) From 26583bebf32160787f71c5216d75f6561b3f8522 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sat, 5 Apr 2025 18:38:43 +0200 Subject: [PATCH 106/126] GHA: Fix doc build Use Boost 1.87 to include fix for libxslt 1.1.35: https://github.com/boostorg/boostbook/issues/14 --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2666c20..a0b79ae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -# Copyright 2020 Alexander Grund +# Copyright 2020-2025 Alexander Grund # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) @@ -14,7 +14,7 @@ jobs: name: Create Release runs-on: ubuntu-latest env: - BOOST_VERSION: 1.71.0 + BOOST_VERSION: 1.87.0 BOOST_ROOT: ${{github.workspace}}/dependencies/boost steps: - uses: actions/checkout@v4 From cd6f5ea70dfe7a7571954f122c3cfb9693414e80 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 21 Apr 2025 10:59:56 +0200 Subject: [PATCH 107/126] Fix GHA CI Move Ubuntu 20.04 tests to containers as that runner image has been removed. --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f84ed28..fc62ba3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-7, cxxstd: '14,17', boostBranch: boost-1.86.0, os: ubuntu-20.04 } + - { compiler: gcc-7, cxxstd: '14,17', boostBranch: boost-1.86.0, os: ubuntu-latest, container: 'ubuntu:20.04' } - { compiler: gcc-10, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-22.04 } - { compiler: gcc-12, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-22.04 } - { compiler: gcc-14, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 } @@ -54,7 +54,7 @@ jobs: - { compiler: clang-18, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 } - { name: Collect coverage, coverage: yes, - compiler: gcc-8, cxxstd: '14', boostBranch: boost-1.86.0, os: ubuntu-20.04 } + compiler: gcc-8, cxxstd: '14', boostBranch: boost-1.86.0, os: ubuntu-latest, container: 'ubuntu:20.04' } timeout-minutes: 120 runs-on: ${{matrix.os}} @@ -83,7 +83,7 @@ jobs: # Checking out Boost and all its submodules takes ages... - name: Cache Boost - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: boost-root key: boost-${{matrix.boostBranch}} From 20dafe08a62a8bbcdbb35779ddd7a4a1ddfb6678 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 20 Apr 2025 18:32:46 +0200 Subject: [PATCH 108/126] Remove some detail macros and rename parameters for readability --- include/turtle/constraint.hpp | 2 + include/turtle/detail/mock_impl.hpp | 73 +++++++++++++++-------------- include/turtle/mock.hpp | 45 +++++++++++------- 3 files changed, 66 insertions(+), 54 deletions(-) diff --git a/include/turtle/constraint.hpp b/include/turtle/constraint.hpp index 8dddb22..2eb7cf5 100644 --- a/include/turtle/constraint.hpp +++ b/include/turtle/constraint.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2008 +// Copyright 2020-2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -17,6 +18,7 @@ #include #include #include +#include #include #include #include diff --git a/include/turtle/detail/mock_impl.hpp b/include/turtle/detail/mock_impl.hpp index 211e81c..59fe4e0 100644 --- a/include/turtle/detail/mock_impl.hpp +++ b/include/turtle/detail/mock_impl.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2008 +// Copyright 2022-2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -14,7 +15,7 @@ #include "signature.hpp" #include "signature_traits.hpp" #include "type_name.hpp" -#include +#include #include #include @@ -49,47 +50,47 @@ namespace mock { namespace detail { return t##_mock_; \ } -#define MOCK_PARAM(S) mock::detail::parameter_t < S -#define MOCK_DECL_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n > p##n -#define MOCK_DECL_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_DECL_PARAM, MOCK_PARAM(S)) -#define MOCK_DECL(M, n, S, c) mock::detail::result_type_t M(MOCK_DECL_PARAMS(n, S)) c +#define MOCK_PARAM(S, n) mock::detail::parameter_t -#define MOCK_FORWARD_PARAM(z, n, d) BOOST_PP_COMMA_IF(n) d, n >> (p##n) -#define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_REPEAT(n, MOCK_FORWARD_PARAM, std::forward < MOCK_PARAM(S)) -#define MOCK_METHOD_AUX(M, n, S, t, c) \ - static_assert(n == mock::detail::function_arity_t::value, "Arity mismatch"); \ - MOCK_DECL(M, n, S, c) { return MOCK_ANONYMOUS_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); } +#define MOCK_DECL_PARAM(z, n, S) MOCK_PARAM(S, n) p##n +#define MOCK_DECL_PARAMS(n, S) BOOST_PP_ENUM(n, MOCK_DECL_PARAM, S) +#define MOCK_DECL(name, arity, signature, qualifier) \ + mock::detail::result_type_t name(MOCK_DECL_PARAMS(arity, signature)) qualifier -#define MOCK_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, ) \ - MOCK_METHOD_AUX(M, n, S, t, const) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, const) \ - MOCK_METHOD_HELPER(S, t) -#define MOCK_NON_CONST_METHOD_EXT(M, n, S, t) \ - MOCK_METHOD_AUX(M, n, S, t, ) \ - MOCK_METHOD_HELPER(S, t) - -#define MOCK_FUNCTION_HELPER(S, t, s) \ - s mock::detail::function& t##_mock(mock::detail::context& context, boost::unit_test::const_string instance) \ - { \ - static mock::detail::function f; \ - return f(context, instance); \ +#define MOCK_FORWARD_PARAM(z, n, S) std::forward(p##n) +#define MOCK_FORWARD_PARAMS(n, S) BOOST_PP_ENUM(n, MOCK_FORWARD_PARAM, S) +#define MOCK_METHOD_AUX(name, arity, signature, identifier, qualifier) \ + MOCK_DECL(name, arity, signature, qualifier) \ + { \ + return MOCK_ANONYMOUS_HELPER(identifier)(MOCK_FORWARD_PARAMS(arity, signature)); \ } -#define MOCK_CONSTRUCTOR_AUX(T, n, A, t) \ - T(MOCK_DECL_PARAMS(n, void A)) { MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, void A)); } \ - MOCK_FUNCTION_HELPER(void A, t, static) +#define MOCK_METHOD_EXT(name, arity, signature, identifier) \ + MOCK_METHOD_AUX(name, arity, signature, identifier, ) \ + MOCK_METHOD_AUX(name, arity, signature, identifier, const) \ + MOCK_METHOD_HELPER(signature, identifier) +#define MOCK_CONST_METHOD_EXT(name, arity, signature, identifier) \ + MOCK_METHOD_AUX(name, arity, signature, identifier, const) \ + MOCK_METHOD_HELPER(signature, identifier) +#define MOCK_NON_CONST_METHOD_EXT(name, arity, signature, identifier) \ + MOCK_METHOD_AUX(name, arity, signature, identifier, ) \ + MOCK_METHOD_HELPER(signature, identifier) -#define MOCK_FUNCTION_AUX(F, n, S, t, s) \ - MOCK_FUNCTION_HELPER(S, t, s) \ - static_assert(n == mock::detail::function_arity_t::value, "Arity mismatch"); \ - s MOCK_DECL(F, n, S, ) { return MOCK_HELPER(t)(MOCK_FORWARD_PARAMS(n, S)); } +#define MOCK_FUNCTION_HELPER(signature, identifier, prefix) \ + prefix mock::detail::function& identifier##_mock(mock::detail::context& context, \ + boost::unit_test::const_string instance) \ + { \ + static mock::detail::function f; \ + return f(context, instance); \ + } -#define MOCK_VARIADIC_ELEM_0(e0, ...) e0 -#define MOCK_VARIADIC_ELEM_1(e0, e1, ...) e1 -#define MOCK_VARIADIC_ELEM_2(e0, e1, e2, ...) e2 +#define MOCK_FUNCTION_AUX(name, arity, signature, identifier, prefix) \ + MOCK_FUNCTION_HELPER(signature, identifier, prefix) \ + static_assert(arity == mock::detail::function_arity_t::value, "Arity mismatch"); \ + prefix MOCK_DECL(name, arity, signature, ) \ + { \ + return MOCK_HELPER(identifier)(MOCK_FORWARD_PARAMS(arity, signature)); \ + } #define MOCK_REPLACED_MACRO_ERROR(oldName, newName) static_assert(false, #oldName " has been replaced by " #newName) // Replaced macros diff --git a/include/turtle/mock.hpp b/include/turtle/mock.hpp index 9e78a4f..31d5dc8 100644 --- a/include/turtle/mock.hpp +++ b/include/turtle/mock.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2008 +// Copyright 2022-2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -15,6 +16,7 @@ #include "object.hpp" #include "reset.hpp" #include "verify.hpp" +#include /// MOCK_CLASS( name ) /// Define a class @@ -51,7 +53,12 @@ /// MOCK_CONSTRUCTOR( [calling convention] name, arity, parameters, identifier ) /// As constructors do not have a return type, the usual signature gets restricted here to just the parameters. -#define MOCK_CONSTRUCTOR(T, arity, parameters, identifier) MOCK_CONSTRUCTOR_AUX(T, arity, parameters, identifier) +#define MOCK_CONSTRUCTOR(T, arity, parameters, identifier) \ + T(MOCK_DECL_PARAMS(arity, void parameters)) \ + { \ + MOCK_HELPER(identifier)(MOCK_FORWARD_PARAMS(arity, void parameters)); \ + } \ + MOCK_FUNCTION_HELPER(void parameters, identifier, static) /// MOCK_DESTRUCTOR( [calling convention] ~name, identifier ) #define MOCK_DESTRUCTOR(T, identifier) \ @@ -69,39 +76,41 @@ /// generates both const and non-const methods /// The 'signature' can be omitted if it can be uniquely identified from the base class /// if 'identifier' is omitted it will default to 'name' -#define MOCK_METHOD(M, ...) \ - MOCK_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_METHOD(M, ...) \ + MOCK_METHOD_EXT(M, \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__, ), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, MOCK_SIGNATURE(M), ), \ + BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__, M, M, )) /// MOCK_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the const version of the method /// The 'signature' can be omitted if it can be uniquely identified from the base class /// if 'identifier' is omitted it will default to 'name' -#define MOCK_CONST_METHOD(M, ...) \ - MOCK_CONST_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_CONST_METHOD(M, ...) \ + MOCK_CONST_METHOD_EXT(M, \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__, ), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, MOCK_SIGNATURE(M), ), \ + BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__, M, M, )) /// MOCK_NON_CONST_METHOD( [calling convention] name, arity[, signature[, identifier]] ) /// generates only the non-const version of the method /// The 'signature' can be omitted if it can be uniquely identified from the base class /// if 'identifier' is omitted it will default to 'name' -#define MOCK_NON_CONST_METHOD(M, ...) \ - MOCK_NON_CONST_METHOD_EXT(M, \ - MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), \ - MOCK_VARIADIC_ELEM_1(__VA_ARGS__, MOCK_SIGNATURE(M), ), \ - MOCK_VARIADIC_ELEM_2(__VA_ARGS__, M, M, )) +#define MOCK_NON_CONST_METHOD(M, ...) \ + MOCK_NON_CONST_METHOD_EXT(M, \ + BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__, ), \ + BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, MOCK_SIGNATURE(M), ), \ + BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__, M, M, )) /// MOCK_FUNCTION( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' #define MOCK_FUNCTION(F, arity, ...) \ - MOCK_FUNCTION_AUX(F, arity, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), inline) + MOCK_FUNCTION_AUX( \ + F, arity, BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__, ), BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F, ), inline) /// MOCK_STATIC_METHOD( [calling convention] name, arity, signature[, identifier] ) /// if 'identifier' is omitted it will default to 'name' #define MOCK_STATIC_METHOD(F, arity, ...) \ - MOCK_FUNCTION_AUX(F, arity, MOCK_VARIADIC_ELEM_0(__VA_ARGS__, ), MOCK_VARIADIC_ELEM_1(__VA_ARGS__, F, ), static) + MOCK_FUNCTION_AUX( \ + F, arity, BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__, ), BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__, F, ), static) /// MOCK_EXPECT( identifier ) /// Begin setting up expectation for the identifier From d7c80fbf28a2667f4f200463ae6048de7993f18c Mon Sep 17 00:00:00 2001 From: Flamefire Date: Sun, 27 Apr 2025 17:45:14 +0200 Subject: [PATCH 109/126] GHA: Fix ownership of repo in container Avoid: > fatal: detected dubious ownership in repository at '/__w/turtle/turtle' by adding that path to the git `safe.path`. This is caused by the command(s) running inside the container but the folder being created outside the container so the owner inside the container is not what is expected by git. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc62ba3..9c8331f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,7 @@ jobs: apt-get -o Acquire::Retries=$NET_RETRY_COUNT update apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ git cmake git config --global pack.threads 0 + git config --global --add safe.directory "$GITHUB_WORKSPACE" # Avoid ownership issues of repo in container - uses: actions/checkout@v4 with: From 3555de3c89e8139de7cfc0c37760c3cf1de722b4 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 29 Apr 2025 13:27:02 +0200 Subject: [PATCH 110/126] Appveyor: Update Boost version for VS 2019 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index faa42f7..e2d967d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,7 +29,7 @@ environment: BOOST: 1_65_1 CMAKE: true - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - BOOST: 1_77_0 + BOOST: 1_83_0 CMAKE: true install: From 2e2a6525babca91aea04f790f5f4960d0e78af01 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Tue, 29 Apr 2025 18:05:41 +0200 Subject: [PATCH 111/126] Appveyor: Add VS 2022 builds --- appveyor.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index e2d967d..3e0efb4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,8 +2,8 @@ # subject to the Boost Software License, Version 1.0. (See accompanying # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # -# Copyright Mathieu Champlon 2015. -# Copyright Alexander Grund 2020. +# Copyright 2015 Mathieu Champlon +# Copyright 2020-2025 Alexander Grund skip_branch_with_pr: true @@ -19,18 +19,30 @@ environment: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 BOOST: 1_65_1 TOOLSET: msvc-14.1 - CXX_STANDARD: 14 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - BOOST: 1_67_0 + BOOST: 1_69_0 TOOLSET: msvc-14.1 - CXX_STANDARD: 14 - # CXX_STANDARD: 17 + CXX_STANDARD: 14,17 + + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + BOOST: 1_83_0 + TOOLSET: msvc-14.3 + CXX_STANDARD: 14,17,20 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + BOOST: 1_86_0 + TOOLSET: msvc-14.3 + CXX_STANDARD: 14,17,20 + + # CMake builds - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 BOOST: 1_65_1 CMAKE: true - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 BOOST: 1_83_0 CMAKE: true + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + BOOST: 1_86_0 + CMAKE: true install: - appveyor-retry powershell Invoke-WebRequest http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip -OutFile docbook-xml.zip @@ -55,7 +67,7 @@ build_script: - cd %BOOST_ROOT% - call bootstrap.bat - cd %APPVEYOR_BUILD_FOLDER% - - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxflags=/std:c++%CXX_STANDARD% + - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxstd=%CXX_STANDARD% - set BUILD_ARGS=address-model=32,64 variant=debug,release - call scripts\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 From f18da714f26bd9f8cc2490dd48395952ca35fd05 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 30 Apr 2025 09:27:07 +0200 Subject: [PATCH 112/126] Make inspect target explicit --- scripts/build.sh | 4 ++++ test/Jamfile.jam | 10 ++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 3261c23..2b69951 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,6 +1,7 @@ #!/bin/sh # Copyright (C) 2015 Mathieu Champlon +# Copyright (C) 2025 Alexander Grund # # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) @@ -18,3 +19,6 @@ scripts/build_doc.sh "$@" cd "$BOOST_ROOT" ./b2 "$PROJECT_DIR/doc//mock_examples" -q "$@" + +cd "$BOOST_ROOT" +./b2 "$PROJECT_DIR/test//inspect" -q "$@" diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 4575a0e..4cbca98 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -1,4 +1,5 @@ -# Copyright Mathieu Champlon 2012 +# Copyright 2012 Mathieu Champlon +# Copyright 2025 Alexander Grund # # Distributed under the Boost Software License version 1.0. (See # accompanying file LICENSE_1_0.txt or copy at @@ -15,11 +16,8 @@ project path-constant parent : .. ; -alias mock_inspect : - [ run /boost/tools/inspect//inspect/release - : $(parent) -text -brief : : : inspect - ] -; +run /boost/tools/inspect//inspect/release : $(parent) -text -brief : : always_show_run_output : inspect ; +explicit inspect ; rule run-test ( name ) { From c34cbb56ab45c3f82e6062b4d7d483bb9e0c8116 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 30 Apr 2025 12:32:02 +0200 Subject: [PATCH 113/126] Add MOCK_CXX_VERSION macro --- include/turtle/config.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 111d09d..8e42051 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2009 +// Copyright 2020-2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -30,4 +31,17 @@ # endif #endif +#if BOOST_VERSION >= 107700 +# define MOCK_CXX_VERSION BOOST_CXX_VERSION +#elif defined(_MSC_VER) +# ifdef _MSVC_LANG +# define MOCK_CXX_VERSION _MSVC_LANG +# elif defined(_HAS_CXX17) +# define MOCK_CXX_VERSION 201703L +# endif +#endif +#ifndef MOCK_CXX_VERSION +# define MOCK_CXX_VERSION __cplusplus +#endif + #endif // MOCK_CONFIG_HPP_INCLUDED From 78a4fbe129d571849a68c59b2843b86a5afd91d3 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 30 Apr 2025 12:36:56 +0200 Subject: [PATCH 114/126] Fix test in C++17 and up --- test/detail/test_is_functor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/detail/test_is_functor.cpp b/test/detail/test_is_functor.cpp index 1a50e29..0a2f5b2 100644 --- a/test/detail/test_is_functor.cpp +++ b/test/detail/test_is_functor.cpp @@ -67,6 +67,8 @@ BOOST_AUTO_TEST_CASE(function_pointer_is_functor) is_not_functor(&f2); } +// ptr_fun, bin1st is removed in C++17 +#if MOCK_CXX_VERSION < 201703L BOOST_AUTO_TEST_CASE(std_ptr_fun_is_functor) { is_functor(std::ptr_fun(&f1)); @@ -77,6 +79,7 @@ BOOST_AUTO_TEST_CASE(std_bind_first_is_functor) { is_functor(std::bind1st(std::ptr_fun(&f2), "")); } +#endif BOOST_AUTO_TEST_CASE(bind_is_functor) { From a334c4fb3b0221f871b44d664fafcd9dff64edfa Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 30 Apr 2025 15:40:17 +0200 Subject: [PATCH 115/126] Split appveyor jobs to fit time limit --- appveyor.yml | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3e0efb4..e36753b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,6 +12,10 @@ branches: - main environment: + global: + ADDRESS_MODEL: 32,64 + VARIANT: debug,release + matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 BOOST: 1_65_1 @@ -23,15 +27,24 @@ environment: BOOST: 1_69_0 TOOLSET: msvc-14.1 CXX_STANDARD: 14,17 - + ADDRESS_MODEL: 64 + VARIANT: debug - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 BOOST: 1_83_0 TOOLSET: msvc-14.3 CXX_STANDARD: 14,17,20 + ADDRESS_MODEL: 64 + VARIANT: debug - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 BOOST: 1_86_0 TOOLSET: msvc-14.3 - CXX_STANDARD: 14,17,20 + CXX_STANDARD: 14,17 + ADDRESS_MODEL: 64 + VARIANT: debug + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + BOOST: 1_86_0 + TOOLSET: msvc-14.3 + CXX_STANDARD: 20 # CMake builds - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 @@ -68,7 +81,7 @@ build_script: - call bootstrap.bat - cd %APPVEYOR_BUILD_FOLDER% - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxstd=%CXX_STANDARD% - - set BUILD_ARGS=address-model=32,64 variant=debug,release + - set BUILD_ARGS=address-model=%ADDRESS_MODEL% variant=%VARIANT% - call scripts\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 for: From 1d2fb3f3dfd4b3c30a11996d748a1db67f106dc2 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 1 Jun 2025 12:51:43 +0200 Subject: [PATCH 116/126] GHA: Add Windows builds --- .github/workflows/ci.yml | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c8331f..67c73b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022 Alexander Grund +# Copyright 2022-2025 Alexander Grund # # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) @@ -32,7 +32,7 @@ jobs: with: clangFormatVersion: 10 - posix: + Build: defaults: run: shell: bash @@ -53,6 +53,11 @@ jobs: - { compiler: clang-18, cxxstd: '14,17,20', boostBranch: boost-1.86.0, os: ubuntu-24.04 } - { compiler: clang-18, cxxstd: '14,17,20', boostBranch: master, os: ubuntu-24.04 } + # Windows + - { toolset: msvc-14.2, os: windows-2019, cxxstd: 14, generator: 'Visual Studio 16 2019' } + - { toolset: gcc, os: windows-2019, cxxstd: 17, generator: 'Visual Studio 16 2019' } + - { toolset: msvc-14.3, os: windows-2022, cxxstd: 20, generator: 'Visual Studio 17 2022' } + - { name: Collect coverage, coverage: yes, compiler: gcc-8, cxxstd: '14', boostBranch: boost-1.86.0, os: ubuntu-latest, container: 'ubuntu:20.04' } @@ -99,6 +104,8 @@ jobs: - name: Install packages and setup env run: | + B2_TOOLSET=${{matrix.toolset}} + if [[ ! "${{matrix.os}}" == "windows-"* ]]; then sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update CXX=${{matrix.compiler}} CXX="${CXX/gcc-/g++-}" @@ -108,19 +115,23 @@ jobs: CXX="ccache ${CXX/clang-/clang++-}" echo "CXX=$CXX" >> $GITHUB_ENV echo "CC=${{matrix.compiler}}" >> $GITHUB_ENV - if [[ "$CXX" =~ clang ]]; then - B2_TOOLSET=clang - else - B2_TOOLSET=gcc + if [[ -z $B2_TOOLSET ]]; then + if [[ "$CXX" =~ clang ]]; then + B2_TOOLSET=clang + else + B2_TOOLSET=gcc + fi fi - echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV - echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam - # Move the Boost root to a sibling folder - mv boost-root .. - echo "BOOST_ROOT=${{github.workspace}}/../boost-root" >> $GITHUB_ENV + [[ -z $CXX ]] || echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam + fi + echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV + # Move the Boost root to a sibling folder + mv boost-root .. + echo "BOOST_ROOT=${{github.workspace}}/../boost-root" >> $GITHUB_ENV - name: Cache ccache uses: hendrikmuhs/ccache-action@v1 + if: startsWith(matrix.os, 'ubuntu') with: key: ${{matrix.os}}-${{matrix.compiler}}-${{matrix.boostBranch}} @@ -165,7 +176,12 @@ jobs: run: | mkdir build && cd build CXX_STANDARD="${{matrix.cxxstd}}" - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-std=c++${CXX_STANDARD##*,}" -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_VERBOSE_MAKEFILE=ON + if [[ "${{matrix.os}}" == "windows-"* ]]; then + compiler_launcher_arg= + else + compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache + fi + cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON cmake --build . --config Debug -- -j3 ctest --output-on-failure --build-config Debug -j3 From 29c7e2d067c8a4b53dab47a823373acaa714fe5e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 1 Jun 2025 14:05:03 +0200 Subject: [PATCH 117/126] GHA: Separate out doc and inspect builds Don't run doc build on Windows due to missing dependencies. Use separate steps for different builds to easier differentiate them. --- .github/workflows/ci.yml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67c73b5..04a50c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -125,6 +125,13 @@ jobs: [[ -z $CXX ]] || echo "using $B2_TOOLSET : : $CXX ;" > ~/user-config.jam fi echo "B2_TOOLSET=$B2_TOOLSET" >> $GITHUB_ENV + + B2_FLAGS+=" --toolset=$B2_TOOLSET cxxstd=${{matrix.cxxstd}}" + if [[ "${{matrix.coverage}}" == "yes" ]]; then + B2_FLAGS+=" cxxflags=--coverage linkflags=--coverage" + fi + echo "B2_FLAGS=$B2_FLAGS" >> $GITHUB_ENV + # Move the Boost root to a sibling folder mv boost-root .. echo "BOOST_ROOT=${{github.workspace}}/../boost-root" >> $GITHUB_ENV @@ -141,11 +148,17 @@ jobs: - name: Boost build run: | - B2_FLAGS="cxxstd=${{matrix.cxxstd}}" - if [[ "${{matrix.coverage}}" == "yes" ]]; then - B2_FLAGS="$B2_FLAGS cxxflags=--coverage linkflags=--coverage" - fi - scripts/build.sh --toolset=$B2_TOOLSET $B2_FLAGS -j3 + ./b2 "$GITHUB_WORKSPACE/test" -q $B2_FLAGS -j3 + ./b2 "$GITHUB_WORKSPACE/doc//mock_examples" -q $B2_FLAGS "$@" + working-directory: ${{env.BOOST_ROOT}} + + - name: Run inspect check + run: ./b2 "$GITHUB_WORKSPACE/test//inspect" -q $B2_FLAGS + working-directory: ${{env.BOOST_ROOT}} + + - name: Build doc + if: startsWith(matrix.os, 'ubuntu') + run: scripts/build_doc.sh $B2_FLAGS -j3 - name: Collect coverage if: matrix.coverage From 0d4a9f1e33cf8804e5a5d99bb962a026bfedc885 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 1 Jun 2025 14:26:16 +0200 Subject: [PATCH 118/126] Remove std::bind1st test for C++17 --- doc/example/reference.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/example/reference.cpp b/doc/example/reference.cpp index 2b19a4e..33d71b5 100644 --- a/doc/example/reference.cpp +++ b/doc/example/reference.cpp @@ -544,6 +544,7 @@ bool custom_constraint(int expected, int actual) return expected == actual; } +#if MOCK_CXX_VERSION < 201703L BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_a_standard_library_functor) { mock_class c; @@ -551,6 +552,7 @@ BOOST_AUTO_TEST_CASE(demonstrates_adding_a_custom_constraint_with_a_standard_lib std::bind1st(std::ptr_fun(&custom_constraint), 42)); // std::ptr_fun creates an std::unary_function c.method(42); } +#endif //] } // namespace constraints_example_3 From 6683b829c3fdcf56534975553b1913b35bc2af25 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 1 Jun 2025 14:55:30 +0200 Subject: [PATCH 119/126] CI: Add Boost debug output to CMake search --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04a50c1..a9c1b5a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -194,7 +194,7 @@ jobs: else compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache fi - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON + cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON cmake --build . --config Debug -- -j3 ctest --output-on-failure --build-config Debug -j3 From 66bfbe115cb9ada3d14265490e3cf71510337981 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 9 Jun 2025 12:09:05 +0200 Subject: [PATCH 120/126] Set stage dir as boost root --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a9c1b5a..762b8e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -194,7 +194,7 @@ jobs: else compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache fi - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON + cmake .. -DCMAKE_BUILD_TYPE=Debug -DBoost_ROOT="$BOOST_ROOT/stage" -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON cmake --build . --config Debug -- -j3 ctest --output-on-failure --build-config Debug -j3 From 3980cc97e138236814964dd12cd242f9ce29b3ff Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 9 Jun 2025 14:17:49 +0200 Subject: [PATCH 121/126] Fix CMake parallel flag for MSVC --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 762b8e6..c283a79 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -195,8 +195,8 @@ jobs: compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache fi cmake .. -DCMAKE_BUILD_TYPE=Debug -DBoost_ROOT="$BOOST_ROOT/stage" -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON - cmake --build . --config Debug -- -j3 - ctest --output-on-failure --build-config Debug -j3 + cmake --build . --config Debug --parallel 3 + ctest --output-on-failure --build-config Debug --parallel 3 - name: Cleanup Boost folder to reduce cache usage if: ${{ always() }} From d8809dca2ae7d96177cf2717cd125bfaa2d371ec Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 9 Jun 2025 12:19:12 +0200 Subject: [PATCH 122/126] Improve check for std::uncaught_exceptions GCC 8 on MinGW still warns about that. Check the version of the feature macro and add parens to ensure correct evaluation. --- include/turtle/config.hpp | 5 +++-- include/turtle/detail/function_impl.hpp | 9 +++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/turtle/config.hpp b/include/turtle/config.hpp index 8e42051..9395005 100644 --- a/include/turtle/config.hpp +++ b/include/turtle/config.hpp @@ -25,8 +25,9 @@ # endif #endif -#if defined(__cpp_lib_uncaught_exceptions) || defined(_MSC_VER) && (_MSC_VER >= 1900) -# ifndef MOCK_NO_UNCAUGHT_EXCEPTIONS +#ifndef MOCK_NO_UNCAUGHT_EXCEPTIONS +# if(defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411) || \ + (defined(_MSC_VER) && _MSC_VER >= 1900) # define MOCK_UNCAUGHT_EXCEPTIONS # endif #endif diff --git a/include/turtle/detail/function_impl.hpp b/include/turtle/detail/function_impl.hpp index e3524a2..c11f386 100644 --- a/include/turtle/detail/function_impl.hpp +++ b/include/turtle/detail/function_impl.hpp @@ -1,6 +1,7 @@ // http://turtle.sourceforge.net // -// Copyright Mathieu Champlon 2012 +// Copyright 2012 Mathieu Champlon +// Copyright 2025 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at @@ -80,7 +81,7 @@ namespace mock { namespace detail { typedef safe_error> error_type; public: - function_impl() : context_(0), valid_(true), exceptions_(exceptions()), mutex_(std::make_shared()) {} + function_impl() : exceptions_(exceptions()), mutex_(std::make_shared()) {} virtual ~function_impl() { if(valid_ && exceptions_ >= exceptions()) @@ -314,8 +315,8 @@ namespace mock { namespace detail { }; std::list expectations_; - context* context_; - mutable bool valid_; + context* context_ = nullptr; + mutable bool valid_ = true; const int exceptions_; const std::shared_ptr mutex_; }; From 2f02e9c8706f10023ad5b8d5bec887ea4c058ef7 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 9 Jun 2025 20:13:46 +0200 Subject: [PATCH 123/126] Use MinGW generator for GCC on Windows --- .github/workflows/ci.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c283a79..06769cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,7 +55,7 @@ jobs: # Windows - { toolset: msvc-14.2, os: windows-2019, cxxstd: 14, generator: 'Visual Studio 16 2019' } - - { toolset: gcc, os: windows-2019, cxxstd: 17, generator: 'Visual Studio 16 2019' } + - { toolset: gcc, os: windows-2019, cxxstd: 17, generator: 'MinGW Makefiles' } - { toolset: msvc-14.3, os: windows-2022, cxxstd: 20, generator: 'Visual Studio 17 2022' } - { name: Collect coverage, coverage: yes, @@ -190,13 +190,17 @@ jobs: mkdir build && cd build CXX_STANDARD="${{matrix.cxxstd}}" if [[ "${{matrix.os}}" == "windows-"* ]]; then - compiler_launcher_arg= + extra_args=() else - compiler_launcher_arg=-DCMAKE_CXX_COMPILER_LAUNCHER=ccache + extra_args=(-DCMAKE_CXX_COMPILER_LAUNCHER=ccache) fi - cmake .. -DCMAKE_BUILD_TYPE=Debug -DBoost_ROOT="$BOOST_ROOT/stage" -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" $compiler_launcher_arg -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON + if [[ -n "${{matrix.generator}}" ]]; then + extra_args+=(-G "${{matrix.generator}}") + fi + echo "Using extra args: ${extra_args[*]}" + cmake .. -DCMAKE_BUILD_TYPE=Debug -DBoost_ROOT="$BOOST_ROOT/stage" -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" "${extra_args[@]}" -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON cmake --build . --config Debug --parallel 3 - ctest --output-on-failure --build-config Debug --parallel 3 + ctest --output-on-failure --build-config Debug - name: Cleanup Boost folder to reduce cache usage if: ${{ always() }} From 68e66eefb44befe6d75b77e5fbf15195a0be626d Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 9 Jun 2025 14:17:35 +0200 Subject: [PATCH 124/126] Workaround file-too-big error on MinGW CI --- .github/workflows/ci.yml | 3 +++ test/Jamfile.jam | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 06769cd..818356f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -197,6 +197,9 @@ jobs: if [[ -n "${{matrix.generator}}" ]]; then extra_args+=(-G "${{matrix.generator}}") fi + if [[ "${{matrix.generator}}" == "MinGW"* ]]; then + extra_args+=(-DCMAKE_CXX_FLAGS="-Wa,-mbig-obj") + fi echo "Using extra args: ${extra_args[*]}" cmake .. -DCMAKE_BUILD_TYPE=Debug -DBoost_ROOT="$BOOST_ROOT/stage" -DCMAKE_CXX_STANDARD="${CXX_STANDARD##*,}" "${extra_args[@]}" -DCMAKE_VERBOSE_MAKEFILE=ON -DBoost_DEBUG=ON -DBoost_VERBOSE=ON cmake --build . --config Debug --parallel 3 diff --git a/test/Jamfile.jam b/test/Jamfile.jam index 4cbca98..31a4292 100644 --- a/test/Jamfile.jam +++ b/test/Jamfile.jam @@ -19,16 +19,24 @@ path-constant parent : .. ; run /boost/tools/inspect//inspect/release : $(parent) -text -brief : : always_show_run_output : inspect ; explicit inspect ; -rule run-test ( name ) +rule run-test ( name : options * ) { - run $(name) defined_1.cpp defined_2.cpp undefined.cpp /boost//unit_test_framework : : : : $(name)_ ; - run $(name) undefined.cpp /boost//unit_test_framework : : : MOCK_USE_CONVERSIONS : $(name)_use_conversions ; - run $(name) undefined.cpp /boost//unit_test_framework /boost//thread : : : MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE multi : $(name)_thread_safe ; + run $(name) defined_1.cpp defined_2.cpp undefined.cpp /boost//unit_test_framework : : : $(options) : $(name)_ ; + run $(name) undefined.cpp /boost//unit_test_framework : : : $(options) MOCK_USE_CONVERSIONS : $(name)_use_conversions ; + run $(name) undefined.cpp /boost//unit_test_framework /boost//thread : : : $(options) MOCK_THREAD_SAFE BOOST_THREAD_USES_MOVE multi : $(name)_thread_safe ; } rule run-tests { - for name in [ glob test_*.cpp detail/test_*.cpp ] { run-test $(name) ; } + for name in [ glob test_*.cpp ] { run-test $(name) ; } + # Avoid object file getting to big on MinGW + run-test detail/test_function.cpp : + gcc,windows:on + gcc,windows:space ; + run-test detail/test_invocation.cpp ; + run-test detail/test_is_functor.cpp ; + run-test detail/test_signature.cpp ; + run-test detail/test_type_name.cpp ; } alias mock_tests : [ run-tests ] ; From f974db3b08cabb42c522426ee731752084938874 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 13 Jun 2025 15:40:37 +0200 Subject: [PATCH 125/126] Increase verbosity of Boost tests in Appveyor --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index e36753b..c02348d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -82,6 +82,7 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - if NOT "%CXX_STANDARD%"=="" set CXX_FLAGS=cxxstd=%CXX_STANDARD% - set BUILD_ARGS=address-model=%ADDRESS_MODEL% variant=%VARIANT% + - set BOOST_TEST_LOG_LEVEL=all - call scripts\build.bat --toolset=%TOOLSET% %CXX_FLAGS% -j3 for: From bfd964961ea5006a8547e3653e9fa260ca2b470e Mon Sep 17 00:00:00 2001 From: Farmer_Markus <145863173+Farmer-Markus@users.noreply.github.com> Date: Fri, 15 Aug 2025 19:38:06 +0200 Subject: [PATCH 126/126] Added boost source build support --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d65ba4e..c232f78 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,11 @@ option(TURTLE_INSTALL "Enable to add install target" ${IS_ROOT_PROJECT}) if(WIN32 AND NOT DEFINED Boost_USE_STATIC_LIBS) set(Boost_USE_STATIC_LIBS ON) endif() -find_package(Boost 1.58 REQUIRED) + +# Allows boost to be build by parent project +if(NOT TARGET Boost::boost) + find_package(Boost 1.58 REQUIRED) +endif() set(MOCK_VERSION "\"${PROJECT_VERSION}\"") set(_turtleVersionFile ${CMAKE_CURRENT_BINARY_DIR}/include/turtle/version.hpp)