ceedling 0.12.2 → 0.13.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -14
- data/.gitmodules +9 -0
- data/.rspec +1 -0
- data/Gemfile +10 -2
- data/README.md +97 -67
- data/{new_project_template → assets}/project.yml +0 -0
- data/{new_project_template → assets}/rakefile.rb +0 -0
- data/bin/ceedling +77 -44
- data/ceedling.gemspec +18 -5
- data/config/test_environment.rb +12 -0
- data/docs/CeedlingLogo.png +0 -0
- data/docs/CeedlingPacket.md +1934 -0
- data/docs/CeedlingPacket.odt +0 -0
- data/docs/CeedlingPacket.pdf +0 -0
- data/examples/temp_sensor/project.yml +71 -74
- data/examples/temp_sensor/rakefile.rb +3 -5
- data/examples/temp_sensor/src/AdcConductor.h +2 -0
- data/examples/temp_sensor/src/TemperatureCalculator.h +2 -0
- data/examples/temp_sensor/src/Types.h +0 -13
- data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +2 -0
- data/examples/temp_sensor/src/UsartHardware.c +0 -12
- data/examples/temp_sensor/src/UsartHardware.h +0 -1
- data/examples/temp_sensor/test/{test_AdcConductor.c → TestAdcConductor.c} +0 -0
- data/examples/temp_sensor/test/{test_AdcHardware.c → TestAdcHardware.c} +0 -0
- data/examples/temp_sensor/test/{test_AdcModel.c → TestAdcModel.c} +0 -0
- data/examples/temp_sensor/test/{test_Executor.c → TestExecutor.c} +0 -0
- data/examples/temp_sensor/test/{test_Main.c → TestMain.c} +0 -0
- data/examples/temp_sensor/test/{test_Model.c → TestModel.c} +0 -0
- data/examples/temp_sensor/test/{test_TaskScheduler.c → TestTaskScheduler.c} +0 -0
- data/examples/temp_sensor/test/{test_TemperatureCalculator.c → TestTemperatureCalculator.c} +0 -0
- data/examples/temp_sensor/test/{test_TemperatureFilter.c → TestTemperatureFilter.c} +0 -2
- data/examples/temp_sensor/test/{test_TimerConductor.c → TestTimerConductor.c} +0 -0
- data/examples/temp_sensor/test/{test_TimerHardware.c → TestTimerHardware.c} +0 -0
- data/examples/temp_sensor/test/{test_TimerModel.c → TestTimerModel.c} +0 -0
- data/examples/temp_sensor/test/{test_UsartBaudRateRegisterCalculator.c → TestUsartBaudRateRegisterCalculator.c} +0 -0
- data/examples/temp_sensor/test/{test_UsartConductor.c → TestUsartConductor.c} +0 -0
- data/examples/temp_sensor/test/{test_UsartHardware.c → TestUsartHardware.c} +0 -20
- data/examples/temp_sensor/test/{test_UsartModel.c → TestUsartModel.c} +0 -0
- data/examples/temp_sensor/test/support/UnityHelper.c +7 -5
- data/examples/temp_sensor/test/support/UnityHelper.h +5 -5
- data/{new_project_template/vendor/ceedling/lib → lib}/build_invoker_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/cacheinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/cacheinator_helper.rb +0 -0
- data/lib/ceedling.rb +16 -4
- data/lib/ceedling/version.rb +4 -4
- data/lib/ceedling/version.rb.erb +1 -1
- data/{new_project_template/vendor/ceedling/lib → lib}/cmock_builder.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/configurator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/configurator_builder.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/configurator_plugins.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/configurator_setup.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/configurator_validator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/constants.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/defaults.rb +2 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/dependinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/erb_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_finder.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_finder_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_path_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_system_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_system_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/file_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/flaginator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/generator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/generator_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/generator_test_results.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/generator_test_results_sanity_checker.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/generator_test_runner.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/loginator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/makefile.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/objects.yml +0 -2
- data/lib/par_map.rb +19 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin_builder.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin_manager.rb +20 -8
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin_manager_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin_reportinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/plugin_reportinator_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/preprocessinator.rb +0 -0
- data/lib/preprocessinator_extractor.rb +30 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/preprocessinator_file_handler.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/preprocessinator_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/preprocessinator_includes_handler.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/project_config_manager.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/project_file_loader.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rake_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rake_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rakefile.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/release_invoker.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/release_invoker_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/reportinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_cmock.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_preprocess.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_release.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_release_deep_dependencies.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_tests.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/rules_tests_deep_dependencies.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/setupinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/stream_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/streaminator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/streaminator_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/system_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/system_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/task_invoker.rb +7 -3
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_base.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_filesystem.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_release.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_release_deep_dependencies.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_tests.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_tests_deep_dependencies.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tasks_vendor.rake +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/test_includes_extractor.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/test_invoker.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/test_invoker_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tool_executor.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/tool_executor_helper.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/verbosinator.rb +0 -0
- data/{new_project_template/vendor/ceedling/lib → lib}/yaml_wrapper.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/bullseye/bullseye.rake +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/bullseye/bullseye.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/bullseye/defaults.yml +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/bullseye/readme.txt +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/bullseye/template.erb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/gcov/defaults.yml +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/gcov/gcov.rake +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/gcov/gcov.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/gcov/readme.txt +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/gcov/template.erb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/module_generator/config/module_generator.yml +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/module_generator/lib/module_generator.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/module_generator/module_generator.rake +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/stdout_ide_tests_report/config/stdout_ide_tests_report.yml +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/stdout_pretty_tests_report/assets/template.erb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/warnings_report/warnings_report.rb +0 -0
- data/{new_project_template/vendor/ceedling/plugins → plugins}/xml_tests_report/xml_tests_report.rb +0 -0
- data/rakefile.rb +14 -0
- data/release/build.info +2 -0
- data/{new_project_template/vendor/ceedling/release → release}/version.info +0 -0
- data/spec/configurator_builder_spec.rb +7 -0
- data/spec/configurator_helper_spec.rb +5 -0
- data/spec/configurator_spec.rb +10 -0
- data/spec/par_map_spec.rb +57 -0
- data/spec/preprocessinator_extractor_spec.rb +46 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/uncatagorized_specs_spec.rb +8 -0
- data/test_graveyard/integration/paths.yml +17 -0
- data/test_graveyard/integration/paths_test.rb +80 -0
- data/test_graveyard/integration/rake_rules_aux_dependencies_test.rb +75 -0
- data/test_graveyard/integration/rake_rules_cmock_test.rb +74 -0
- data/test_graveyard/integration/rake_rules_preprocess_test.rb +178 -0
- data/test_graveyard/integration/rake_rules_test.rb +268 -0
- data/test_graveyard/integration/rake_tasks_test.rb +103 -0
- data/test_graveyard/integration_test_helper.rb +34 -0
- data/test_graveyard/rakefile_rules.rb +10 -0
- data/test_graveyard/rakefile_rules_aux_dependencies.rb +10 -0
- data/test_graveyard/rakefile_rules_cmock.rb +10 -0
- data/test_graveyard/rakefile_rules_preprocess.rb +10 -0
- data/test_graveyard/rakefile_tasks.rb +10 -0
- data/test_graveyard/system/file_system_dependencies.yml +20 -0
- data/test_graveyard/system/file_system_kitchen_sink.yml +20 -0
- data/test_graveyard/system/file_system_mocks.yml +20 -0
- data/test_graveyard/system/file_system_preprocess.yml +20 -0
- data/test_graveyard/system/file_system_simple.yml +20 -0
- data/test_graveyard/system/file_system_test.rb +78 -0
- data/test_graveyard/system/mocks/include/a_file.h +2 -0
- data/test_graveyard/system/mocks/include/other_stuff.h +2 -0
- data/test_graveyard/system/mocks/include/stuff.h +3 -0
- data/test_graveyard/system/mocks/source/a_file.c +9 -0
- data/test_graveyard/system/mocks/test/test_a_file.c +41 -0
- data/test_graveyard/system/mocks/test/test_no_file.c +14 -0
- data/test_graveyard/system/project_mocks.yml +43 -0
- data/test_graveyard/system/project_mocks_test.rb +38 -0
- data/test_graveyard/system/project_simple.yml +36 -0
- data/test_graveyard/system/project_simple_test.rb +39 -0
- data/test_graveyard/system/rule_mocks_test.rb +44 -0
- data/test_graveyard/system/rule_runners_test.rb +44 -0
- data/test_graveyard/system/simple/include/other_stuff.h +2 -0
- data/test_graveyard/system/simple/include/stuff.h +3 -0
- data/test_graveyard/system/simple/source/other_stuff.c +6 -0
- data/test_graveyard/system/simple/source/stuff.c +7 -0
- data/test_graveyard/system/simple/test/test_other_stuff.c +30 -0
- data/test_graveyard/system/simple/test/test_stuff.c +51 -0
- data/test_graveyard/system_test_helper.rb +73 -0
- data/test_graveyard/test_helper.rb +93 -0
- data/test_graveyard/unit/busted/configurator_builder_test.rb +571 -0
- data/test_graveyard/unit/busted/configurator_helper_test.rb +234 -0
- data/test_graveyard/unit/busted/configurator_test.rb +232 -0
- data/test_graveyard/unit/busted/configurator_validator_test.rb +169 -0
- data/test_graveyard/unit/busted/deep_merge_fix_test.rb +55 -0
- data/test_graveyard/unit/busted/dependinator_test.rb +129 -0
- data/test_graveyard/unit/busted/file_finder_helper_test.rb +45 -0
- data/test_graveyard/unit/busted/file_finder_test.rb +114 -0
- data/test_graveyard/unit/busted/file_path_utils_test.rb +97 -0
- data/test_graveyard/unit/busted/file_system_utils_test.rb +21 -0
- data/test_graveyard/unit/busted/generator_test.rb +187 -0
- data/test_graveyard/unit/busted/generator_test_results_test.rb +129 -0
- data/test_graveyard/unit/busted/generator_test_runner_test.rb +478 -0
- data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +38 -0
- data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +156 -0
- data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +93 -0
- data/test_graveyard/unit/busted/preprocessinator_test.rb +57 -0
- data/test_graveyard/unit/busted/project_file_loader_test.rb +142 -0
- data/test_graveyard/unit/busted/setupinator_test.rb +45 -0
- data/test_graveyard/unit/busted/streaminator_test.rb +49 -0
- data/test_graveyard/unit/busted/task_invoker_test.rb +69 -0
- data/test_graveyard/unit/busted/test_includes_extractor_test.rb +111 -0
- data/test_graveyard/unit/busted/test_invoker_helper_test.rb +62 -0
- data/test_graveyard/unit/busted/test_invoker_test.rb +47 -0
- data/test_graveyard/unit/busted/tool_executor_helper_test.rb +100 -0
- data/test_graveyard/unit/busted/tool_executor_test.rb +351 -0
- data/test_graveyard/unit/busted/verbosinator_test.rb +65 -0
- data/test_graveyard/unit/preprocessinator_extractor_test.rb +731 -0
- data/test_graveyard/unit_test_helper.rb +16 -0
- data/vendor/behaviors/Manifest.txt +9 -0
- data/vendor/behaviors/Rakefile +19 -0
- data/vendor/behaviors/lib/behaviors.rb +76 -0
- data/vendor/behaviors/lib/behaviors/reporttask.rb +158 -0
- data/vendor/behaviors/test/behaviors_tasks_test.rb +73 -0
- data/vendor/behaviors/test/behaviors_test.rb +50 -0
- data/vendor/behaviors/test/tasks_test/Rakefile +19 -0
- data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -0
- data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/c_exception/lib/CException.c +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/c_exception/lib/CException.h +1 -1
- data/vendor/c_exception/release/build.info +2 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/c_exception/release/version.info +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/config/production_environment.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/config/test_environment.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_config.rb +3 -3
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_file_writer.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_plugin_array.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_plugin_callback.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_plugin_cexception.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_plugin_expect.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_plugin_ignore.rb +14 -4
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_generator_utils.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_header_parser.rb +9 -5
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_plugin_manager.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/lib/cmock_unityhelper_parser.rb +75 -74
- data/vendor/cmock/release/build.info +2 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/release/version.info +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/src/cmock.c +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/cmock/src/cmock.h +0 -0
- data/vendor/constructor/History.rdoc +19 -0
- data/vendor/constructor/README.rdoc +72 -0
- data/vendor/constructor/Rakefile +33 -0
- data/vendor/constructor/homepage/Notes.txt +27 -0
- data/vendor/constructor/homepage/Rakefile +15 -0
- data/vendor/constructor/homepage/index.erb +27 -0
- data/vendor/constructor/homepage/index.html +36 -0
- data/vendor/constructor/homepage/page_header.graffle +0 -0
- data/vendor/constructor/homepage/page_header.html +9 -0
- data/vendor/constructor/homepage/page_header.png +0 -0
- data/vendor/constructor/homepage/sample_code.png +0 -0
- data/vendor/constructor/homepage/sample_code.rb +12 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/constructor/lib/constructor.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/constructor/lib/constructor_struct.rb +0 -0
- data/vendor/constructor/specs/constructor_spec.rb +407 -0
- data/vendor/constructor/specs/constructor_struct_spec.rb +84 -0
- data/vendor/deep_merge/MIT-LICENSE +20 -0
- data/vendor/deep_merge/README +94 -0
- data/vendor/deep_merge/Rakefile +28 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/deep_merge/lib/deep_merge.rb +0 -0
- data/vendor/deep_merge/pkg/deep_merge-0.1.0.gem +0 -0
- data/vendor/deep_merge/test/test_deep_merge.rb +553 -0
- data/vendor/diy/History.txt +28 -0
- data/vendor/diy/README.rdoc +233 -0
- data/vendor/diy/Rakefile +33 -0
- data/vendor/diy/TODO.txt +9 -0
- data/vendor/diy/diy.gemspec +131 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/diy/lib/diy.rb +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/diy/lib/diy/factory.rb +0 -0
- data/vendor/diy/sample_code/car.rb +7 -0
- data/vendor/diy/sample_code/chassis.rb +5 -0
- data/vendor/diy/sample_code/diy_example.rb +26 -0
- data/vendor/diy/sample_code/engine.rb +5 -0
- data/vendor/diy/sample_code/objects.yml +10 -0
- data/vendor/diy/test/constructor.rb +119 -0
- data/vendor/diy/test/diy_test.rb +608 -0
- data/vendor/diy/test/factory_test.rb +79 -0
- data/vendor/diy/test/files/broken_construction.yml +7 -0
- data/vendor/diy/test/files/cat/cat.rb +3 -0
- data/vendor/diy/test/files/cat/extra_conflict.yml +5 -0
- data/vendor/diy/test/files/cat/heritage.rb +2 -0
- data/vendor/diy/test/files/cat/needs_input.yml +3 -0
- data/vendor/diy/test/files/cat/the_cat_lineage.rb +1 -0
- data/vendor/diy/test/files/dog/dog_model.rb +3 -0
- data/vendor/diy/test/files/dog/dog_presenter.rb +3 -0
- data/vendor/diy/test/files/dog/dog_view.rb +2 -0
- data/vendor/diy/test/files/dog/file_resolver.rb +2 -0
- data/vendor/diy/test/files/dog/other_thing.rb +2 -0
- data/vendor/diy/test/files/dog/simple.yml +11 -0
- data/vendor/diy/test/files/donkey/foo.rb +8 -0
- data/vendor/diy/test/files/donkey/foo/bar/qux.rb +7 -0
- data/vendor/diy/test/files/factory/beef.rb +5 -0
- data/vendor/diy/test/files/factory/dog.rb +6 -0
- data/vendor/diy/test/files/factory/factory.yml +19 -0
- data/vendor/diy/test/files/factory/farm/llama.rb +7 -0
- data/vendor/diy/test/files/factory/farm/pork.rb +7 -0
- data/vendor/diy/test/files/factory/kitten.rb +13 -0
- data/vendor/diy/test/files/fud/objects.yml +13 -0
- data/vendor/diy/test/files/fud/toy.rb +14 -0
- data/vendor/diy/test/files/functions/attached_things_builder.rb +2 -0
- data/vendor/diy/test/files/functions/invalid_method.yml +5 -0
- data/vendor/diy/test/files/functions/method_extractor.rb +3 -0
- data/vendor/diy/test/files/functions/nonsingleton_objects.yml +6 -0
- data/vendor/diy/test/files/functions/objects.yml +22 -0
- data/vendor/diy/test/files/functions/thing.rb +3 -0
- data/vendor/diy/test/files/functions/thing_builder.rb +25 -0
- data/vendor/diy/test/files/functions/things_builder.rb +3 -0
- data/vendor/diy/test/files/gnu/objects.yml +14 -0
- data/vendor/diy/test/files/gnu/thinger.rb +7 -0
- data/vendor/diy/test/files/goat/base.rb +8 -0
- data/vendor/diy/test/files/goat/can.rb +6 -0
- data/vendor/diy/test/files/goat/goat.rb +6 -0
- data/vendor/diy/test/files/goat/objects.yml +12 -0
- data/vendor/diy/test/files/goat/paper.rb +6 -0
- data/vendor/diy/test/files/goat/plane.rb +7 -0
- data/vendor/diy/test/files/goat/shirt.rb +6 -0
- data/vendor/diy/test/files/goat/wings.rb +8 -0
- data/vendor/diy/test/files/horse/holder_thing.rb +3 -0
- data/vendor/diy/test/files/horse/objects.yml +7 -0
- data/vendor/diy/test/files/namespace/animal/bird.rb +5 -0
- data/vendor/diy/test/files/namespace/animal/cat.rb +5 -0
- data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +8 -0
- data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +7 -0
- data/vendor/diy/test/files/namespace/bad_module_specified.yml +8 -0
- data/vendor/diy/test/files/namespace/class_name_combine.yml +8 -0
- data/vendor/diy/test/files/namespace/hello.txt +1 -0
- data/vendor/diy/test/files/namespace/no_module_specified.yml +8 -0
- data/vendor/diy/test/files/namespace/objects.yml +21 -0
- data/vendor/diy/test/files/namespace/road.rb +2 -0
- data/vendor/diy/test/files/namespace/sky.rb +2 -0
- data/vendor/diy/test/files/namespace/subcontext.yml +22 -0
- data/vendor/diy/test/files/non_singleton/air.rb +2 -0
- data/vendor/diy/test/files/non_singleton/fat_cat.rb +3 -0
- data/vendor/diy/test/files/non_singleton/objects.yml +19 -0
- data/vendor/diy/test/files/non_singleton/pig.rb +3 -0
- data/vendor/diy/test/files/non_singleton/thread_spinner.rb +3 -0
- data/vendor/diy/test/files/non_singleton/tick.rb +3 -0
- data/vendor/diy/test/files/non_singleton/yard.rb +2 -0
- data/vendor/diy/test/files/yak/core_model.rb +3 -0
- data/vendor/diy/test/files/yak/core_presenter.rb +3 -0
- data/vendor/diy/test/files/yak/core_view.rb +1 -0
- data/vendor/diy/test/files/yak/data_source.rb +1 -0
- data/vendor/diy/test/files/yak/fringe_model.rb +3 -0
- data/vendor/diy/test/files/yak/fringe_presenter.rb +3 -0
- data/vendor/diy/test/files/yak/fringe_view.rb +1 -0
- data/vendor/diy/test/files/yak/giant_squid.rb +3 -0
- data/vendor/diy/test/files/yak/krill.rb +2 -0
- data/vendor/diy/test/files/yak/my_objects.yml +21 -0
- data/vendor/diy/test/files/yak/sub_sub_context_test.yml +27 -0
- data/vendor/diy/test/test_helper.rb +55 -0
- data/vendor/hardmock/CHANGES +78 -0
- data/vendor/hardmock/LICENSE +7 -0
- data/vendor/hardmock/README +70 -0
- data/vendor/hardmock/Rakefile +8 -0
- data/vendor/hardmock/config/environment.rb +12 -0
- data/vendor/hardmock/lib/assert_error.rb +23 -0
- data/vendor/hardmock/lib/extend_test_unit.rb +14 -0
- data/vendor/hardmock/lib/hardmock.rb +86 -0
- data/vendor/hardmock/lib/hardmock/errors.rb +22 -0
- data/vendor/hardmock/lib/hardmock/expectation.rb +229 -0
- data/vendor/hardmock/lib/hardmock/expectation_builder.rb +9 -0
- data/vendor/hardmock/lib/hardmock/expector.rb +26 -0
- data/vendor/hardmock/lib/hardmock/method_cleanout.rb +33 -0
- data/vendor/hardmock/lib/hardmock/mock.rb +180 -0
- data/vendor/hardmock/lib/hardmock/mock_control.rb +53 -0
- data/vendor/hardmock/lib/hardmock/stubbing.rb +210 -0
- data/vendor/hardmock/lib/hardmock/trapper.rb +31 -0
- data/vendor/hardmock/lib/hardmock/utils.rb +9 -0
- data/vendor/hardmock/lib/test_unit_before_after.rb +169 -0
- data/vendor/hardmock/rake_tasks/rdoc.rake +19 -0
- data/vendor/hardmock/rake_tasks/rdoc_options.rb +4 -0
- data/vendor/hardmock/rake_tasks/test.rake +22 -0
- data/vendor/hardmock/test/functional/assert_error_test.rb +52 -0
- data/vendor/hardmock/test/functional/auto_verify_test.rb +178 -0
- data/vendor/hardmock/test/functional/direct_mock_usage_test.rb +396 -0
- data/vendor/hardmock/test/functional/hardmock_test.rb +434 -0
- data/vendor/hardmock/test/functional/stubbing_test.rb +479 -0
- data/vendor/hardmock/test/test_helper.rb +43 -0
- data/vendor/hardmock/test/unit/expectation_builder_test.rb +19 -0
- data/vendor/hardmock/test/unit/expectation_test.rb +372 -0
- data/vendor/hardmock/test/unit/expector_test.rb +57 -0
- data/vendor/hardmock/test/unit/method_cleanout_test.rb +36 -0
- data/vendor/hardmock/test/unit/mock_control_test.rb +175 -0
- data/vendor/hardmock/test/unit/mock_test.rb +279 -0
- data/vendor/hardmock/test/unit/test_unit_before_after_test.rb +452 -0
- data/vendor/hardmock/test/unit/trapper_test.rb +62 -0
- data/vendor/hardmock/test/unit/verify_error_test.rb +40 -0
- data/vendor/unity/auto/colour_prompt.rb +94 -0
- data/vendor/unity/auto/colour_reporter.rb +39 -0
- data/vendor/unity/auto/generate_module.rb +202 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/unity/auto/generate_test_runner.rb +0 -0
- data/vendor/unity/auto/test_file_filter.rb +23 -0
- data/vendor/unity/auto/unity_test_summary.rb +139 -0
- data/vendor/unity/release/build.info +2 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/unity/release/version.info +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/unity/src/unity.c +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/unity/src/unity.h +0 -0
- data/{new_project_template/vendor/ceedling/vendor → vendor}/unity/src/unity_internals.h +94 -6
- metadata +443 -237
- data/.vim +0 -1
- data/.yardopts +0 -1
- data/LICENSE +0 -19
- data/Rakefile +0 -118
- data/ceedling-gem.sublime-project +0 -8
- data/examples/blinky/.DS_Store +0 -0
- data/examples/temp_sensor/src/AT91SAM7X256.h +0 -2556
- data/examples/temp_sensor/src/UsartGetChar.c +0 -6
- data/examples/temp_sensor/src/UsartGetChar.h +0 -8
- data/examples/temp_sensor/test/test_AdcHardwareConfigurator.c +0 -43
- data/examples/temp_sensor/test/test_AdcTemperatureSensor.c +0 -47
- data/examples/temp_sensor/test/test_TimerConfigurator.c +0 -112
- data/examples/temp_sensor/test/test_TimerInterruptConfigurator.c +0 -78
- data/examples/temp_sensor/test/test_TimerInterruptHandler.c +0 -66
- data/examples/temp_sensor/test/test_UsartConfigurator.c +0 -77
- data/examples/temp_sensor/test/test_UsartGetChar.c +0 -17
- data/examples/temp_sensor/test/test_UsartPutChar.c +0 -43
- data/examples/temp_sensor/test/test_UsartTransmitBufferStatus.c +0 -22
- data/new_project_template/build/.gitkeep +0 -0
- data/new_project_template/src/.gitkeep +0 -0
- data/new_project_template/test/.gitkeep +0 -0
- data/new_project_template/test/support/.gitkeep +0 -0
- data/new_project_template/vendor/ceedling/docs/CExceptionSummary.pdf +0 -0
- data/new_project_template/vendor/ceedling/docs/CMock Summary.pdf +0 -0
- data/new_project_template/vendor/ceedling/docs/Ceedling Packet.pdf +0 -0
- data/new_project_template/vendor/ceedling/docs/Unity Summary.pdf +0 -0
- data/new_project_template/vendor/ceedling/lib/preprocessinator_extractor.rb +0 -36
- data/new_project_template/vendor/ceedling/release/build.info +0 -1
- data/new_project_template/vendor/ceedling/vendor/c_exception/release/build.info +0 -1
- data/new_project_template/vendor/ceedling/vendor/cmock/release/build.info +0 -1
- data/new_project_template/vendor/ceedling/vendor/unity/release/build.info +0 -1
@@ -0,0 +1,180 @@
|
|
1
|
+
|
2
|
+
module Hardmock
|
3
|
+
# Mock is used to set expectations in your test. Most of the time you'll use
|
4
|
+
# <tt>#expects</tt> to create expectations.
|
5
|
+
#
|
6
|
+
# Aside from the scant few control methods (like +expects+, +trap+ and +_verify+)
|
7
|
+
# all calls made on a Mock instance will be immediately applied to the internal
|
8
|
+
# expectation mechanism.
|
9
|
+
#
|
10
|
+
# * If the method call was expected and all the parameters match properly, execution continues
|
11
|
+
# * If the expectation was configured with an expectation block, the block is invoked
|
12
|
+
# * If the expectation was set up to raise an error, the error is raised now
|
13
|
+
# * If the expectation was set up to return a value, it is returned
|
14
|
+
# * If the method call was _not_ expected, or the parameter values are wrong, an ExpectationError is raised.
|
15
|
+
class Mock
|
16
|
+
include Hardmock::MethodCleanout
|
17
|
+
|
18
|
+
# Create a new Mock instance with a name and a MockControl to support it.
|
19
|
+
# If not given, a MockControl is made implicitly for this Mock alone; this means
|
20
|
+
# expectations for this mock are not tied to other expectations in your test.
|
21
|
+
#
|
22
|
+
# It's not recommended to use a Mock directly; see Hardmock and
|
23
|
+
# Hardmock#create_mocks for the more wholistic approach.
|
24
|
+
def initialize(name, mock_control=nil)
|
25
|
+
@name = name
|
26
|
+
@control = mock_control || MockControl.new
|
27
|
+
@expectation_builder = ExpectationBuilder.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def inspect
|
31
|
+
"<Mock #{@name}>"
|
32
|
+
end
|
33
|
+
|
34
|
+
# Begin declaring an expectation for this Mock.
|
35
|
+
#
|
36
|
+
# == Simple Examples
|
37
|
+
# Expect the +customer+ to be queried for +account+, and return <tt>"The
|
38
|
+
# Account"</tt>:
|
39
|
+
# @customer.expects.account.returns "The Account"
|
40
|
+
#
|
41
|
+
# Expect the +withdraw+ method to be called, and raise an exception when it
|
42
|
+
# is (see Expectation#raises for more info):
|
43
|
+
# @cash_machine.expects.withdraw(20,:dollars).raises("not enough money")
|
44
|
+
#
|
45
|
+
# Expect +customer+ to have its +user_name+ set
|
46
|
+
# @customer.expects.user_name = 'Big Boss'
|
47
|
+
#
|
48
|
+
# Expect +customer+ to have its +user_name+ set, and raise a RuntimeException when
|
49
|
+
# that happens:
|
50
|
+
# @customer.expects('user_name=', "Big Boss").raises "lost connection"
|
51
|
+
#
|
52
|
+
# Expect +evaluate+ to be passed a block, and when that happens, pass a value
|
53
|
+
# to the block (see Expectation#yields for more info):
|
54
|
+
# @cruncher.expects.evaluate.yields("some data").returns("some results")
|
55
|
+
#
|
56
|
+
#
|
57
|
+
# == Expectation Blocks
|
58
|
+
# To do special handling of expected method calls when they occur, you
|
59
|
+
# may pass a block to your expectation, like:
|
60
|
+
# @page_scraper.expects.handle_content do |address,request,status|
|
61
|
+
# assert_not_nil address, "Can't abide nil addresses"
|
62
|
+
# assert_equal "http-get", request.method, "Can only handle GET"
|
63
|
+
# assert status > 200 and status < 300, status, "Failed status"
|
64
|
+
# "Simulated results #{request.content.downcase}"
|
65
|
+
# end
|
66
|
+
# In this example, when <tt>page_scraper.handle_content</tt> is called, its
|
67
|
+
# three arguments are passed to the <i>expectation block</i> and evaluated
|
68
|
+
# using the above assertions. The last value in the block will be used
|
69
|
+
# as the return value for +handle_content+
|
70
|
+
#
|
71
|
+
# You may specify arguments to the expected method call, just like any normal
|
72
|
+
# expectation, and those arguments will be pre-validated before being passed
|
73
|
+
# to the expectation block. This is useful when you know all of the
|
74
|
+
# expected values but still need to do something programmatic.
|
75
|
+
#
|
76
|
+
# If the method being invoked on the mock accepts a block, that block will be
|
77
|
+
# passed to your expectation block as the last (or only) argument. Eg, the
|
78
|
+
# convenience method +yields+ can be replaced with the more explicit:
|
79
|
+
# @cruncher.expects.evaluate do |block|
|
80
|
+
# block.call "some data"
|
81
|
+
# "some results"
|
82
|
+
# end
|
83
|
+
#
|
84
|
+
# The result value of the expectation block becomes the return value for the
|
85
|
+
# expected method call. This can be overidden by using the +returns+ method:
|
86
|
+
# @cruncher.expects.evaluate do |block|
|
87
|
+
# block.call "some data"
|
88
|
+
# "some results"
|
89
|
+
# end.returns("the actual value")
|
90
|
+
#
|
91
|
+
# <b>Additionally</b>, the resulting value of the expectation block is stored
|
92
|
+
# in the +block_value+ field on the expectation. If you've saved a reference
|
93
|
+
# to your expectation, you may retrieve the block value once the expectation
|
94
|
+
# has been met.
|
95
|
+
#
|
96
|
+
# evaluation_event = @cruncher.expects.evaluate do |block|
|
97
|
+
# block.call "some data"
|
98
|
+
# "some results"
|
99
|
+
# end.returns("the actual value")
|
100
|
+
#
|
101
|
+
# result = @cruncher.evaluate do |input|
|
102
|
+
# puts input # => 'some data'
|
103
|
+
# end
|
104
|
+
# # result is 'the actual value'
|
105
|
+
#
|
106
|
+
# evaluation_event.block_value # => 'some results'
|
107
|
+
#
|
108
|
+
def expects(*args, &block)
|
109
|
+
expector = Expector.new(self,@control,@expectation_builder)
|
110
|
+
# If there are no args, we return the Expector
|
111
|
+
return expector if args.empty?
|
112
|
+
# If there ARE args, we set up the expectation right here and return it
|
113
|
+
expector.send(args.shift.to_sym, *args, &block)
|
114
|
+
end
|
115
|
+
alias_method :expect, :expects
|
116
|
+
alias_method :should_receive, :expects
|
117
|
+
|
118
|
+
# Special-case convenience: #trap sets up an expectation for a method
|
119
|
+
# that will take a block. That block, when sent to the expected method, will
|
120
|
+
# be trapped and stored in the expectation's +block_value+ field.
|
121
|
+
# The Expectation#trigger method may then be used to invoke that block.
|
122
|
+
#
|
123
|
+
# Like +expects+, the +trap+ mechanism can be followed by +raises+ or +returns+.
|
124
|
+
#
|
125
|
+
# _Unlike_ +expects+, you may not use an expectation block with +trap+. If
|
126
|
+
# the expected method takes arguments in addition to the block, they must
|
127
|
+
# be specified in the arguments to the +trap+ call itself.
|
128
|
+
#
|
129
|
+
# == Example
|
130
|
+
#
|
131
|
+
# create_mocks :address_book, :editor_form
|
132
|
+
#
|
133
|
+
# # Expect a subscription on the :person_added event for @address_book:
|
134
|
+
# person_event = @address_book.trap.subscribe(:person_added)
|
135
|
+
#
|
136
|
+
# # The runtime code would look like:
|
137
|
+
# @address_book.subscribe :person_added do |person_name|
|
138
|
+
# @editor_form.name = person_name
|
139
|
+
# end
|
140
|
+
#
|
141
|
+
# # At this point, the expectation for 'subscribe' is met and the
|
142
|
+
# # block has been captured. But we're not done:
|
143
|
+
# @editor_form.expects.name = "David"
|
144
|
+
#
|
145
|
+
# # Now invoke the block we trapped earlier:
|
146
|
+
# person_event.trigger "David"
|
147
|
+
#
|
148
|
+
# verify_mocks
|
149
|
+
def trap(*args)
|
150
|
+
Trapper.new(self,@control,ExpectationBuilder.new)
|
151
|
+
end
|
152
|
+
|
153
|
+
def method_missing(mname,*args) #:nodoc:
|
154
|
+
block = nil
|
155
|
+
block = Proc.new if block_given?
|
156
|
+
@control.apply_method_call(self,mname,args,block)
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
def _control #:nodoc:
|
161
|
+
@control
|
162
|
+
end
|
163
|
+
|
164
|
+
def _name #:nodoc:
|
165
|
+
@name
|
166
|
+
end
|
167
|
+
|
168
|
+
# Verify that all expectations are fulfilled. NOTE: this method triggers
|
169
|
+
# validation on the _control_ for this mock, so all Mocks that share the
|
170
|
+
# MockControl with this instance will be included in the verification.
|
171
|
+
#
|
172
|
+
# <b>Only use this method if you are managing your own Mocks and their controls.</b>
|
173
|
+
#
|
174
|
+
# Normal usage of Hardmock doesn't require you to call this; let
|
175
|
+
# Hardmock#verify_mocks do it for you.
|
176
|
+
def _verify
|
177
|
+
@control.verify
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'hardmock/utils'
|
2
|
+
|
3
|
+
module Hardmock
|
4
|
+
class MockControl #:nodoc:
|
5
|
+
include Utils
|
6
|
+
attr_accessor :name
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
clear_expectations
|
10
|
+
end
|
11
|
+
|
12
|
+
def happy?
|
13
|
+
@expectations.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def disappointed?
|
17
|
+
@disappointed
|
18
|
+
end
|
19
|
+
|
20
|
+
def add_expectation(expectation)
|
21
|
+
# puts "MockControl #{self.object_id.to_s(16)} adding expectation: #{expectation}"
|
22
|
+
@expectations << expectation
|
23
|
+
end
|
24
|
+
|
25
|
+
def apply_method_call(mock,mname,args,block)
|
26
|
+
# Are we even expecting any sort of call?
|
27
|
+
if happy?
|
28
|
+
@disappointed = true
|
29
|
+
raise ExpectationError.new("Surprise call to #{format_method_call_string(mock,mname,args)}")
|
30
|
+
end
|
31
|
+
|
32
|
+
begin
|
33
|
+
@expectations.shift.apply_method_call(mock,mname,args,block)
|
34
|
+
rescue Exception => ouch
|
35
|
+
@disappointed = true
|
36
|
+
raise ouch
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def verify
|
41
|
+
# puts "MockControl #{self.object_id.to_s(16)} verify: happy? #{happy?}"
|
42
|
+
@disappointed = !happy?
|
43
|
+
raise VerifyError.new("Unmet expectations", @expectations) unless happy?
|
44
|
+
end
|
45
|
+
|
46
|
+
def clear_expectations
|
47
|
+
@expectations = []
|
48
|
+
@disappointed = false
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,210 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# Stubbing support
|
4
|
+
#
|
5
|
+
# Stubs methods on classes and instances
|
6
|
+
#
|
7
|
+
|
8
|
+
# Why's "metaid.rb" stuff crunched down:
|
9
|
+
class Object #:nodoc:#
|
10
|
+
def hm_metaclass #:nodoc:#
|
11
|
+
class << self
|
12
|
+
self
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def hm_meta_eval(&blk) #:nodoc:#
|
17
|
+
hm_metaclass.instance_eval(&blk)
|
18
|
+
end
|
19
|
+
|
20
|
+
def hm_meta_def(name, &blk) #:nodoc:#
|
21
|
+
hm_meta_eval { define_method name, &blk }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
module Hardmock
|
28
|
+
|
29
|
+
# == Hardmock: Stubbing and Mocking Concrete Methods
|
30
|
+
#
|
31
|
+
# Hardmock lets you stub and/or mock methods on concrete classes or objects.
|
32
|
+
#
|
33
|
+
# * To "stub" a concrete method is to rig it to return the same thing always, disregarding any arguments.
|
34
|
+
# * To "mock" a concrete method is to surplant its funcionality by delegating to a mock object who will cover this behavior.
|
35
|
+
#
|
36
|
+
# Mocked methods have their expectations considered along with all other mock object expectations.
|
37
|
+
#
|
38
|
+
# If you use stubbing or concrete mocking in the absence (or before creation) of other mocks, you need to invoke <tt>prepare_hardmock_control</tt>.
|
39
|
+
# Once <tt>verify_mocks</tt> or <tt>clear_expectaions</tt> is called, the overriden behavior in the target objects is restored.
|
40
|
+
#
|
41
|
+
# == Examples
|
42
|
+
#
|
43
|
+
# River.stubs!(:sounds_like).returns("gurgle")
|
44
|
+
#
|
45
|
+
# River.expects!(:jump).returns("splash")
|
46
|
+
#
|
47
|
+
# rogue.stubs!(:sounds_like).returns("pshshsh")
|
48
|
+
#
|
49
|
+
# rogue.expects!(:rawhide_tanning_solvents).returns("giant snapping turtles")
|
50
|
+
#
|
51
|
+
module Stubbing
|
52
|
+
# Exists only for documentation
|
53
|
+
end
|
54
|
+
|
55
|
+
class ReplacedMethod #:nodoc:#
|
56
|
+
attr_reader :target, :method_name
|
57
|
+
|
58
|
+
def initialize(target, method_name)
|
59
|
+
@target = target
|
60
|
+
@method_name = method_name
|
61
|
+
|
62
|
+
Hardmock.track_replaced_method self
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class StubbedMethod < ReplacedMethod #:nodoc:#
|
67
|
+
def invoke(args)
|
68
|
+
raise @raises if @raises
|
69
|
+
@return_value
|
70
|
+
end
|
71
|
+
|
72
|
+
def returns(stubbed_return)
|
73
|
+
@return_value = stubbed_return
|
74
|
+
end
|
75
|
+
|
76
|
+
def raises(err)
|
77
|
+
err = RuntimeError.new(err) unless err.kind_of?(Exception)
|
78
|
+
@raises = err
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class ::Object
|
83
|
+
def stubs!(method_name)
|
84
|
+
method_name = method_name.to_s
|
85
|
+
already_stubbed = Hardmock.has_replaced_method?(self, method_name)
|
86
|
+
|
87
|
+
stubbed_method = Hardmock::StubbedMethod.new(self, method_name)
|
88
|
+
|
89
|
+
|
90
|
+
unless _is_mock? or already_stubbed
|
91
|
+
if methods.include?(method_name.to_s)
|
92
|
+
hm_meta_eval do
|
93
|
+
alias_method "_hardmock_original_#{method_name}".to_sym, method_name.to_sym
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
hm_meta_def method_name do |*args|
|
99
|
+
stubbed_method.invoke(args)
|
100
|
+
end
|
101
|
+
|
102
|
+
stubbed_method
|
103
|
+
end
|
104
|
+
|
105
|
+
def expects!(method_name, *args, &block)
|
106
|
+
if self._is_mock?
|
107
|
+
raise Hardmock::StubbingError, "Cannot use 'expects!(:#{method_name})' on a Mock object; try 'expects' instead"
|
108
|
+
end
|
109
|
+
|
110
|
+
method_name = method_name.to_s
|
111
|
+
|
112
|
+
@_my_mock = Mock.new(_my_name, $main_mock_control) if @_my_mock.nil?
|
113
|
+
|
114
|
+
unless Hardmock.has_replaced_method?(self, method_name)
|
115
|
+
# Track the method as replaced
|
116
|
+
Hardmock::ReplacedMethod.new(self, method_name)
|
117
|
+
|
118
|
+
# Preserver original implementation of the method by aliasing it away
|
119
|
+
if methods.include?(method_name)
|
120
|
+
hm_meta_eval do
|
121
|
+
alias_method "_hardmock_original_#{method_name}".to_sym, method_name.to_sym
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# Re-define the method to utilize our patron mock instance.
|
126
|
+
# (This global-temp-var thing is hokey but I was having difficulty generating
|
127
|
+
# code for the meta class.)
|
128
|
+
begin
|
129
|
+
$method_text_temp = %{
|
130
|
+
def #{method_name}(*args,&block)
|
131
|
+
@_my_mock.__send__(:#{method_name}, *args, &block)
|
132
|
+
end
|
133
|
+
}
|
134
|
+
class << self
|
135
|
+
eval $method_text_temp
|
136
|
+
end
|
137
|
+
ensure
|
138
|
+
$method_text_temp = nil
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
return @_my_mock.expects(method_name, *args, &block)
|
143
|
+
end
|
144
|
+
|
145
|
+
def _is_mock?
|
146
|
+
self.kind_of?(Mock)
|
147
|
+
end
|
148
|
+
|
149
|
+
def _my_name
|
150
|
+
self.kind_of?(Class) ? self.name : self.class.name
|
151
|
+
end
|
152
|
+
|
153
|
+
def _clear_mock
|
154
|
+
@_my_mock = nil
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
159
|
+
class ::NilClass
|
160
|
+
# Use this only if you really mean it
|
161
|
+
alias_method :intentionally_stubs!, :stubs!
|
162
|
+
|
163
|
+
# Use this only if you really mean it
|
164
|
+
alias_method :intentionally_expects!, :expects!
|
165
|
+
|
166
|
+
# Overridden to protect against accidental nil reference self delusion
|
167
|
+
def stubs!(mname)
|
168
|
+
raise StubbingError, "Cannot stub #{mname} method on nil. (If you really mean to, try 'intentionally_stubs!')"
|
169
|
+
end
|
170
|
+
|
171
|
+
# Overridden to protect against accidental nil reference self delusion
|
172
|
+
def expects!(mname, *args)
|
173
|
+
raise StubbingError, "Cannot mock #{mname} method on nil. (If you really mean to, try 'intentionally_expects!')"
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
class << self
|
178
|
+
def track_replaced_method(replaced_method)
|
179
|
+
all_replaced_methods << replaced_method
|
180
|
+
end
|
181
|
+
|
182
|
+
def all_replaced_methods
|
183
|
+
$all_replaced_methods ||= []
|
184
|
+
end
|
185
|
+
|
186
|
+
def has_replaced_method?(obj, method_name)
|
187
|
+
hits = all_replaced_methods.select do |replaced|
|
188
|
+
(replaced.target.object_id == obj.object_id) and (replaced.method_name.to_s == method_name.to_s)
|
189
|
+
end
|
190
|
+
return !hits.empty?
|
191
|
+
end
|
192
|
+
|
193
|
+
def restore_all_replaced_methods
|
194
|
+
all_replaced_methods.each do |replaced|
|
195
|
+
unless replaced.target._is_mock?
|
196
|
+
backed_up = "_hardmock_original_#{replaced.method_name}"
|
197
|
+
if replaced.target.methods.include?(backed_up)
|
198
|
+
replaced.target.hm_meta_eval do
|
199
|
+
alias_method replaced.method_name.to_sym, backed_up.to_sym
|
200
|
+
end
|
201
|
+
end
|
202
|
+
replaced.target._clear_mock
|
203
|
+
end
|
204
|
+
end
|
205
|
+
all_replaced_methods.clear
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test/unit/assertions'
|
2
|
+
require 'hardmock/errors'
|
3
|
+
|
4
|
+
module Hardmock
|
5
|
+
class Trapper #:nodoc:
|
6
|
+
include Hardmock::MethodCleanout
|
7
|
+
|
8
|
+
def initialize(mock,mock_control,expectation_builder)
|
9
|
+
@mock = mock
|
10
|
+
@mock_control = mock_control
|
11
|
+
@expectation_builder = expectation_builder
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(mname, *args)
|
15
|
+
if block_given?
|
16
|
+
raise ExpectationError.new("Don't pass blocks when using 'trap' (setting exepectations for '#{mname}')")
|
17
|
+
end
|
18
|
+
|
19
|
+
the_block = lambda { |target_block| target_block }
|
20
|
+
expectation = @expectation_builder.build_expectation(
|
21
|
+
:mock => @mock,
|
22
|
+
:method => mname,
|
23
|
+
:arguments => args,
|
24
|
+
:suppress_arguments_to_block => true,
|
25
|
+
:block => the_block)
|
26
|
+
|
27
|
+
@mock_control.add_expectation expectation
|
28
|
+
expectation
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|