win32-api 1.10.0 → 1.10.1
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/CHANGES +3 -0
- data/Gemfile.lock +5 -5
- data/ext/mkmf.log +3 -27
- data/ext/win32/api.c +16 -15
- data/lib/win32/ruby2_32/win32/api.so +0 -0
- data/pkg/win32-api-1.10.1-universal-mingw32.gem +0 -0
- data/test/test_win32_api.rb +1 -1
- data/vendor/bundle/ruby/3.0.0/bin/rake +27 -0
- data/vendor/bundle/ruby/3.0.0/bin/rake.bat +2 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/BSDL +22 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/COPYING +57 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/Gemfile +9 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/LEGAL +4 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/README.md +96 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/Rakefile +59 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/bin/console +12 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/bin/setup +6 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert.rb +91 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/colorize.rb +7 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/configuration.rb +46 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/context.rb +233 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/enable_tracepoint_events.rb +58 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/inspector.rb +62 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/parser.rb +251 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/version.rb +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/power_assert.gemspec +31 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/CONTRIBUTING.rdoc +43 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/Gemfile +10 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/History.rdoc +2386 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/Rakefile +41 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/bundle +105 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/console +7 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rake +29 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rdoc +29 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rubocop +29 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/setup +6 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rakefile.rdoc +622 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/exe/rake +27 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake.rb +71 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/application.rb +824 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/backtrace.rb +24 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/cpu_counter.rb +107 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/dsl_definition.rb +195 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_task.rb +54 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_utils.rb +134 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_utils_ext.rb +134 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_arguments.rb +109 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_manager.rb +331 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/testtask.rb +189 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/thread_pool.rb +163 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/win32.rb +51 -0
- data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/rake.gemspec +43 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/BSDL +24 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/COPYING +64 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/PSFL +271 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/README.md +97 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/Rakefile +66 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/getting-started.md +246 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/how-to.md +90 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/news.md +1552 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test-unit.rb +19 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit.rb +521 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/assertion-failed-error.rb +25 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/assertions.rb +2256 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/attribute-matcher.rb +26 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/attribute.rb +227 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/auto-runner-loader.rb +17 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/autorunner.rb +569 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/code-snippet-fetcher.rb +58 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector.rb +73 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/descendant.rb +19 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/dir.rb +108 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/load.rb +197 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/objectspace.rb +34 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/xml.rb +249 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/color-scheme.rb +216 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/color.rb +134 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/data-sets.rb +116 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/data.rb +371 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/diff.rb +745 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/error.rb +158 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/exception-handler.rb +82 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/failure.rb +169 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/fault-location-detector.rb +100 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/fixture.rb +304 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/notification.rb +138 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/omission.rb +198 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/pending.rb +155 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/priority.rb +196 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/console.rb +67 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/emacs.rb +8 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/xml.rb +15 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/test-suite-creator.rb +103 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testcase.rb +899 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testresult.rb +132 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testsuite.rb +175 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/console/outputlevel.rb +15 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/console/testrunner.rb +733 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/emacs/testrunner.rb +49 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunner.rb +53 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunnermediator.rb +114 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/xml/testrunner.rb +224 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/backtracefilter.rb +59 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/observable.rb +90 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/output.rb +32 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/procwrapper.rb +48 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/version.rb +5 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/warning.rb +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/adder.rb +13 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/subtracter.rb +12 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_adder.rb +20 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_subtracter.rb +20 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_user.rb +23 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test-descendant.rb +182 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test-load.rb +475 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test_dir.rb +407 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test_objectspace.rb +102 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header-label.csv +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header-label.tsv +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header.csv +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header.tsv +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/no-header.csv +2 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/no-header.tsv +2 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/plus.csv +3 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/run-test.rb +22 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-assertions.rb +2187 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-attribute-matcher.rb +38 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-attribute.rb +123 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-code-snippet.rb +79 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-color-scheme.rb +123 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-color.rb +47 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-data.rb +419 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-diff.rb +518 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-emacs-runner.rb +60 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-error.rb +26 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-failure.rb +33 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-fault-location-detector.rb +163 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-fixture.rb +713 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-notification.rb +33 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-omission.rb +81 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-pending.rb +70 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-priority.rb +184 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-case.rb +1284 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-result.rb +113 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-suite-creator.rb +97 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-suite.rb +151 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/testunit-test-util.rb +33 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/ui/test_testrunmediator.rb +20 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test-method-owner-finder.rb +38 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test-output.rb +11 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_backtracefilter.rb +52 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_observable.rb +102 -0
- data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_procwrapper.rb +36 -0
- data/vendor/bundle/ruby/3.0.0/specifications/power_assert-2.0.0.gemspec +46 -0
- data/vendor/bundle/ruby/3.0.0/specifications/rake-13.0.3.gemspec +26 -0
- data/vendor/bundle/ruby/3.0.0/specifications/test-unit-3.4.1.gemspec +41 -0
- data/win32-api.gemspec +1 -1
- metadata +199 -8
- data/ext/Makefile +0 -269
- data/ext/api-x64-mingw32.def +0 -2
- data/ext/api.o +0 -0
- data/ext/api.so +0 -0
- data/ext/win32/api.so +0 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
module Test
|
2
|
+
module Unit
|
3
|
+
class AttributeMatcher
|
4
|
+
def initialize(test)
|
5
|
+
@test = test
|
6
|
+
end
|
7
|
+
|
8
|
+
def match?(expression)
|
9
|
+
matched = instance_eval(expression)
|
10
|
+
if matched.nil?
|
11
|
+
false
|
12
|
+
else
|
13
|
+
matched
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(name, *args)
|
18
|
+
if args.empty?
|
19
|
+
@test[name]
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,227 @@
|
|
1
|
+
module Test
|
2
|
+
module Unit
|
3
|
+
module Attribute
|
4
|
+
class StringifyKeyHash < Hash
|
5
|
+
class << self
|
6
|
+
def stringify(object)
|
7
|
+
object.to_s
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def key?(key)
|
12
|
+
super(self.class.stringify(key))
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](key)
|
16
|
+
super(self.class.stringify(key))
|
17
|
+
end
|
18
|
+
|
19
|
+
def []=(key, value)
|
20
|
+
super(self.class.stringify(key), value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
def included(base)
|
26
|
+
base.extend(BaseClassMethods)
|
27
|
+
base.extend(ClassMethods)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module BaseClassMethods
|
32
|
+
def attributes_table
|
33
|
+
{}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module ClassMethods
|
38
|
+
def method_added(name)
|
39
|
+
super
|
40
|
+
return unless defined?(@current_attributes)
|
41
|
+
|
42
|
+
attributes = {}
|
43
|
+
kept_attributes = StringifyKeyHash.new
|
44
|
+
@current_attributes.each do |attribute_name, attribute|
|
45
|
+
attributes[attribute_name] = attribute[:value]
|
46
|
+
if attribute[:keep]
|
47
|
+
keep_hook = attribute[:keep_hook]
|
48
|
+
attribute = keep_hook.call(attribute) if keep_hook
|
49
|
+
kept_attributes[attribute_name] = attribute
|
50
|
+
end
|
51
|
+
end
|
52
|
+
set_attributes(name, attributes)
|
53
|
+
@current_attributes = kept_attributes
|
54
|
+
end
|
55
|
+
|
56
|
+
# Set an attribute to test methods.
|
57
|
+
#
|
58
|
+
# @overload attribute(name, value)
|
59
|
+
# @example
|
60
|
+
# attribute :speed, :slow
|
61
|
+
# def test_my_slow_method
|
62
|
+
# self[:speed] # => :slow
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# @param [Object] name the attribute name
|
66
|
+
# @param [Object] value the attribute value
|
67
|
+
# @return [void]
|
68
|
+
#
|
69
|
+
# @overload attribute(name, value, *method_names)
|
70
|
+
# @example
|
71
|
+
# def test_my_slow_method1
|
72
|
+
# self[:speed] # => :slow
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# attribute :speed, :slow, :test_my_slow_method1, :test_my_slow_method2
|
76
|
+
#
|
77
|
+
# def test_my_slow_method2
|
78
|
+
# self[:speed] # => :slow
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# @param [Object] name the attribute name
|
82
|
+
# @param [Object] value the attribute value
|
83
|
+
# @param [Array<Symbol, String>] method_names the test method names set the attribute
|
84
|
+
# @return [void]
|
85
|
+
#
|
86
|
+
# @overload attribute(name, value, options)
|
87
|
+
# @example
|
88
|
+
# attribute :speed, :slow, keep: true
|
89
|
+
# def test_my_slow_method1
|
90
|
+
# self[:speed] # => :slow
|
91
|
+
# end
|
92
|
+
#
|
93
|
+
# def test_my_slow_method2
|
94
|
+
# self[:speed] # => :slow
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# @param [Object] name the attribute name
|
98
|
+
# @param [Object] value the attribute value
|
99
|
+
# @option options [Boolean] :keep whether or not to set attribute to following test methods
|
100
|
+
# @return [void]
|
101
|
+
#
|
102
|
+
# @overload attribute(name, value, options, *method_names)
|
103
|
+
# @example
|
104
|
+
# def test_my_slow_method1
|
105
|
+
# self[:speed] # => :slow
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# # There are no valid options for now.
|
109
|
+
# attribute :speed, :slow, {}, :test_my_slow_method1
|
110
|
+
#
|
111
|
+
# def test_my_slow_method2
|
112
|
+
# self[:speed] # => nil
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# @param [Object] name the attribute name
|
116
|
+
# @param [Object] value the attribute value
|
117
|
+
# @param [Hash] options ignored
|
118
|
+
# @param [Array<Symbol, String>] method_names the test method names set the attribute
|
119
|
+
# @return [void]
|
120
|
+
def attribute(name, value, options={}, *method_names)
|
121
|
+
unless options.is_a?(Hash)
|
122
|
+
method_names << options
|
123
|
+
options = {}
|
124
|
+
end
|
125
|
+
if method_names.empty?
|
126
|
+
current_attributes[name] = options.merge(:value => value)
|
127
|
+
else
|
128
|
+
method_names.each do |method_name|
|
129
|
+
set_attributes(method_name, {name => value})
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def current_attributes
|
135
|
+
@current_attributes ||= StringifyKeyHash.new
|
136
|
+
end
|
137
|
+
|
138
|
+
def current_attribute(name)
|
139
|
+
current_attributes[name] || StringifyKeyHash.new
|
140
|
+
end
|
141
|
+
|
142
|
+
def attributes_table
|
143
|
+
@attributes_table ||= StringifyKeyHash.new
|
144
|
+
super.merge(@attributes_table)
|
145
|
+
end
|
146
|
+
|
147
|
+
def set_attributes(method_name, new_attributes)
|
148
|
+
return if new_attributes.empty?
|
149
|
+
@attributes_table ||= StringifyKeyHash.new
|
150
|
+
@attributes_table[method_name] ||= StringifyKeyHash.new
|
151
|
+
current_attributes = @attributes_table[method_name]
|
152
|
+
new_attributes.each do |key, value|
|
153
|
+
observers = attribute_observers(key) || []
|
154
|
+
observers.each do |observer|
|
155
|
+
observer.call(self,
|
156
|
+
StringifyKeyHash.stringify(key),
|
157
|
+
(attributes(method_name) || {})[key],
|
158
|
+
value,
|
159
|
+
method_name)
|
160
|
+
end
|
161
|
+
current_attributes[key] = value
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def attributes(method_name)
|
166
|
+
attributes = attributes_table[method_name]
|
167
|
+
ancestors.each do |ancestor|
|
168
|
+
next if ancestor == self
|
169
|
+
if ancestor.is_a?(Class) and ancestor < Test::Unit::Attribute
|
170
|
+
parent_attributes = ancestor.attributes(method_name)
|
171
|
+
if attributes
|
172
|
+
attributes = (parent_attributes || {}).merge(attributes)
|
173
|
+
else
|
174
|
+
attributes = parent_attributes
|
175
|
+
end
|
176
|
+
break
|
177
|
+
end
|
178
|
+
end
|
179
|
+
attributes || StringifyKeyHash.new
|
180
|
+
end
|
181
|
+
|
182
|
+
def find_attribute(method_name, name, options={})
|
183
|
+
recursive_p = options[:recursive]
|
184
|
+
recursive_p = true if recursive_p.nil?
|
185
|
+
|
186
|
+
@attributes_table ||= StringifyKeyHash.new
|
187
|
+
if @attributes_table.key?(method_name)
|
188
|
+
attributes = @attributes_table[method_name]
|
189
|
+
if attributes.key?(name)
|
190
|
+
return attributes[name]
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
return nil unless recursive_p
|
195
|
+
return nil if self == TestCase
|
196
|
+
|
197
|
+
@cached_parent_test_case ||= ancestors.find do |ancestor|
|
198
|
+
ancestor != self and
|
199
|
+
ancestor.is_a?(Class) and
|
200
|
+
ancestor < Test::Unit::Attribute
|
201
|
+
end
|
202
|
+
|
203
|
+
@cached_parent_test_case.find_attribute(method_name, name, options)
|
204
|
+
end
|
205
|
+
|
206
|
+
@@attribute_observers = StringifyKeyHash.new
|
207
|
+
def register_attribute_observer(attribute_name, observer=nil, &block)
|
208
|
+
observer ||= Proc.new(&block)
|
209
|
+
@@attribute_observers[attribute_name] ||= []
|
210
|
+
@@attribute_observers[attribute_name] << observer
|
211
|
+
end
|
212
|
+
|
213
|
+
def attribute_observers(attribute_name)
|
214
|
+
@@attribute_observers[attribute_name]
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
def attributes
|
219
|
+
self.class.attributes(@method_name) || StringifyKeyHash.new
|
220
|
+
end
|
221
|
+
|
222
|
+
def [](name)
|
223
|
+
self.class.find_attribute(@method_name, name)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "test/unit/test-suite-creator"
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
module AutoRunnerLoader
|
6
|
+
@loaded = false
|
7
|
+
class << self
|
8
|
+
def check(test_case, method_name)
|
9
|
+
return if @loaded
|
10
|
+
return unless TestSuiteCreator.test_method?(test_case, method_name)
|
11
|
+
require "test/unit"
|
12
|
+
@loaded = true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,569 @@
|
|
1
|
+
require "English"
|
2
|
+
|
3
|
+
require "test/unit/color-scheme"
|
4
|
+
require "test/unit/priority"
|
5
|
+
require "test/unit/attribute-matcher"
|
6
|
+
require "test/unit/testcase"
|
7
|
+
require "optparse"
|
8
|
+
|
9
|
+
module Test
|
10
|
+
module Unit
|
11
|
+
class AutoRunner
|
12
|
+
RUNNERS = {}
|
13
|
+
COLLECTORS = {}
|
14
|
+
ADDITIONAL_OPTIONS = []
|
15
|
+
PREPARE_HOOKS = []
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def register_runner(id, runner_builder=nil, &block)
|
19
|
+
runner_builder ||= Proc.new(&block)
|
20
|
+
RUNNERS[id] = runner_builder
|
21
|
+
RUNNERS[id.to_s] = runner_builder
|
22
|
+
end
|
23
|
+
|
24
|
+
def runner(id)
|
25
|
+
RUNNERS[id.to_s]
|
26
|
+
end
|
27
|
+
|
28
|
+
@@default_runner = nil
|
29
|
+
def default_runner
|
30
|
+
runner(@@default_runner)
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_runner=(id)
|
34
|
+
@@default_runner = id
|
35
|
+
end
|
36
|
+
|
37
|
+
def register_collector(id, collector_builder=nil, &block)
|
38
|
+
collector_builder ||= Proc.new(&block)
|
39
|
+
COLLECTORS[id] = collector_builder
|
40
|
+
COLLECTORS[id.to_s] = collector_builder
|
41
|
+
end
|
42
|
+
|
43
|
+
def collector(id)
|
44
|
+
COLLECTORS[id.to_s]
|
45
|
+
end
|
46
|
+
|
47
|
+
def register_color_scheme(id, scheme)
|
48
|
+
ColorScheme[id] = scheme
|
49
|
+
end
|
50
|
+
|
51
|
+
def setup_option(option_builder=nil, &block)
|
52
|
+
option_builder ||= Proc.new(&block)
|
53
|
+
ADDITIONAL_OPTIONS << option_builder
|
54
|
+
end
|
55
|
+
|
56
|
+
def prepare(hook=nil, &block)
|
57
|
+
hook ||= Proc.new(&block)
|
58
|
+
PREPARE_HOOKS << hook
|
59
|
+
end
|
60
|
+
|
61
|
+
def run(force_standalone=false, default_dir=nil, argv=ARGV, &block)
|
62
|
+
r = new(force_standalone || standalone?, &block)
|
63
|
+
r.base = default_dir
|
64
|
+
r.prepare
|
65
|
+
r.process_args(argv)
|
66
|
+
r.run
|
67
|
+
end
|
68
|
+
|
69
|
+
def standalone?
|
70
|
+
return false unless("-e" == $0)
|
71
|
+
ObjectSpace.each_object(Class) do |klass|
|
72
|
+
return false if(klass < TestCase)
|
73
|
+
end
|
74
|
+
true
|
75
|
+
end
|
76
|
+
|
77
|
+
@@need_auto_run = true
|
78
|
+
def need_auto_run?
|
79
|
+
@@need_auto_run
|
80
|
+
end
|
81
|
+
|
82
|
+
def need_auto_run=(need)
|
83
|
+
@@need_auto_run = need
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
register_collector(:descendant) do |auto_runner|
|
88
|
+
require "test/unit/collector/descendant"
|
89
|
+
collector = Collector::Descendant.new
|
90
|
+
collector.filter = auto_runner.filters
|
91
|
+
collector.collect($0.sub(/\.rb\Z/, ""))
|
92
|
+
end
|
93
|
+
|
94
|
+
register_collector(:load) do |auto_runner|
|
95
|
+
require "test/unit/collector/load"
|
96
|
+
collector = Collector::Load.new
|
97
|
+
unless auto_runner.pattern.empty?
|
98
|
+
collector.patterns.replace(auto_runner.pattern)
|
99
|
+
end
|
100
|
+
unless auto_runner.exclude.empty?
|
101
|
+
collector.excludes.replace(auto_runner.exclude)
|
102
|
+
end
|
103
|
+
collector.base = auto_runner.base
|
104
|
+
collector.default_test_paths = auto_runner.default_test_paths
|
105
|
+
collector.filter = auto_runner.filters
|
106
|
+
collector.collect(*auto_runner.to_run)
|
107
|
+
end
|
108
|
+
|
109
|
+
# JUST TEST!
|
110
|
+
# register_collector(:xml) do |auto_runner|
|
111
|
+
# require "test/unit/collector/xml"
|
112
|
+
# collector = Collector::XML.new
|
113
|
+
# collector.filter = auto_runner.filters
|
114
|
+
# collector.collect(auto_runner.to_run[0])
|
115
|
+
# end
|
116
|
+
|
117
|
+
# deprecated
|
118
|
+
register_collector(:object_space) do |auto_runner|
|
119
|
+
require "test/unit/collector/objectspace"
|
120
|
+
c = Collector::ObjectSpace.new
|
121
|
+
c.filter = auto_runner.filters
|
122
|
+
c.collect($0.sub(/\.rb\Z/, ""))
|
123
|
+
end
|
124
|
+
|
125
|
+
# deprecated
|
126
|
+
register_collector(:dir) do |auto_runner|
|
127
|
+
require "test/unit/collector/dir"
|
128
|
+
c = Collector::Dir.new
|
129
|
+
c.filter = auto_runner.filters
|
130
|
+
unless auto_runner.pattern.empty?
|
131
|
+
c.pattern.replace(auto_runner.pattern)
|
132
|
+
end
|
133
|
+
unless auto_runner.exclude.empty?
|
134
|
+
c.exclude.replace(auto_runner.exclude)
|
135
|
+
end
|
136
|
+
c.base = auto_runner.base
|
137
|
+
$:.push(auto_runner.base) if auto_runner.base
|
138
|
+
c.collect(*(auto_runner.to_run.empty? ? ["."] : auto_runner.to_run))
|
139
|
+
end
|
140
|
+
|
141
|
+
attr_reader :suite, :runner_options
|
142
|
+
attr_accessor :filters, :to_run
|
143
|
+
attr_accessor :default_test_paths
|
144
|
+
attr_accessor :pattern, :exclude, :base, :workdir
|
145
|
+
attr_accessor :color_scheme, :listeners
|
146
|
+
attr_writer :stop_on_failure
|
147
|
+
attr_writer :runner, :collector
|
148
|
+
|
149
|
+
def initialize(standalone)
|
150
|
+
@standalone = standalone
|
151
|
+
@runner = default_runner
|
152
|
+
@collector = default_collector
|
153
|
+
@filters = []
|
154
|
+
@to_run = []
|
155
|
+
@default_test_paths = []
|
156
|
+
@color_scheme = ColorScheme.default
|
157
|
+
@runner_options = {}
|
158
|
+
@default_arguments = []
|
159
|
+
@workdir = nil
|
160
|
+
@listeners = []
|
161
|
+
@stop_on_failure = false
|
162
|
+
config_file = "test-unit.yml"
|
163
|
+
if File.exist?(config_file)
|
164
|
+
load_config(config_file)
|
165
|
+
else
|
166
|
+
load_global_config
|
167
|
+
end
|
168
|
+
yield(self) if block_given?
|
169
|
+
end
|
170
|
+
|
171
|
+
def stop_on_failure?
|
172
|
+
@stop_on_failure
|
173
|
+
end
|
174
|
+
|
175
|
+
def prepare
|
176
|
+
PREPARE_HOOKS.each do |handler|
|
177
|
+
handler.call(self)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def process_args(args=ARGV)
|
182
|
+
begin
|
183
|
+
args.unshift(*@default_arguments)
|
184
|
+
options.order!(args) {|arg| add_test_path(arg)}
|
185
|
+
rescue OptionParser::ParseError => e
|
186
|
+
puts e
|
187
|
+
puts options
|
188
|
+
exit(false)
|
189
|
+
end
|
190
|
+
not @to_run.empty?
|
191
|
+
end
|
192
|
+
|
193
|
+
def options
|
194
|
+
@options ||= OptionParser.new do |o|
|
195
|
+
o.banner = "Test::Unit automatic runner."
|
196
|
+
o.banner += "\nUsage: #{$0} [options] [-- untouched arguments]"
|
197
|
+
|
198
|
+
o.on("-r", "--runner=RUNNER", RUNNERS,
|
199
|
+
"Use the given RUNNER.",
|
200
|
+
"(" + keyword_display(RUNNERS) + ")") do |r|
|
201
|
+
@runner = r
|
202
|
+
end
|
203
|
+
|
204
|
+
o.on("--collector=COLLECTOR", COLLECTORS,
|
205
|
+
"Use the given COLLECTOR.",
|
206
|
+
"(" + keyword_display(COLLECTORS) + ")") do |collector|
|
207
|
+
@collector = collector
|
208
|
+
end
|
209
|
+
|
210
|
+
if (@standalone)
|
211
|
+
o.on("-b", "--basedir=DIR", "Base directory of test suites.") do |b|
|
212
|
+
@base = b
|
213
|
+
end
|
214
|
+
|
215
|
+
o.on("-w", "--workdir=DIR", "Working directory to run tests.") do |w|
|
216
|
+
@workdir = w
|
217
|
+
end
|
218
|
+
|
219
|
+
o.on("--default-test-path=PATH",
|
220
|
+
"Add PATH to the default test paths.",
|
221
|
+
"The PATH is used when user doesn't specify any test path.",
|
222
|
+
"You can specify this option multiple times.") do |path|
|
223
|
+
@default_test_paths << path
|
224
|
+
end
|
225
|
+
|
226
|
+
o.on("-a", "--add=TORUN", Array,
|
227
|
+
"Add TORUN to the list of things to run;",
|
228
|
+
"can be a file or a directory.") do |paths|
|
229
|
+
paths.each do |path|
|
230
|
+
add_test_path(path)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
@pattern = []
|
235
|
+
o.on("-p", "--pattern=PATTERN", Regexp,
|
236
|
+
"Match files to collect against PATTERN.") do |e|
|
237
|
+
@pattern << e
|
238
|
+
end
|
239
|
+
|
240
|
+
@exclude = []
|
241
|
+
o.on("-x", "--exclude=PATTERN", Regexp,
|
242
|
+
"Ignore files to collect against PATTERN.") do |e|
|
243
|
+
@exclude << e
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
o.on("-n", "--name=NAME", String,
|
248
|
+
"Runs tests matching NAME.",
|
249
|
+
"Use '/PATTERN/' for NAME to use regular expression.",
|
250
|
+
"Regular expression accepts options.",
|
251
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
252
|
+
name = prepare_name(name)
|
253
|
+
@filters << lambda do |test|
|
254
|
+
match_test_name(test, name)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
o.on("--ignore-name=NAME", String,
|
259
|
+
"Ignores tests matching NAME.",
|
260
|
+
"Use '/PATTERN/' for NAME to use regular expression.",
|
261
|
+
"Regular expression accepts options.",
|
262
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
263
|
+
name = prepare_name(name)
|
264
|
+
@filters << lambda do |test|
|
265
|
+
not match_test_name(test, name)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
o.on("-t", "--testcase=TESTCASE", String,
|
270
|
+
"Runs tests in TestCases matching TESTCASE.",
|
271
|
+
"Use '/PATTERN/' for TESTCASE to use regular expression.",
|
272
|
+
"Regular expression accepts options.",
|
273
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
274
|
+
name = prepare_name(name)
|
275
|
+
@filters << lambda do |test|
|
276
|
+
match_test_case_name(test, name)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
o.on("--ignore-testcase=TESTCASE", String,
|
281
|
+
"Ignores tests in TestCases matching TESTCASE.",
|
282
|
+
"Use '/PATTERN/' for TESTCASE to use regular expression.",
|
283
|
+
"Regular expression accepts options.",
|
284
|
+
"Example: '/taRget/i' matches 'target' and 'TARGET'") do |name|
|
285
|
+
name = prepare_name(name)
|
286
|
+
@filters << lambda do |test|
|
287
|
+
not match_test_case_name(test, name)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
o.on("--location=LOCATION", String,
|
292
|
+
"Runs tests that defined in LOCATION.",
|
293
|
+
"LOCATION is one of PATH:LINE, PATH or LINE.") do |location|
|
294
|
+
case location
|
295
|
+
when /\A(\d+)\z/
|
296
|
+
path = nil
|
297
|
+
line = $1.to_i
|
298
|
+
when /:(\d+)\z/
|
299
|
+
path = $PREMATCH
|
300
|
+
line = $1.to_i
|
301
|
+
else
|
302
|
+
path = location
|
303
|
+
line = nil
|
304
|
+
end
|
305
|
+
add_location_filter(path, line)
|
306
|
+
end
|
307
|
+
|
308
|
+
o.on("--attribute=EXPRESSION", String,
|
309
|
+
"Runs tests that matches EXPRESSION.",
|
310
|
+
"EXPRESSION is evaluated as Ruby's expression.",
|
311
|
+
"Test attribute name can be used with no receiver in EXPRESSION.",
|
312
|
+
"EXPRESSION examples:",
|
313
|
+
" !slow",
|
314
|
+
" tag == 'important' and !slow") do |expression|
|
315
|
+
@filters << lambda do |test|
|
316
|
+
matcher = AttributeMatcher.new(test)
|
317
|
+
matcher.match?(expression)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
priority_filter = Proc.new do |test|
|
322
|
+
if @filters == [priority_filter]
|
323
|
+
Priority::Checker.new(test).need_to_run?
|
324
|
+
else
|
325
|
+
nil
|
326
|
+
end
|
327
|
+
end
|
328
|
+
o.on("--[no-]priority-mode",
|
329
|
+
"Runs some tests based on their priority.") do |priority_mode|
|
330
|
+
if priority_mode
|
331
|
+
Priority.enable
|
332
|
+
@filters |= [priority_filter]
|
333
|
+
else
|
334
|
+
Priority.disable
|
335
|
+
@filters -= [priority_filter]
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
o.on("--default-priority=PRIORITY",
|
340
|
+
Priority.available_values,
|
341
|
+
"Uses PRIORITY as default priority",
|
342
|
+
"(#{keyword_display(Priority.available_values)})") do |priority|
|
343
|
+
Priority.default = priority
|
344
|
+
end
|
345
|
+
|
346
|
+
o.on("-I", "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
|
347
|
+
"Appends directory list to $LOAD_PATH.") do |dirs|
|
348
|
+
$LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
|
349
|
+
end
|
350
|
+
|
351
|
+
color_schemes = ColorScheme.all
|
352
|
+
o.on("--color-scheme=SCHEME", color_schemes,
|
353
|
+
"Use SCHEME as color scheme.",
|
354
|
+
"(#{keyword_display(color_schemes)})") do |scheme|
|
355
|
+
@color_scheme = scheme
|
356
|
+
end
|
357
|
+
|
358
|
+
o.on("--config=FILE",
|
359
|
+
"Use YAML format FILE content as configuration file.") do |file|
|
360
|
+
load_config(file)
|
361
|
+
end
|
362
|
+
|
363
|
+
o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
|
364
|
+
"Run tests in a test case in ORDER order.",
|
365
|
+
"(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
|
366
|
+
TestCase.test_order = order
|
367
|
+
end
|
368
|
+
|
369
|
+
assertion_message_class = Test::Unit::Assertions::AssertionMessage
|
370
|
+
o.on("--max-diff-target-string-size=SIZE", Integer,
|
371
|
+
"Shows diff if both expected result string size and " +
|
372
|
+
"actual result string size are " +
|
373
|
+
"less than or equal SIZE in bytes.",
|
374
|
+
"(#{assertion_message_class.max_diff_target_string_size})") do |size|
|
375
|
+
assertion_message_class.max_diff_target_string_size = size
|
376
|
+
end
|
377
|
+
|
378
|
+
o.on("--[no-]stop-on-failure",
|
379
|
+
"Stops immediately on the first non success test",
|
380
|
+
"(#{@stop_on_failure})") do |boolean|
|
381
|
+
@stop_on_failure = boolean
|
382
|
+
end
|
383
|
+
|
384
|
+
ADDITIONAL_OPTIONS.each do |option_builder|
|
385
|
+
option_builder.call(self, o)
|
386
|
+
end
|
387
|
+
|
388
|
+
o.on("--",
|
389
|
+
"Stop processing options so that the",
|
390
|
+
"remaining options will be passed to the",
|
391
|
+
"test."){o.terminate}
|
392
|
+
|
393
|
+
o.on("-h", "--help", "Display this help."){puts o; exit}
|
394
|
+
|
395
|
+
o.on_tail
|
396
|
+
o.on_tail("Deprecated options:")
|
397
|
+
|
398
|
+
o.on_tail("--console", "Console runner (use --runner).") do
|
399
|
+
warn("Deprecated option (--console).")
|
400
|
+
@runner = self.class.runner(:console)
|
401
|
+
end
|
402
|
+
|
403
|
+
if RUNNERS[:fox]
|
404
|
+
o.on_tail("--fox", "Fox runner (use --runner).") do
|
405
|
+
warn("Deprecated option (--fox).")
|
406
|
+
@runner = self.class.runner(:fox)
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
o.on_tail
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
def keyword_display(keywords)
|
415
|
+
keywords = keywords.collect do |keyword, _|
|
416
|
+
keyword.to_s
|
417
|
+
end.uniq.sort
|
418
|
+
|
419
|
+
i = 0
|
420
|
+
keywords.collect do |keyword|
|
421
|
+
if (i > 0 and keyword[0] == keywords[i - 1][0]) or
|
422
|
+
((i < keywords.size - 1) and (keyword[0] == keywords[i + 1][0]))
|
423
|
+
n = 2
|
424
|
+
else
|
425
|
+
n = 1
|
426
|
+
end
|
427
|
+
i += 1
|
428
|
+
keyword.sub(/^(.{#{n}})([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')
|
429
|
+
end.join(", ")
|
430
|
+
end
|
431
|
+
|
432
|
+
def run
|
433
|
+
self.class.need_auto_run = false
|
434
|
+
suite = @collector[self]
|
435
|
+
return false if suite.nil?
|
436
|
+
return true if suite.empty?
|
437
|
+
runner = @runner[self]
|
438
|
+
return false if runner.nil?
|
439
|
+
@runner_options[:color_scheme] ||= @color_scheme
|
440
|
+
@runner_options[:listeners] ||= []
|
441
|
+
@runner_options[:listeners].concat(@listeners)
|
442
|
+
if @stop_on_failure
|
443
|
+
@runner_options[:listeners] << StopOnFailureListener.new
|
444
|
+
end
|
445
|
+
change_work_directory do
|
446
|
+
runner.run(suite, @runner_options).passed?
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
def load_config(file)
|
451
|
+
require "yaml"
|
452
|
+
config = YAML.load(File.read(file))
|
453
|
+
runner_name = config["runner"]
|
454
|
+
@runner = self.class.runner(runner_name) || @runner
|
455
|
+
@collector = self.class.collector(config["collector"]) || @collector
|
456
|
+
(config["color_schemes"] || {}).each do |name, options|
|
457
|
+
ColorScheme[name] = options
|
458
|
+
end
|
459
|
+
runner_options = {}
|
460
|
+
(config["#{runner_name}_options"] || {}).each do |key, value|
|
461
|
+
key = key.to_sym
|
462
|
+
value = ColorScheme[value] if key == :color_scheme
|
463
|
+
if key == :arguments
|
464
|
+
@default_arguments.concat(value.split)
|
465
|
+
else
|
466
|
+
runner_options[key] = value
|
467
|
+
end
|
468
|
+
end
|
469
|
+
@runner_options = @runner_options.merge(runner_options)
|
470
|
+
end
|
471
|
+
|
472
|
+
private
|
473
|
+
def default_runner
|
474
|
+
runner = self.class.default_runner
|
475
|
+
if ENV["EMACS"] == "t"
|
476
|
+
runner ||= self.class.runner(:emacs)
|
477
|
+
else
|
478
|
+
runner ||= self.class.runner(:console)
|
479
|
+
end
|
480
|
+
runner
|
481
|
+
end
|
482
|
+
|
483
|
+
def default_collector
|
484
|
+
self.class.collector(@standalone ? :load : :descendant)
|
485
|
+
end
|
486
|
+
|
487
|
+
def global_config_file
|
488
|
+
File.expand_path("~/.test-unit.yml")
|
489
|
+
rescue ArgumentError
|
490
|
+
nil
|
491
|
+
end
|
492
|
+
|
493
|
+
def load_global_config
|
494
|
+
file = global_config_file
|
495
|
+
load_config(file) if file and File.exist?(file)
|
496
|
+
end
|
497
|
+
|
498
|
+
def change_work_directory(&block)
|
499
|
+
if @workdir
|
500
|
+
Dir.chdir(@workdir, &block)
|
501
|
+
else
|
502
|
+
yield
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
def prepare_name(name)
|
507
|
+
case name
|
508
|
+
when /\A\/(.*)\/([imx]*)\z/
|
509
|
+
pattern = $1
|
510
|
+
options_raw = $2
|
511
|
+
options = 0
|
512
|
+
options |= Regexp::IGNORECASE if options_raw.include?("i")
|
513
|
+
options |= Regexp::MULTILINE if options_raw.include?("m")
|
514
|
+
options |= Regexp::EXTENDED if options_raw.include?("x")
|
515
|
+
Regexp.new(pattern, options)
|
516
|
+
else
|
517
|
+
name
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
521
|
+
def match_test_name(test, pattern)
|
522
|
+
return true if pattern === test.method_name
|
523
|
+
return true if pattern === test.local_name
|
524
|
+
if pattern.is_a?(String)
|
525
|
+
return true if pattern === "#{test.class}##{test.method_name}"
|
526
|
+
return true if pattern === "#{test.class}##{test.local_name}"
|
527
|
+
end
|
528
|
+
false
|
529
|
+
end
|
530
|
+
|
531
|
+
def match_test_case_name(test, pattern)
|
532
|
+
test.class.ancestors.each do |test_class|
|
533
|
+
break if test_class == TestCase
|
534
|
+
return true if pattern === test_class.name
|
535
|
+
end
|
536
|
+
false
|
537
|
+
end
|
538
|
+
|
539
|
+
def add_test_path(path)
|
540
|
+
if /:(\d+)\z/ =~ path
|
541
|
+
line = $1.to_i
|
542
|
+
path = $PREMATCH
|
543
|
+
add_location_filter(path, line)
|
544
|
+
end
|
545
|
+
@to_run << path
|
546
|
+
end
|
547
|
+
|
548
|
+
def add_location_filter(path, line)
|
549
|
+
@filters << lambda do |test|
|
550
|
+
test.class.test_defined?(:path => path,
|
551
|
+
:line => line,
|
552
|
+
:method_name => test.method_name)
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
class StopOnFailureListener
|
557
|
+
def attach_to_mediator(mediator)
|
558
|
+
mediator.add_listener(TestResult::FINISHED) do |result|
|
559
|
+
result.stop unless result.passed?
|
560
|
+
end
|
561
|
+
end
|
562
|
+
end
|
563
|
+
end
|
564
|
+
end
|
565
|
+
end
|
566
|
+
|
567
|
+
require "test/unit/runner/console"
|
568
|
+
require "test/unit/runner/emacs"
|
569
|
+
require "test/unit/runner/xml"
|