rj_schema 0.2.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rj_schema/rapidjson/CMakeLists.txt +9 -4
- data/ext/rj_schema/rapidjson/RapidJSONConfig.cmake.in +10 -0
- data/ext/rj_schema/rapidjson/appveyor.yml +22 -9
- data/ext/rj_schema/rapidjson/bin/data/abcde.txt +1 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/address.json +139 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/allOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/anyOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/bin/unittestschema/oneOf_address.json +7 -0
- data/ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis +2 -2
- data/ext/rj_schema/rapidjson/doc/dom.md +1 -0
- data/ext/rj_schema/rapidjson/doc/dom.zh-cn.md +1 -0
- data/ext/rj_schema/rapidjson/doc/faq.md +3 -3
- data/ext/rj_schema/rapidjson/doc/faq.zh-cn.md +8 -8
- data/ext/rj_schema/rapidjson/doc/internals.md +1 -1
- data/ext/rj_schema/rapidjson/doc/internals.zh-cn.md +2 -2
- data/ext/rj_schema/rapidjson/doc/pointer.zh-cn.md +1 -1
- data/ext/rj_schema/rapidjson/doc/sax.md +1 -1
- data/ext/rj_schema/rapidjson/doc/sax.zh-cn.md +2 -2
- data/ext/rj_schema/rapidjson/doc/stream.md +1 -1
- data/ext/rj_schema/rapidjson/doc/tutorial.md +1 -1
- data/ext/rj_schema/rapidjson/doc/tutorial.zh-cn.md +7 -6
- data/ext/rj_schema/rapidjson/example/CMakeLists.txt +1 -0
- data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +118 -0
- data/ext/rj_schema/rapidjson/example/sortkeys/sortkeys.cpp +62 -0
- data/ext/rj_schema/rapidjson/example/tutorial/tutorial.cpp +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +6 -6
- data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/document.h +124 -35
- data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +49 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +56 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +2 -2
- data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +2 -2
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +2 -2
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/clzll.h +71 -0
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +3 -17
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +20 -13
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +4 -3
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +50 -35
- data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +63 -5
- data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +2 -2
- data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +63 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +67 -53
- data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +318 -164
- data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +1 -1
- data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +10 -10
- data/ext/rj_schema/rapidjson/readme.md +51 -1
- data/ext/rj_schema/rapidjson/readme.zh-cn.md +2 -2
- data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/perftest.h +1 -1
- data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +2 -2
- data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +75 -1
- data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +1 -0
- data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/clzlltest.cpp +34 -0
- data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +19 -19
- data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +45 -2
- data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +10 -10
- data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +8 -8
- data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +157 -16
- data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +113 -75
- data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +2 -1
- data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +593 -78
- data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +5 -5
- data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +1 -1
- data/ext/rj_schema/rapidjson/test/unittest/unittest.h +4 -1
- data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +12 -12
- data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/BUILD.bazel +175 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/CMakeLists.txt +18 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/CONTRIBUTING.md +160 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/LICENSE +28 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/Makefile.am +14 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/README.md +16 -35
- data/ext/rj_schema/rapidjson/thirdparty/gtest/WORKSPACE +8 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/appveyor.yml +104 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/build-linux-autotools.sh +44 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/build-linux-bazel.sh +36 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/env-linux.sh +41 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/env-osx.sh +40 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/get-nprocessors.sh +48 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/install-linux.sh +49 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/install-osx.sh +39 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/log-config.sh +51 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/ci/travis.sh +44 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/configure.ac +16 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/CHANGES +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/CMakeLists.txt +72 -32
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/README.md +53 -42
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/cmake/gmock.pc.in +9 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/cmake/gmock_main.pc.in +9 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/configure.ac +4 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/CheatSheet.md +6 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/CookBook.md +117 -132
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/Documentation.md +7 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/ForDummies.md +20 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/FrequentlyAskedQuestions.md +1 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-actions.h +83 -26
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h +262 -68
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h.pump +45 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h +650 -366
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump +76 -20
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h +308 -229
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h.pump +18 -15
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h +87 -26
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump +33 -16
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-matchers.h +1209 -353
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-more-matchers.h +33 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-spec-builders.h +159 -88
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock.h +2 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-matchers.h +3 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h +16 -9
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-internal-utils.h +71 -8
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-port.h +7 -11
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.sln +14 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.vcxproj +69 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_config.props +2 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_main.vcxproj +69 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_test.vcxproj +83 -8
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.sln +14 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.vcxproj +63 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_main.vcxproj +63 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_test.vcxproj +76 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/scripts/fuse_gmock_files.py +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/scripts/generator/README +4 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/ast.py +3 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/src/gmock-cardinalities.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/src/gmock-internal-utils.cc +36 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/src/gmock-matchers.cc +210 -135
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/src/gmock-spec-builders.cc +108 -48
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/src/gmock.cc +23 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/BUILD.bazel +123 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-actions_test.cc +166 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-cardinalities_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-actions_test.cc +64 -62
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-function-mockers_test.cc +43 -18
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-internal-utils_test.cc +11 -9
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-matchers_test.cc +91 -36
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-internal-utils_test.cc +33 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-matchers_test.cc +1286 -167
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-more-actions_test.cc +85 -83
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-nice-strict_test.cc +102 -15
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock-spec-builders_test.cc +136 -9
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_link2_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.h +24 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test.py +8 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_.cc +20 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_golden.txt +8 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_stress_test.cc +3 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_test.cc +44 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/test/gmock_test_utils.py +5 -7
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/CMakeLists.txt +40 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/Makefile.am +60 -31
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/README.md +232 -171
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/cmake/gtest.pc.in +9 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/cmake/gtest_main.pc.in +10 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/cmake/internal_utils.cmake +54 -16
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/configure.ac +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/Pkgconfig.md +146 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/PumpManual.md +2 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/XcodeGuide.md +6 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/{AdvancedGuide.md → advanced.md} +260 -26
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/{FAQ.md → faq.md} +62 -57
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/{Primer.md → primer.md} +43 -9
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/{Samples.md → samples.md} +0 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-death-test.h +53 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-message.h +1 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h +30 -36
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h.pump +8 -17
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-printers.h +140 -51
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-spi.h +2 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-typed-test.h +4 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest.h +126 -30
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_pred_impl.h +6 -7
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_prod.h +8 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest-port.h +6 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest.h +4 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-death-test-internal.h +13 -57
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-filepath.h +1 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-internal.h +98 -59
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h +34 -41
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump +3 -10
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util.h +9 -17
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port-arch.h +8 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port.h +232 -99
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-string.h +3 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h +17 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h.pump +17 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.sln +55 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.vcxproj +149 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.sln +55 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.vcxproj +149 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main-md.vcxproj +154 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main-md.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main.vcxproj +162 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test-md.vcxproj +199 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test-md.vcxproj.filters +26 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test.vcxproj +191 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test.vcxproj.filters +26 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest-md.vcxproj +188 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest-md.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest.vcxproj +180 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest.vcxproj.filters +18 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/prime_tables.h +6 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample1.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample10_unittest.cc +0 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample1_unittest.cc +2 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample2_unittest.cc +2 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample3_unittest.cc +7 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample4_unittest.cc +5 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample5_unittest.cc +3 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample6_unittest.cc +2 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample7_unittest.cc +10 -22
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample8_unittest.cc +2 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/samples/sample9_unittest.cc +0 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/scripts/fuse_gtest_files.py +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/scripts/gen_gtest_pred_impl.py +10 -10
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/scripts/upload.py +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-all.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-death-test.cc +226 -32
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-filepath.cc +5 -7
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-internal-inl.h +21 -29
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-port.cc +85 -67
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-printers.cc +93 -8
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-test-part.cc +1 -9
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest-typed-test.cc +1 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest.cc +622 -164
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/src/gtest_main.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/BUILD.bazel +396 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-death-test_test.cc +12 -15
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-filepath_test.cc +2 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-listener_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-options_test.cc +6 -8
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test2_test.cc +1 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.cc +84 -29
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.h +1 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-port_test.cc +11 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-printers_test.cc +165 -63
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test2_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest-unittest-api_test.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_all_test.cc +13 -13
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_assert_by_exception_test.cc +119 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest.py +1 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest_.cc +1 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test.py +0 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test_.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test.py +1 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test_.cc +0 -8
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test.py +6 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test_.cc +0 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_environment_test.cc +0 -3
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest.py +20 -18
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest_.cc +0 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_help_test.py +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_json_outfiles_test.py +162 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_json_output_unittest.py +611 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_json_test_utils.py +60 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_list_tests_unittest.py +4 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_main_unittest.cc +2 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test.py +11 -7
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_.cc +17 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_golden_lin.txt +104 -66
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_pred_impl_unittest.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_prod_test.cc +2 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_repeat_test.cc +2 -19
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_stress_test.cc +0 -6
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_test_utils.py +12 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_testbridge_test.py +65 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_testbridge_test_.cc +44 -0
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_test.py +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test.py +4 -5
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test_.cc +2 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_unittest.cc +240 -149
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile1_test_.cc +0 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile2_test_.cc +0 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfiles_test.py +15 -7
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest.py +100 -30
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest_.cc +0 -2
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_test_utils.py +25 -23
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/production.cc +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/test/production.h +1 -1
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/xcode/Scripts/versiongenerate.py +4 -4
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/xcode/gtest.xcodeproj/project.pbxproj +47 -0
- data/ext/rj_schema/rapidjson/travis-doxygen.sh +13 -6
- data/ext/rj_schema/rj_schema.cpp +161 -17
- data/lib/rj_schema.rb +1 -1
- metadata +63 -58
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/DevGuide.md +0 -132
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/CheatSheet.md +0 -525
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/CookBook.md +0 -3250
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/Documentation.md +0 -11
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/ForDummies.md +0 -439
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_5/FrequentlyAskedQuestions.md +0 -624
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/CheatSheet.md +0 -534
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/CookBook.md +0 -3342
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/Documentation.md +0 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/ForDummies.md +0 -439
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_6/FrequentlyAskedQuestions.md +0 -628
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/CheatSheet.md +0 -556
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/CookBook.md +0 -3432
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/Documentation.md +0 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/ForDummies.md +0 -439
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googlemock/docs/v1_7/FrequentlyAskedQuestions.md +0 -628
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/DevGuide.md +0 -126
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/Documentation.md +0 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_AdvancedGuide.md +0 -2096
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_Documentation.md +0 -12
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_FAQ.md +0 -886
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_Primer.md +0 -497
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_PumpManual.md +0 -177
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_5_XcodeGuide.md +0 -93
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_AdvancedGuide.md +0 -2178
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Documentation.md +0 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_FAQ.md +0 -1038
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Primer.md +0 -501
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_PumpManual.md +0 -177
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_Samples.md +0 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_6_XcodeGuide.md +0 -93
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_AdvancedGuide.md +0 -2181
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Documentation.md +0 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_FAQ.md +0 -1082
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Primer.md +0 -501
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_PumpManual.md +0 -177
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_Samples.md +0 -14
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/docs/V1_7_XcodeGuide.md +0 -93
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest-md.sln +0 -45
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest-md.vcproj +0 -126
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest.sln +0 -45
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest.vcproj +0 -126
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_main-md.vcproj +0 -129
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_main.vcproj +0 -129
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_prod_test-md.vcproj +0 -164
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_prod_test.vcproj +0 -164
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_unittest-md.vcproj +0 -147
- data/ext/rj_schema/rapidjson/thirdparty/gtest/googletest/msvc/gtest_unittest.vcproj +0 -147
- data/ext/rj_schema/rapidjson/thirdparty/gtest/travis.sh +0 -15
@@ -1,556 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Defining a Mock Class #
|
4
|
-
|
5
|
-
## Mocking a Normal Class ##
|
6
|
-
|
7
|
-
Given
|
8
|
-
```
|
9
|
-
class Foo {
|
10
|
-
...
|
11
|
-
virtual ~Foo();
|
12
|
-
virtual int GetSize() const = 0;
|
13
|
-
virtual string Describe(const char* name) = 0;
|
14
|
-
virtual string Describe(int type) = 0;
|
15
|
-
virtual bool Process(Bar elem, int count) = 0;
|
16
|
-
};
|
17
|
-
```
|
18
|
-
(note that `~Foo()` **must** be virtual) we can define its mock as
|
19
|
-
```
|
20
|
-
#include "gmock/gmock.h"
|
21
|
-
|
22
|
-
class MockFoo : public Foo {
|
23
|
-
MOCK_CONST_METHOD0(GetSize, int());
|
24
|
-
MOCK_METHOD1(Describe, string(const char* name));
|
25
|
-
MOCK_METHOD1(Describe, string(int type));
|
26
|
-
MOCK_METHOD2(Process, bool(Bar elem, int count));
|
27
|
-
};
|
28
|
-
```
|
29
|
-
|
30
|
-
To create a "nice" mock object which ignores all uninteresting calls,
|
31
|
-
or a "strict" mock object, which treats them as failures:
|
32
|
-
```
|
33
|
-
NiceMock<MockFoo> nice_foo; // The type is a subclass of MockFoo.
|
34
|
-
StrictMock<MockFoo> strict_foo; // The type is a subclass of MockFoo.
|
35
|
-
```
|
36
|
-
|
37
|
-
## Mocking a Class Template ##
|
38
|
-
|
39
|
-
To mock
|
40
|
-
```
|
41
|
-
template <typename Elem>
|
42
|
-
class StackInterface {
|
43
|
-
public:
|
44
|
-
...
|
45
|
-
virtual ~StackInterface();
|
46
|
-
virtual int GetSize() const = 0;
|
47
|
-
virtual void Push(const Elem& x) = 0;
|
48
|
-
};
|
49
|
-
```
|
50
|
-
(note that `~StackInterface()` **must** be virtual) just append `_T` to the `MOCK_*` macros:
|
51
|
-
```
|
52
|
-
template <typename Elem>
|
53
|
-
class MockStack : public StackInterface<Elem> {
|
54
|
-
public:
|
55
|
-
...
|
56
|
-
MOCK_CONST_METHOD0_T(GetSize, int());
|
57
|
-
MOCK_METHOD1_T(Push, void(const Elem& x));
|
58
|
-
};
|
59
|
-
```
|
60
|
-
|
61
|
-
## Specifying Calling Conventions for Mock Functions ##
|
62
|
-
|
63
|
-
If your mock function doesn't use the default calling convention, you
|
64
|
-
can specify it by appending `_WITH_CALLTYPE` to any of the macros
|
65
|
-
described in the previous two sections and supplying the calling
|
66
|
-
convention as the first argument to the macro. For example,
|
67
|
-
```
|
68
|
-
MOCK_METHOD_1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int n));
|
69
|
-
MOCK_CONST_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, Bar, int(double x, double y));
|
70
|
-
```
|
71
|
-
where `STDMETHODCALLTYPE` is defined by `<objbase.h>` on Windows.
|
72
|
-
|
73
|
-
# Using Mocks in Tests #
|
74
|
-
|
75
|
-
The typical flow is:
|
76
|
-
1. Import the Google Mock names you need to use. All Google Mock names are in the `testing` namespace unless they are macros or otherwise noted.
|
77
|
-
1. Create the mock objects.
|
78
|
-
1. Optionally, set the default actions of the mock objects.
|
79
|
-
1. Set your expectations on the mock objects (How will they be called? What wil they do?).
|
80
|
-
1. Exercise code that uses the mock objects; if necessary, check the result using [Google Test](http://code.google.com/p/googletest/) assertions.
|
81
|
-
1. When a mock objects is destructed, Google Mock automatically verifies that all expectations on it have been satisfied.
|
82
|
-
|
83
|
-
Here is an example:
|
84
|
-
```
|
85
|
-
using ::testing::Return; // #1
|
86
|
-
|
87
|
-
TEST(BarTest, DoesThis) {
|
88
|
-
MockFoo foo; // #2
|
89
|
-
|
90
|
-
ON_CALL(foo, GetSize()) // #3
|
91
|
-
.WillByDefault(Return(1));
|
92
|
-
// ... other default actions ...
|
93
|
-
|
94
|
-
EXPECT_CALL(foo, Describe(5)) // #4
|
95
|
-
.Times(3)
|
96
|
-
.WillRepeatedly(Return("Category 5"));
|
97
|
-
// ... other expectations ...
|
98
|
-
|
99
|
-
EXPECT_EQ("good", MyProductionFunction(&foo)); // #5
|
100
|
-
} // #6
|
101
|
-
```
|
102
|
-
|
103
|
-
# Setting Default Actions #
|
104
|
-
|
105
|
-
Google Mock has a **built-in default action** for any function that
|
106
|
-
returns `void`, `bool`, a numeric value, or a pointer.
|
107
|
-
|
108
|
-
To customize the default action for functions with return type `T` globally:
|
109
|
-
```
|
110
|
-
using ::testing::DefaultValue;
|
111
|
-
|
112
|
-
DefaultValue<T>::Set(value); // Sets the default value to be returned.
|
113
|
-
// ... use the mocks ...
|
114
|
-
DefaultValue<T>::Clear(); // Resets the default value.
|
115
|
-
```
|
116
|
-
|
117
|
-
To customize the default action for a particular method, use `ON_CALL()`:
|
118
|
-
```
|
119
|
-
ON_CALL(mock_object, method(matchers))
|
120
|
-
.With(multi_argument_matcher) ?
|
121
|
-
.WillByDefault(action);
|
122
|
-
```
|
123
|
-
|
124
|
-
# Setting Expectations #
|
125
|
-
|
126
|
-
`EXPECT_CALL()` sets **expectations** on a mock method (How will it be
|
127
|
-
called? What will it do?):
|
128
|
-
```
|
129
|
-
EXPECT_CALL(mock_object, method(matchers))
|
130
|
-
.With(multi_argument_matcher) ?
|
131
|
-
.Times(cardinality) ?
|
132
|
-
.InSequence(sequences) *
|
133
|
-
.After(expectations) *
|
134
|
-
.WillOnce(action) *
|
135
|
-
.WillRepeatedly(action) ?
|
136
|
-
.RetiresOnSaturation(); ?
|
137
|
-
```
|
138
|
-
|
139
|
-
If `Times()` is omitted, the cardinality is assumed to be:
|
140
|
-
|
141
|
-
* `Times(1)` when there is neither `WillOnce()` nor `WillRepeatedly()`;
|
142
|
-
* `Times(n)` when there are `n WillOnce()`s but no `WillRepeatedly()`, where `n` >= 1; or
|
143
|
-
* `Times(AtLeast(n))` when there are `n WillOnce()`s and a `WillRepeatedly()`, where `n` >= 0.
|
144
|
-
|
145
|
-
A method with no `EXPECT_CALL()` is free to be invoked _any number of times_, and the default action will be taken each time.
|
146
|
-
|
147
|
-
# Matchers #
|
148
|
-
|
149
|
-
A **matcher** matches a _single_ argument. You can use it inside
|
150
|
-
`ON_CALL()` or `EXPECT_CALL()`, or use it to validate a value
|
151
|
-
directly:
|
152
|
-
|
153
|
-
| `EXPECT_THAT(value, matcher)` | Asserts that `value` matches `matcher`. |
|
154
|
-
|:------------------------------|:----------------------------------------|
|
155
|
-
| `ASSERT_THAT(value, matcher)` | The same as `EXPECT_THAT(value, matcher)`, except that it generates a **fatal** failure. |
|
156
|
-
|
157
|
-
Built-in matchers (where `argument` is the function argument) are
|
158
|
-
divided into several categories:
|
159
|
-
|
160
|
-
## Wildcard ##
|
161
|
-
|`_`|`argument` can be any value of the correct type.|
|
162
|
-
|:--|:-----------------------------------------------|
|
163
|
-
|`A<type>()` or `An<type>()`|`argument` can be any value of type `type`. |
|
164
|
-
|
165
|
-
## Generic Comparison ##
|
166
|
-
|
167
|
-
|`Eq(value)` or `value`|`argument == value`|
|
168
|
-
|:---------------------|:------------------|
|
169
|
-
|`Ge(value)` |`argument >= value`|
|
170
|
-
|`Gt(value)` |`argument > value` |
|
171
|
-
|`Le(value)` |`argument <= value`|
|
172
|
-
|`Lt(value)` |`argument < value` |
|
173
|
-
|`Ne(value)` |`argument != value`|
|
174
|
-
|`IsNull()` |`argument` is a `NULL` pointer (raw or smart).|
|
175
|
-
|`NotNull()` |`argument` is a non-null pointer (raw or smart).|
|
176
|
-
|`Ref(variable)` |`argument` is a reference to `variable`.|
|
177
|
-
|`TypedEq<type>(value)`|`argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded.|
|
178
|
-
|
179
|
-
Except `Ref()`, these matchers make a _copy_ of `value` in case it's
|
180
|
-
modified or destructed later. If the compiler complains that `value`
|
181
|
-
doesn't have a public copy constructor, try wrap it in `ByRef()`,
|
182
|
-
e.g. `Eq(ByRef(non_copyable_value))`. If you do that, make sure
|
183
|
-
`non_copyable_value` is not changed afterwards, or the meaning of your
|
184
|
-
matcher will be changed.
|
185
|
-
|
186
|
-
## Floating-Point Matchers ##
|
187
|
-
|
188
|
-
|`DoubleEq(a_double)`|`argument` is a `double` value approximately equal to `a_double`, treating two NaNs as unequal.|
|
189
|
-
|:-------------------|:----------------------------------------------------------------------------------------------|
|
190
|
-
|`FloatEq(a_float)` |`argument` is a `float` value approximately equal to `a_float`, treating two NaNs as unequal. |
|
191
|
-
|`NanSensitiveDoubleEq(a_double)`|`argument` is a `double` value approximately equal to `a_double`, treating two NaNs as equal. |
|
192
|
-
|`NanSensitiveFloatEq(a_float)`|`argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. |
|
193
|
-
|
194
|
-
The above matchers use ULP-based comparison (the same as used in
|
195
|
-
[Google Test](http://code.google.com/p/googletest/)). They
|
196
|
-
automatically pick a reasonable error bound based on the absolute
|
197
|
-
value of the expected value. `DoubleEq()` and `FloatEq()` conform to
|
198
|
-
the IEEE standard, which requires comparing two NaNs for equality to
|
199
|
-
return false. The `NanSensitive*` version instead treats two NaNs as
|
200
|
-
equal, which is often what a user wants.
|
201
|
-
|
202
|
-
|`DoubleNear(a_double, max_abs_error)`|`argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as unequal.|
|
203
|
-
|:------------------------------------|:--------------------------------------------------------------------------------------------------------------------|
|
204
|
-
|`FloatNear(a_float, max_abs_error)` |`argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as unequal. |
|
205
|
-
|`NanSensitiveDoubleNear(a_double, max_abs_error)`|`argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as equal. |
|
206
|
-
|`NanSensitiveFloatNear(a_float, max_abs_error)`|`argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as equal. |
|
207
|
-
|
208
|
-
## String Matchers ##
|
209
|
-
|
210
|
-
The `argument` can be either a C string or a C++ string object:
|
211
|
-
|
212
|
-
|`ContainsRegex(string)`|`argument` matches the given regular expression.|
|
213
|
-
|:----------------------|:-----------------------------------------------|
|
214
|
-
|`EndsWith(suffix)` |`argument` ends with string `suffix`. |
|
215
|
-
|`HasSubstr(string)` |`argument` contains `string` as a sub-string. |
|
216
|
-
|`MatchesRegex(string)` |`argument` matches the given regular expression with the match starting at the first character and ending at the last character.|
|
217
|
-
|`StartsWith(prefix)` |`argument` starts with string `prefix`. |
|
218
|
-
|`StrCaseEq(string)` |`argument` is equal to `string`, ignoring case. |
|
219
|
-
|`StrCaseNe(string)` |`argument` is not equal to `string`, ignoring case.|
|
220
|
-
|`StrEq(string)` |`argument` is equal to `string`. |
|
221
|
-
|`StrNe(string)` |`argument` is not equal to `string`. |
|
222
|
-
|
223
|
-
`ContainsRegex()` and `MatchesRegex()` use the regular expression
|
224
|
-
syntax defined
|
225
|
-
[here](http://code.google.com/p/googletest/wiki/AdvancedGuide#Regular_Expression_Syntax).
|
226
|
-
`StrCaseEq()`, `StrCaseNe()`, `StrEq()`, and `StrNe()` work for wide
|
227
|
-
strings as well.
|
228
|
-
|
229
|
-
## Container Matchers ##
|
230
|
-
|
231
|
-
Most STL-style containers support `==`, so you can use
|
232
|
-
`Eq(expected_container)` or simply `expected_container` to match a
|
233
|
-
container exactly. If you want to write the elements in-line,
|
234
|
-
match them more flexibly, or get more informative messages, you can use:
|
235
|
-
|
236
|
-
| `ContainerEq(container)` | The same as `Eq(container)` except that the failure message also includes which elements are in one container but not the other. |
|
237
|
-
|:-------------------------|:---------------------------------------------------------------------------------------------------------------------------------|
|
238
|
-
| `Contains(e)` | `argument` contains an element that matches `e`, which can be either a value or a matcher. |
|
239
|
-
| `Each(e)` | `argument` is a container where _every_ element matches `e`, which can be either a value or a matcher. |
|
240
|
-
| `ElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, where the i-th element matches `ei`, which can be a value or a matcher. 0 to 10 arguments are allowed. |
|
241
|
-
| `ElementsAreArray({ e0, e1, ..., en })`, `ElementsAreArray(array)`, or `ElementsAreArray(array, count)` | The same as `ElementsAre()` except that the expected element values/matchers come from an initializer list, vector, or C-style array. |
|
242
|
-
| `IsEmpty()` | `argument` is an empty container (`container.empty()`). |
|
243
|
-
| `Pointwise(m, container)` | `argument` contains the same number of elements as in `container`, and for all i, (the i-th element in `argument`, the i-th element in `container`) match `m`, which is a matcher on 2-tuples. E.g. `Pointwise(Le(), upper_bounds)` verifies that each element in `argument` doesn't exceed the corresponding element in `upper_bounds`. See more detail below. |
|
244
|
-
| `SizeIs(m)` | `argument` is a container whose size matches `m`. E.g. `SizeIs(2)` or `SizeIs(Lt(2))`. |
|
245
|
-
| `UnorderedElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, and under some permutation each element matches an `ei` (for a different `i`), which can be a value or a matcher. 0 to 10 arguments are allowed. |
|
246
|
-
| `UnorderedElementsAreArray({ e0, e1, ..., en })`, `UnorderedElementsAreArray(array)`, or `UnorderedElementsAreArray(array, count)` | The same as `UnorderedElementsAre()` except that the expected element values/matchers come from an initializer list, vector, or C-style array. |
|
247
|
-
| `WhenSorted(m)` | When `argument` is sorted using the `<` operator, it matches container matcher `m`. E.g. `WhenSorted(UnorderedElementsAre(1, 2, 3))` verifies that `argument` contains elements `1`, `2`, and `3`, ignoring order. |
|
248
|
-
| `WhenSortedBy(comparator, m)` | The same as `WhenSorted(m)`, except that the given comparator instead of `<` is used to sort `argument`. E.g. `WhenSortedBy(std::greater<int>(), ElementsAre(3, 2, 1))`. |
|
249
|
-
|
250
|
-
Notes:
|
251
|
-
|
252
|
-
* These matchers can also match:
|
253
|
-
1. a native array passed by reference (e.g. in `Foo(const int (&a)[5])`), and
|
254
|
-
1. an array passed as a pointer and a count (e.g. in `Bar(const T* buffer, int len)` -- see [Multi-argument Matchers](#Multiargument_Matchers.md)).
|
255
|
-
* The array being matched may be multi-dimensional (i.e. its elements can be arrays).
|
256
|
-
* `m` in `Pointwise(m, ...)` should be a matcher for `std::tr1::tuple<T, U>` where `T` and `U` are the element type of the actual container and the expected container, respectively. For example, to compare two `Foo` containers where `Foo` doesn't support `operator==` but has an `Equals()` method, one might write:
|
257
|
-
|
258
|
-
```
|
259
|
-
using ::std::tr1::get;
|
260
|
-
MATCHER(FooEq, "") {
|
261
|
-
return get<0>(arg).Equals(get<1>(arg));
|
262
|
-
}
|
263
|
-
...
|
264
|
-
EXPECT_THAT(actual_foos, Pointwise(FooEq(), expected_foos));
|
265
|
-
```
|
266
|
-
|
267
|
-
## Member Matchers ##
|
268
|
-
|
269
|
-
|`Field(&class::field, m)`|`argument.field` (or `argument->field` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_.|
|
270
|
-
|:------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------|
|
271
|
-
|`Key(e)` |`argument.first` matches `e`, which can be either a value or a matcher. E.g. `Contains(Key(Le(5)))` can verify that a `map` contains a key `<= 5`.|
|
272
|
-
|`Pair(m1, m2)` |`argument` is an `std::pair` whose `first` field matches `m1` and `second` field matches `m2`. |
|
273
|
-
|`Property(&class::property, m)`|`argument.property()` (or `argument->property()` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_.|
|
274
|
-
|
275
|
-
## Matching the Result of a Function or Functor ##
|
276
|
-
|
277
|
-
|`ResultOf(f, m)`|`f(argument)` matches matcher `m`, where `f` is a function or functor.|
|
278
|
-
|:---------------|:---------------------------------------------------------------------|
|
279
|
-
|
280
|
-
## Pointer Matchers ##
|
281
|
-
|
282
|
-
|`Pointee(m)`|`argument` (either a smart pointer or a raw pointer) points to a value that matches matcher `m`.|
|
283
|
-
|:-----------|:-----------------------------------------------------------------------------------------------|
|
284
|
-
|
285
|
-
## Multiargument Matchers ##
|
286
|
-
|
287
|
-
Technically, all matchers match a _single_ value. A "multi-argument"
|
288
|
-
matcher is just one that matches a _tuple_. The following matchers can
|
289
|
-
be used to match a tuple `(x, y)`:
|
290
|
-
|
291
|
-
|`Eq()`|`x == y`|
|
292
|
-
|:-----|:-------|
|
293
|
-
|`Ge()`|`x >= y`|
|
294
|
-
|`Gt()`|`x > y` |
|
295
|
-
|`Le()`|`x <= y`|
|
296
|
-
|`Lt()`|`x < y` |
|
297
|
-
|`Ne()`|`x != y`|
|
298
|
-
|
299
|
-
You can use the following selectors to pick a subset of the arguments
|
300
|
-
(or reorder them) to participate in the matching:
|
301
|
-
|
302
|
-
|`AllArgs(m)`|Equivalent to `m`. Useful as syntactic sugar in `.With(AllArgs(m))`.|
|
303
|
-
|:-----------|:-------------------------------------------------------------------|
|
304
|
-
|`Args<N1, N2, ..., Nk>(m)`|The tuple of the `k` selected (using 0-based indices) arguments matches `m`, e.g. `Args<1, 2>(Eq())`.|
|
305
|
-
|
306
|
-
## Composite Matchers ##
|
307
|
-
|
308
|
-
You can make a matcher from one or more other matchers:
|
309
|
-
|
310
|
-
|`AllOf(m1, m2, ..., mn)`|`argument` matches all of the matchers `m1` to `mn`.|
|
311
|
-
|:-----------------------|:---------------------------------------------------|
|
312
|
-
|`AnyOf(m1, m2, ..., mn)`|`argument` matches at least one of the matchers `m1` to `mn`.|
|
313
|
-
|`Not(m)` |`argument` doesn't match matcher `m`. |
|
314
|
-
|
315
|
-
## Adapters for Matchers ##
|
316
|
-
|
317
|
-
|`MatcherCast<T>(m)`|casts matcher `m` to type `Matcher<T>`.|
|
318
|
-
|:------------------|:--------------------------------------|
|
319
|
-
|`SafeMatcherCast<T>(m)`| [safely casts](http://code.google.com/p/googlemock/wiki/V1_7_CookBook#Casting_Matchers) matcher `m` to type `Matcher<T>`. |
|
320
|
-
|`Truly(predicate)` |`predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor.|
|
321
|
-
|
322
|
-
## Matchers as Predicates ##
|
323
|
-
|
324
|
-
|`Matches(m)(value)`|evaluates to `true` if `value` matches `m`. You can use `Matches(m)` alone as a unary functor.|
|
325
|
-
|:------------------|:---------------------------------------------------------------------------------------------|
|
326
|
-
|`ExplainMatchResult(m, value, result_listener)`|evaluates to `true` if `value` matches `m`, explaining the result to `result_listener`. |
|
327
|
-
|`Value(value, m)` |evaluates to `true` if `value` matches `m`. |
|
328
|
-
|
329
|
-
## Defining Matchers ##
|
330
|
-
|
331
|
-
| `MATCHER(IsEven, "") { return (arg % 2) == 0; }` | Defines a matcher `IsEven()` to match an even number. |
|
332
|
-
|:-------------------------------------------------|:------------------------------------------------------|
|
333
|
-
| `MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; }` | Defines a macher `IsDivisibleBy(n)` to match a number divisible by `n`. |
|
334
|
-
| `MATCHER_P2(IsBetween, a, b, std::string(negation ? "isn't" : "is") + " between " + PrintToString(a) + " and " + PrintToString(b)) { return a <= arg && arg <= b; }` | Defines a matcher `IsBetween(a, b)` to match a value in the range [`a`, `b`]. |
|
335
|
-
|
336
|
-
**Notes:**
|
337
|
-
|
338
|
-
1. The `MATCHER*` macros cannot be used inside a function or class.
|
339
|
-
1. The matcher body must be _purely functional_ (i.e. it cannot have any side effect, and the result must not depend on anything other than the value being matched and the matcher parameters).
|
340
|
-
1. You can use `PrintToString(x)` to convert a value `x` of any type to a string.
|
341
|
-
|
342
|
-
## Matchers as Test Assertions ##
|
343
|
-
|
344
|
-
|`ASSERT_THAT(expression, m)`|Generates a [fatal failure](http://code.google.com/p/googletest/wiki/Primer#Assertions) if the value of `expression` doesn't match matcher `m`.|
|
345
|
-
|:---------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------|
|
346
|
-
|`EXPECT_THAT(expression, m)`|Generates a non-fatal failure if the value of `expression` doesn't match matcher `m`. |
|
347
|
-
|
348
|
-
# Actions #
|
349
|
-
|
350
|
-
**Actions** specify what a mock function should do when invoked.
|
351
|
-
|
352
|
-
## Returning a Value ##
|
353
|
-
|
354
|
-
|`Return()`|Return from a `void` mock function.|
|
355
|
-
|:---------|:----------------------------------|
|
356
|
-
|`Return(value)`|Return `value`. If the type of `value` is different to the mock function's return type, `value` is converted to the latter type <i>at the time the expectation is set</i>, not when the action is executed.|
|
357
|
-
|`ReturnArg<N>()`|Return the `N`-th (0-based) argument.|
|
358
|
-
|`ReturnNew<T>(a1, ..., ak)`|Return `new T(a1, ..., ak)`; a different object is created each time.|
|
359
|
-
|`ReturnNull()`|Return a null pointer. |
|
360
|
-
|`ReturnPointee(ptr)`|Return the value pointed to by `ptr`.|
|
361
|
-
|`ReturnRef(variable)`|Return a reference to `variable`. |
|
362
|
-
|`ReturnRefOfCopy(value)`|Return a reference to a copy of `value`; the copy lives as long as the action.|
|
363
|
-
|
364
|
-
## Side Effects ##
|
365
|
-
|
366
|
-
|`Assign(&variable, value)`|Assign `value` to variable.|
|
367
|
-
|:-------------------------|:--------------------------|
|
368
|
-
| `DeleteArg<N>()` | Delete the `N`-th (0-based) argument, which must be a pointer. |
|
369
|
-
| `SaveArg<N>(pointer)` | Save the `N`-th (0-based) argument to `*pointer`. |
|
370
|
-
| `SaveArgPointee<N>(pointer)` | Save the value pointed to by the `N`-th (0-based) argument to `*pointer`. |
|
371
|
-
| `SetArgReferee<N>(value)` | Assign value to the variable referenced by the `N`-th (0-based) argument. |
|
372
|
-
|`SetArgPointee<N>(value)` |Assign `value` to the variable pointed by the `N`-th (0-based) argument.|
|
373
|
-
|`SetArgumentPointee<N>(value)`|Same as `SetArgPointee<N>(value)`. Deprecated. Will be removed in v1.7.0.|
|
374
|
-
|`SetArrayArgument<N>(first, last)`|Copies the elements in source range [`first`, `last`) to the array pointed to by the `N`-th (0-based) argument, which can be either a pointer or an iterator. The action does not take ownership of the elements in the source range.|
|
375
|
-
|`SetErrnoAndReturn(error, value)`|Set `errno` to `error` and return `value`.|
|
376
|
-
|`Throw(exception)` |Throws the given exception, which can be any copyable value. Available since v1.1.0.|
|
377
|
-
|
378
|
-
## Using a Function or a Functor as an Action ##
|
379
|
-
|
380
|
-
|`Invoke(f)`|Invoke `f` with the arguments passed to the mock function, where `f` can be a global/static function or a functor.|
|
381
|
-
|:----------|:-----------------------------------------------------------------------------------------------------------------|
|
382
|
-
|`Invoke(object_pointer, &class::method)`|Invoke the {method on the object with the arguments passed to the mock function. |
|
383
|
-
|`InvokeWithoutArgs(f)`|Invoke `f`, which can be a global/static function or a functor. `f` must take no arguments. |
|
384
|
-
|`InvokeWithoutArgs(object_pointer, &class::method)`|Invoke the method on the object, which takes no arguments. |
|
385
|
-
|`InvokeArgument<N>(arg1, arg2, ..., argk)`|Invoke the mock function's `N`-th (0-based) argument, which must be a function or a functor, with the `k` arguments.|
|
386
|
-
|
387
|
-
The return value of the invoked function is used as the return value
|
388
|
-
of the action.
|
389
|
-
|
390
|
-
When defining a function or functor to be used with `Invoke*()`, you can declare any unused parameters as `Unused`:
|
391
|
-
```
|
392
|
-
double Distance(Unused, double x, double y) { return sqrt(x*x + y*y); }
|
393
|
-
...
|
394
|
-
EXPECT_CALL(mock, Foo("Hi", _, _)).WillOnce(Invoke(Distance));
|
395
|
-
```
|
396
|
-
|
397
|
-
In `InvokeArgument<N>(...)`, if an argument needs to be passed by reference, wrap it inside `ByRef()`. For example,
|
398
|
-
```
|
399
|
-
InvokeArgument<2>(5, string("Hi"), ByRef(foo))
|
400
|
-
```
|
401
|
-
calls the mock function's #2 argument, passing to it `5` and `string("Hi")` by value, and `foo` by reference.
|
402
|
-
|
403
|
-
## Default Action ##
|
404
|
-
|
405
|
-
|`DoDefault()`|Do the default action (specified by `ON_CALL()` or the built-in one).|
|
406
|
-
|:------------|:--------------------------------------------------------------------|
|
407
|
-
|
408
|
-
**Note:** due to technical reasons, `DoDefault()` cannot be used inside a composite action - trying to do so will result in a run-time error.
|
409
|
-
|
410
|
-
## Composite Actions ##
|
411
|
-
|
412
|
-
|`DoAll(a1, a2, ..., an)`|Do all actions `a1` to `an` and return the result of `an` in each invocation. The first `n - 1` sub-actions must return void. |
|
413
|
-
|:-----------------------|:-----------------------------------------------------------------------------------------------------------------------------|
|
414
|
-
|`IgnoreResult(a)` |Perform action `a` and ignore its result. `a` must not return void. |
|
415
|
-
|`WithArg<N>(a)` |Pass the `N`-th (0-based) argument of the mock function to action `a` and perform it. |
|
416
|
-
|`WithArgs<N1, N2, ..., Nk>(a)`|Pass the selected (0-based) arguments of the mock function to action `a` and perform it. |
|
417
|
-
|`WithoutArgs(a)` |Perform action `a` without any arguments. |
|
418
|
-
|
419
|
-
## Defining Actions ##
|
420
|
-
|
421
|
-
| `ACTION(Sum) { return arg0 + arg1; }` | Defines an action `Sum()` to return the sum of the mock function's argument #0 and #1. |
|
422
|
-
|:--------------------------------------|:---------------------------------------------------------------------------------------|
|
423
|
-
| `ACTION_P(Plus, n) { return arg0 + n; }` | Defines an action `Plus(n)` to return the sum of the mock function's argument #0 and `n`. |
|
424
|
-
| `ACTION_Pk(Foo, p1, ..., pk) { statements; }` | Defines a parameterized action `Foo(p1, ..., pk)` to execute the given `statements`. |
|
425
|
-
|
426
|
-
The `ACTION*` macros cannot be used inside a function or class.
|
427
|
-
|
428
|
-
# Cardinalities #
|
429
|
-
|
430
|
-
These are used in `Times()` to specify how many times a mock function will be called:
|
431
|
-
|
432
|
-
|`AnyNumber()`|The function can be called any number of times.|
|
433
|
-
|:------------|:----------------------------------------------|
|
434
|
-
|`AtLeast(n)` |The call is expected at least `n` times. |
|
435
|
-
|`AtMost(n)` |The call is expected at most `n` times. |
|
436
|
-
|`Between(m, n)`|The call is expected between `m` and `n` (inclusive) times.|
|
437
|
-
|`Exactly(n) or n`|The call is expected exactly `n` times. In particular, the call should never happen when `n` is 0.|
|
438
|
-
|
439
|
-
# Expectation Order #
|
440
|
-
|
441
|
-
By default, the expectations can be matched in _any_ order. If some
|
442
|
-
or all expectations must be matched in a given order, there are two
|
443
|
-
ways to specify it. They can be used either independently or
|
444
|
-
together.
|
445
|
-
|
446
|
-
## The After Clause ##
|
447
|
-
|
448
|
-
```
|
449
|
-
using ::testing::Expectation;
|
450
|
-
...
|
451
|
-
Expectation init_x = EXPECT_CALL(foo, InitX());
|
452
|
-
Expectation init_y = EXPECT_CALL(foo, InitY());
|
453
|
-
EXPECT_CALL(foo, Bar())
|
454
|
-
.After(init_x, init_y);
|
455
|
-
```
|
456
|
-
says that `Bar()` can be called only after both `InitX()` and
|
457
|
-
`InitY()` have been called.
|
458
|
-
|
459
|
-
If you don't know how many pre-requisites an expectation has when you
|
460
|
-
write it, you can use an `ExpectationSet` to collect them:
|
461
|
-
|
462
|
-
```
|
463
|
-
using ::testing::ExpectationSet;
|
464
|
-
...
|
465
|
-
ExpectationSet all_inits;
|
466
|
-
for (int i = 0; i < element_count; i++) {
|
467
|
-
all_inits += EXPECT_CALL(foo, InitElement(i));
|
468
|
-
}
|
469
|
-
EXPECT_CALL(foo, Bar())
|
470
|
-
.After(all_inits);
|
471
|
-
```
|
472
|
-
says that `Bar()` can be called only after all elements have been
|
473
|
-
initialized (but we don't care about which elements get initialized
|
474
|
-
before the others).
|
475
|
-
|
476
|
-
Modifying an `ExpectationSet` after using it in an `.After()` doesn't
|
477
|
-
affect the meaning of the `.After()`.
|
478
|
-
|
479
|
-
## Sequences ##
|
480
|
-
|
481
|
-
When you have a long chain of sequential expectations, it's easier to
|
482
|
-
specify the order using **sequences**, which don't require you to given
|
483
|
-
each expectation in the chain a different name. <i>All expected<br>
|
484
|
-
calls</i> in the same sequence must occur in the order they are
|
485
|
-
specified.
|
486
|
-
|
487
|
-
```
|
488
|
-
using ::testing::Sequence;
|
489
|
-
Sequence s1, s2;
|
490
|
-
...
|
491
|
-
EXPECT_CALL(foo, Reset())
|
492
|
-
.InSequence(s1, s2)
|
493
|
-
.WillOnce(Return(true));
|
494
|
-
EXPECT_CALL(foo, GetSize())
|
495
|
-
.InSequence(s1)
|
496
|
-
.WillOnce(Return(1));
|
497
|
-
EXPECT_CALL(foo, Describe(A<const char*>()))
|
498
|
-
.InSequence(s2)
|
499
|
-
.WillOnce(Return("dummy"));
|
500
|
-
```
|
501
|
-
says that `Reset()` must be called before _both_ `GetSize()` _and_
|
502
|
-
`Describe()`, and the latter two can occur in any order.
|
503
|
-
|
504
|
-
To put many expectations in a sequence conveniently:
|
505
|
-
```
|
506
|
-
using ::testing::InSequence;
|
507
|
-
{
|
508
|
-
InSequence dummy;
|
509
|
-
|
510
|
-
EXPECT_CALL(...)...;
|
511
|
-
EXPECT_CALL(...)...;
|
512
|
-
...
|
513
|
-
EXPECT_CALL(...)...;
|
514
|
-
}
|
515
|
-
```
|
516
|
-
says that all expected calls in the scope of `dummy` must occur in
|
517
|
-
strict order. The name `dummy` is irrelevant.)
|
518
|
-
|
519
|
-
# Verifying and Resetting a Mock #
|
520
|
-
|
521
|
-
Google Mock will verify the expectations on a mock object when it is destructed, or you can do it earlier:
|
522
|
-
```
|
523
|
-
using ::testing::Mock;
|
524
|
-
...
|
525
|
-
// Verifies and removes the expectations on mock_obj;
|
526
|
-
// returns true iff successful.
|
527
|
-
Mock::VerifyAndClearExpectations(&mock_obj);
|
528
|
-
...
|
529
|
-
// Verifies and removes the expectations on mock_obj;
|
530
|
-
// also removes the default actions set by ON_CALL();
|
531
|
-
// returns true iff successful.
|
532
|
-
Mock::VerifyAndClear(&mock_obj);
|
533
|
-
```
|
534
|
-
|
535
|
-
You can also tell Google Mock that a mock object can be leaked and doesn't
|
536
|
-
need to be verified:
|
537
|
-
```
|
538
|
-
Mock::AllowLeak(&mock_obj);
|
539
|
-
```
|
540
|
-
|
541
|
-
# Mock Classes #
|
542
|
-
|
543
|
-
Google Mock defines a convenient mock class template
|
544
|
-
```
|
545
|
-
class MockFunction<R(A1, ..., An)> {
|
546
|
-
public:
|
547
|
-
MOCK_METHODn(Call, R(A1, ..., An));
|
548
|
-
};
|
549
|
-
```
|
550
|
-
See this [recipe](http://code.google.com/p/googlemock/wiki/V1_7_CookBook#Using_Check_Points) for one application of it.
|
551
|
-
|
552
|
-
# Flags #
|
553
|
-
|
554
|
-
| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. |
|
555
|
-
|:-------------------------------|:----------------------------------------------|
|
556
|
-
| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. |
|