ceedling 0.19.0 → 0.20.2
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 +4 -4
- data/Rakefile +10 -10
- data/bin/ceedling +205 -92
- data/ceedling-0.19.0.gem +0 -0
- data/config/test_environment.rb +12 -12
- data/docs/CeedlingPacket.md +866 -853
- data/docs/CeedlingPacket.odt +0 -0
- data/docs/CeedlingPacket.pdf +0 -0
- data/examples/temp_sensor/rakefile.rb +4 -4
- data/examples/temp_sensor/src/AdcConductor.c +42 -42
- data/examples/temp_sensor/src/AdcConductor.h +13 -13
- data/examples/temp_sensor/src/AdcHardware.c +27 -27
- data/examples/temp_sensor/src/AdcHardware.h +11 -11
- data/examples/temp_sensor/src/AdcHardwareConfigurator.c +18 -18
- data/examples/temp_sensor/src/AdcHardwareConfigurator.h +10 -10
- data/examples/temp_sensor/src/AdcModel.c +33 -33
- data/examples/temp_sensor/src/AdcModel.h +13 -13
- data/examples/temp_sensor/src/AdcTemperatureSensor.c +51 -51
- data/examples/temp_sensor/src/AdcTemperatureSensor.h +10 -10
- data/examples/temp_sensor/src/Executor.c +25 -25
- data/examples/temp_sensor/src/Executor.h +9 -9
- data/examples/temp_sensor/src/IntrinsicsWrapper.c +18 -18
- data/examples/temp_sensor/src/IntrinsicsWrapper.h +7 -7
- data/examples/temp_sensor/src/Main.c +46 -46
- data/examples/temp_sensor/src/Main.h +7 -7
- data/examples/temp_sensor/src/Model.c +10 -10
- data/examples/temp_sensor/src/Model.h +8 -8
- data/examples/temp_sensor/src/ModelConfig.h +7 -7
- data/examples/temp_sensor/src/TaskScheduler.c +72 -72
- data/examples/temp_sensor/src/TaskScheduler.h +11 -11
- data/examples/temp_sensor/src/TemperatureCalculator.c +27 -27
- data/examples/temp_sensor/src/TemperatureCalculator.h +8 -8
- data/examples/temp_sensor/src/TemperatureFilter.c +38 -38
- data/examples/temp_sensor/src/TemperatureFilter.h +10 -10
- data/examples/temp_sensor/src/TimerConductor.c +15 -15
- data/examples/temp_sensor/src/TimerConductor.h +9 -9
- data/examples/temp_sensor/src/TimerConfigurator.c +51 -51
- data/examples/temp_sensor/src/TimerConfigurator.h +15 -15
- data/examples/temp_sensor/src/TimerHardware.c +15 -15
- data/examples/temp_sensor/src/TimerHardware.h +8 -8
- data/examples/temp_sensor/src/TimerInterruptConfigurator.c +55 -55
- data/examples/temp_sensor/src/TimerInterruptConfigurator.h +13 -13
- data/examples/temp_sensor/src/TimerInterruptHandler.c +25 -25
- data/examples/temp_sensor/src/TimerInterruptHandler.h +10 -10
- data/examples/temp_sensor/src/TimerModel.c +9 -9
- data/examples/temp_sensor/src/TimerModel.h +8 -8
- data/examples/temp_sensor/src/Types.h +90 -90
- data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +18 -18
- data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +8 -8
- data/examples/temp_sensor/src/UsartConductor.c +21 -21
- data/examples/temp_sensor/src/UsartConductor.h +7 -7
- data/examples/temp_sensor/src/UsartConfigurator.c +39 -39
- data/examples/temp_sensor/src/UsartConfigurator.h +13 -13
- data/examples/temp_sensor/src/UsartHardware.c +22 -22
- data/examples/temp_sensor/src/UsartHardware.h +9 -9
- data/examples/temp_sensor/src/UsartModel.c +34 -34
- data/examples/temp_sensor/src/UsartModel.h +10 -10
- data/examples/temp_sensor/src/UsartPutChar.c +16 -16
- data/examples/temp_sensor/src/UsartPutChar.h +8 -8
- data/examples/temp_sensor/src/UsartTransmitBufferStatus.c +7 -7
- data/examples/temp_sensor/src/UsartTransmitBufferStatus.h +8 -8
- data/examples/temp_sensor/test/TestAdcConductor.c +121 -121
- data/examples/temp_sensor/test/TestAdcHardware.c +44 -44
- data/examples/temp_sensor/test/TestAdcModel.c +33 -33
- data/examples/temp_sensor/test/TestExecutor.c +36 -36
- data/examples/temp_sensor/test/TestMain.c +24 -24
- data/examples/temp_sensor/test/TestModel.c +20 -20
- data/examples/temp_sensor/test/TestTaskScheduler.c +104 -104
- data/examples/temp_sensor/test/TestTemperatureCalculator.c +33 -33
- data/examples/temp_sensor/test/TestTemperatureFilter.c +79 -79
- data/examples/temp_sensor/test/TestTimerConductor.c +32 -32
- data/examples/temp_sensor/test/TestTimerHardware.c +26 -26
- data/examples/temp_sensor/test/TestTimerModel.c +18 -18
- data/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +21 -21
- data/examples/temp_sensor/test/TestUsartConductor.c +40 -40
- data/examples/temp_sensor/test/TestUsartHardware.c +36 -36
- data/examples/temp_sensor/test/TestUsartModel.c +36 -36
- data/examples/temp_sensor/test/support/UnityHelper.c +12 -12
- data/examples/temp_sensor/test/support/UnityHelper.h +12 -12
- data/lib/ceedling/configurator_builder.rb +1 -1
- data/lib/ceedling/tasks_base.rake +10 -2
- data/lib/ceedling/tool_executor.rb +3 -0
- data/lib/ceedling/version.rb +3 -3
- data/license.txt +1 -1
- data/plugins/bullseye/bullseye.rake +162 -162
- data/plugins/gcov/gcov.rake +152 -152
- data/plugins/module_generator/lib/module_generator.rb +145 -145
- data/plugins/module_generator/module_generator.rake +14 -14
- data/plugins/stdout_gtestlike_tests_report/assets/template.erb +84 -0
- data/plugins/stdout_gtestlike_tests_report/assets/template.erb copy +59 -0
- data/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml +4 -0
- data/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb +43 -0
- data/spec/system/deployment_spec.rb +0 -1
- data/test_graveyard/integration/paths_test.rb +80 -80
- data/test_graveyard/integration/rake_rules_aux_dependencies_test.rb +75 -75
- data/test_graveyard/integration/rake_rules_cmock_test.rb +74 -74
- data/test_graveyard/integration/rake_rules_preprocess_test.rb +178 -178
- data/test_graveyard/integration/rake_rules_test.rb +268 -268
- data/test_graveyard/integration/rake_tasks_test.rb +103 -103
- data/test_graveyard/integration_test_helper.rb +34 -34
- data/test_graveyard/rakefile_rules.rb +10 -10
- data/test_graveyard/rakefile_rules_aux_dependencies.rb +10 -10
- data/test_graveyard/rakefile_rules_cmock.rb +10 -10
- data/test_graveyard/rakefile_rules_preprocess.rb +10 -10
- data/test_graveyard/rakefile_tasks.rb +10 -10
- data/test_graveyard/system/file_system_test.rb +78 -78
- data/test_graveyard/system/project_mocks_test.rb +38 -38
- data/test_graveyard/system/project_simple_test.rb +39 -39
- data/test_graveyard/system/rule_mocks_test.rb +44 -44
- data/test_graveyard/system/rule_runners_test.rb +44 -44
- data/test_graveyard/system_test_helper.rb +73 -73
- data/test_graveyard/test_helper.rb +93 -93
- data/test_graveyard/unit/busted/configurator_builder_test.rb +569 -569
- data/test_graveyard/unit/busted/configurator_helper_test.rb +234 -234
- data/test_graveyard/unit/busted/configurator_test.rb +232 -232
- data/test_graveyard/unit/busted/configurator_validator_test.rb +169 -169
- data/test_graveyard/unit/busted/deep_merge_fix_test.rb +55 -55
- data/test_graveyard/unit/busted/dependinator_test.rb +129 -129
- data/test_graveyard/unit/busted/file_finder_helper_test.rb +45 -45
- data/test_graveyard/unit/busted/file_finder_test.rb +114 -114
- data/test_graveyard/unit/busted/file_path_utils_test.rb +97 -97
- data/test_graveyard/unit/busted/file_system_utils_test.rb +21 -21
- data/test_graveyard/unit/busted/generator_test.rb +187 -187
- data/test_graveyard/unit/busted/generator_test_results_test.rb +129 -129
- data/test_graveyard/unit/busted/generator_test_runner_test.rb +475 -475
- data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +39 -39
- data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +156 -156
- data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +93 -93
- data/test_graveyard/unit/busted/preprocessinator_test.rb +57 -57
- data/test_graveyard/unit/busted/project_file_loader_test.rb +142 -142
- data/test_graveyard/unit/busted/setupinator_test.rb +45 -45
- data/test_graveyard/unit/busted/streaminator_test.rb +49 -49
- data/test_graveyard/unit/busted/task_invoker_test.rb +69 -69
- data/test_graveyard/unit/busted/test_includes_extractor_test.rb +111 -111
- data/test_graveyard/unit/busted/test_invoker_helper_test.rb +62 -62
- data/test_graveyard/unit/busted/test_invoker_test.rb +47 -47
- data/test_graveyard/unit/busted/tool_executor_helper_test.rb +100 -100
- data/test_graveyard/unit/busted/tool_executor_test.rb +351 -351
- data/test_graveyard/unit/busted/verbosinator_test.rb +65 -65
- data/test_graveyard/unit/preprocessinator_extractor_test.rb +731 -731
- data/test_graveyard/unit_test_helper.rb +16 -16
- data/vendor/c_exception/LICENSE.txt +30 -30
- data/vendor/c_exception/README.md +11 -1
- data/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
- data/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
- data/vendor/c_exception/docs/readme.txt +261 -242
- data/vendor/c_exception/lib/CException.c +46 -46
- data/vendor/c_exception/lib/CException.h +110 -86
- data/vendor/c_exception/makefile +23 -23
- data/vendor/c_exception/test/CExceptionConfig.h +46 -46
- data/vendor/c_exception/test/TestException.c +391 -342
- data/vendor/c_exception/test/TestException_Runner.c +5 -12
- data/vendor/c_exception/vendor/unity/README.md +211 -0
- data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
- data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
- data/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
- data/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
- data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
- data/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
- data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
- data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
- data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
- data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
- data/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
- data/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
- data/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
- data/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
- data/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
- data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
- data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
- data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
- data/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
- data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
- data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
- data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
- data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
- data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
- data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
- data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
- data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
- data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
- data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
- data/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
- data/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
- data/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
- data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
- data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
- data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
- data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
- data/vendor/c_exception/vendor/unity/release/build.info +1 -1
- data/vendor/c_exception/vendor/unity/release/version.info +1 -1
- data/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
- data/vendor/c_exception/vendor/unity/src/unity.h +290 -307
- data/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
- data/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
- data/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
- data/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
- data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
- data/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
- data/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
- data/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
- data/vendor/c_exception/vendor/unity/{targets/gcc_64.yml → test/targets/gcc_auto_limits.yml} +46 -45
- data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
- data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
- data/vendor/{cmock/vendor/c_exception/vendor/unity/targets/gcc_64.yml → c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -45
- data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
- data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
- data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
- data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
- data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
- data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
- data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
- data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
- data/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
- data/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
- data/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
- data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
- data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
- data/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
- data/vendor/cmock/docs/CMock_Summary.md +3 -0
- data/vendor/cmock/lib/cmock_config.rb +1 -0
- data/vendor/cmock/lib/cmock_file_writer.rb +7 -3
- data/vendor/cmock/lib/cmock_generator.rb +3 -2
- data/vendor/cmock/lib/cmock_header_parser.rb +12 -5
- data/vendor/cmock/release/version.info +1 -1
- data/vendor/cmock/test/system/test_compilation/parsing.h +3 -0
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +7 -0
- data/vendor/cmock/test/unit/cmock_header_parser_test.rb +57 -1
- data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -30
- data/vendor/cmock/vendor/c_exception/README.md +11 -1
- 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/readme.txt +261 -242
- data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -46
- data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -86
- data/vendor/cmock/vendor/c_exception/makefile +23 -23
- data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -46
- data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -342
- data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +5 -12
- data/vendor/cmock/vendor/c_exception/vendor/unity/README.md +211 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
- data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
- data/vendor/cmock/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
- data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
- data/vendor/cmock/vendor/c_exception/vendor/unity/release/build.info +1 -1
- data/vendor/cmock/vendor/c_exception/vendor/unity/release/version.info +1 -1
- data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
- data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.h +290 -307
- data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
- data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
- data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/{targets/gcc_32.yml → test/targets/gcc_auto_limits.yml} +46 -44
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
- data/vendor/{c_exception/vendor/unity/targets/gcc_32.yml → cmock/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -44
- data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
- data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
- data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
- data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
- data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
- data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
- data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
- data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
- data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
- data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
- data/vendor/cmock/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +30 -13
- data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +260 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +96 -93
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -19
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +18 -17
- data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +66 -5
- data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +2 -1
- data/vendor/cmock/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +187 -27
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +14 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +6 -5
- data/vendor/cmock/vendor/unity/release/version.info +1 -1
- data/vendor/cmock/vendor/unity/src/unity.c +38 -27
- data/vendor/cmock/vendor/unity/src/unity.h +5 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +22 -18
- data/vendor/cmock/vendor/unity/test/Makefile +52 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +7 -4
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +4 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -1
- data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_sizeof.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -1
- data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +0 -1
- data/vendor/cmock/vendor/unity/test/testdata/testsample.c +19 -2
- data/vendor/cmock/vendor/unity/test/tests/testunity.c +55 -4
- data/vendor/unity/auto/generate_test_runner.rb +4 -2
- data/vendor/unity/auto/stylize_as_junit.rb +260 -0
- data/vendor/unity/extras/fixture/src/unity_fixture.c +24 -41
- data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
- data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +5 -7
- data/vendor/unity/extras/fixture/test/Makefile +53 -8
- data/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
- data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +129 -32
- data/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +6 -0
- data/vendor/unity/extras/fixture/test/unity_output_Spy.c +4 -4
- data/vendor/unity/release/version.info +1 -1
- data/vendor/unity/src/unity.c +32 -21
- data/vendor/unity/src/unity.h +5 -0
- data/vendor/unity/src/unity_internals.h +7 -3
- data/vendor/unity/test/Makefile +52 -0
- data/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
- data/vendor/unity/test/expectdata/testsample_def.c +4 -0
- data/vendor/unity/test/expectdata/testsample_head1.c +4 -0
- data/vendor/unity/test/expectdata/testsample_head1.h +7 -4
- data/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
- data/vendor/unity/test/expectdata/testsample_new1.c +4 -0
- data/vendor/unity/test/expectdata/testsample_new2.c +4 -0
- data/vendor/unity/test/expectdata/testsample_param.c +4 -0
- data/vendor/unity/test/expectdata/testsample_run1.c +4 -0
- data/vendor/unity/test/expectdata/testsample_run2.c +4 -0
- data/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
- data/vendor/unity/test/testdata/testsample.c +19 -2
- data/vendor/unity/test/tests/testunity.c +35 -4
- metadata +75 -52
- data/ceedling-0.18.0.gem +0 -0
- data/docs/CeedlingLogo.png +0 -0
- data/vendor/c_exception/vendor/unity/Gemfile +0 -4
- data/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
- data/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
- data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
- data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
- data/vendor/c_exception/vendor/unity/makefile +0 -37
- data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile +0 -4
- data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
- data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
- data/vendor/cmock/vendor/c_exception/vendor/unity/makefile +0 -37
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
#include "CException.h"
|
|
2
|
-
|
|
3
|
-
#pragma GCC diagnostic push
|
|
4
|
-
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
|
5
|
-
volatile CEXCEPTION_FRAME_T CExceptionFrames[CEXCEPTION_NUM_ID] = {{ 0 }};
|
|
6
|
-
#pragma GCC diagnostic pop
|
|
7
|
-
|
|
8
|
-
//------------------------------------------------------------------------------------------
|
|
9
|
-
// Throw
|
|
10
|
-
//------------------------------------------------------------------------------------------
|
|
11
|
-
void Throw(CEXCEPTION_T ExceptionID)
|
|
12
|
-
{
|
|
13
|
-
unsigned int MY_ID = CEXCEPTION_GET_ID;
|
|
14
|
-
CExceptionFrames[MY_ID].Exception = ExceptionID;
|
|
15
|
-
if (CExceptionFrames[MY_ID].pFrame)
|
|
16
|
-
{
|
|
17
|
-
longjmp(*CExceptionFrames[MY_ID].pFrame, 1);
|
|
18
|
-
}
|
|
19
|
-
CEXCEPTION_NO_CATCH_HANDLER(ExceptionID);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
//------------------------------------------------------------------------------------------
|
|
23
|
-
// Explanation of what it's all for:
|
|
24
|
-
//------------------------------------------------------------------------------------------
|
|
25
|
-
/*
|
|
26
|
-
#define Try
|
|
27
|
-
{ <- give us some local scope. most compilers are happy with this
|
|
28
|
-
jmp_buf *PrevFrame, NewFrame; <- prev frame points to the last try block's frame. new frame gets created on stack for this Try block
|
|
29
|
-
unsigned int MY_ID = CEXCEPTION_GET_ID; <- look up this task's id for use in frame array. always 0 if single-tasking
|
|
30
|
-
PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; <- set pointer to point at old frame (which array is currently pointing at)
|
|
31
|
-
CExceptionFrames[MY_ID].pFrame = &NewFrame; <- set array to point at my new frame instead, now
|
|
32
|
-
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- initialize my exception id to be NONE
|
|
33
|
-
if (setjmp(NewFrame) == 0) { <- do setjmp. it returns 1 if longjump called, otherwise 0
|
|
34
|
-
if (&PrevFrame) <- this is here to force proper scoping. it requires braces or a single line to be but after Try, otherwise won't compile. This is always true at this point.
|
|
35
|
-
|
|
36
|
-
#define Catch(e)
|
|
37
|
-
else { } <- this also forces proper scoping. Without this they could stick their own 'else' in and it would get ugly
|
|
38
|
-
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- no errors happened, so just set the exception id to NONE (in case it was corrupted)
|
|
39
|
-
}
|
|
40
|
-
else <- an exception occurred
|
|
41
|
-
{ e = CExceptionFrames[MY_ID].Exception; e=e;} <- assign the caught exception id to the variable passed in.
|
|
42
|
-
CExceptionFrames[MY_ID].pFrame = PrevFrame; <- make the pointer in the array point at the previous frame again, as if NewFrame never existed.
|
|
43
|
-
} <- finish off that local scope we created to have our own variables
|
|
44
|
-
if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE) <- start the actual 'catch' processing if we have an exception id saved away
|
|
45
|
-
*/
|
|
46
|
-
|
|
1
|
+
#include "CException.h"
|
|
2
|
+
|
|
3
|
+
#pragma GCC diagnostic push
|
|
4
|
+
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
|
5
|
+
volatile CEXCEPTION_FRAME_T CExceptionFrames[CEXCEPTION_NUM_ID] = {{ 0 }};
|
|
6
|
+
#pragma GCC diagnostic pop
|
|
7
|
+
|
|
8
|
+
//------------------------------------------------------------------------------------------
|
|
9
|
+
// Throw
|
|
10
|
+
//------------------------------------------------------------------------------------------
|
|
11
|
+
void Throw(CEXCEPTION_T ExceptionID)
|
|
12
|
+
{
|
|
13
|
+
unsigned int MY_ID = CEXCEPTION_GET_ID;
|
|
14
|
+
CExceptionFrames[MY_ID].Exception = ExceptionID;
|
|
15
|
+
if (CExceptionFrames[MY_ID].pFrame)
|
|
16
|
+
{
|
|
17
|
+
longjmp(*CExceptionFrames[MY_ID].pFrame, 1);
|
|
18
|
+
}
|
|
19
|
+
CEXCEPTION_NO_CATCH_HANDLER(ExceptionID);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//------------------------------------------------------------------------------------------
|
|
23
|
+
// Explanation of what it's all for:
|
|
24
|
+
//------------------------------------------------------------------------------------------
|
|
25
|
+
/*
|
|
26
|
+
#define Try
|
|
27
|
+
{ <- give us some local scope. most compilers are happy with this
|
|
28
|
+
jmp_buf *PrevFrame, NewFrame; <- prev frame points to the last try block's frame. new frame gets created on stack for this Try block
|
|
29
|
+
unsigned int MY_ID = CEXCEPTION_GET_ID; <- look up this task's id for use in frame array. always 0 if single-tasking
|
|
30
|
+
PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; <- set pointer to point at old frame (which array is currently pointing at)
|
|
31
|
+
CExceptionFrames[MY_ID].pFrame = &NewFrame; <- set array to point at my new frame instead, now
|
|
32
|
+
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- initialize my exception id to be NONE
|
|
33
|
+
if (setjmp(NewFrame) == 0) { <- do setjmp. it returns 1 if longjump called, otherwise 0
|
|
34
|
+
if (&PrevFrame) <- this is here to force proper scoping. it requires braces or a single line to be but after Try, otherwise won't compile. This is always true at this point.
|
|
35
|
+
|
|
36
|
+
#define Catch(e)
|
|
37
|
+
else { } <- this also forces proper scoping. Without this they could stick their own 'else' in and it would get ugly
|
|
38
|
+
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- no errors happened, so just set the exception id to NONE (in case it was corrupted)
|
|
39
|
+
}
|
|
40
|
+
else <- an exception occurred
|
|
41
|
+
{ e = CExceptionFrames[MY_ID].Exception; e=e;} <- assign the caught exception id to the variable passed in.
|
|
42
|
+
CExceptionFrames[MY_ID].pFrame = PrevFrame; <- make the pointer in the array point at the previous frame again, as if NewFrame never existed.
|
|
43
|
+
} <- finish off that local scope we created to have our own variables
|
|
44
|
+
if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE) <- start the actual 'catch' processing if we have an exception id saved away
|
|
45
|
+
*/
|
|
46
|
+
|
|
@@ -1,86 +1,110 @@
|
|
|
1
|
-
#ifndef _CEXCEPTION_H
|
|
2
|
-
#define _CEXCEPTION_H
|
|
3
|
-
|
|
4
|
-
#include <setjmp.h>
|
|
5
|
-
|
|
6
|
-
#ifdef __cplusplus
|
|
7
|
-
extern "C"
|
|
8
|
-
{
|
|
9
|
-
#endif
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//To Use CException, you have a number of options:
|
|
13
|
-
//1. Just include it and run with the defaults
|
|
14
|
-
//2. Define any of the following symbols at the command line to override them
|
|
15
|
-
//3. Include a header file before CException.h everywhere which defines any of these
|
|
16
|
-
//4. Create an Exception.h in your path, and just define EXCEPTION_USE_CONFIG_FILE first
|
|
17
|
-
|
|
18
|
-
#ifdef CEXCEPTION_USE_CONFIG_FILE
|
|
19
|
-
#include "CExceptionConfig.h"
|
|
20
|
-
#endif
|
|
21
|
-
|
|
22
|
-
//This is the value to assign when there isn't an exception
|
|
23
|
-
#ifndef CEXCEPTION_NONE
|
|
24
|
-
#define CEXCEPTION_NONE (0x5A5A5A5A)
|
|
25
|
-
#endif
|
|
26
|
-
|
|
27
|
-
//This is number of exception stacks to keep track of (one per task)
|
|
28
|
-
#ifndef CEXCEPTION_NUM_ID
|
|
29
|
-
#define CEXCEPTION_NUM_ID (1) //there is only the one stack by default
|
|
30
|
-
#endif
|
|
31
|
-
|
|
32
|
-
//This is the method of getting the current exception stack index (0 if only one stack)
|
|
33
|
-
#ifndef CEXCEPTION_GET_ID
|
|
34
|
-
#define CEXCEPTION_GET_ID (0) //use the first index always because there is only one anyway
|
|
35
|
-
#endif
|
|
36
|
-
|
|
37
|
-
//The type to use to store the exception values.
|
|
38
|
-
#ifndef CEXCEPTION_T
|
|
39
|
-
#define CEXCEPTION_T unsigned int
|
|
40
|
-
#endif
|
|
41
|
-
|
|
42
|
-
//This is an optional special handler for when there is no global Catch
|
|
43
|
-
#ifndef CEXCEPTION_NO_CATCH_HANDLER
|
|
44
|
-
#define CEXCEPTION_NO_CATCH_HANDLER(id)
|
|
45
|
-
#endif
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
1
|
+
#ifndef _CEXCEPTION_H
|
|
2
|
+
#define _CEXCEPTION_H
|
|
3
|
+
|
|
4
|
+
#include <setjmp.h>
|
|
5
|
+
|
|
6
|
+
#ifdef __cplusplus
|
|
7
|
+
extern "C"
|
|
8
|
+
{
|
|
9
|
+
#endif
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
//To Use CException, you have a number of options:
|
|
13
|
+
//1. Just include it and run with the defaults
|
|
14
|
+
//2. Define any of the following symbols at the command line to override them
|
|
15
|
+
//3. Include a header file before CException.h everywhere which defines any of these
|
|
16
|
+
//4. Create an Exception.h in your path, and just define EXCEPTION_USE_CONFIG_FILE first
|
|
17
|
+
|
|
18
|
+
#ifdef CEXCEPTION_USE_CONFIG_FILE
|
|
19
|
+
#include "CExceptionConfig.h"
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
//This is the value to assign when there isn't an exception
|
|
23
|
+
#ifndef CEXCEPTION_NONE
|
|
24
|
+
#define CEXCEPTION_NONE (0x5A5A5A5A)
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
//This is number of exception stacks to keep track of (one per task)
|
|
28
|
+
#ifndef CEXCEPTION_NUM_ID
|
|
29
|
+
#define CEXCEPTION_NUM_ID (1) //there is only the one stack by default
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
//This is the method of getting the current exception stack index (0 if only one stack)
|
|
33
|
+
#ifndef CEXCEPTION_GET_ID
|
|
34
|
+
#define CEXCEPTION_GET_ID (0) //use the first index always because there is only one anyway
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
//The type to use to store the exception values.
|
|
38
|
+
#ifndef CEXCEPTION_T
|
|
39
|
+
#define CEXCEPTION_T unsigned int
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
//This is an optional special handler for when there is no global Catch
|
|
43
|
+
#ifndef CEXCEPTION_NO_CATCH_HANDLER
|
|
44
|
+
#define CEXCEPTION_NO_CATCH_HANDLER(id)
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
//These hooks allow you to inject custom code into places, particularly useful for saving and restoring additional state
|
|
48
|
+
#ifndef CEXCEPTION_HOOK_START_TRY
|
|
49
|
+
#define CEXCEPTION_HOOK_START_TRY
|
|
50
|
+
#endif
|
|
51
|
+
#ifndef CEXCEPTION_HOOK_HAPPY_TRY
|
|
52
|
+
#define CEXCEPTION_HOOK_HAPPY_TRY
|
|
53
|
+
#endif
|
|
54
|
+
#ifndef CEXCEPTION_HOOK_AFTER_TRY
|
|
55
|
+
#define CEXCEPTION_HOOK_AFTER_TRY
|
|
56
|
+
#endif
|
|
57
|
+
#ifndef CEXCEPTION_HOOK_START_CATCH
|
|
58
|
+
#define CEXCEPTION_HOOK_START_CATCH
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
//exception frame structures
|
|
62
|
+
typedef struct {
|
|
63
|
+
jmp_buf* pFrame;
|
|
64
|
+
CEXCEPTION_T volatile Exception;
|
|
65
|
+
} CEXCEPTION_FRAME_T;
|
|
66
|
+
|
|
67
|
+
//actual root frame storage (only one if single-tasking)
|
|
68
|
+
extern volatile CEXCEPTION_FRAME_T CExceptionFrames[];
|
|
69
|
+
|
|
70
|
+
//Try (see C file for explanation)
|
|
71
|
+
#define Try \
|
|
72
|
+
{ \
|
|
73
|
+
jmp_buf *PrevFrame, NewFrame; \
|
|
74
|
+
unsigned int MY_ID = CEXCEPTION_GET_ID; \
|
|
75
|
+
PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; \
|
|
76
|
+
CExceptionFrames[MY_ID].pFrame = (jmp_buf*)(&NewFrame); \
|
|
77
|
+
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
|
|
78
|
+
CEXCEPTION_HOOK_START_TRY; \
|
|
79
|
+
if (setjmp(NewFrame) == 0) { \
|
|
80
|
+
if (1)
|
|
81
|
+
|
|
82
|
+
//Catch (see C file for explanation)
|
|
83
|
+
#define Catch(e) \
|
|
84
|
+
else { } \
|
|
85
|
+
CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
|
|
86
|
+
CEXCEPTION_HOOK_HAPPY_TRY; \
|
|
87
|
+
} \
|
|
88
|
+
else \
|
|
89
|
+
{ \
|
|
90
|
+
e = CExceptionFrames[MY_ID].Exception; \
|
|
91
|
+
(void)e; \
|
|
92
|
+
CEXCEPTION_HOOK_START_CATCH; \
|
|
93
|
+
} \
|
|
94
|
+
CExceptionFrames[MY_ID].pFrame = PrevFrame; \
|
|
95
|
+
CEXCEPTION_HOOK_AFTER_TRY; \
|
|
96
|
+
} \
|
|
97
|
+
if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE)
|
|
98
|
+
|
|
99
|
+
//Throw an Error
|
|
100
|
+
void Throw(CEXCEPTION_T ExceptionID);
|
|
101
|
+
|
|
102
|
+
//Just exit the Try block and skip the Catch.
|
|
103
|
+
#define ExitTry() Throw(CEXCEPTION_NONE)
|
|
104
|
+
|
|
105
|
+
#ifdef __cplusplus
|
|
106
|
+
} // extern "C"
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
#endif // _CEXCEPTION_H
|
data/vendor/c_exception/makefile
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
#Tool and Lib Locations
|
|
2
|
-
C_COMPILER=gcc
|
|
3
|
-
C_LIBS=C:/MinGW/lib
|
|
4
|
-
UNITY_DIR=vendor/unity/src
|
|
5
|
-
|
|
6
|
-
#Test File To Be Created
|
|
7
|
-
OUT_FILE=test_cexceptions
|
|
8
|
-
ifeq ($(OS),Windows_NT)
|
|
9
|
-
OUT_EXTENSION=.exe
|
|
10
|
-
else
|
|
11
|
-
OUT_EXTENSION=.out
|
|
12
|
-
endif
|
|
13
|
-
|
|
14
|
-
#Options
|
|
15
|
-
SRC_FILES=lib/CException.c test/TestException.c test/TestException_Runner.c $(UNITY_DIR)/unity.c
|
|
16
|
-
INC_DIRS=-Ilib -Itest -I$(UNITY_DIR)
|
|
17
|
-
LIB_DIRS=-L$(C_LIBS)
|
|
18
|
-
SYMBOLS=-DTEST -DCEXCEPTION_USE_CONFIG_FILE
|
|
19
|
-
|
|
20
|
-
#Default Task: Compile And Run Tests
|
|
21
|
-
default:
|
|
22
|
-
$(C_COMPILER) $(INC_DIRS) $(LIB_DIRS) $(SYMBOLS) $(SRC_FILES) -o $(OUT_FILE)$(OUT_EXTENSION)
|
|
23
|
-
$(OUT_FILE)$(OUT_EXTENSION)
|
|
1
|
+
#Tool and Lib Locations
|
|
2
|
+
C_COMPILER=gcc
|
|
3
|
+
C_LIBS=C:/MinGW/lib
|
|
4
|
+
UNITY_DIR=vendor/unity/src
|
|
5
|
+
|
|
6
|
+
#Test File To Be Created
|
|
7
|
+
OUT_FILE=test_cexceptions
|
|
8
|
+
ifeq ($(OS),Windows_NT)
|
|
9
|
+
OUT_EXTENSION=.exe
|
|
10
|
+
else
|
|
11
|
+
OUT_EXTENSION=.out
|
|
12
|
+
endif
|
|
13
|
+
|
|
14
|
+
#Options
|
|
15
|
+
SRC_FILES=lib/CException.c test/TestException.c test/TestException_Runner.c $(UNITY_DIR)/unity.c
|
|
16
|
+
INC_DIRS=-Ilib -Itest -I$(UNITY_DIR)
|
|
17
|
+
LIB_DIRS=-L$(C_LIBS)
|
|
18
|
+
SYMBOLS=-DTEST -DCEXCEPTION_USE_CONFIG_FILE
|
|
19
|
+
|
|
20
|
+
#Default Task: Compile And Run Tests
|
|
21
|
+
default:
|
|
22
|
+
$(C_COMPILER) $(INC_DIRS) $(LIB_DIRS) $(SYMBOLS) $(SRC_FILES) -o $(OUT_FILE)$(OUT_EXTENSION)
|
|
23
|
+
$(OUT_FILE)$(OUT_EXTENSION)
|
|
24
24
|
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
#ifndef _EXCEPTION_H
|
|
2
|
-
#define _EXCEPTION_H
|
|
3
|
-
|
|
4
|
-
#include "unity.h"
|
|
5
|
-
|
|
6
|
-
extern volatile int TestingTheFallback;
|
|
7
|
-
extern volatile int TestingTheFallbackId;
|
|
8
|
-
|
|
9
|
-
//Optionally define the exception type (something like an int which can be directly assigned)
|
|
10
|
-
#define CEXCEPTION_T int
|
|
11
|
-
|
|
12
|
-
// Optionally define the reserved value representing NO EXCEPTION
|
|
13
|
-
#define CEXCEPTION_NONE (1234)
|
|
14
|
-
|
|
15
|
-
// Optionally define a special handler for unhandled exceptions
|
|
16
|
-
#define CEXCEPTION_NO_CATCH_HANDLER(id) \
|
|
17
|
-
{ \
|
|
18
|
-
if (!TestingTheFallback) \
|
|
19
|
-
{ \
|
|
20
|
-
TEST_FAIL_MESSAGE("Unexpected Exception!"); \
|
|
21
|
-
} \
|
|
22
|
-
else \
|
|
23
|
-
{ \
|
|
24
|
-
TestingTheFallbackId = id; \
|
|
25
|
-
TestingTheFallback--; \
|
|
26
|
-
} \
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Multi-Tasking environments will need a couple of macros defined to make this library
|
|
30
|
-
// properly handle multiple exception stacks. You will need to include and required
|
|
31
|
-
// definitions, then define the following macros:
|
|
32
|
-
// EXCEPTION_GET_ID - returns the id of the current task indexed 0 to (numtasks - 1)
|
|
33
|
-
// EXCEPTION_NUM_ID - returns the number of tasks that might be returned
|
|
34
|
-
//
|
|
35
|
-
// For example, Quadros might include the following implementation:
|
|
36
|
-
#ifndef TEST
|
|
37
|
-
#include "OSAPI.h"
|
|
38
|
-
#define CEXCEPTION_GET_ID (KS_GetTaskID())
|
|
39
|
-
#define CEXCEPTION_NUM_ID (NTASKS + 1)
|
|
40
|
-
#endif
|
|
41
|
-
|
|
42
|
-
//This could be a good place to define/include some error ID's:
|
|
43
|
-
#define ERROR_ID_EVERYTHING_IS_BROKEN (0x88)
|
|
44
|
-
#define ERROR_ID_ONLY_THIS_IS_BROKEN (0x77)
|
|
45
|
-
|
|
46
|
-
#endif // _EXCEPTION_H
|
|
1
|
+
#ifndef _EXCEPTION_H
|
|
2
|
+
#define _EXCEPTION_H
|
|
3
|
+
|
|
4
|
+
#include "unity.h"
|
|
5
|
+
|
|
6
|
+
extern volatile int TestingTheFallback;
|
|
7
|
+
extern volatile int TestingTheFallbackId;
|
|
8
|
+
|
|
9
|
+
//Optionally define the exception type (something like an int which can be directly assigned)
|
|
10
|
+
#define CEXCEPTION_T int
|
|
11
|
+
|
|
12
|
+
// Optionally define the reserved value representing NO EXCEPTION
|
|
13
|
+
#define CEXCEPTION_NONE (1234)
|
|
14
|
+
|
|
15
|
+
// Optionally define a special handler for unhandled exceptions
|
|
16
|
+
#define CEXCEPTION_NO_CATCH_HANDLER(id) \
|
|
17
|
+
{ \
|
|
18
|
+
if (!TestingTheFallback) \
|
|
19
|
+
{ \
|
|
20
|
+
TEST_FAIL_MESSAGE("Unexpected Exception!"); \
|
|
21
|
+
} \
|
|
22
|
+
else \
|
|
23
|
+
{ \
|
|
24
|
+
TestingTheFallbackId = id; \
|
|
25
|
+
TestingTheFallback--; \
|
|
26
|
+
} \
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Multi-Tasking environments will need a couple of macros defined to make this library
|
|
30
|
+
// properly handle multiple exception stacks. You will need to include and required
|
|
31
|
+
// definitions, then define the following macros:
|
|
32
|
+
// EXCEPTION_GET_ID - returns the id of the current task indexed 0 to (numtasks - 1)
|
|
33
|
+
// EXCEPTION_NUM_ID - returns the number of tasks that might be returned
|
|
34
|
+
//
|
|
35
|
+
// For example, Quadros might include the following implementation:
|
|
36
|
+
#ifndef TEST
|
|
37
|
+
#include "OSAPI.h"
|
|
38
|
+
#define CEXCEPTION_GET_ID (KS_GetTaskID())
|
|
39
|
+
#define CEXCEPTION_NUM_ID (NTASKS + 1)
|
|
40
|
+
#endif
|
|
41
|
+
|
|
42
|
+
//This could be a good place to define/include some error ID's:
|
|
43
|
+
#define ERROR_ID_EVERYTHING_IS_BROKEN (0x88)
|
|
44
|
+
#define ERROR_ID_ONLY_THIS_IS_BROKEN (0x77)
|
|
45
|
+
|
|
46
|
+
#endif // _EXCEPTION_H
|
|
@@ -1,342 +1,391 @@
|
|
|
1
|
-
#include "unity.h"
|
|
2
|
-
#include "CException.h"
|
|
3
|
-
|
|
4
|
-
volatile int TestingTheFallback;
|
|
5
|
-
volatile int TestingTheFallbackId;
|
|
6
|
-
|
|
7
|
-
void setUp(void)
|
|
8
|
-
{
|
|
9
|
-
CExceptionFrames[0].pFrame = NULL;
|
|
10
|
-
TestingTheFallback = 0;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
void tearDown(void)
|
|
14
|
-
{
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
void test_BasicTryDoesNothingIfNoThrow(void)
|
|
18
|
-
{
|
|
19
|
-
int i = 0;
|
|
20
|
-
CEXCEPTION_T e = 0x5a;
|
|
21
|
-
|
|
22
|
-
Try
|
|
23
|
-
{
|
|
24
|
-
i += 1;
|
|
25
|
-
}
|
|
26
|
-
Catch(e)
|
|
27
|
-
{
|
|
28
|
-
TEST_FAIL_MESSAGE("Should Not Enter Catch If Not Thrown");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
//verify that e was untouched
|
|
32
|
-
TEST_ASSERT_EQUAL(0x5a, e);
|
|
33
|
-
|
|
34
|
-
// verify that i was incremented once
|
|
35
|
-
TEST_ASSERT_EQUAL(1, i);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
void test_BasicThrowAndCatch(void)
|
|
39
|
-
{
|
|
40
|
-
CEXCEPTION_T e;
|
|
41
|
-
|
|
42
|
-
Try
|
|
43
|
-
{
|
|
44
|
-
Throw(0xBE);
|
|
45
|
-
TEST_FAIL_MESSAGE("Should Have Thrown An Error")
|
|
46
|
-
}
|
|
47
|
-
Catch(e)
|
|
48
|
-
{
|
|
49
|
-
//verify that e has the right data
|
|
50
|
-
TEST_ASSERT_EQUAL(0xBE, e);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
//verify that e STILL has the right data
|
|
54
|
-
TEST_ASSERT_EQUAL(0xBE, e);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
void test_BasicThrowAndCatch_WithMiniSyntax(void)
|
|
58
|
-
{
|
|
59
|
-
CEXCEPTION_T e;
|
|
60
|
-
|
|
61
|
-
//Mini Throw and Catch
|
|
62
|
-
Try
|
|
63
|
-
Throw(0xEF);
|
|
64
|
-
Catch(e)
|
|
65
|
-
TEST_ASSERT_EQUAL(0xEF, e);
|
|
66
|
-
TEST_ASSERT_EQUAL(0xEF, e);
|
|
67
|
-
|
|
68
|
-
//Mini Passthrough
|
|
69
|
-
Try
|
|
70
|
-
e = 0;
|
|
71
|
-
Catch(e)
|
|
72
|
-
TEST_FAIL_MESSAGE("I shouldn't be caught because there was no throw");
|
|
73
|
-
|
|
74
|
-
TEST_ASSERT_EQUAL(0, e);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
void test_VerifyVolatilesSurviveThrowAndCatch(void)
|
|
78
|
-
{
|
|
79
|
-
volatile unsigned int VolVal = 0;
|
|
80
|
-
CEXCEPTION_T e;
|
|
81
|
-
|
|
82
|
-
Try
|
|
83
|
-
{
|
|
84
|
-
VolVal = 2;
|
|
85
|
-
Throw(0xBF);
|
|
86
|
-
TEST_FAIL_MESSAGE("Should Have Thrown An Error")
|
|
87
|
-
}
|
|
88
|
-
Catch(e)
|
|
89
|
-
{
|
|
90
|
-
VolVal += 2;
|
|
91
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
TEST_ASSERT_EQUAL(4, VolVal);
|
|
95
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
void HappyExceptionThrower(unsigned int ID)
|
|
99
|
-
{
|
|
100
|
-
if (ID != 0)
|
|
101
|
-
{
|
|
102
|
-
Throw(ID);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
void test_ThrowFromASubFunctionAndCatchInRootFunc(void)
|
|
107
|
-
{
|
|
108
|
-
volatile unsigned int ID = 0;
|
|
109
|
-
CEXCEPTION_T e;
|
|
110
|
-
|
|
111
|
-
Try
|
|
112
|
-
{
|
|
113
|
-
|
|
114
|
-
HappyExceptionThrower(0xBA);
|
|
115
|
-
TEST_FAIL_MESSAGE("Should Have Thrown An Exception");
|
|
116
|
-
}
|
|
117
|
-
Catch(e)
|
|
118
|
-
{
|
|
119
|
-
ID = e;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
//verify that I can pass that value to something else
|
|
123
|
-
TEST_ASSERT_EQUAL(0xBA, e);
|
|
124
|
-
//verify that ID and e have the same value
|
|
125
|
-
TEST_ASSERT_EQUAL(ID, e);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
void HappyExceptionRethrower(unsigned int ID)
|
|
129
|
-
{
|
|
130
|
-
CEXCEPTION_T e;
|
|
131
|
-
|
|
132
|
-
Try
|
|
133
|
-
{
|
|
134
|
-
Throw(ID);
|
|
135
|
-
}
|
|
136
|
-
Catch(e)
|
|
137
|
-
{
|
|
138
|
-
switch (e)
|
|
139
|
-
{
|
|
140
|
-
case 0xBD:
|
|
141
|
-
Throw(0xBF);
|
|
142
|
-
break;
|
|
143
|
-
default:
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
void test_ThrowAndCatchFromASubFunctionAndRethrowToCatchInRootFunc(void)
|
|
150
|
-
{
|
|
151
|
-
volatile unsigned int ID = 0;
|
|
152
|
-
CEXCEPTION_T e;
|
|
153
|
-
|
|
154
|
-
Try
|
|
155
|
-
{
|
|
156
|
-
HappyExceptionRethrower(0xBD);
|
|
157
|
-
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
158
|
-
}
|
|
159
|
-
Catch(e)
|
|
160
|
-
{
|
|
161
|
-
ID = 1;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
165
|
-
TEST_ASSERT_EQUAL(1, ID);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
void test_ThrowAndCatchFromASubFunctionAndNoRethrowToCatchInRootFunc(void)
|
|
169
|
-
{
|
|
170
|
-
CEXCEPTION_T e = 3;
|
|
171
|
-
|
|
172
|
-
Try
|
|
173
|
-
{
|
|
174
|
-
HappyExceptionRethrower(0xBF);
|
|
175
|
-
}
|
|
176
|
-
Catch(e)
|
|
177
|
-
{
|
|
178
|
-
TEST_FAIL_MESSAGE("Should Not Have Re-thrown Error (it should have already been caught)");
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
//verify that THIS e is still untouched, even though subfunction was touched
|
|
182
|
-
TEST_ASSERT_EQUAL(3, e);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThisDoesntCorruptExceptionId(void)
|
|
186
|
-
{
|
|
187
|
-
CEXCEPTION_T e;
|
|
188
|
-
|
|
189
|
-
Try
|
|
190
|
-
{
|
|
191
|
-
HappyExceptionThrower(0xBF);
|
|
192
|
-
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
193
|
-
}
|
|
194
|
-
Catch(e)
|
|
195
|
-
{
|
|
196
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
197
|
-
HappyExceptionRethrower(0x12);
|
|
198
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
199
|
-
}
|
|
200
|
-
TEST_ASSERT_EQUAL(0xBF, e);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThatEachExceptionIdIndependent(void)
|
|
204
|
-
{
|
|
205
|
-
CEXCEPTION_T e1, e2;
|
|
206
|
-
|
|
207
|
-
Try
|
|
208
|
-
{
|
|
209
|
-
HappyExceptionThrower(0xBF);
|
|
210
|
-
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
211
|
-
}
|
|
212
|
-
Catch(e1)
|
|
213
|
-
{
|
|
214
|
-
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
215
|
-
Try
|
|
216
|
-
{
|
|
217
|
-
HappyExceptionThrower(0x12);
|
|
218
|
-
}
|
|
219
|
-
Catch(e2)
|
|
220
|
-
{
|
|
221
|
-
TEST_ASSERT_EQUAL(0x12, e2);
|
|
222
|
-
}
|
|
223
|
-
TEST_ASSERT_EQUAL(0x12, e2);
|
|
224
|
-
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
225
|
-
}
|
|
226
|
-
TEST_ASSERT_EQUAL(0x12, e2);
|
|
227
|
-
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
void test_CanHaveMultipleTryBlocksInASingleFunction(void)
|
|
231
|
-
{
|
|
232
|
-
CEXCEPTION_T e;
|
|
233
|
-
|
|
234
|
-
Try
|
|
235
|
-
{
|
|
236
|
-
HappyExceptionThrower(0x01);
|
|
237
|
-
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
238
|
-
}
|
|
239
|
-
Catch(e)
|
|
240
|
-
{
|
|
241
|
-
TEST_ASSERT_EQUAL(0x01, e);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
Try
|
|
245
|
-
{
|
|
246
|
-
HappyExceptionThrower(0xF0);
|
|
247
|
-
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
248
|
-
}
|
|
249
|
-
Catch(e)
|
|
250
|
-
{
|
|
251
|
-
TEST_ASSERT_EQUAL(0xF0, e);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
void test_CanHaveNestedTryBlocksInASingleFunction_ThrowInside(void)
|
|
256
|
-
{
|
|
257
|
-
int i = 0;
|
|
258
|
-
CEXCEPTION_T e;
|
|
259
|
-
|
|
260
|
-
Try
|
|
261
|
-
{
|
|
262
|
-
Try
|
|
263
|
-
{
|
|
264
|
-
HappyExceptionThrower(0x01);
|
|
265
|
-
i = 1;
|
|
266
|
-
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
267
|
-
}
|
|
268
|
-
Catch(e)
|
|
269
|
-
{
|
|
270
|
-
TEST_ASSERT_EQUAL(0x01, e);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
Catch(e)
|
|
274
|
-
{
|
|
275
|
-
TEST_FAIL_MESSAGE("Should Have Been Caught By Inside Catch");
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// verify that i is still zero
|
|
279
|
-
TEST_ASSERT_EQUAL(0, i);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
void test_CanHaveNestedTryBlocksInASingleFunction_ThrowOutside(void)
|
|
283
|
-
{
|
|
284
|
-
int i = 0;
|
|
285
|
-
CEXCEPTION_T e;
|
|
286
|
-
|
|
287
|
-
Try
|
|
288
|
-
{
|
|
289
|
-
Try
|
|
290
|
-
{
|
|
291
|
-
i = 2;
|
|
292
|
-
}
|
|
293
|
-
Catch(e)
|
|
294
|
-
{
|
|
295
|
-
TEST_FAIL_MESSAGE("Should
|
|
296
|
-
}
|
|
297
|
-
HappyExceptionThrower(0x01);
|
|
298
|
-
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
299
|
-
}
|
|
300
|
-
Catch(e)
|
|
301
|
-
{
|
|
302
|
-
TEST_ASSERT_EQUAL(0x01, e);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// verify that i is 2
|
|
306
|
-
TEST_ASSERT_EQUAL(2, i);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
void test_AThrowWithoutATryCatchWillUseDefaultHandlerIfSpecified(void)
|
|
310
|
-
{
|
|
311
|
-
//Let the fallback handler know we're expecting it to get called this time, so don't fail
|
|
312
|
-
TestingTheFallback = 1;
|
|
313
|
-
|
|
314
|
-
Throw(0xBE);
|
|
315
|
-
|
|
316
|
-
//We know the fallback was run because it decrements the counter above
|
|
317
|
-
TEST_ASSERT_FALSE(TestingTheFallback);
|
|
318
|
-
TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
void test_AThrowWithoutOutsideATryCatchWillUseDefaultHandlerEvenAfterTryCatch(void)
|
|
322
|
-
{
|
|
323
|
-
CEXCEPTION_T e;
|
|
324
|
-
|
|
325
|
-
Try
|
|
326
|
-
{
|
|
327
|
-
//It's not really important that we do anything here.
|
|
328
|
-
}
|
|
329
|
-
Catch(e)
|
|
330
|
-
{
|
|
331
|
-
//The entire purpose here is just to make sure things get set back to using the default handler when done
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
//Let the fallback handler know we're expecting it to get called this time, so don't fail
|
|
335
|
-
TestingTheFallback = 1;
|
|
336
|
-
|
|
337
|
-
Throw(0xBE);
|
|
338
|
-
|
|
339
|
-
//We know the fallback was run because it decrements the counter above
|
|
340
|
-
TEST_ASSERT_FALSE(TestingTheFallback);
|
|
341
|
-
TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
|
|
342
|
-
}
|
|
1
|
+
#include "unity.h"
|
|
2
|
+
#include "CException.h"
|
|
3
|
+
|
|
4
|
+
volatile int TestingTheFallback;
|
|
5
|
+
volatile int TestingTheFallbackId;
|
|
6
|
+
|
|
7
|
+
void setUp(void)
|
|
8
|
+
{
|
|
9
|
+
CExceptionFrames[0].pFrame = NULL;
|
|
10
|
+
TestingTheFallback = 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void tearDown(void)
|
|
14
|
+
{
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
void test_BasicTryDoesNothingIfNoThrow(void)
|
|
18
|
+
{
|
|
19
|
+
int i = 0;
|
|
20
|
+
CEXCEPTION_T e = 0x5a;
|
|
21
|
+
|
|
22
|
+
Try
|
|
23
|
+
{
|
|
24
|
+
i += 1;
|
|
25
|
+
}
|
|
26
|
+
Catch(e)
|
|
27
|
+
{
|
|
28
|
+
TEST_FAIL_MESSAGE("Should Not Enter Catch If Not Thrown");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//verify that e was untouched
|
|
32
|
+
TEST_ASSERT_EQUAL(0x5a, e);
|
|
33
|
+
|
|
34
|
+
// verify that i was incremented once
|
|
35
|
+
TEST_ASSERT_EQUAL(1, i);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
void test_BasicThrowAndCatch(void)
|
|
39
|
+
{
|
|
40
|
+
CEXCEPTION_T e;
|
|
41
|
+
|
|
42
|
+
Try
|
|
43
|
+
{
|
|
44
|
+
Throw(0xBE);
|
|
45
|
+
TEST_FAIL_MESSAGE("Should Have Thrown An Error");
|
|
46
|
+
}
|
|
47
|
+
Catch(e)
|
|
48
|
+
{
|
|
49
|
+
//verify that e has the right data
|
|
50
|
+
TEST_ASSERT_EQUAL(0xBE, e);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//verify that e STILL has the right data
|
|
54
|
+
TEST_ASSERT_EQUAL(0xBE, e);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void test_BasicThrowAndCatch_WithMiniSyntax(void)
|
|
58
|
+
{
|
|
59
|
+
CEXCEPTION_T e;
|
|
60
|
+
|
|
61
|
+
//Mini Throw and Catch
|
|
62
|
+
Try
|
|
63
|
+
Throw(0xEF);
|
|
64
|
+
Catch(e)
|
|
65
|
+
TEST_ASSERT_EQUAL(0xEF, e);
|
|
66
|
+
TEST_ASSERT_EQUAL(0xEF, e);
|
|
67
|
+
|
|
68
|
+
//Mini Passthrough
|
|
69
|
+
Try
|
|
70
|
+
e = 0;
|
|
71
|
+
Catch(e)
|
|
72
|
+
TEST_FAIL_MESSAGE("I shouldn't be caught because there was no throw");
|
|
73
|
+
|
|
74
|
+
TEST_ASSERT_EQUAL(0, e);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void test_VerifyVolatilesSurviveThrowAndCatch(void)
|
|
78
|
+
{
|
|
79
|
+
volatile unsigned int VolVal = 0;
|
|
80
|
+
CEXCEPTION_T e;
|
|
81
|
+
|
|
82
|
+
Try
|
|
83
|
+
{
|
|
84
|
+
VolVal = 2;
|
|
85
|
+
Throw(0xBF);
|
|
86
|
+
TEST_FAIL_MESSAGE("Should Have Thrown An Error");
|
|
87
|
+
}
|
|
88
|
+
Catch(e)
|
|
89
|
+
{
|
|
90
|
+
VolVal += 2;
|
|
91
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
TEST_ASSERT_EQUAL(4, VolVal);
|
|
95
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
void HappyExceptionThrower(unsigned int ID)
|
|
99
|
+
{
|
|
100
|
+
if (ID != 0)
|
|
101
|
+
{
|
|
102
|
+
Throw(ID);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void test_ThrowFromASubFunctionAndCatchInRootFunc(void)
|
|
107
|
+
{
|
|
108
|
+
volatile unsigned int ID = 0;
|
|
109
|
+
CEXCEPTION_T e;
|
|
110
|
+
|
|
111
|
+
Try
|
|
112
|
+
{
|
|
113
|
+
|
|
114
|
+
HappyExceptionThrower(0xBA);
|
|
115
|
+
TEST_FAIL_MESSAGE("Should Have Thrown An Exception");
|
|
116
|
+
}
|
|
117
|
+
Catch(e)
|
|
118
|
+
{
|
|
119
|
+
ID = e;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//verify that I can pass that value to something else
|
|
123
|
+
TEST_ASSERT_EQUAL(0xBA, e);
|
|
124
|
+
//verify that ID and e have the same value
|
|
125
|
+
TEST_ASSERT_EQUAL(ID, e);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
void HappyExceptionRethrower(unsigned int ID)
|
|
129
|
+
{
|
|
130
|
+
CEXCEPTION_T e;
|
|
131
|
+
|
|
132
|
+
Try
|
|
133
|
+
{
|
|
134
|
+
Throw(ID);
|
|
135
|
+
}
|
|
136
|
+
Catch(e)
|
|
137
|
+
{
|
|
138
|
+
switch (e)
|
|
139
|
+
{
|
|
140
|
+
case 0xBD:
|
|
141
|
+
Throw(0xBF);
|
|
142
|
+
break;
|
|
143
|
+
default:
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
void test_ThrowAndCatchFromASubFunctionAndRethrowToCatchInRootFunc(void)
|
|
150
|
+
{
|
|
151
|
+
volatile unsigned int ID = 0;
|
|
152
|
+
CEXCEPTION_T e;
|
|
153
|
+
|
|
154
|
+
Try
|
|
155
|
+
{
|
|
156
|
+
HappyExceptionRethrower(0xBD);
|
|
157
|
+
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
158
|
+
}
|
|
159
|
+
Catch(e)
|
|
160
|
+
{
|
|
161
|
+
ID = 1;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
165
|
+
TEST_ASSERT_EQUAL(1, ID);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
void test_ThrowAndCatchFromASubFunctionAndNoRethrowToCatchInRootFunc(void)
|
|
169
|
+
{
|
|
170
|
+
CEXCEPTION_T e = 3;
|
|
171
|
+
|
|
172
|
+
Try
|
|
173
|
+
{
|
|
174
|
+
HappyExceptionRethrower(0xBF);
|
|
175
|
+
}
|
|
176
|
+
Catch(e)
|
|
177
|
+
{
|
|
178
|
+
TEST_FAIL_MESSAGE("Should Not Have Re-thrown Error (it should have already been caught)");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
//verify that THIS e is still untouched, even though subfunction was touched
|
|
182
|
+
TEST_ASSERT_EQUAL(3, e);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThisDoesntCorruptExceptionId(void)
|
|
186
|
+
{
|
|
187
|
+
CEXCEPTION_T e;
|
|
188
|
+
|
|
189
|
+
Try
|
|
190
|
+
{
|
|
191
|
+
HappyExceptionThrower(0xBF);
|
|
192
|
+
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
193
|
+
}
|
|
194
|
+
Catch(e)
|
|
195
|
+
{
|
|
196
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
197
|
+
HappyExceptionRethrower(0x12);
|
|
198
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
199
|
+
}
|
|
200
|
+
TEST_ASSERT_EQUAL(0xBF, e);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThatEachExceptionIdIndependent(void)
|
|
204
|
+
{
|
|
205
|
+
CEXCEPTION_T e1, e2;
|
|
206
|
+
|
|
207
|
+
Try
|
|
208
|
+
{
|
|
209
|
+
HappyExceptionThrower(0xBF);
|
|
210
|
+
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
211
|
+
}
|
|
212
|
+
Catch(e1)
|
|
213
|
+
{
|
|
214
|
+
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
215
|
+
Try
|
|
216
|
+
{
|
|
217
|
+
HappyExceptionThrower(0x12);
|
|
218
|
+
}
|
|
219
|
+
Catch(e2)
|
|
220
|
+
{
|
|
221
|
+
TEST_ASSERT_EQUAL(0x12, e2);
|
|
222
|
+
}
|
|
223
|
+
TEST_ASSERT_EQUAL(0x12, e2);
|
|
224
|
+
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
225
|
+
}
|
|
226
|
+
TEST_ASSERT_EQUAL(0x12, e2);
|
|
227
|
+
TEST_ASSERT_EQUAL(0xBF, e1);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
void test_CanHaveMultipleTryBlocksInASingleFunction(void)
|
|
231
|
+
{
|
|
232
|
+
CEXCEPTION_T e;
|
|
233
|
+
|
|
234
|
+
Try
|
|
235
|
+
{
|
|
236
|
+
HappyExceptionThrower(0x01);
|
|
237
|
+
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
238
|
+
}
|
|
239
|
+
Catch(e)
|
|
240
|
+
{
|
|
241
|
+
TEST_ASSERT_EQUAL(0x01, e);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
Try
|
|
245
|
+
{
|
|
246
|
+
HappyExceptionThrower(0xF0);
|
|
247
|
+
TEST_FAIL_MESSAGE("Should Have Thrown Exception");
|
|
248
|
+
}
|
|
249
|
+
Catch(e)
|
|
250
|
+
{
|
|
251
|
+
TEST_ASSERT_EQUAL(0xF0, e);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
void test_CanHaveNestedTryBlocksInASingleFunction_ThrowInside(void)
|
|
256
|
+
{
|
|
257
|
+
int i = 0;
|
|
258
|
+
CEXCEPTION_T e;
|
|
259
|
+
|
|
260
|
+
Try
|
|
261
|
+
{
|
|
262
|
+
Try
|
|
263
|
+
{
|
|
264
|
+
HappyExceptionThrower(0x01);
|
|
265
|
+
i = 1;
|
|
266
|
+
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
267
|
+
}
|
|
268
|
+
Catch(e)
|
|
269
|
+
{
|
|
270
|
+
TEST_ASSERT_EQUAL(0x01, e);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
Catch(e)
|
|
274
|
+
{
|
|
275
|
+
TEST_FAIL_MESSAGE("Should Have Been Caught By Inside Catch");
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// verify that i is still zero
|
|
279
|
+
TEST_ASSERT_EQUAL(0, i);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
void test_CanHaveNestedTryBlocksInASingleFunction_ThrowOutside(void)
|
|
283
|
+
{
|
|
284
|
+
int i = 0;
|
|
285
|
+
CEXCEPTION_T e;
|
|
286
|
+
|
|
287
|
+
Try
|
|
288
|
+
{
|
|
289
|
+
Try
|
|
290
|
+
{
|
|
291
|
+
i = 2;
|
|
292
|
+
}
|
|
293
|
+
Catch(e)
|
|
294
|
+
{
|
|
295
|
+
TEST_FAIL_MESSAGE("Should Not Be Caught Here");
|
|
296
|
+
}
|
|
297
|
+
HappyExceptionThrower(0x01);
|
|
298
|
+
TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
|
|
299
|
+
}
|
|
300
|
+
Catch(e)
|
|
301
|
+
{
|
|
302
|
+
TEST_ASSERT_EQUAL(0x01, e);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// verify that i is 2
|
|
306
|
+
TEST_ASSERT_EQUAL(2, i);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
void test_AThrowWithoutATryCatchWillUseDefaultHandlerIfSpecified(void)
|
|
310
|
+
{
|
|
311
|
+
//Let the fallback handler know we're expecting it to get called this time, so don't fail
|
|
312
|
+
TestingTheFallback = 1;
|
|
313
|
+
|
|
314
|
+
Throw(0xBE);
|
|
315
|
+
|
|
316
|
+
//We know the fallback was run because it decrements the counter above
|
|
317
|
+
TEST_ASSERT_FALSE(TestingTheFallback);
|
|
318
|
+
TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
void test_AThrowWithoutOutsideATryCatchWillUseDefaultHandlerEvenAfterTryCatch(void)
|
|
322
|
+
{
|
|
323
|
+
CEXCEPTION_T e;
|
|
324
|
+
|
|
325
|
+
Try
|
|
326
|
+
{
|
|
327
|
+
//It's not really important that we do anything here.
|
|
328
|
+
}
|
|
329
|
+
Catch(e)
|
|
330
|
+
{
|
|
331
|
+
//The entire purpose here is just to make sure things get set back to using the default handler when done
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
//Let the fallback handler know we're expecting it to get called this time, so don't fail
|
|
335
|
+
TestingTheFallback = 1;
|
|
336
|
+
|
|
337
|
+
Throw(0xBE);
|
|
338
|
+
|
|
339
|
+
//We know the fallback was run because it decrements the counter above
|
|
340
|
+
TEST_ASSERT_FALSE(TestingTheFallback);
|
|
341
|
+
TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
void test_AbilityToExitTryWithoutThrowingAnError(void)
|
|
345
|
+
{
|
|
346
|
+
int i=0;
|
|
347
|
+
CEXCEPTION_T e;
|
|
348
|
+
|
|
349
|
+
Try
|
|
350
|
+
{
|
|
351
|
+
ExitTry();
|
|
352
|
+
i = 1;
|
|
353
|
+
TEST_FAIL_MESSAGE("Should Have Exited Try Before This");
|
|
354
|
+
}
|
|
355
|
+
Catch(e)
|
|
356
|
+
{
|
|
357
|
+
i = 2;
|
|
358
|
+
TEST_FAIL_MESSAGE("Should Not Have Been Caught");
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// verify that i is still zero
|
|
362
|
+
TEST_ASSERT_EQUAL(0, i);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
void test_AbilityToExitTryWillOnlyExitOneLevel(void)
|
|
366
|
+
{
|
|
367
|
+
int i=0;
|
|
368
|
+
CEXCEPTION_T e;
|
|
369
|
+
CEXCEPTION_T e2;
|
|
370
|
+
|
|
371
|
+
Try
|
|
372
|
+
{
|
|
373
|
+
Try
|
|
374
|
+
{
|
|
375
|
+
ExitTry();
|
|
376
|
+
TEST_FAIL_MESSAGE("Should Have Exited Try Before This");
|
|
377
|
+
}
|
|
378
|
+
Catch(e)
|
|
379
|
+
{
|
|
380
|
+
TEST_FAIL_MESSAGE("Should Not Have Been Caught By Inside");
|
|
381
|
+
}
|
|
382
|
+
i = 1;
|
|
383
|
+
}
|
|
384
|
+
Catch(e2)
|
|
385
|
+
{
|
|
386
|
+
TEST_FAIL_MESSAGE("Should Not Have Been Caught By Outside");
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// verify that we picked up and ran after first Try
|
|
390
|
+
TEST_ASSERT_EQUAL(1, i);
|
|
391
|
+
}
|