ceedling 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +18 -14
- data/README.md +6 -4
- data/assets/project_as_gem.yml +1 -1
- data/assets/rakefile_as_gem.rb +2 -0
- data/assets/rakefile_with_guts.rb +3 -1
- data/ceedling.gemspec +1 -0
- data/examples/blinky/rakefile.rb +2 -2
- data/examples/temp_sensor/rakefile.rb +1 -1
- data/examples/temp_sensor/src/TemperatureFilter.c +1 -2
- data/examples/temp_sensor/test/TestTemperatureCalculator.c +1 -1
- data/examples/temp_sensor/test/TestTemperatureFilter.c +12 -2
- data/lib/ceedling.rb +94 -22
- data/lib/{build_invoker_utils.rb → ceedling/build_invoker_utils.rb} +27 -27
- data/lib/{cacheinator.rb → ceedling/cacheinator.rb} +42 -42
- data/lib/{cacheinator_helper.rb → ceedling/cacheinator_helper.rb} +12 -12
- data/lib/{cmock_builder.rb → ceedling/cmock_builder.rb} +15 -15
- data/lib/{configurator.rb → ceedling/configurator.rb} +333 -329
- data/lib/{configurator_builder.rb → ceedling/configurator_builder.rb} +437 -437
- data/lib/{configurator_plugins.rb → ceedling/configurator_plugins.rb} +124 -124
- data/lib/{configurator_setup.rb → ceedling/configurator_setup.rb} +124 -124
- data/lib/{configurator_validator.rb → ceedling/configurator_validator.rb} +184 -184
- data/lib/{constants.rb → ceedling/constants.rb} +20 -17
- data/lib/{defaults.rb → ceedling/defaults.rb} +19 -18
- data/lib/{dependinator.rb → ceedling/dependinator.rb} +92 -92
- data/lib/{erb_wrapper.rb → ceedling/erb_wrapper.rb} +8 -8
- data/lib/{file_finder.rb → ceedling/file_finder.rb} +132 -132
- data/lib/{file_finder_helper.rb → ceedling/file_finder_helper.rb} +54 -54
- data/lib/{file_path_utils.rb → ceedling/file_path_utils.rb} +189 -189
- data/lib/{file_system_utils.rb → ceedling/file_system_utils.rb} +69 -69
- data/lib/{file_system_wrapper.rb → ceedling/file_system_wrapper.rb} +9 -9
- data/lib/{file_wrapper.rb → ceedling/file_wrapper.rb} +79 -79
- data/lib/{flaginator.rb → ceedling/flaginator.rb} +54 -54
- data/lib/{generator.rb → ceedling/generator.rb} +164 -164
- data/lib/{generator_helper.rb → ceedling/generator_helper.rb} +40 -40
- data/lib/{generator_test_results.rb → ceedling/generator_test_results.rb} +86 -89
- data/lib/{generator_test_results_sanity_checker.rb → ceedling/generator_test_results_sanity_checker.rb} +64 -62
- data/lib/{generator_test_runner.rb → ceedling/generator_test_runner.rb} +63 -63
- data/lib/{loginator.rb → ceedling/loginator.rb} +31 -31
- data/lib/{makefile.rb → ceedling/makefile.rb} +0 -0
- data/lib/{objects.yml → ceedling/objects.yml} +0 -0
- data/lib/{par_map.rb → ceedling/par_map.rb} +0 -0
- data/lib/{plugin.rb → ceedling/plugin.rb} +80 -80
- data/lib/{plugin_builder.rb → ceedling/plugin_builder.rb} +52 -52
- data/lib/{plugin_manager.rb → ceedling/plugin_manager.rb} +107 -107
- data/lib/{plugin_manager_helper.rb → ceedling/plugin_manager_helper.rb} +19 -19
- data/lib/{plugin_reportinator.rb → ceedling/plugin_reportinator.rb} +2 -2
- data/lib/{plugin_reportinator_helper.rb → ceedling/plugin_reportinator_helper.rb} +1 -1
- data/lib/{preprocessinator.rb → ceedling/preprocessinator.rb} +43 -43
- data/lib/{preprocessinator_extractor.rb → ceedling/preprocessinator_extractor.rb} +30 -30
- data/lib/{preprocessinator_file_handler.rb → ceedling/preprocessinator_file_handler.rb} +21 -21
- data/lib/{preprocessinator_helper.rb → ceedling/preprocessinator_helper.rb} +46 -46
- data/lib/ceedling/preprocessinator_includes_handler.rb +82 -0
- data/lib/{project_config_manager.rb → ceedling/project_config_manager.rb} +38 -38
- data/lib/{project_file_loader.rb → ceedling/project_file_loader.rb} +64 -64
- data/lib/{rake_utils.rb → ceedling/rake_utils.rb} +17 -17
- data/lib/{rake_wrapper.rb → ceedling/rake_wrapper.rb} +33 -33
- data/lib/{rakefile.rb → ceedling/rakefile.rb} +78 -74
- data/lib/{release_invoker.rb → ceedling/release_invoker.rb} +58 -58
- data/lib/{release_invoker_helper.rb → ceedling/release_invoker_helper.rb} +16 -16
- data/lib/{reportinator.rb → ceedling/reportinator.rb} +9 -9
- data/lib/{rules_cmock.rake → ceedling/rules_cmock.rake} +9 -9
- data/lib/{rules_preprocess.rake → ceedling/rules_preprocess.rake} +26 -26
- data/lib/{rules_release.rake → ceedling/rules_release.rake} +79 -79
- data/lib/{rules_release_deep_dependencies.rake → ceedling/rules_release_deep_dependencies.rake} +15 -15
- data/lib/{rules_tests.rake → ceedling/rules_tests.rake} +59 -59
- data/lib/{rules_tests_deep_dependencies.rake → ceedling/rules_tests_deep_dependencies.rake} +15 -15
- data/lib/{setupinator.rb → ceedling/setupinator.rb} +51 -51
- data/lib/{stream_wrapper.rb → ceedling/stream_wrapper.rb} +20 -20
- data/lib/{streaminator.rb → ceedling/streaminator.rb} +40 -41
- data/lib/{streaminator_helper.rb → ceedling/streaminator_helper.rb} +15 -15
- data/lib/{system_utils.rb → ceedling/system_utils.rb} +0 -0
- data/lib/{system_wrapper.rb → ceedling/system_wrapper.rb} +76 -76
- data/lib/{target_loader.rb → ceedling/target_loader.rb} +0 -0
- data/lib/{task_invoker.rb → ceedling/task_invoker.rb} +89 -89
- data/lib/{tasks_base.rake → ceedling/tasks_base.rake} +104 -104
- data/lib/{tasks_filesystem.rake → ceedling/tasks_filesystem.rake} +91 -91
- data/lib/{tasks_release.rake → ceedling/tasks_release.rake} +28 -28
- data/lib/{tasks_release_deep_dependencies.rake → ceedling/tasks_release_deep_dependencies.rake} +9 -9
- data/lib/{tasks_tests.rake → ceedling/tasks_tests.rake} +52 -52
- data/lib/{tasks_tests_deep_dependencies.rake → ceedling/tasks_tests_deep_dependencies.rake} +9 -9
- data/lib/{tasks_vendor.rake → ceedling/tasks_vendor.rake} +36 -36
- data/lib/{test_includes_extractor.rb → ceedling/test_includes_extractor.rb} +81 -81
- data/lib/{test_invoker.rb → ceedling/test_invoker.rb} +97 -97
- data/lib/{test_invoker_helper.rb → ceedling/test_invoker_helper.rb} +28 -28
- data/lib/{tool_executor.rb → ceedling/tool_executor.rb} +215 -212
- data/lib/{tool_executor_helper.rb → ceedling/tool_executor_helper.rb} +115 -115
- data/lib/{verbosinator.rb → ceedling/verbosinator.rb} +10 -10
- data/lib/ceedling/version.rb +1 -1
- data/lib/{yaml_wrapper.rb → ceedling/yaml_wrapper.rb} +17 -16
- data/license.txt +31 -0
- data/plugins/bullseye/lib/bullseye.rb +2 -2
- data/plugins/gcov/gcov.rb +2 -2
- data/plugins/module_generator/lib/module_generator.rb +4 -3
- data/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb +8 -8
- data/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb +3 -3
- data/plugins/teamcity_tests_report/config/teamcity_tests_report.yml +4 -0
- data/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb +57 -0
- data/plugins/xml_tests_report/xml_tests_report.rb +4 -4
- data/release/version.info +1 -1
- data/spec/ceedling_spec.rb +154 -0
- data/spec/par_map_spec.rb +1 -1
- data/spec/preprocessinator_extractor_spec.rb +26 -27
- data/spec/preprocessinator_includes_handler_spec.rb +175 -0
- data/spec/spec_helper.rb +8 -27
- data/test_graveyard/integration/paths_test.rb +2 -2
- data/test_graveyard/unit/busted/configurator_builder_test.rb +2 -2
- data/test_graveyard/unit/busted/configurator_test.rb +1 -1
- data/test_graveyard/unit/busted/configurator_validator_test.rb +1 -1
- data/test_graveyard/unit/busted/dependinator_test.rb +1 -1
- data/test_graveyard/unit/busted/file_finder_helper_test.rb +1 -1
- data/test_graveyard/unit/busted/file_finder_test.rb +1 -1
- data/test_graveyard/unit/busted/file_path_utils_test.rb +1 -1
- data/test_graveyard/unit/busted/file_system_utils_test.rb +1 -1
- data/test_graveyard/unit/busted/generator_test.rb +1 -1
- data/test_graveyard/unit/busted/generator_test_results_test.rb +1 -1
- data/test_graveyard/unit/busted/generator_test_runner_test.rb +1 -1
- data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +1 -1
- data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +1 -1
- data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +1 -1
- data/test_graveyard/unit/busted/preprocessinator_test.rb +1 -1
- data/test_graveyard/unit/busted/project_file_loader_test.rb +1 -1
- data/test_graveyard/unit/busted/setupinator_test.rb +1 -1
- data/test_graveyard/unit/busted/streaminator_test.rb +2 -2
- data/test_graveyard/unit/busted/task_invoker_test.rb +1 -1
- data/test_graveyard/unit/busted/test_includes_extractor_test.rb +1 -1
- data/test_graveyard/unit/busted/test_invoker_helper_test.rb +1 -1
- data/test_graveyard/unit/busted/test_invoker_test.rb +1 -1
- data/test_graveyard/unit/busted/tool_executor_helper_test.rb +1 -1
- data/test_graveyard/unit/busted/tool_executor_test.rb +1 -1
- data/test_graveyard/unit/busted/verbosinator_test.rb +1 -1
- data/test_graveyard/unit/preprocessinator_extractor_test.rb +1 -1
- data/vendor/c_exception/Gemfile +4 -0
- data/vendor/c_exception/lib/CException.h +1 -1
- data/vendor/c_exception/test/TestException.c +25 -14
- data/vendor/c_exception/test/TestException_Runner.c +74 -57
- data/vendor/cmock/Gemfile +11 -0
- data/vendor/cmock/lib/cmock_generator.rb +13 -12
- data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +44 -0
- data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +74 -0
- data/vendor/cmock/lib/cmock_generator_utils.rb +67 -42
- data/vendor/cmock/src/cmock.c +20 -30
- data/vendor/cmock/src/cmock.h +1 -0
- data/vendor/cmock/src/cmock_internals.h +43 -0
- data/vendor/cmock/test/c/TestCMockC.c +79 -36
- data/vendor/cmock/test/c/TestCMockC_Runner.c +2 -0
- data/vendor/cmock/test/spec/cmock_file_writer_spec.rb +21 -1
- data/vendor/cmock/test/spec/cmock_generator_plugin_array_spec.rb +52 -0
- data/vendor/cmock/test/system/test_interactions/all_plugins_coexist.yml +2 -0
- data/vendor/cmock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml +235 -0
- data/vendor/cmock/test/test_helper.rb +10 -5
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +38 -0
- data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +116 -0
- data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +134 -0
- data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +58 -33
- data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
- data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
- data/vendor/cmock/vendor/c_exception/docs/license.txt +30 -0
- data/vendor/cmock/vendor/c_exception/docs/readme.txt +236 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.c +39 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.h +70 -0
- data/vendor/cmock/vendor/c_exception/makefile +24 -0
- data/vendor/cmock/vendor/c_exception/rakefile.rb +41 -0
- data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
- data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
- data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +27 -0
- data/vendor/cmock/vendor/c_exception/test/TestException.c +291 -0
- data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +62 -0
- data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +94 -0
- data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
- data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +202 -0
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +313 -0
- data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +23 -0
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +139 -0
- data/vendor/cmock/vendor/unity/docs/Unity Summary.odt +0 -0
- data/vendor/cmock/vendor/unity/docs/Unity Summary.pdf +0 -0
- data/vendor/cmock/vendor/unity/docs/Unity Summary.txt +217 -0
- data/vendor/cmock/vendor/unity/docs/license.txt +31 -0
- data/vendor/cmock/vendor/unity/examples/helper/UnityHelper.c +10 -0
- data/vendor/cmock/vendor/unity/examples/helper/UnityHelper.h +12 -0
- data/vendor/cmock/vendor/unity/examples/makefile +40 -0
- data/vendor/cmock/vendor/unity/examples/rakefile.rb +32 -0
- data/vendor/cmock/vendor/unity/examples/rakefile_helper.rb +256 -0
- data/vendor/cmock/vendor/unity/examples/readme.txt +18 -0
- data/vendor/cmock/vendor/unity/examples/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/src/ProductionCode2.c +9 -0
- data/vendor/cmock/vendor/unity/examples/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/test/TestProductionCode.c +62 -0
- data/vendor/cmock/vendor/unity/examples/test/TestProductionCode2.c +31 -0
- data/vendor/cmock/vendor/unity/examples/test/no_ruby/TestProductionCode2_Runner.c +46 -0
- data/vendor/cmock/vendor/unity/examples/test/no_ruby/TestProductionCode_Runner.c +50 -0
- data/vendor/{unity → cmock/vendor/unity}/extras/fixture/build/MakefileWorker.mk +0 -0
- data/vendor/{unity → cmock/vendor/unity}/extras/fixture/build/filterGcov.sh +0 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +37 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
- data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +381 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +81 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +44 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +16 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +21 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/testunity_fixture.c +39 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +321 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +40 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +56 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
- data/vendor/cmock/vendor/unity/makefile +35 -0
- data/vendor/cmock/vendor/unity/rakefile.rb +48 -0
- data/vendor/cmock/vendor/unity/rakefile_helper.rb +240 -0
- data/vendor/cmock/vendor/unity/release/build.info +2 -0
- data/vendor/cmock/vendor/unity/release/version.info +2 -0
- data/vendor/cmock/vendor/unity/src/unity.c +979 -0
- data/vendor/cmock/vendor/unity/src/unity.h +232 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +424 -0
- data/vendor/cmock/vendor/unity/targets/gcc.yml +43 -0
- data/vendor/cmock/vendor/unity/targets/gcc_64.yml +44 -0
- data/vendor/cmock/vendor/unity/targets/hitech_picc18.yml +101 -0
- data/vendor/cmock/vendor/unity/targets/iar_arm_v4.yml +89 -0
- data/vendor/cmock/vendor/unity/targets/iar_arm_v5.yml +79 -0
- data/vendor/cmock/vendor/unity/targets/iar_arm_v5_3.yml +79 -0
- data/vendor/cmock/vendor/unity/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -0
- data/vendor/cmock/vendor/unity/targets/iar_cortexm3_v5.yml +83 -0
- data/vendor/cmock/vendor/unity/targets/iar_msp430.yml +94 -0
- data/vendor/cmock/vendor/unity/targets/iar_sh2a_v6.yml +85 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +54 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +50 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +76 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +72 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +85 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +85 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +73 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +85 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +85 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +86 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +60 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +63 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +51 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +60 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +63 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +64 -0
- data/vendor/cmock/vendor/unity/test/test_generate_test_runner.rb +94 -0
- data/vendor/cmock/vendor/unity/test/testdata/mocksample.c +51 -0
- data/vendor/cmock/vendor/unity/test/testdata/sample.yml +9 -0
- data/vendor/cmock/vendor/unity/test/testdata/testsample.c +51 -0
- data/vendor/cmock/vendor/unity/test/testparameterized.c +101 -0
- data/vendor/cmock/vendor/unity/test/testunity.c +2024 -0
- data/vendor/unity/Gemfile +4 -0
- data/vendor/unity/auto/generate_test_runner.rb +6 -3
- data/vendor/unity/examples/makefile +2 -2
- data/vendor/unity/examples/rakefile.rb +13 -2
- data/vendor/unity/extras/fixture/rakefile.rb +1 -1
- data/vendor/unity/extras/fixture/rakefile_helper.rb +4 -3
- data/vendor/unity/extras/fixture/src/unity_fixture.c +15 -12
- data/vendor/unity/extras/fixture/src/unity_fixture.h +5 -5
- data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +1 -1
- data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +6 -3
- data/vendor/unity/makefile +2 -2
- data/vendor/unity/src/unity.c +183 -16
- data/vendor/unity/src/unity.h +18 -5
- data/vendor/unity/src/unity_internals.h +57 -23
- data/vendor/unity/targets/gcc_64.yml +45 -0
- data/vendor/unity/test/testunity.c +436 -28
- metadata +200 -137
- data/ceedling-0.13.0.rc4.gem +0 -0
- data/ceedling.sublime-project +0 -8
- data/ceedling.sublime-workspace +0 -365
- data/lib/preprocessinator_includes_handler.rb +0 -55
- data/tags +0 -977
- data/vendor/cmock/vendor/hardmock/CHANGES +0 -78
- data/vendor/cmock/vendor/hardmock/LICENSE +0 -7
- data/vendor/cmock/vendor/hardmock/README +0 -70
- data/vendor/cmock/vendor/hardmock/Rakefile +0 -8
- data/vendor/cmock/vendor/hardmock/config/environment.rb +0 -12
- data/vendor/cmock/vendor/hardmock/lib/assert_error.rb +0 -23
- data/vendor/cmock/vendor/hardmock/lib/extend_test_unit.rb +0 -14
- data/vendor/cmock/vendor/hardmock/lib/hardmock.rb +0 -86
- data/vendor/cmock/vendor/hardmock/lib/hardmock/errors.rb +0 -22
- data/vendor/cmock/vendor/hardmock/lib/hardmock/expectation.rb +0 -229
- data/vendor/cmock/vendor/hardmock/lib/hardmock/expectation_builder.rb +0 -9
- data/vendor/cmock/vendor/hardmock/lib/hardmock/expector.rb +0 -26
- data/vendor/cmock/vendor/hardmock/lib/hardmock/method_cleanout.rb +0 -33
- data/vendor/cmock/vendor/hardmock/lib/hardmock/mock.rb +0 -180
- data/vendor/cmock/vendor/hardmock/lib/hardmock/mock_control.rb +0 -53
- data/vendor/cmock/vendor/hardmock/lib/hardmock/stubbing.rb +0 -210
- data/vendor/cmock/vendor/hardmock/lib/hardmock/trapper.rb +0 -31
- data/vendor/cmock/vendor/hardmock/lib/hardmock/utils.rb +0 -9
- data/vendor/cmock/vendor/hardmock/lib/test_unit_before_after.rb +0 -169
- data/vendor/cmock/vendor/hardmock/rake_tasks/rdoc.rake +0 -19
- data/vendor/cmock/vendor/hardmock/rake_tasks/rdoc_options.rb +0 -4
- data/vendor/cmock/vendor/hardmock/rake_tasks/test.rake +0 -22
- data/vendor/cmock/vendor/hardmock/test/functional/assert_error_test.rb +0 -52
- data/vendor/cmock/vendor/hardmock/test/functional/auto_verify_test.rb +0 -178
- data/vendor/cmock/vendor/hardmock/test/functional/direct_mock_usage_test.rb +0 -396
- data/vendor/cmock/vendor/hardmock/test/functional/hardmock_test.rb +0 -434
- data/vendor/cmock/vendor/hardmock/test/functional/stubbing_test.rb +0 -479
- data/vendor/cmock/vendor/hardmock/test/test_helper.rb +0 -43
- data/vendor/cmock/vendor/hardmock/test/unit/expectation_builder_test.rb +0 -19
- data/vendor/cmock/vendor/hardmock/test/unit/expectation_test.rb +0 -372
- data/vendor/cmock/vendor/hardmock/test/unit/expector_test.rb +0 -57
- data/vendor/cmock/vendor/hardmock/test/unit/method_cleanout_test.rb +0 -36
- data/vendor/cmock/vendor/hardmock/test/unit/mock_control_test.rb +0 -175
- data/vendor/cmock/vendor/hardmock/test/unit/mock_test.rb +0 -279
- data/vendor/cmock/vendor/hardmock/test/unit/test_unit_before_after_test.rb +0 -452
- data/vendor/cmock/vendor/hardmock/test/unit/trapper_test.rb +0 -62
- data/vendor/cmock/vendor/hardmock/test/unit/verify_error_test.rb +0 -40
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
|
|
2
|
-
require 'hardmock'
|
|
3
|
-
|
|
4
|
-
class DirectMockUsageTest < Test::Unit::TestCase
|
|
5
|
-
|
|
6
|
-
def setup
|
|
7
|
-
@bird = Mock.new('bird')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def teardown
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
# TESTS
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
it "raises VerifyError if expected method not called" do
|
|
18
|
-
@bird.expects.flap_flap
|
|
19
|
-
|
|
20
|
-
err = assert_raise VerifyError do
|
|
21
|
-
@bird._verify
|
|
22
|
-
end
|
|
23
|
-
assert_match(/unmet expectations/i, err.message)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
should "not raise when expected calls are made in order" do
|
|
27
|
-
@bird.expects.flap_flap
|
|
28
|
-
@bird.expects.bang
|
|
29
|
-
@bird.expects.plop
|
|
30
|
-
|
|
31
|
-
@bird.flap_flap
|
|
32
|
-
@bird.bang
|
|
33
|
-
@bird.plop
|
|
34
|
-
|
|
35
|
-
@bird._verify
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "raises ExpectationError when unexpected method are called" do
|
|
39
|
-
@bird.expects.flap_flap
|
|
40
|
-
|
|
41
|
-
err = assert_raise ExpectationError do
|
|
42
|
-
@bird.shoot
|
|
43
|
-
end
|
|
44
|
-
assert_match(/wrong method/i, err.message)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "raises ExpectationError on bad arguments" do
|
|
48
|
-
@bird.expects.flap_flap(:swoosh)
|
|
49
|
-
|
|
50
|
-
err = assert_raise ExpectationError do
|
|
51
|
-
@bird.flap_flap(:rip)
|
|
52
|
-
end
|
|
53
|
-
assert_match(/wrong arguments/i, err.message)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
it "raises VerifyError when not all expected methods are called" do
|
|
57
|
-
@bird.expects.flap_flap
|
|
58
|
-
@bird.expects.bang
|
|
59
|
-
@bird.expects.plop
|
|
60
|
-
|
|
61
|
-
@bird.flap_flap
|
|
62
|
-
|
|
63
|
-
err = assert_raise VerifyError do
|
|
64
|
-
@bird._verify
|
|
65
|
-
end
|
|
66
|
-
assert_match(/unmet expectations/i, err.message)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "raises ExpectationError when calls are made out of order" do
|
|
70
|
-
@bird.expects.flap_flap
|
|
71
|
-
@bird.expects.bang
|
|
72
|
-
@bird.expects.plop
|
|
73
|
-
|
|
74
|
-
@bird.flap_flap
|
|
75
|
-
err = assert_raise ExpectationError do
|
|
76
|
-
@bird.plop
|
|
77
|
-
end
|
|
78
|
-
assert_match(/wrong method/i, err.message)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "returns the configured value" do
|
|
82
|
-
@bird.expects.plop.returns(':P')
|
|
83
|
-
assert_equal ':P', @bird.plop
|
|
84
|
-
@bird._verify
|
|
85
|
-
|
|
86
|
-
@bird.expects.plop.returns(':x')
|
|
87
|
-
assert_equal ':x', @bird.plop
|
|
88
|
-
@bird._verify
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "returns nil when no return is specified" do
|
|
92
|
-
@bird.expects.plop
|
|
93
|
-
assert_nil @bird.plop
|
|
94
|
-
@bird._verify
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "raises the configured exception" do
|
|
98
|
-
err = RuntimeError.new('shaq')
|
|
99
|
-
@bird.expects.plop.raises(err)
|
|
100
|
-
actual_err = assert_raise RuntimeError do
|
|
101
|
-
@bird.plop
|
|
102
|
-
end
|
|
103
|
-
assert_same err, actual_err, 'should be the same error'
|
|
104
|
-
@bird._verify
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "raises a RuntimeError when told to 'raise' a string" do
|
|
108
|
-
@bird.expects.plop.raises('shaq')
|
|
109
|
-
err = assert_raise RuntimeError do
|
|
110
|
-
@bird.plop
|
|
111
|
-
end
|
|
112
|
-
assert_match(/shaq/i, err.message)
|
|
113
|
-
@bird._verify
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "raises a default RuntimeError" do
|
|
117
|
-
@bird.expects.plop.raises
|
|
118
|
-
err = assert_raise RuntimeError do
|
|
119
|
-
@bird.plop
|
|
120
|
-
end
|
|
121
|
-
assert_match(/error/i, err.message)
|
|
122
|
-
@bird._verify
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "is quiet when correct arguments given" do
|
|
126
|
-
thing = Object.new
|
|
127
|
-
@bird.expects.plop(:big,'one',thing)
|
|
128
|
-
@bird.plop(:big,'one',thing)
|
|
129
|
-
@bird._verify
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "raises ExpectationError when wrong number of arguments specified" do
|
|
133
|
-
thing = Object.new
|
|
134
|
-
@bird.expects.plop(:big,'one',thing)
|
|
135
|
-
err = assert_raise ExpectationError do
|
|
136
|
-
# more
|
|
137
|
-
@bird.plop(:big,'one',thing,:other)
|
|
138
|
-
end
|
|
139
|
-
assert_match(/wrong arguments/i, err.message)
|
|
140
|
-
@bird._verify
|
|
141
|
-
|
|
142
|
-
@bird.expects.plop(:big,'one',thing)
|
|
143
|
-
err = assert_raise ExpectationError do
|
|
144
|
-
# less
|
|
145
|
-
@bird.plop(:big,'one')
|
|
146
|
-
end
|
|
147
|
-
assert_match(/wrong arguments/i, err.message)
|
|
148
|
-
@bird._verify
|
|
149
|
-
|
|
150
|
-
@bird.expects.plop
|
|
151
|
-
err = assert_raise ExpectationError do
|
|
152
|
-
# less
|
|
153
|
-
@bird.plop(:big)
|
|
154
|
-
end
|
|
155
|
-
assert_match(/wrong arguments/i, err.message)
|
|
156
|
-
@bird._verify
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "raises ExpectationError when arguments don't match" do
|
|
160
|
-
thing = Object.new
|
|
161
|
-
@bird.expects.plop(:big,'one',thing)
|
|
162
|
-
err = assert_raise ExpectationError do
|
|
163
|
-
@bird.plop(:big,'two',thing,:other)
|
|
164
|
-
end
|
|
165
|
-
assert_match(/wrong arguments/i, err.message)
|
|
166
|
-
@bird._verify
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "can use a block for custom reactions" do
|
|
170
|
-
mitt = nil
|
|
171
|
-
@bird.expects.plop { mitt = :ball }
|
|
172
|
-
assert_nil mitt
|
|
173
|
-
@bird.plop
|
|
174
|
-
assert_equal :ball, mitt, 'didnt catch the ball'
|
|
175
|
-
@bird._verify
|
|
176
|
-
|
|
177
|
-
@bird.expects.plop { raise 'ball' }
|
|
178
|
-
err = assert_raise RuntimeError do
|
|
179
|
-
@bird.plop
|
|
180
|
-
end
|
|
181
|
-
assert_match(/ball/i, err.message)
|
|
182
|
-
@bird._verify
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "passes mock-call arguments to the expectation block" do
|
|
186
|
-
ball = nil
|
|
187
|
-
mitt = nil
|
|
188
|
-
@bird.expects.plop {|arg1,arg2|
|
|
189
|
-
ball = arg1
|
|
190
|
-
mitt = arg2
|
|
191
|
-
}
|
|
192
|
-
assert_nil ball
|
|
193
|
-
assert_nil mitt
|
|
194
|
-
@bird.plop(:ball,:mitt)
|
|
195
|
-
assert_equal :ball, ball
|
|
196
|
-
assert_equal :mitt, mitt
|
|
197
|
-
@bird._verify
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
it "validates arguments if specified in addition to a block" do
|
|
201
|
-
ball = nil
|
|
202
|
-
mitt = nil
|
|
203
|
-
@bird.expects.plop(:ball,:mitt) {|arg1,arg2|
|
|
204
|
-
ball = arg1
|
|
205
|
-
mitt = arg2
|
|
206
|
-
}
|
|
207
|
-
assert_nil ball
|
|
208
|
-
assert_nil mitt
|
|
209
|
-
@bird.plop(:ball,:mitt)
|
|
210
|
-
assert_equal :ball, ball
|
|
211
|
-
assert_equal :mitt, mitt
|
|
212
|
-
@bird._verify
|
|
213
|
-
|
|
214
|
-
ball = nil
|
|
215
|
-
mitt = nil
|
|
216
|
-
@bird.expects.plop(:bad,:stupid) {|arg1,arg2|
|
|
217
|
-
ball = arg1
|
|
218
|
-
mitt = arg2
|
|
219
|
-
}
|
|
220
|
-
assert_nil ball
|
|
221
|
-
assert_nil mitt
|
|
222
|
-
err = assert_raise ExpectationError do
|
|
223
|
-
@bird.plop(:ball,:mitt)
|
|
224
|
-
end
|
|
225
|
-
assert_match(/wrong arguments/i, err.message)
|
|
226
|
-
assert_nil ball
|
|
227
|
-
assert_nil mitt
|
|
228
|
-
@bird._verify
|
|
229
|
-
|
|
230
|
-
ball = nil
|
|
231
|
-
mitt = nil
|
|
232
|
-
@bird.expects.plop(:ball,:mitt) {|arg1,arg2|
|
|
233
|
-
ball = arg1
|
|
234
|
-
mitt = arg2
|
|
235
|
-
}
|
|
236
|
-
assert_nil ball
|
|
237
|
-
assert_nil mitt
|
|
238
|
-
err = assert_raise ExpectationError do
|
|
239
|
-
@bird.plop(:ball)
|
|
240
|
-
end
|
|
241
|
-
assert_match(/wrong arguments/i, err.message)
|
|
242
|
-
assert_nil ball
|
|
243
|
-
assert_nil mitt
|
|
244
|
-
@bird._verify
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
it "passes runtime blocks to the expectation block as the final argument" do
|
|
248
|
-
runtime_block_called = false
|
|
249
|
-
got_arg = nil
|
|
250
|
-
|
|
251
|
-
# Eg, bird expects someone to subscribe to :tweet using the 'when' method
|
|
252
|
-
@bird.expects.when(:tweet) { |arg1, block|
|
|
253
|
-
got_arg = arg1
|
|
254
|
-
block.call
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
@bird.when(:tweet) do
|
|
258
|
-
runtime_block_called = true
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
assert_equal :tweet, got_arg, "Wrong arg"
|
|
262
|
-
assert runtime_block_called, "The runtime block should have been invoked by the user block"
|
|
263
|
-
|
|
264
|
-
@bird.expects.when(:warnk) { |e,blk| }
|
|
265
|
-
|
|
266
|
-
err = assert_raise ExpectationError do
|
|
267
|
-
@bird.when(:honk) { }
|
|
268
|
-
end
|
|
269
|
-
assert_match(/wrong arguments/i, err.message)
|
|
270
|
-
|
|
271
|
-
@bird._verify
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
it "passes the runtime block to the expectation block as sole argument if no other args come into play" do
|
|
275
|
-
runtime_block_called = false
|
|
276
|
-
@bird.expects.subscribe { |block| block.call }
|
|
277
|
-
@bird.subscribe do
|
|
278
|
-
runtime_block_called = true
|
|
279
|
-
end
|
|
280
|
-
assert runtime_block_called, "The runtime block should have been invoked by the user block"
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
it "provides nil as final argument if expectation block seems to want a block" do
|
|
284
|
-
invoked = false
|
|
285
|
-
@bird.expects.kablam(:scatter) { |shot,block|
|
|
286
|
-
assert_equal :scatter, shot, "Wrong shot"
|
|
287
|
-
assert_nil block, "The expectation block should get a nil block when user neglects to pass one"
|
|
288
|
-
invoked = true
|
|
289
|
-
}
|
|
290
|
-
@bird.kablam :scatter
|
|
291
|
-
assert invoked, "Expectation block not invoked"
|
|
292
|
-
|
|
293
|
-
@bird._verify
|
|
294
|
-
end
|
|
295
|
-
|
|
296
|
-
it "can set explicit return after an expectation block" do
|
|
297
|
-
got = nil
|
|
298
|
-
@bird.expects.kablam(:scatter) { |shot|
|
|
299
|
-
got = shot
|
|
300
|
-
}.returns(:death)
|
|
301
|
-
|
|
302
|
-
val = @bird.kablam :scatter
|
|
303
|
-
assert_equal :death, val, "Wrong return value"
|
|
304
|
-
assert_equal :scatter, got, "Wrong argument"
|
|
305
|
-
@bird._verify
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
it "can raise after an expectation block" do
|
|
309
|
-
got = nil
|
|
310
|
-
@bird.expects.kablam(:scatter) do |shot|
|
|
311
|
-
got = shot
|
|
312
|
-
end.raises "hell"
|
|
313
|
-
|
|
314
|
-
err = assert_raise RuntimeError do
|
|
315
|
-
@bird.kablam :scatter
|
|
316
|
-
end
|
|
317
|
-
assert_match(/hell/i, err.message)
|
|
318
|
-
|
|
319
|
-
@bird._verify
|
|
320
|
-
end
|
|
321
|
-
|
|
322
|
-
it "stores the semantic value of the expectation block after it executes" do
|
|
323
|
-
expectation = @bird.expects.kablam(:slug) { |shot|
|
|
324
|
-
"The shot was #{shot}"
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
assert_not_nil expectation, "Expectation nil"
|
|
328
|
-
assert_nil expectation.block_value, "Block value should start out nil"
|
|
329
|
-
|
|
330
|
-
ret_val = @bird.kablam :slug
|
|
331
|
-
|
|
332
|
-
assert_equal "The shot was slug", expectation.block_value
|
|
333
|
-
assert_equal "The shot was slug", ret_val, "Block value should also be used for return"
|
|
334
|
-
|
|
335
|
-
@bird._verify
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
it "uses the value of the expectation block as the default return value" do
|
|
340
|
-
@bird.expects.kablam(:scatter) { |shot|
|
|
341
|
-
"The shot was #{shot}"
|
|
342
|
-
}
|
|
343
|
-
val = @bird.kablam :scatter
|
|
344
|
-
assert_equal "The shot was scatter", val, "Wrong return value"
|
|
345
|
-
@bird._verify
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
it "returns the Expectation even if 'returns' is used" do
|
|
349
|
-
expectation = @bird.expects.kablam(:slug) { |shot|
|
|
350
|
-
"The shot was #{shot}"
|
|
351
|
-
}.returns :hosed
|
|
352
|
-
|
|
353
|
-
assert_not_nil expectation, "Expectation nil"
|
|
354
|
-
assert_nil expectation.block_value, "Block value should start out nil"
|
|
355
|
-
|
|
356
|
-
ret_val = @bird.kablam :slug
|
|
357
|
-
|
|
358
|
-
assert_equal "The shot was slug", expectation.block_value
|
|
359
|
-
assert_equal :hosed, ret_val, "Block value should also be used for return"
|
|
360
|
-
|
|
361
|
-
@bird._verify
|
|
362
|
-
end
|
|
363
|
-
|
|
364
|
-
it "returns the Expectation even if 'raises' is used" do
|
|
365
|
-
expectation = @bird.expects.kablam(:slug) { |shot|
|
|
366
|
-
"The shot was #{shot}"
|
|
367
|
-
}.raises "aiee!"
|
|
368
|
-
|
|
369
|
-
assert_not_nil expectation, "Expectation nil"
|
|
370
|
-
assert_nil expectation.block_value, "Block value should start out nil"
|
|
371
|
-
|
|
372
|
-
err = assert_raise RuntimeError do
|
|
373
|
-
@bird.kablam :slug
|
|
374
|
-
end
|
|
375
|
-
assert_match(/aiee!/i, err.message)
|
|
376
|
-
assert_equal "The shot was slug", expectation.block_value
|
|
377
|
-
@bird._verify
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
it "supports assignment-style methods" do
|
|
382
|
-
@bird.expects.size = "large"
|
|
383
|
-
@bird.size = "large"
|
|
384
|
-
@bird._verify
|
|
385
|
-
end
|
|
386
|
-
|
|
387
|
-
it "supports assignments and raising (using explicit-method syntax)" do
|
|
388
|
-
@bird.expects('size=','large').raises "boom"
|
|
389
|
-
|
|
390
|
-
err = assert_raise RuntimeError do
|
|
391
|
-
@bird.size = "large"
|
|
392
|
-
end
|
|
393
|
-
assert_match(/boom/i, err.message)
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
end
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
|
|
2
|
-
require 'hardmock'
|
|
3
|
-
require 'assert_error'
|
|
4
|
-
|
|
5
|
-
class HardmockTest < Test::Unit::TestCase
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
# TESTS
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
it "conveniently creates mocks using create_mock and create_mocks" do
|
|
12
|
-
|
|
13
|
-
h = create_mock :donkey
|
|
14
|
-
assert_equal [ :donkey ], h.keys
|
|
15
|
-
|
|
16
|
-
assert_mock_exists :donkey
|
|
17
|
-
assert_same @donkey, h[:donkey]
|
|
18
|
-
|
|
19
|
-
assert_equal [ :donkey ], @all_mocks.keys, "Wrong keyset for @all_mocks"
|
|
20
|
-
|
|
21
|
-
h2 = create_mocks :cat, 'dog' # symbol/string indifference at this level
|
|
22
|
-
assert_equal [:cat,:dog].to_set, h2.keys.to_set, "Wrong keyset for second hash"
|
|
23
|
-
assert_equal [:cat,:dog,:donkey].to_set, @all_mocks.keys.to_set, "@all_mocks wrong"
|
|
24
|
-
|
|
25
|
-
assert_mock_exists :cat
|
|
26
|
-
assert_same @cat, h2[:cat]
|
|
27
|
-
assert_mock_exists :dog
|
|
28
|
-
assert_same @dog, h2[:dog]
|
|
29
|
-
|
|
30
|
-
assert_mock_exists :donkey
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "provides literal 'expects' syntax" do
|
|
34
|
-
assert_nil @order, "Should be no @order yet"
|
|
35
|
-
create_mock :order
|
|
36
|
-
assert_not_nil @order, "@order should be built"
|
|
37
|
-
|
|
38
|
-
# Setup an expectation
|
|
39
|
-
@order.expects.update_stuff :key1 => 'val1', :key2 => 'val2'
|
|
40
|
-
|
|
41
|
-
# Use the mock
|
|
42
|
-
@order.update_stuff :key1 => 'val1', :key2 => 'val2'
|
|
43
|
-
|
|
44
|
-
# Verify
|
|
45
|
-
verify_mocks
|
|
46
|
-
|
|
47
|
-
# See that it's ok to do it again
|
|
48
|
-
verify_mocks
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "supports 'with' for specifying argument expectations" do
|
|
52
|
-
create_mocks :car
|
|
53
|
-
@car.expects(:fill).with('gas','booze')
|
|
54
|
-
@car.fill('gas', 'booze')
|
|
55
|
-
verify_mocks
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "supports several mocks at once" do
|
|
59
|
-
create_mocks :order_builder, :order, :customer
|
|
60
|
-
|
|
61
|
-
@order_builder.expects.create_new_order.returns @order
|
|
62
|
-
@customer.expects.account_number.returns(1234)
|
|
63
|
-
@order.expects.account_no = 1234
|
|
64
|
-
@order.expects.save!
|
|
65
|
-
|
|
66
|
-
# Run "the code"
|
|
67
|
-
o = @order_builder.create_new_order
|
|
68
|
-
o.account_no = @customer.account_number
|
|
69
|
-
o.save!
|
|
70
|
-
|
|
71
|
-
verify_mocks
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "enforces inter-mock call ordering" do
|
|
75
|
-
create_mocks :order_builder, :order, :customer
|
|
76
|
-
|
|
77
|
-
@order_builder.expects.create_new_order.returns @order
|
|
78
|
-
@customer.expects.account_number.returns(1234)
|
|
79
|
-
@order.expects.account_no = 1234
|
|
80
|
-
@order.expects.save!
|
|
81
|
-
|
|
82
|
-
# Run "the code"
|
|
83
|
-
o = @order_builder.create_new_order
|
|
84
|
-
err = assert_raise ExpectationError do
|
|
85
|
-
o.save!
|
|
86
|
-
end
|
|
87
|
-
assert_match(/wrong object/i, err.message)
|
|
88
|
-
assert_match(/order.save!/i, err.message)
|
|
89
|
-
assert_match(/customer.account_number/i, err.message)
|
|
90
|
-
|
|
91
|
-
assert_error VerifyError, /unmet expectations/i do
|
|
92
|
-
verify_mocks
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
class UserPresenter
|
|
97
|
-
def initialize(args)
|
|
98
|
-
view = args[:view]
|
|
99
|
-
model = args[:model]
|
|
100
|
-
model.when :data_changes do
|
|
101
|
-
view.user_name = model.user_name
|
|
102
|
-
end
|
|
103
|
-
view.when :user_edited do
|
|
104
|
-
model.user_name = view.user_name
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "makes MVP testing simple" do
|
|
110
|
-
mox = create_mocks :model, :view
|
|
111
|
-
|
|
112
|
-
data_change = @model.expects.when(:data_changes) { |evt,block| block }
|
|
113
|
-
user_edit = @view.expects.when(:user_edited) { |evt,block| block }
|
|
114
|
-
|
|
115
|
-
UserPresenter.new mox
|
|
116
|
-
|
|
117
|
-
# Expect user name transfer from model to view
|
|
118
|
-
@model.expects.user_name.returns 'Da Croz'
|
|
119
|
-
@view.expects.user_name = 'Da Croz'
|
|
120
|
-
# Trigger data change event in model
|
|
121
|
-
data_change.block_value.call
|
|
122
|
-
|
|
123
|
-
# Expect user name transfer from view to model
|
|
124
|
-
@view.expects.user_name.returns '6:8'
|
|
125
|
-
@model.expects.user_name = '6:8'
|
|
126
|
-
# Trigger edit event in view
|
|
127
|
-
user_edit.block_value.call
|
|
128
|
-
|
|
129
|
-
verify_mocks
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "continues to function after verify, if verification error is controlled" do
|
|
133
|
-
mox = create_mocks :model, :view
|
|
134
|
-
data_change = @model.expects.when(:data_changes) { |evt,block| block }
|
|
135
|
-
user_edit = @view.expects.when(:user_edited) { |evt,block| block }
|
|
136
|
-
UserPresenter.new mox
|
|
137
|
-
|
|
138
|
-
# Expect user name transfer from model to view
|
|
139
|
-
@model.expects.user_name.returns 'Da Croz'
|
|
140
|
-
@view.expects.user_name = 'Da Croz'
|
|
141
|
-
|
|
142
|
-
assert_error ExpectationError, /model.monkey_wrench/i do
|
|
143
|
-
@model.monkey_wrench
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
# This should raise because of unmet expectations
|
|
147
|
-
assert_error VerifyError, /unmet expectations/i, /user_name/i do
|
|
148
|
-
verify_mocks
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# See that the non-forced verification remains quiet
|
|
152
|
-
assert_nothing_raised VerifyError do
|
|
153
|
-
verify_mocks(false)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
@model.expects.never_gonna_happen
|
|
157
|
-
|
|
158
|
-
assert_error VerifyError, /unmet expectations/i, /never_gonna_happen/i do
|
|
159
|
-
verify_mocks
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
class UserPresenterBroken
|
|
164
|
-
def initialize(args)
|
|
165
|
-
view = args[:view]
|
|
166
|
-
model = args[:model]
|
|
167
|
-
model.when :data_changes do
|
|
168
|
-
view.user_name = model.user_name
|
|
169
|
-
end
|
|
170
|
-
# no view stuff, will break appropriately
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
it "flunks for typical Presenter constructor wiring failure" do
|
|
175
|
-
mox = create_mocks :model, :view
|
|
176
|
-
|
|
177
|
-
data_change = @model.expects.when(:data_changes) { |evt,block| block }
|
|
178
|
-
user_edit = @view.expects.when(:user_edited) { |evt,block| block }
|
|
179
|
-
|
|
180
|
-
UserPresenterBroken.new mox
|
|
181
|
-
|
|
182
|
-
err = assert_raise VerifyError do
|
|
183
|
-
verify_mocks
|
|
184
|
-
end
|
|
185
|
-
assert_match(/unmet expectations/i, err.message)
|
|
186
|
-
assert_match(/view.when\(:user_edited\)/i, err.message)
|
|
187
|
-
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
it "provides convenient event-subscription trap syntax for MVP testing" do
|
|
191
|
-
mox = create_mocks :model, :view
|
|
192
|
-
|
|
193
|
-
data_change = @model.trap.when(:data_changes)
|
|
194
|
-
user_edit = @view.trap.when(:user_edited)
|
|
195
|
-
|
|
196
|
-
UserPresenter.new mox
|
|
197
|
-
|
|
198
|
-
# Expect user name transfer from model to view
|
|
199
|
-
@model.expects.user_name.returns 'Da Croz'
|
|
200
|
-
@view.expects.user_name = 'Da Croz'
|
|
201
|
-
# Trigger data change event in model
|
|
202
|
-
data_change.trigger
|
|
203
|
-
|
|
204
|
-
# Expect user name transfer from view to model
|
|
205
|
-
@view.expects.user_name.returns '6:8'
|
|
206
|
-
@model.expects.user_name = '6:8'
|
|
207
|
-
# Trigger edit event in view
|
|
208
|
-
user_edit.trigger
|
|
209
|
-
|
|
210
|
-
verify_mocks
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "raises if you try to pass an expectation block to 'trap'" do
|
|
214
|
-
create_mock :model
|
|
215
|
-
assert_error Hardmock::ExpectationError, /blocks/i, /trap/i do
|
|
216
|
-
@model.trap.when(:some_event) do raise "huh?" end
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
class Grinder
|
|
221
|
-
def initialize(objects)
|
|
222
|
-
@chute = objects[:chute]
|
|
223
|
-
@bucket = objects[:bucket]
|
|
224
|
-
@blade = objects[:blade]
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def grind(slot)
|
|
228
|
-
@chute.each_bean(slot) do |bean|
|
|
229
|
-
@bucket << @blade.chop(bean)
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
it "lets you write clear iteration-oriented expectations" do
|
|
235
|
-
grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
|
|
236
|
-
|
|
237
|
-
# Style 1: assertions on method args is done explicitly in block
|
|
238
|
-
@chute.expects.each_bean { |slot,block|
|
|
239
|
-
assert_equal :side_slot, slot, "Wrong slot"
|
|
240
|
-
block.call :bean1
|
|
241
|
-
block.call :bean2
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
@blade.expects.chop(:bean1).returns(:grounds1)
|
|
245
|
-
@bucket.expects('<<', :grounds1)
|
|
246
|
-
|
|
247
|
-
@blade.expects.chop(:bean2).returns(:grounds2)
|
|
248
|
-
@bucket.expects('<<', :grounds2)
|
|
249
|
-
|
|
250
|
-
# Run "the code"
|
|
251
|
-
grinder.grind(:side_slot)
|
|
252
|
-
|
|
253
|
-
verify_mocks
|
|
254
|
-
|
|
255
|
-
# Style 2: assertions on method arguments done implicitly in the expectation code
|
|
256
|
-
@chute.expects.each_bean(:main_slot) { |slot,block|
|
|
257
|
-
block.call :bean3
|
|
258
|
-
}
|
|
259
|
-
@blade.expects.chop(:bean3).returns(:grounds3)
|
|
260
|
-
@bucket.expects('<<', :grounds3)
|
|
261
|
-
grinder.grind :main_slot
|
|
262
|
-
verify_mocks
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
it "further supports iteration testing using 'yield'" do
|
|
266
|
-
grinder = Grinder.new create_mocks(:blade, :chute, :bucket)
|
|
267
|
-
|
|
268
|
-
@chute.expects.each_bean(:side_slot).yields :bean1, :bean2
|
|
269
|
-
|
|
270
|
-
@blade.expects.chop(:bean1).returns(:grounds1)
|
|
271
|
-
@bucket.expects('<<', :grounds1)
|
|
272
|
-
|
|
273
|
-
@blade.expects.chop(:bean2).returns(:grounds2)
|
|
274
|
-
@bucket.expects('<<', :grounds2)
|
|
275
|
-
|
|
276
|
-
grinder.grind :side_slot
|
|
277
|
-
|
|
278
|
-
verify_mocks
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
class HurtLocker
|
|
282
|
-
attr_reader :caught
|
|
283
|
-
def initialize(opts)
|
|
284
|
-
@locker = opts[:locker]
|
|
285
|
-
@store = opts[:store]
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
def do_the_thing(area,data)
|
|
289
|
-
@locker.with_lock(area) do
|
|
290
|
-
@store.eat(data)
|
|
291
|
-
end
|
|
292
|
-
rescue => oops
|
|
293
|
-
@caught = oops
|
|
294
|
-
end
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
it "makes mutex-style locking scenarios easy to test" do
|
|
298
|
-
hurt = HurtLocker.new create_mocks(:locker, :store)
|
|
299
|
-
|
|
300
|
-
@locker.expects.with_lock(:main).yields
|
|
301
|
-
@store.expects.eat("some info")
|
|
302
|
-
|
|
303
|
-
hurt.do_the_thing(:main, "some info")
|
|
304
|
-
|
|
305
|
-
verify_mocks
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
it "makes it easy to simulate error in mutex-style locking scenarios" do
|
|
309
|
-
hurt = HurtLocker.new create_mocks(:locker, :store)
|
|
310
|
-
err = StandardError.new('fmshooop')
|
|
311
|
-
@locker.expects.with_lock(:main).yields
|
|
312
|
-
@store.expects.eat("some info").raises(err)
|
|
313
|
-
|
|
314
|
-
hurt.do_the_thing(:main, "some info")
|
|
315
|
-
|
|
316
|
-
assert_same err, hurt.caught, "Expected that error to be handled internally"
|
|
317
|
-
verify_mocks
|
|
318
|
-
end
|
|
319
|
-
|
|
320
|
-
it "actually returns 'false' instead of nil when mocking boolean return values" do
|
|
321
|
-
create_mock :car
|
|
322
|
-
@car.expects.ignition_on?.returns(true)
|
|
323
|
-
assert_equal true, @car.ignition_on?, "Should be true"
|
|
324
|
-
@car.expects.ignition_on?.returns(false)
|
|
325
|
-
assert_equal false, @car.ignition_on?, "Should be false"
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
it "can mock most methods inherited from object using literal syntax" do
|
|
329
|
-
target_methods = %w|id clone display dup eql? ==|
|
|
330
|
-
create_mock :foo
|
|
331
|
-
target_methods.each do |m|
|
|
332
|
-
eval %{@foo.expects(m, "some stuff")}
|
|
333
|
-
eval %{@foo.#{m} "some stuff"}
|
|
334
|
-
end
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
it "provides 'expect' as an alias for 'expects'" do
|
|
338
|
-
create_mock :foo
|
|
339
|
-
@foo.expect.boomboom
|
|
340
|
-
@foo.boomboom
|
|
341
|
-
verify_mocks
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
it "provides 'should_receive' as an alias for 'expects'" do
|
|
345
|
-
create_mock :foo
|
|
346
|
-
@foo.should_receive.boomboom
|
|
347
|
-
@foo.boomboom
|
|
348
|
-
verify_mocks
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
it "provides 'and_return' as an alias for 'returns'" do
|
|
352
|
-
create_mock :foo
|
|
353
|
-
@foo.expects(:boomboom).and_return :brick
|
|
354
|
-
assert_equal :brick, @foo.boomboom
|
|
355
|
-
verify_mocks
|
|
356
|
-
end
|
|
357
|
-
|
|
358
|
-
it "does not interfere with a core subset of Object methods" do
|
|
359
|
-
create_mock :foo
|
|
360
|
-
@foo.method(:inspect)
|
|
361
|
-
@foo.inspect
|
|
362
|
-
@foo.to_s
|
|
363
|
-
@foo.instance_variables
|
|
364
|
-
@foo.instance_eval("")
|
|
365
|
-
verify_mocks
|
|
366
|
-
end
|
|
367
|
-
|
|
368
|
-
it "can raise errors from within an expectation block" do
|
|
369
|
-
create_mock :cat
|
|
370
|
-
@cat.expects.meow do |arg|
|
|
371
|
-
assert_equal "mix", arg
|
|
372
|
-
raise 'HAIRBALL'
|
|
373
|
-
end
|
|
374
|
-
assert_error RuntimeError, 'HAIRBALL' do
|
|
375
|
-
@cat.meow("mix")
|
|
376
|
-
end
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
it "can raise errors AFTER an expectation block" do
|
|
380
|
-
create_mock :cat
|
|
381
|
-
@cat.expects.meow do |arg|
|
|
382
|
-
assert_equal "mix", arg
|
|
383
|
-
end.raises('HAIRBALL')
|
|
384
|
-
assert_error RuntimeError, 'HAIRBALL' do
|
|
385
|
-
@cat.meow("mix")
|
|
386
|
-
end
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
it "raises an immediate error if a mock is created with a nil name (common mistake: create_mock @cat)" do
|
|
390
|
-
# I make this mistake all the time: Typing in an instance var name instead of a symbol in create_mocks.
|
|
391
|
-
# When you do that, you're effectively passing nil(s) in as mock names.
|
|
392
|
-
assert_error ArgumentError, /'nil' is not a valid name for a mock/ do
|
|
393
|
-
create_mocks @apples, @oranges
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
|
-
it "overrides 'inspect' to make nice output" do
|
|
398
|
-
create_mock :hay_bailer
|
|
399
|
-
assert_equal "<Mock hay_bailer>", @hay_bailer.inspect, "Wrong output from 'inspect'"
|
|
400
|
-
end
|
|
401
|
-
|
|
402
|
-
it "raises if prepare_hardmock_control is invoked after create_mocks, or more than once" do
|
|
403
|
-
create_mock :hi_there
|
|
404
|
-
create_mocks :another, :one
|
|
405
|
-
assert_error RuntimeError, /already setup/ do
|
|
406
|
-
prepare_hardmock_control
|
|
407
|
-
end
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
should "support alias verify_hardmocks" do
|
|
411
|
-
create_mock :tree
|
|
412
|
-
@tree.expects(:grow)
|
|
413
|
-
assert_error VerifyError, /unmet/i do
|
|
414
|
-
verify_hardmocks
|
|
415
|
-
end
|
|
416
|
-
end
|
|
417
|
-
|
|
418
|
-
#
|
|
419
|
-
# HELPERS
|
|
420
|
-
#
|
|
421
|
-
|
|
422
|
-
def assert_mock_exists(name)
|
|
423
|
-
assert_not_nil @all_mocks, "@all_mocks not here yet"
|
|
424
|
-
mo = @all_mocks[name]
|
|
425
|
-
assert_not_nil mo, "Mock '#{name}' not in @all_mocks"
|
|
426
|
-
assert_kind_of Mock, mo, "Wrong type of object, wanted a Mock"
|
|
427
|
-
assert_equal name.to_s, mo._name, "Mock '#{name}' had wrong name"
|
|
428
|
-
ivar = self.instance_variable_get("@#{name}")
|
|
429
|
-
assert_not_nil ivar, "Mock '#{name}' not set as ivar"
|
|
430
|
-
assert_same mo, ivar, "Mock '#{name}' ivar not same as instance in @all_mocks"
|
|
431
|
-
assert_same @main_mock_control, mo._control, "Mock '#{name}' doesn't share the main mock control"
|
|
432
|
-
end
|
|
433
|
-
end
|
|
434
|
-
|