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,134 @@
|
|
1
|
+
module Test
|
2
|
+
module Unit
|
3
|
+
class Color
|
4
|
+
class Error < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
class ParseError < Error
|
8
|
+
end
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def parse_256_color(string)
|
12
|
+
case string
|
13
|
+
when /\A([0-5])([0-5])([0-5])\z/
|
14
|
+
red, green, blue = $1, $2, $3
|
15
|
+
red.to_i * 36 + green.to_i * 6 + blue.to_i + 16
|
16
|
+
else
|
17
|
+
message = "must be 'RGB' format and R, G and B " +
|
18
|
+
"are in 0-5: #{string.inspect}"
|
19
|
+
raise ParseError, message
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
NAMES = ["black", "red", "green", "yellow",
|
25
|
+
"blue", "magenta", "cyan", "white"]
|
26
|
+
|
27
|
+
attr_reader :name
|
28
|
+
def initialize(name, options={})
|
29
|
+
@name = name
|
30
|
+
if options.has_key?(:foreground)
|
31
|
+
if options[:foreground].nil?
|
32
|
+
@background = false
|
33
|
+
else
|
34
|
+
@background = !options[:foreground]
|
35
|
+
end
|
36
|
+
else
|
37
|
+
@background = options[:background]
|
38
|
+
end
|
39
|
+
@intensity = options[:intensity]
|
40
|
+
@bold = options[:bold]
|
41
|
+
@italic = options[:italic]
|
42
|
+
@underline = options[:underline]
|
43
|
+
end
|
44
|
+
|
45
|
+
def foreground?
|
46
|
+
not background?
|
47
|
+
end
|
48
|
+
|
49
|
+
def background?
|
50
|
+
@background
|
51
|
+
end
|
52
|
+
|
53
|
+
def intensity?
|
54
|
+
@intensity
|
55
|
+
end
|
56
|
+
|
57
|
+
def bold?
|
58
|
+
@bold
|
59
|
+
end
|
60
|
+
|
61
|
+
def italic?
|
62
|
+
@italic
|
63
|
+
end
|
64
|
+
|
65
|
+
def underline?
|
66
|
+
@underline
|
67
|
+
end
|
68
|
+
|
69
|
+
def ==(other)
|
70
|
+
self.class === other and
|
71
|
+
[name, background?, intensity?,
|
72
|
+
bold?, italic?, underline?] ==
|
73
|
+
[other.name, other.background?, other.intensity?,
|
74
|
+
other.bold?, other.italic?, other.underline?]
|
75
|
+
end
|
76
|
+
|
77
|
+
def sequence
|
78
|
+
sequence = []
|
79
|
+
if @name == "none"
|
80
|
+
elsif @name == "reset"
|
81
|
+
sequence << "0"
|
82
|
+
else
|
83
|
+
if NAMES.include?(@name)
|
84
|
+
color_parameter = foreground? ? 3 : 4
|
85
|
+
color_parameter += 6 if intensity?
|
86
|
+
color = NAMES.index(@name)
|
87
|
+
sequence << "#{color_parameter}#{color}"
|
88
|
+
else
|
89
|
+
sequence << (foreground? ? "38" : "48")
|
90
|
+
sequence << "5"
|
91
|
+
sequence << self.class.parse_256_color(@name).to_s
|
92
|
+
end
|
93
|
+
end
|
94
|
+
sequence << "1" if bold?
|
95
|
+
sequence << "3" if italic?
|
96
|
+
sequence << "4" if underline?
|
97
|
+
sequence
|
98
|
+
end
|
99
|
+
|
100
|
+
def escape_sequence
|
101
|
+
"\e[#{sequence.join(';')}m"
|
102
|
+
end
|
103
|
+
|
104
|
+
def +(other)
|
105
|
+
MixColor.new([self, other])
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class MixColor
|
110
|
+
attr_reader :colors
|
111
|
+
def initialize(colors)
|
112
|
+
@colors = colors
|
113
|
+
end
|
114
|
+
|
115
|
+
def sequence
|
116
|
+
@colors.inject([]) do |result, color|
|
117
|
+
result + color.sequence
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def escape_sequence
|
122
|
+
"\e[#{sequence.join(';')}m"
|
123
|
+
end
|
124
|
+
|
125
|
+
def +(other)
|
126
|
+
self.class.new([self, other])
|
127
|
+
end
|
128
|
+
|
129
|
+
def ==(other)
|
130
|
+
self.class === other and colors == other.colors
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Test
|
2
|
+
module Unit
|
3
|
+
class DataSets
|
4
|
+
def initialize
|
5
|
+
@variables = []
|
6
|
+
@procs = []
|
7
|
+
@value_sets = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(data_set, options=nil)
|
11
|
+
options ||= {}
|
12
|
+
if data_set.respond_to?(:call)
|
13
|
+
@procs << [data_set, options]
|
14
|
+
elsif data_set.is_a?(Array)
|
15
|
+
@variables << [data_set, options]
|
16
|
+
else
|
17
|
+
@value_sets << [data_set, options]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def <<(data_set)
|
22
|
+
add(data_set)
|
23
|
+
end
|
24
|
+
|
25
|
+
def keep
|
26
|
+
new_data_sets = self.class.new
|
27
|
+
all_data_sets = Enumerator.new do |yielder|
|
28
|
+
block = lambda do |(data_set, options)|
|
29
|
+
yielder << [data_set, options]
|
30
|
+
end
|
31
|
+
@procs.each(&block)
|
32
|
+
@variables.each(&block)
|
33
|
+
@value_sets.each(&block)
|
34
|
+
end
|
35
|
+
all_data_sets.each do |data_set, options|
|
36
|
+
next if options.nil?
|
37
|
+
next unless options[:keep]
|
38
|
+
new_data_sets.add(data_set, options)
|
39
|
+
end
|
40
|
+
new_data_sets
|
41
|
+
end
|
42
|
+
|
43
|
+
def each
|
44
|
+
variables = @variables
|
45
|
+
value_sets = @value_sets
|
46
|
+
@procs.each do |proc, options|
|
47
|
+
data_set = proc.call
|
48
|
+
case data_set
|
49
|
+
when Array
|
50
|
+
variables += [[data_set, options]]
|
51
|
+
else
|
52
|
+
value_sets += [[data_set, options]]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
value_sets.each do |values, _options|
|
57
|
+
values.each do |label, data|
|
58
|
+
yield(label, data)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
each_pattern(variables) do |label, data|
|
63
|
+
yield(label, data)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def ==(other)
|
68
|
+
@variables == other.instance_variable_get(:@variables) and
|
69
|
+
@procs == other.instance_variable_get(:@procs) and
|
70
|
+
@value_sets == other.instance_variable_get(:@value_sets)
|
71
|
+
end
|
72
|
+
|
73
|
+
def eql?(other)
|
74
|
+
self == other
|
75
|
+
end
|
76
|
+
|
77
|
+
def hash
|
78
|
+
[@variables, @procs, @value_sets].hash
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def each_pattern(variables)
|
83
|
+
grouped_variables = variables.group_by do |_, options|
|
84
|
+
options[:group]
|
85
|
+
end
|
86
|
+
grouped_variables.each do |group, group_variables|
|
87
|
+
each_raw_pattern(group_variables) do |cell|
|
88
|
+
label = String.new
|
89
|
+
label << "group: #{group.inspect}" unless group.nil?
|
90
|
+
data = {}
|
91
|
+
cell.each do |variable, pattern|
|
92
|
+
label << ", " unless label.empty?
|
93
|
+
label << "#{variable}: #{pattern.inspect}"
|
94
|
+
data[variable] = pattern
|
95
|
+
end
|
96
|
+
yield(label, data)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def each_raw_pattern(variables, &block)
|
102
|
+
return if variables.empty?
|
103
|
+
|
104
|
+
sorted_variables = variables.sort_by do |(variable, _), _|
|
105
|
+
variable
|
106
|
+
end
|
107
|
+
all_patterns = sorted_variables.collect do |(variable, patterns), _|
|
108
|
+
patterns.collect do |pattern|
|
109
|
+
[variable, pattern]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
all_patterns[0].product(*all_patterns[1..-1], &block)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,371 @@
|
|
1
|
+
require "test/unit/data-sets"
|
2
|
+
|
3
|
+
module Test
|
4
|
+
module Unit
|
5
|
+
module Data
|
6
|
+
class << self
|
7
|
+
def included(base)
|
8
|
+
base.extend(ClassMethods)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
# This method provides Data-Driven-Test functionality.
|
14
|
+
#
|
15
|
+
# Define test data in the test code.
|
16
|
+
#
|
17
|
+
# @overload data(label, data, options={})
|
18
|
+
# @param [String] label specify test case name.
|
19
|
+
# @param data specify test data.
|
20
|
+
# @param [Hash] options specify options.
|
21
|
+
# @option options [Boolean] :keep whether or not to use
|
22
|
+
# this data in the following test methods
|
23
|
+
#
|
24
|
+
# @example data(label, data)
|
25
|
+
# data("empty string", [true, ""])
|
26
|
+
# data("plain string", [false, "hello"])
|
27
|
+
# def test_empty?(data)
|
28
|
+
# expected, target = data
|
29
|
+
# assert_equal(expected, target.empty?)
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# @overload data(variable, patterns, options={})
|
33
|
+
# @param [Symbol] variable specify test pattern variable name.
|
34
|
+
# @param [Array] patterns specify test patterns for the variable.
|
35
|
+
# @param [Hash] options specify options.
|
36
|
+
# @option options [Boolean] :keep whether or not to use
|
37
|
+
# this data in the following test methods
|
38
|
+
# @option options [Object] :group the test pattern group.
|
39
|
+
# Test matrix is generated for each test pattern group separately.
|
40
|
+
#
|
41
|
+
# @example data(variable, patterns)
|
42
|
+
# data(:x, [1, 2, 3])
|
43
|
+
# data(:y, ["a", "b"])
|
44
|
+
# def test_patterns(data)
|
45
|
+
# # 3 * 2 times executed
|
46
|
+
# # 3: the number of patterns of :x
|
47
|
+
# # 2: the number of patterns of :y
|
48
|
+
# p data
|
49
|
+
# # => {:x => 1, :y => "a"}
|
50
|
+
# # => {:x => 1, :y => "b"}
|
51
|
+
# # => {:x => 2, :y => "a"}
|
52
|
+
# # => {:x => 2, :y => "b"}
|
53
|
+
# # => {:x => 3, :y => "a"}
|
54
|
+
# # => {:x => 3, :y => "b"}
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# Generates test matrix from variable and patterns pairs.
|
58
|
+
#
|
59
|
+
# @overload data(data_set, options={})
|
60
|
+
# @param [Hash] data_set specify test data as a Hash that
|
61
|
+
# key is test label and value is test data.
|
62
|
+
# @param [Hash] options specify options.
|
63
|
+
# @option options [Boolean] :keep whether or not to use
|
64
|
+
# this data in the following test methods
|
65
|
+
#
|
66
|
+
# @example data(data_set)
|
67
|
+
# data("empty string" => [true, ""],
|
68
|
+
# "plain string" => [false, "hello"])
|
69
|
+
# def test_empty?(data)
|
70
|
+
# expected, target = data
|
71
|
+
# assert_equal(expected, target.empty?)
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# @overload data(options={}, &block)
|
75
|
+
# @param [Hash] options specify options.
|
76
|
+
# @option options [Boolean] :keep whether or not to use
|
77
|
+
# this data in the following test methods
|
78
|
+
# @yieldreturn [Hash<String, Object>] return test data set
|
79
|
+
# as a Hash that key is test label and value is test data.
|
80
|
+
#
|
81
|
+
# @example data(&block)
|
82
|
+
# data do
|
83
|
+
# data_set = {}
|
84
|
+
# data_set["empty string"] = [true, ""]
|
85
|
+
# data_set["plain string"] = [false, "hello"]
|
86
|
+
# data_set
|
87
|
+
# end
|
88
|
+
# def test_empty?(data)
|
89
|
+
# expected, target = data
|
90
|
+
# assert_equal(expected, target.empty?)
|
91
|
+
# end
|
92
|
+
#
|
93
|
+
# @overload data(options={}, &block)
|
94
|
+
# @param [Hash] options specify options.
|
95
|
+
# @option options [Boolean] :keep whether or not to use
|
96
|
+
# this data in the following test methods
|
97
|
+
# @yieldreturn [Array<Symbol, Array>] return test data set
|
98
|
+
# as an Array of variable and patterns.
|
99
|
+
#
|
100
|
+
# @example data(&block)
|
101
|
+
# data do
|
102
|
+
# patterns = 3.times.to_a
|
103
|
+
# [:x, patterns]
|
104
|
+
# end
|
105
|
+
# data do
|
106
|
+
# patterns = []
|
107
|
+
# character = "a"
|
108
|
+
# 2.times.each do
|
109
|
+
# patterns << character
|
110
|
+
# character = character.succ
|
111
|
+
# end
|
112
|
+
# [:y, patterns]
|
113
|
+
# end
|
114
|
+
# def test_patterns(data)
|
115
|
+
# # 3 * 2 times executed
|
116
|
+
# # 3: the number of patterns of :x
|
117
|
+
# # 2: the number of patterns of :y
|
118
|
+
# p data
|
119
|
+
# # => {:x => 0, :y => "a"}
|
120
|
+
# # => {:x => 0, :y => "b"}
|
121
|
+
# # => {:x => 1, :y => "a"}
|
122
|
+
# # => {:x => 1, :y => "b"}
|
123
|
+
# # => {:x => 2, :y => "a"}
|
124
|
+
# # => {:x => 2, :y => "b"}
|
125
|
+
# end
|
126
|
+
#
|
127
|
+
# Generates test matrix from variable and patterns pairs.
|
128
|
+
#
|
129
|
+
def data(*arguments, &block)
|
130
|
+
options = nil
|
131
|
+
n_arguments = arguments.size
|
132
|
+
case n_arguments
|
133
|
+
when 0
|
134
|
+
raise ArgumentError, "no block is given" unless block_given?
|
135
|
+
data_set = block
|
136
|
+
when 1
|
137
|
+
if block_given?
|
138
|
+
data_set = block
|
139
|
+
options = arguments[1]
|
140
|
+
else
|
141
|
+
data_set = arguments[0]
|
142
|
+
end
|
143
|
+
when 2
|
144
|
+
case arguments[0]
|
145
|
+
when String
|
146
|
+
data_set = {arguments[0] => arguments[1]}
|
147
|
+
when Hash
|
148
|
+
data_set = arguments[0]
|
149
|
+
options = arguments[1]
|
150
|
+
else
|
151
|
+
variable = arguments[0]
|
152
|
+
patterns = arguments[1]
|
153
|
+
data_set = [variable, patterns]
|
154
|
+
end
|
155
|
+
when 3
|
156
|
+
case arguments[0]
|
157
|
+
when String
|
158
|
+
data_set = {arguments[0] => arguments[1]}
|
159
|
+
options = arguments[2]
|
160
|
+
else
|
161
|
+
variable = arguments[0]
|
162
|
+
patterns = arguments[1]
|
163
|
+
data_set = [variable, patterns]
|
164
|
+
options = arguments[2]
|
165
|
+
end
|
166
|
+
else
|
167
|
+
message = "wrong number arguments(#{n_arguments} for 0..3)"
|
168
|
+
raise ArgumentError, message
|
169
|
+
end
|
170
|
+
options ||= {}
|
171
|
+
data_sets = current_attribute(:data)[:value] || DataSets.new
|
172
|
+
data_sets.add(data_set, options)
|
173
|
+
if options[:keep]
|
174
|
+
keep_hook = lambda do |attr|
|
175
|
+
attr.merge(value: attr[:value].keep)
|
176
|
+
end
|
177
|
+
options = options.merge(keep_hook: keep_hook)
|
178
|
+
end
|
179
|
+
attribute(:data, data_sets, options)
|
180
|
+
end
|
181
|
+
|
182
|
+
# This method provides Data-Driven-Test functionality.
|
183
|
+
#
|
184
|
+
# Load test data from the file. This is shorthand to load
|
185
|
+
# test data from file. If you want to load complex file, you
|
186
|
+
# can use {#data} with block.
|
187
|
+
#
|
188
|
+
# @param [String] file_name full path to test data file.
|
189
|
+
# File format is automatically detected from filename extension.
|
190
|
+
# @raise [ArgumentError] if `file_name` is not supported file format.
|
191
|
+
# @see Loader#load
|
192
|
+
#
|
193
|
+
# @example Load data from CSV file
|
194
|
+
# load_data("/path/to/test-data.csv")
|
195
|
+
# def test_empty?(data)
|
196
|
+
# assert_equal(data["expected"], data["target"].empty?)
|
197
|
+
# end
|
198
|
+
#
|
199
|
+
def load_data(file_name)
|
200
|
+
loader = Loader.new(self)
|
201
|
+
loader.load(file_name)
|
202
|
+
end
|
203
|
+
|
204
|
+
class Loader
|
205
|
+
# @api private
|
206
|
+
def initialize(test_case)
|
207
|
+
@test_case = test_case
|
208
|
+
end
|
209
|
+
|
210
|
+
# Load data from file.
|
211
|
+
#
|
212
|
+
# @param [String] file_name full path to test data file.
|
213
|
+
# File format is automatically detected from filename extension.
|
214
|
+
# @raise [ArgumentError] if `file_name` is not supported file format.
|
215
|
+
# @see #load_csv
|
216
|
+
# @see #load_tsv
|
217
|
+
# @api private
|
218
|
+
def load(file_name)
|
219
|
+
case File.extname(file_name).downcase
|
220
|
+
when ".csv"
|
221
|
+
load_csv(file_name)
|
222
|
+
when ".tsv"
|
223
|
+
load_tsv(file_name)
|
224
|
+
else
|
225
|
+
raise ArgumentError, "unsupported file format: <#{file_name}>"
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
# Load data from CSV file.
|
230
|
+
#
|
231
|
+
# There are 2 types of CSV file as following examples.
|
232
|
+
# First, there is a header on first row and it's first column is "label".
|
233
|
+
# Another, there is no header in the file.
|
234
|
+
#
|
235
|
+
# @example Load data from CSV file with header
|
236
|
+
# # test-data.csv:
|
237
|
+
# # label,expected,target
|
238
|
+
# # empty string,true,""
|
239
|
+
# # plain string,false,hello
|
240
|
+
# #
|
241
|
+
# load_data("/path/to/test-data.csv")
|
242
|
+
# def test_empty?(data)
|
243
|
+
# assert_equal(data["expected"], data["target"].empty?)
|
244
|
+
# end
|
245
|
+
#
|
246
|
+
# @example Load data from CSV file without header
|
247
|
+
# # test-data-without-header.csv:
|
248
|
+
# # empty string,true,""
|
249
|
+
# # plain string,false,hello
|
250
|
+
# #
|
251
|
+
# load_data("/path/to/test-data-without-header.csv")
|
252
|
+
# def test_empty?(data)
|
253
|
+
# expected, target = data
|
254
|
+
# assert_equal(expected, target.empty?)
|
255
|
+
# end
|
256
|
+
#
|
257
|
+
# @api private
|
258
|
+
def load_csv(file_name)
|
259
|
+
require 'csv'
|
260
|
+
first_row = true
|
261
|
+
header = nil
|
262
|
+
CSV.foreach(file_name) do |row|
|
263
|
+
if first_row
|
264
|
+
first_row = false
|
265
|
+
if row.first == "label"
|
266
|
+
header = row[1..-1]
|
267
|
+
next
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
set_test_data(header, row)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# Load data from TSV file.
|
276
|
+
#
|
277
|
+
# There are 2 types of TSV file as following examples.
|
278
|
+
# First, there is a header on first row and it's first column is "label".
|
279
|
+
# Another, there is no header in the file.
|
280
|
+
#
|
281
|
+
# @example Load data from TSV file with header
|
282
|
+
# # test-data.tsv:
|
283
|
+
# # label expected target
|
284
|
+
# # empty string true ""
|
285
|
+
# # plain string false hello
|
286
|
+
# #
|
287
|
+
# load_data("/path/to/test-data.tsv")
|
288
|
+
# def test_empty?(data)
|
289
|
+
# assert_equal(data["expected"], data["target"].empty?)
|
290
|
+
# end
|
291
|
+
#
|
292
|
+
# @example Load data from TSV file without header
|
293
|
+
# # test-data-without-header.tsv:
|
294
|
+
# # empty string true ""
|
295
|
+
# # plain string false hello
|
296
|
+
# #
|
297
|
+
# load_data("/path/to/test-data-without-header.tsv")
|
298
|
+
# def test_empty?(data)
|
299
|
+
# expected, target = data
|
300
|
+
# assert_equal(expected, target.empty?)
|
301
|
+
# end
|
302
|
+
#
|
303
|
+
# @api private
|
304
|
+
def load_tsv(file_name)
|
305
|
+
require "csv"
|
306
|
+
if CSV.const_defined?(:VERSION)
|
307
|
+
first_row = true
|
308
|
+
header = nil
|
309
|
+
CSV.foreach(file_name, :col_sep => "\t") do |row|
|
310
|
+
if first_row
|
311
|
+
first_row = false
|
312
|
+
if row.first == "label"
|
313
|
+
header = row[1..-1]
|
314
|
+
next
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
set_test_data(header, row)
|
319
|
+
end
|
320
|
+
else
|
321
|
+
# for old CSV library
|
322
|
+
first_row = true
|
323
|
+
header = nil
|
324
|
+
CSV.open(file_name, "r", "\t") do |row|
|
325
|
+
if first_row
|
326
|
+
first_row = false
|
327
|
+
if row.first == "label"
|
328
|
+
header = row[1..-1]
|
329
|
+
next
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
set_test_data(header, row)
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
private
|
339
|
+
def normalize_value(value)
|
340
|
+
return true if value == "true"
|
341
|
+
return false if value == "false"
|
342
|
+
begin
|
343
|
+
Integer(value)
|
344
|
+
rescue ArgumentError
|
345
|
+
begin
|
346
|
+
Float(value)
|
347
|
+
rescue ArgumentError
|
348
|
+
value
|
349
|
+
end
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def set_test_data(header, row)
|
354
|
+
label = row.shift
|
355
|
+
if header
|
356
|
+
data = {}
|
357
|
+
header.each_with_index do |key, i|
|
358
|
+
data[key] = normalize_value(row[i])
|
359
|
+
end
|
360
|
+
else
|
361
|
+
data = row.collect do |cell|
|
362
|
+
normalize_value(cell)
|
363
|
+
end
|
364
|
+
end
|
365
|
+
@test_case.data(label, data)
|
366
|
+
end
|
367
|
+
end
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
end
|