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.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +3 -0
  3. data/Gemfile.lock +5 -5
  4. data/ext/mkmf.log +3 -27
  5. data/ext/win32/api.c +16 -15
  6. data/lib/win32/ruby2_32/win32/api.so +0 -0
  7. data/pkg/win32-api-1.10.1-universal-mingw32.gem +0 -0
  8. data/test/test_win32_api.rb +1 -1
  9. data/vendor/bundle/ruby/3.0.0/bin/rake +27 -0
  10. data/vendor/bundle/ruby/3.0.0/bin/rake.bat +2 -0
  11. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/BSDL +22 -0
  12. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/COPYING +57 -0
  13. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/Gemfile +9 -0
  14. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/LEGAL +4 -0
  15. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/README.md +96 -0
  16. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/Rakefile +59 -0
  17. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/bin/console +12 -0
  18. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/bin/setup +6 -0
  19. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert.rb +91 -0
  20. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/colorize.rb +7 -0
  21. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/configuration.rb +46 -0
  22. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/context.rb +233 -0
  23. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/enable_tracepoint_events.rb +58 -0
  24. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/inspector.rb +62 -0
  25. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/parser.rb +251 -0
  26. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/lib/power_assert/version.rb +3 -0
  27. data/vendor/bundle/ruby/3.0.0/gems/power_assert-2.0.0/power_assert.gemspec +31 -0
  28. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/CONTRIBUTING.rdoc +43 -0
  29. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/Gemfile +10 -0
  30. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/History.rdoc +2386 -0
  31. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/MIT-LICENSE +21 -0
  32. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/README.rdoc +155 -0
  33. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/Rakefile +41 -0
  34. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/bundle +105 -0
  35. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/console +7 -0
  36. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rake +29 -0
  37. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rdoc +29 -0
  38. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/rubocop +29 -0
  39. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/bin/setup +6 -0
  40. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/command_line_usage.rdoc +158 -0
  41. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/Rakefile1 +38 -0
  42. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/Rakefile2 +35 -0
  43. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/a.c +6 -0
  44. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/b.c +6 -0
  45. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/example/main.c +11 -0
  46. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/glossary.rdoc +42 -0
  47. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/jamis.rb +592 -0
  48. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/proto_rake.rdoc +127 -0
  49. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rake.1 +156 -0
  50. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rakefile.rdoc +622 -0
  51. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/doc/rational.rdoc +151 -0
  52. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/exe/rake +27 -0
  53. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake.rb +71 -0
  54. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/application.rb +824 -0
  55. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/backtrace.rb +24 -0
  56. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/clean.rb +78 -0
  57. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/cloneable.rb +17 -0
  58. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/cpu_counter.rb +107 -0
  59. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/default_loader.rb +15 -0
  60. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/dsl_definition.rb +195 -0
  61. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/early_time.rb +22 -0
  62. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/ext/core.rb +26 -0
  63. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/ext/string.rb +176 -0
  64. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_creation_task.rb +25 -0
  65. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_list.rb +435 -0
  66. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_task.rb +54 -0
  67. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_utils.rb +134 -0
  68. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/file_utils_ext.rb +134 -0
  69. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/invocation_chain.rb +57 -0
  70. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/invocation_exception_mixin.rb +17 -0
  71. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/late_time.rb +18 -0
  72. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/linked_list.rb +112 -0
  73. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/loaders/makefile.rb +54 -0
  74. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/multi_task.rb +14 -0
  75. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/name_space.rb +38 -0
  76. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/packagetask.rb +222 -0
  77. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/phony.rb +16 -0
  78. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/private_reader.rb +21 -0
  79. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/promise.rb +100 -0
  80. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/pseudo_status.rb +30 -0
  81. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rake_module.rb +67 -0
  82. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rake_test_loader.rb +27 -0
  83. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
  84. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/scope.rb +43 -0
  85. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task.rb +434 -0
  86. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_argument_error.rb +8 -0
  87. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_arguments.rb +109 -0
  88. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/task_manager.rb +331 -0
  89. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/tasklib.rb +12 -0
  90. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/testtask.rb +189 -0
  91. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/thread_history_display.rb +49 -0
  92. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/thread_pool.rb +163 -0
  93. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/trace_output.rb +23 -0
  94. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/version.rb +10 -0
  95. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/lib/rake/win32.rb +51 -0
  96. data/vendor/bundle/ruby/3.0.0/gems/rake-13.0.3/rake.gemspec +43 -0
  97. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/BSDL +24 -0
  98. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/COPYING +64 -0
  99. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/PSFL +271 -0
  100. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/README.md +97 -0
  101. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/Rakefile +66 -0
  102. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/getting-started.md +246 -0
  103. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/how-to.md +90 -0
  104. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/doc/text/news.md +1552 -0
  105. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test-unit.rb +19 -0
  106. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit.rb +521 -0
  107. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/assertion-failed-error.rb +25 -0
  108. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/assertions.rb +2256 -0
  109. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/attribute-matcher.rb +26 -0
  110. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/attribute.rb +227 -0
  111. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/auto-runner-loader.rb +17 -0
  112. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/autorunner.rb +569 -0
  113. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/code-snippet-fetcher.rb +58 -0
  114. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector.rb +73 -0
  115. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/descendant.rb +19 -0
  116. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/dir.rb +108 -0
  117. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/load.rb +197 -0
  118. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/objectspace.rb +34 -0
  119. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/collector/xml.rb +249 -0
  120. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/color-scheme.rb +216 -0
  121. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/color.rb +134 -0
  122. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/data-sets.rb +116 -0
  123. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/data.rb +371 -0
  124. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/diff.rb +745 -0
  125. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/error.rb +158 -0
  126. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/exception-handler.rb +82 -0
  127. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/failure.rb +169 -0
  128. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/fault-location-detector.rb +100 -0
  129. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/fixture.rb +304 -0
  130. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/notification.rb +138 -0
  131. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/omission.rb +198 -0
  132. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/pending.rb +155 -0
  133. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/priority.rb +196 -0
  134. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/console.rb +67 -0
  135. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/emacs.rb +8 -0
  136. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/runner/xml.rb +15 -0
  137. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/test-suite-creator.rb +103 -0
  138. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testcase.rb +899 -0
  139. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testresult.rb +132 -0
  140. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/testsuite.rb +175 -0
  141. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/console/outputlevel.rb +15 -0
  142. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/console/testrunner.rb +733 -0
  143. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  144. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunner.rb +53 -0
  145. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunnermediator.rb +114 -0
  146. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  147. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/ui/xml/testrunner.rb +224 -0
  148. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/backtracefilter.rb +59 -0
  149. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/method-owner-finder.rb +28 -0
  150. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/observable.rb +90 -0
  151. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/output.rb +32 -0
  152. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/util/procwrapper.rb +48 -0
  153. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/version.rb +5 -0
  154. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/lib/test/unit/warning.rb +3 -0
  155. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/adder.rb +13 -0
  156. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/subtracter.rb +12 -0
  157. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_adder.rb +20 -0
  158. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_subtracter.rb +20 -0
  159. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/sample/test_user.rb +23 -0
  160. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test-descendant.rb +182 -0
  161. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test-load.rb +475 -0
  162. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test_dir.rb +407 -0
  163. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/collector/test_objectspace.rb +102 -0
  164. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header-label.csv +3 -0
  165. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header-label.tsv +3 -0
  166. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header.csv +3 -0
  167. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/header.tsv +3 -0
  168. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/no-header.csv +2 -0
  169. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/no-header.tsv +2 -0
  170. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/fixtures/plus.csv +3 -0
  171. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/run-test.rb +22 -0
  172. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-assertions.rb +2187 -0
  173. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-attribute-matcher.rb +38 -0
  174. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-attribute.rb +123 -0
  175. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-code-snippet.rb +79 -0
  176. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-color-scheme.rb +123 -0
  177. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-color.rb +47 -0
  178. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-data.rb +419 -0
  179. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-diff.rb +518 -0
  180. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-emacs-runner.rb +60 -0
  181. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-error.rb +26 -0
  182. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-failure.rb +33 -0
  183. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-fault-location-detector.rb +163 -0
  184. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-fixture.rb +713 -0
  185. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-notification.rb +33 -0
  186. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-omission.rb +81 -0
  187. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-pending.rb +70 -0
  188. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-priority.rb +184 -0
  189. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-case.rb +1284 -0
  190. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-result.rb +113 -0
  191. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-suite-creator.rb +97 -0
  192. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/test-test-suite.rb +151 -0
  193. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/testunit-test-util.rb +33 -0
  194. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/ui/test_testrunmediator.rb +20 -0
  195. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test-method-owner-finder.rb +38 -0
  196. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test-output.rb +11 -0
  197. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_backtracefilter.rb +52 -0
  198. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_observable.rb +102 -0
  199. data/vendor/bundle/ruby/3.0.0/gems/test-unit-3.4.1/test/util/test_procwrapper.rb +36 -0
  200. data/vendor/bundle/ruby/3.0.0/specifications/power_assert-2.0.0.gemspec +46 -0
  201. data/vendor/bundle/ruby/3.0.0/specifications/rake-13.0.3.gemspec +26 -0
  202. data/vendor/bundle/ruby/3.0.0/specifications/test-unit-3.4.1.gemspec +41 -0
  203. data/win32-api.gemspec +1 -1
  204. metadata +199 -8
  205. data/ext/Makefile +0 -269
  206. data/ext/api-x64-mingw32.def +0 -2
  207. data/ext/api.o +0 -0
  208. data/ext/api.so +0 -0
  209. data/ext/win32/api.so +0 -0
@@ -0,0 +1,132 @@
1
+ #--
2
+ # Author:: Nathaniel Talbott.
3
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
4
+ # License:: Ruby license.
5
+
6
+ require 'test/unit/util/observable'
7
+ require 'test/unit/failure'
8
+ require 'test/unit/error'
9
+ require 'test/unit/omission'
10
+ require 'test/unit/pending'
11
+ require 'test/unit/notification'
12
+
13
+ module Test
14
+ module Unit
15
+ module NullResultContainerInitializer
16
+ private
17
+ def initialize_containers
18
+ end
19
+ end
20
+
21
+ # Collects Test::Unit::Failure and Test::Unit::Error so that
22
+ # they can be displayed to the user. To this end, observers
23
+ # can be added to it, allowing the dynamic updating of, say, a
24
+ # UI.
25
+ class TestResult
26
+ include Util::Observable
27
+ include NullResultContainerInitializer
28
+ include TestResultFailureSupport
29
+ include TestResultErrorSupport
30
+ include TestResultPendingSupport
31
+ include TestResultOmissionSupport
32
+ include TestResultNotificationSupport
33
+
34
+ FINISHED = name + "::FINISHED"
35
+ CHANGED = name + "::CHANGED"
36
+ PASS_ASSERTION = name + "::PASS_ASSERTION"
37
+ FAULT = name + "::FAULT"
38
+
39
+ attr_reader :run_count, :pass_count, :assertion_count, :faults
40
+
41
+ attr_accessor :stop_tag
42
+
43
+ # Constructs a new, empty TestResult.
44
+ def initialize
45
+ @run_count, @pass_count, @assertion_count = 0, 0, 0
46
+ @summary_generators = []
47
+ @problem_checkers = []
48
+ @faults = []
49
+ @stop_tag = nil
50
+ initialize_containers
51
+ end
52
+
53
+ # Records a test run.
54
+ def add_run
55
+ @run_count += 1
56
+ notify_listeners(FINISHED, self)
57
+ notify_changed
58
+ end
59
+
60
+ def add_pass
61
+ @pass_count += 1
62
+ end
63
+
64
+ # Records an individual assertion.
65
+ def add_assertion
66
+ @assertion_count += 1
67
+ notify_listeners(PASS_ASSERTION, self)
68
+ notify_changed
69
+ end
70
+
71
+ # Returns a string contain the recorded runs, assertions,
72
+ # failures and errors in this TestResult.
73
+ def summary
74
+ ["#{run_count} tests",
75
+ "#{assertion_count} assertions",
76
+ *@summary_generators.collect {|generator| __send__(generator)}].join(", ")
77
+ end
78
+
79
+ # Returnes a string that shows result status.
80
+ def status
81
+ if passed?
82
+ if pending_count > 0
83
+ "pending"
84
+ elsif omission_count > 0
85
+ "omission"
86
+ elsif notification_count > 0
87
+ "notification"
88
+ else
89
+ "pass"
90
+ end
91
+ elsif error_count > 0
92
+ "error"
93
+ elsif failure_count > 0
94
+ "failure"
95
+ end
96
+ end
97
+
98
+ def stop
99
+ throw @stop_tag
100
+ end
101
+
102
+ def to_s
103
+ summary
104
+ end
105
+
106
+ # Returns whether or not this TestResult represents
107
+ # successful completion.
108
+ def passed?
109
+ @problem_checkers.all? {|checker| not __send__(checker)}
110
+ end
111
+
112
+ def pass_percentage
113
+ n_tests = @run_count - omission_count
114
+ if n_tests.zero?
115
+ 0
116
+ else
117
+ 100.0 * (@pass_count / n_tests.to_f)
118
+ end
119
+ end
120
+
121
+ private
122
+ def notify_changed
123
+ notify_listeners(CHANGED, self)
124
+ end
125
+
126
+ def notify_fault(fault)
127
+ @faults << fault
128
+ notify_listeners(FAULT, fault)
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,175 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
+ # Copyright:: Copyright (c) 2008-2011 Kouhei Sutou. All rights reserved.
6
+ # License:: Ruby license.
7
+
8
+ require 'test/unit/error'
9
+
10
+ module Test
11
+ module Unit
12
+
13
+ # A collection of tests which can be #run.
14
+ #
15
+ # Note: It is easy to confuse a TestSuite instance with
16
+ # something that has a static suite method; I know because _I_
17
+ # have trouble keeping them straight. Think of something that
18
+ # has a suite method as simply providing a way to get a
19
+ # meaningful TestSuite instance.
20
+ class TestSuite
21
+ attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
22
+
23
+ # Test suite that has higher priority is ran prior to
24
+ # test suites that have lower priority.
25
+ attr_accessor :priority
26
+
27
+ STARTED = name + "::STARTED"
28
+ STARTED_OBJECT = name + "::STARTED::OBJECT"
29
+ FINISHED = name + "::FINISHED"
30
+ FINISHED_OBJECT = name + "::FINISHED::OBJECT"
31
+
32
+ # Creates a new TestSuite with the given name.
33
+ def initialize(name="Unnamed TestSuite", test_case=nil)
34
+ @name = name
35
+ @tests = []
36
+ @test_case = test_case
37
+ @n_tests = 0
38
+ @priority = 0
39
+ @start_time = nil
40
+ @elapsed_time = nil
41
+ @passed = true
42
+ end
43
+
44
+ # Runs the tests and/or suites contained in this
45
+ # TestSuite.
46
+ def run(result, &progress_block)
47
+ @start_time = Time.now
48
+ yield(STARTED, name)
49
+ yield(STARTED_OBJECT, self)
50
+ run_startup(result)
51
+ while test = @tests.shift
52
+ @n_tests += test.size
53
+ run_test(test, result, &progress_block)
54
+ @passed = false unless test.passed?
55
+ end
56
+ ensure
57
+ begin
58
+ run_shutdown(result)
59
+ ensure
60
+ @elapsed_time = Time.now - @start_time
61
+ yield(FINISHED, name)
62
+ yield(FINISHED_OBJECT, self)
63
+ end
64
+ end
65
+
66
+ # Adds the test to the suite.
67
+ def <<(test)
68
+ @tests << test
69
+ self
70
+ end
71
+
72
+ def delete(test)
73
+ @tests.delete(test)
74
+ end
75
+
76
+ def delete_tests(tests)
77
+ @tests -= tests
78
+ end
79
+
80
+ # Retuns the rolled up number of tests in this suite;
81
+ # i.e. if the suite contains other suites, it counts the
82
+ # tests within those suites, not the suites themselves.
83
+ def size
84
+ total_size = @n_tests
85
+ @tests.each { |test| total_size += test.size }
86
+ total_size
87
+ end
88
+
89
+ def empty?
90
+ size.zero?
91
+ end
92
+
93
+ # Overridden to return the name given the suite at
94
+ # creation.
95
+ def to_s
96
+ @name
97
+ end
98
+
99
+ # It's handy to be able to compare TestSuite instances.
100
+ def ==(other)
101
+ return false unless(other.kind_of?(self.class))
102
+ return false unless(@name == other.name)
103
+ @tests == other.tests
104
+ end
105
+
106
+ def passed?
107
+ @passed
108
+ end
109
+
110
+ private
111
+ def run_startup(result)
112
+ return if @test_case.nil? or !@test_case.respond_to?(:startup)
113
+ begin
114
+ @test_case.startup
115
+ rescue Exception
116
+ raise unless handle_exception($!, result)
117
+ end
118
+ end
119
+
120
+ def run_test(test, result)
121
+ finished_is_yielded = false
122
+ finished_object_is_yielded = false
123
+ previous_event_name = nil
124
+ test.run(result) do |event_name, *args|
125
+ case previous_event_name
126
+ when Test::Unit::TestCase::STARTED
127
+ if event_name != Test::Unit::TestCase::STARTED_OBJECT
128
+ yield(Test::Unit::TestCase::STARTED_OBJECT, test)
129
+ end
130
+ when Test::Unit::TestCase::FINISHED
131
+ if event_name != Test::Unit::TestCase::FINISHED_OBJECT
132
+ yield(Test::Unit::TestCase::FINISHED_OBJECT, test)
133
+ end
134
+ finished_object_is_yielded = true
135
+ end
136
+
137
+ case event_name
138
+ when Test::Unit::TestCase::STARTED
139
+ finished_is_yielded = false
140
+ finished_object_is_yielded = false
141
+ when Test::Unit::TestCase::FINISHED
142
+ finished_is_yielded = true
143
+ end
144
+
145
+ previous_event_name = event_name
146
+ yield(event_name, *args)
147
+ end
148
+
149
+ if finished_is_yielded and not finished_object_is_yielded
150
+ yield(Test::Unit::TestCase::FINISHED_OBJECT, test)
151
+ end
152
+ end
153
+
154
+ def run_shutdown(result)
155
+ return if @test_case.nil? or !@test_case.respond_to?(:shutdown)
156
+ begin
157
+ @test_case.shutdown
158
+ rescue Exception
159
+ raise unless handle_exception($!, result)
160
+ end
161
+ end
162
+
163
+ def handle_exception(exception, result)
164
+ case exception
165
+ when *ErrorHandler::PASS_THROUGH_EXCEPTIONS
166
+ false
167
+ else
168
+ result.add_error(Error.new(@test_case.name, exception))
169
+ @passed = false
170
+ true
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,15 @@
1
+ module Test
2
+ module Unit
3
+ module UI
4
+ module Console
5
+ module OutputLevel
6
+ SILENT = 0
7
+ PROGRESS_ONLY = 1
8
+ IMPORTANT_FAULTS_ONLY = 2
9
+ NORMAL = 3
10
+ VERBOSE = 4
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,733 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright::
5
+ # * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
6
+ # * Copyright (c) 2008-2017 Kouhei Sutou <kou@clear-code.com>
7
+ # License:: Ruby license.
8
+
9
+ begin
10
+ require 'io/console'
11
+ rescue LoadError
12
+ end
13
+
14
+ require 'test/unit/color-scheme'
15
+ require 'test/unit/code-snippet-fetcher'
16
+ require 'test/unit/fault-location-detector'
17
+ require 'test/unit/diff'
18
+ require 'test/unit/ui/testrunner'
19
+ require 'test/unit/ui/testrunnermediator'
20
+ require 'test/unit/ui/console/outputlevel'
21
+
22
+ module Test
23
+ module Unit
24
+ module UI
25
+ module Console
26
+
27
+ # Runs a Test::Unit::TestSuite on the console.
28
+ class TestRunner < UI::TestRunner
29
+ include OutputLevel
30
+
31
+ # Creates a new TestRunner for running the passed
32
+ # suite. If quiet_mode is true, the output while
33
+ # running is limited to progress dots, errors and
34
+ # failures, and the final result. io specifies
35
+ # where runner output should go to; defaults to
36
+ # STDOUT.
37
+ def initialize(suite, options={})
38
+ super
39
+ @output_level = @options[:output_level] || NORMAL
40
+ @output = @options[:output] || STDOUT
41
+ @use_color = @options[:use_color]
42
+ @use_color = guess_color_availability if @use_color.nil?
43
+ @color_scheme = @options[:color_scheme] || ColorScheme.default
44
+ @reset_color = Color.new("reset")
45
+ @progress_row = 0
46
+ @progress_row_max = @options[:progress_row_max]
47
+ @progress_row_max ||= guess_progress_row_max
48
+ @show_detail_immediately = @options[:show_detail_immediately]
49
+ @show_detail_immediately = true if @show_detail_immediately.nil?
50
+ @already_outputted = false
51
+ @indent = 0
52
+ @top_level = true
53
+ @current_output_level = NORMAL
54
+ @faults = []
55
+ @code_snippet_fetcher = CodeSnippetFetcher.new
56
+ @test_suites = []
57
+ end
58
+
59
+ private
60
+ def change_output_level(level)
61
+ old_output_level = @current_output_level
62
+ @current_output_level = level
63
+ yield
64
+ @current_output_level = old_output_level
65
+ end
66
+
67
+ def setup_mediator
68
+ super
69
+ output_setup_end
70
+ end
71
+
72
+ def output_setup_end
73
+ suite_name = @suite.to_s
74
+ suite_name = @suite.name if @suite.kind_of?(Module)
75
+ output("Loaded suite #{suite_name}")
76
+ end
77
+
78
+ def attach_to_mediator
79
+ @mediator.add_listener(TestResult::FAULT,
80
+ &method(:add_fault))
81
+ @mediator.add_listener(TestRunnerMediator::STARTED,
82
+ &method(:started))
83
+ @mediator.add_listener(TestRunnerMediator::FINISHED,
84
+ &method(:finished))
85
+ @mediator.add_listener(TestCase::STARTED_OBJECT,
86
+ &method(:test_started))
87
+ @mediator.add_listener(TestCase::FINISHED_OBJECT,
88
+ &method(:test_finished))
89
+ @mediator.add_listener(TestSuite::STARTED_OBJECT,
90
+ &method(:test_suite_started))
91
+ @mediator.add_listener(TestSuite::FINISHED_OBJECT,
92
+ &method(:test_suite_finished))
93
+ end
94
+
95
+ def add_fault(fault)
96
+ @faults << fault
97
+ output_progress(fault.single_character_display,
98
+ fault_marker_color(fault))
99
+ output_progress_in_detail(fault) if @show_detail_immediately
100
+ @already_outputted = true if fault.critical?
101
+ end
102
+
103
+ def started(result)
104
+ @result = result
105
+ output_started
106
+ end
107
+
108
+ def output_started
109
+ output("Started")
110
+ end
111
+
112
+ def finished(elapsed_time)
113
+ unless @show_detail_immediately
114
+ nl if output?(NORMAL) and !output?(VERBOSE)
115
+ output_faults
116
+ end
117
+ nl(PROGRESS_ONLY)
118
+ change_output_level(IMPORTANT_FAULTS_ONLY) do
119
+ output_statistics(elapsed_time)
120
+ end
121
+ end
122
+
123
+ def output_faults
124
+ categorized_faults = categorize_faults
125
+ change_output_level(IMPORTANT_FAULTS_ONLY) do
126
+ output_faults_in_detail(categorized_faults[:need_detail_faults])
127
+ end
128
+ output_faults_in_short("Omissions", Omission,
129
+ categorized_faults[:omissions])
130
+ output_faults_in_short("Notifications", Notification,
131
+ categorized_faults[:notifications])
132
+ end
133
+
134
+ def max_digit(max_number)
135
+ (Math.log10(max_number) + 1).truncate
136
+ end
137
+
138
+ def output_faults_in_detail(faults)
139
+ return if faults.nil?
140
+ digit = max_digit(faults.size)
141
+ faults.each_with_index do |fault, index|
142
+ nl
143
+ output_single("%#{digit}d) " % (index + 1))
144
+ output_fault_in_detail(fault)
145
+ end
146
+ end
147
+
148
+ def output_faults_in_short(label, fault_class, faults)
149
+ return if faults.nil?
150
+ digit = max_digit(faults.size)
151
+ nl
152
+ output_single(label, fault_class_color(fault_class))
153
+ output(":")
154
+ faults.each_with_index do |fault, index|
155
+ output_single("%#{digit}d) " % (index + 1))
156
+ output_fault_in_short(fault)
157
+ end
158
+ end
159
+
160
+ def categorize_faults
161
+ faults = {}
162
+ @faults.each do |fault|
163
+ category = categorize_fault(fault)
164
+ faults[category] ||= []
165
+ faults[category] << fault
166
+ end
167
+ faults
168
+ end
169
+
170
+ def categorize_fault(fault)
171
+ case fault
172
+ when Omission
173
+ :omissions
174
+ when Notification
175
+ :notifications
176
+ else
177
+ :need_detail_faults
178
+ end
179
+ end
180
+
181
+ def output_fault_in_detail(fault)
182
+ if fault.is_a?(Failure) and
183
+ fault.inspected_expected and
184
+ fault.inspected_actual
185
+ output_single("#{fault.label}: ")
186
+ output(fault.test_name, fault_color(fault))
187
+ output_fault_backtrace(fault)
188
+ output_failure_message(fault)
189
+ else
190
+ output_single("#{fault.label}: ")
191
+ output_single(fault.test_name, fault_color(fault))
192
+ output_fault_message(fault)
193
+ output_fault_backtrace(fault)
194
+ end
195
+ end
196
+
197
+ def output_fault_message(fault)
198
+ message = fault.message
199
+ return if message.nil?
200
+
201
+ if message.include?("\n")
202
+ output(":")
203
+ message.each_line do |line|
204
+ output(" #{line.chomp}")
205
+ end
206
+ else
207
+ output(": #{message}")
208
+ end
209
+ end
210
+
211
+ def output_fault_backtrace(fault)
212
+ detector = FaultLocationDetector.new(fault, @code_snippet_fetcher)
213
+ backtrace = fault.location
214
+ # workaround for test-spec. :<
215
+ # see also GitHub:#22
216
+ backtrace ||= []
217
+
218
+ code_snippet_backtrace_index = nil
219
+ code_snippet_lines = nil
220
+ backtrace.each_with_index do |entry, i|
221
+ next unless detector.target?(entry)
222
+ file, line_number, = detector.split_backtrace_entry(entry)
223
+ lines = fetch_code_snippet(file, line_number)
224
+ unless lines.empty?
225
+ code_snippet_backtrace_index = i
226
+ code_snippet_lines = lines
227
+ break
228
+ end
229
+ end
230
+
231
+ backtrace.each_with_index do |entry, i|
232
+ output(entry)
233
+ if i == code_snippet_backtrace_index
234
+ output_code_snippet(code_snippet_lines, fault_color(fault))
235
+ end
236
+ end
237
+ end
238
+
239
+ def fetch_code_snippet(file, line_number)
240
+ @code_snippet_fetcher.fetch(file, line_number)
241
+ end
242
+
243
+ def output_code_snippet(lines, target_line_color=nil)
244
+ max_n = lines.collect {|n, line, attributes| n}.max
245
+ digits = (Math.log10(max_n) + 1).truncate
246
+ lines.each do |n, line, attributes|
247
+ if attributes[:target_line?]
248
+ line_color = target_line_color
249
+ current_line_mark = "=>"
250
+ else
251
+ line_color = nil
252
+ current_line_mark = ""
253
+ end
254
+ output(" %2s %*d: %s" % [current_line_mark, digits, n, line],
255
+ line_color)
256
+ end
257
+ end
258
+
259
+ def output_failure_message(failure)
260
+ if failure.expected.respond_to?(:encoding) and
261
+ failure.actual.respond_to?(:encoding) and
262
+ failure.expected.encoding != failure.actual.encoding
263
+ need_encoding = true
264
+ else
265
+ need_encoding = false
266
+ end
267
+ output(failure.user_message) if failure.user_message
268
+ output_single("<")
269
+ output_single(failure.inspected_expected, color("pass"))
270
+ output_single(">")
271
+ if need_encoding
272
+ output_single("(")
273
+ output_single(failure.expected.encoding.name, color("pass"))
274
+ output_single(")")
275
+ end
276
+ output(" expected but was")
277
+ output_single("<")
278
+ output_single(failure.inspected_actual, color("failure"))
279
+ output_single(">")
280
+ if need_encoding
281
+ output_single("(")
282
+ output_single(failure.actual.encoding.name, color("failure"))
283
+ output_single(")")
284
+ end
285
+ output("")
286
+ from, to = prepare_for_diff(failure.expected, failure.actual)
287
+ if from and to
288
+ if need_encoding
289
+ unless from.valid_encoding?
290
+ from = from.dup.force_encoding("ASCII-8BIT")
291
+ end
292
+ unless to.valid_encoding?
293
+ to = to.dup.force_encoding("ASCII-8BIT")
294
+ end
295
+ end
296
+ from_lines = from.split(/\r?\n/)
297
+ to_lines = to.split(/\r?\n/)
298
+ if need_encoding
299
+ from_lines << ""
300
+ to_lines << ""
301
+ from_lines << "Encoding: #{failure.expected.encoding.name}"
302
+ to_lines << "Encoding: #{failure.actual.encoding.name}"
303
+ end
304
+ differ = ColorizedReadableDiffer.new(from_lines, to_lines, self)
305
+ if differ.need_diff?
306
+ output("")
307
+ output("diff:")
308
+ differ.diff
309
+ end
310
+ end
311
+ end
312
+
313
+ def output_fault_in_short(fault)
314
+ output_single("#{fault.label}: ")
315
+ output_single(fault.message, fault_color(fault))
316
+ output(" [#{fault.test_name}]")
317
+ output(fault.location.first)
318
+ end
319
+
320
+ def format_fault(fault)
321
+ fault.long_display
322
+ end
323
+
324
+ def output_statistics(elapsed_time)
325
+ output("Finished in #{elapsed_time} seconds.")
326
+ output_summary_marker
327
+ output(@result)
328
+ output("%g%% passed" % @result.pass_percentage)
329
+ unless elapsed_time.zero?
330
+ output_summary_marker
331
+ test_throughput = @result.run_count / elapsed_time
332
+ assertion_throughput = @result.assertion_count / elapsed_time
333
+ throughput = [
334
+ "%.2f tests/s" % test_throughput,
335
+ "%.2f assertions/s" % assertion_throughput,
336
+ ]
337
+ output(throughput.join(", "))
338
+ end
339
+ end
340
+
341
+ def output_summary_marker
342
+ if @progress_row_max > 0
343
+ output("-" * @progress_row_max, summary_marker_color)
344
+ else
345
+ nl
346
+ end
347
+ end
348
+
349
+ def test_started(test)
350
+ return unless output?(VERBOSE)
351
+
352
+ tab_width = 8
353
+ name = test.local_name
354
+ separator = ":"
355
+ left_used = indent.size + name.size + separator.size
356
+ right_space = tab_width * 2
357
+ left_space = @progress_row_max - right_space
358
+ if (left_used % tab_width).zero?
359
+ left_space -= left_used
360
+ n_tabs = 0
361
+ else
362
+ left_space -= ((left_used / tab_width) + 1) * tab_width
363
+ n_tabs = 1
364
+ end
365
+ n_tabs += [left_space, 0].max / tab_width
366
+ tab_stop = "\t" * n_tabs
367
+ output_single("#{indent}#{name}#{separator}#{tab_stop}",
368
+ nil,
369
+ VERBOSE)
370
+ @test_start = Time.now
371
+ end
372
+
373
+ def test_finished(test)
374
+ unless @already_outputted
375
+ output_progress(".", color("pass-marker"))
376
+ end
377
+ @already_outputted = false
378
+
379
+ return unless output?(VERBOSE)
380
+
381
+ output(": (%f)" % (Time.now - @test_start), nil, VERBOSE)
382
+ end
383
+
384
+ def suite_name(prefix, suite)
385
+ name = suite.name
386
+ if name.nil?
387
+ "(anonymous)"
388
+ else
389
+ name.sub(/\A#{Regexp.escape(prefix)}/, "")
390
+ end
391
+ end
392
+
393
+ def test_suite_started(suite)
394
+ last_test_suite = @test_suites.last
395
+ @test_suites << suite
396
+ if @top_level
397
+ @top_level = false
398
+ return
399
+ end
400
+
401
+ output_single(indent, nil, VERBOSE)
402
+ if suite.test_case.nil?
403
+ _color = color("suite")
404
+ else
405
+ _color = color("case")
406
+ end
407
+ prefix = "#{last_test_suite.name}::"
408
+ output_single(suite_name(prefix, suite), _color, VERBOSE)
409
+ output(": ", nil, VERBOSE)
410
+ @indent += 2
411
+ end
412
+
413
+ def test_suite_finished(suite)
414
+ @indent -= 2
415
+ @test_suites.pop
416
+ end
417
+
418
+ def indent
419
+ if output?(VERBOSE)
420
+ " " * @indent
421
+ else
422
+ ""
423
+ end
424
+ end
425
+
426
+ def nl(level=nil)
427
+ output("", nil, level)
428
+ end
429
+
430
+ def output(something, color=nil, level=nil)
431
+ return unless output?(level)
432
+ output_single(something, color, level)
433
+ @output.puts
434
+ end
435
+
436
+ def output_single(something, color=nil, level=nil)
437
+ return false unless output?(level)
438
+ if @use_color and color
439
+ something = "%s%s%s" % [color.escape_sequence,
440
+ something,
441
+ @reset_color.escape_sequence]
442
+ end
443
+ @output.write(something)
444
+ @output.flush
445
+ true
446
+ end
447
+
448
+ def output_progress(mark, color=nil)
449
+ if output_single(mark, color, PROGRESS_ONLY)
450
+ return unless @progress_row_max > 0
451
+ @progress_row += mark.size
452
+ if @progress_row >= @progress_row_max
453
+ nl unless @output_level == VERBOSE
454
+ @progress_row = 0
455
+ end
456
+ end
457
+ end
458
+
459
+ def output_progress_in_detail_marker(fault)
460
+ if @progress_row_max > 0
461
+ output("=" * @progress_row_max)
462
+ else
463
+ nl
464
+ end
465
+ end
466
+
467
+ def output_progress_in_detail(fault)
468
+ return if @output_level == SILENT
469
+ nl
470
+ output_progress_in_detail_marker(fault)
471
+ if categorize_fault(fault) == :need_detail_faults
472
+ output_fault_in_detail(fault)
473
+ else
474
+ output_fault_in_short(fault)
475
+ end
476
+ output_progress_in_detail_marker(fault)
477
+ @progress_row = 0
478
+ end
479
+
480
+ def output?(level)
481
+ (level || @current_output_level) <= @output_level
482
+ end
483
+
484
+ def color(name)
485
+ _color = @color_scheme[name]
486
+ _color ||= @color_scheme["success"] if name == "pass"
487
+ _color ||= ColorScheme.default[name]
488
+ _color
489
+ end
490
+
491
+ def fault_class_color_name(fault_class)
492
+ fault_class.name.split(/::/).last.downcase
493
+ end
494
+
495
+ def fault_class_color(fault_class)
496
+ color(fault_class_color_name(fault_class))
497
+ end
498
+
499
+ def fault_color(fault)
500
+ fault_class_color(fault.class)
501
+ end
502
+
503
+ def fault_marker_color(fault)
504
+ color("#{fault_class_color_name(fault.class)}-marker")
505
+ end
506
+
507
+ def summary_marker_color
508
+ color("#{@result.status}-marker")
509
+ end
510
+
511
+ TERM_COLOR_SUPPORT = /
512
+ color| # explicitly claims color support in the name
513
+ direct| # explicitly claims "direct color" (24 bit) support
514
+ #{ColorScheme::TERM_256}|
515
+ \Acygwin|
516
+ \Alinux|
517
+ \Ansterm-bce|
518
+ \Ansterm-c-|
519
+ \Aputty|
520
+ \Arxvt|
521
+ \Ascreen|
522
+ \Atmux|
523
+ \Axterm
524
+ /x
525
+
526
+ def guess_color_availability
527
+ return false unless @output.tty?
528
+ return true if windows? and ruby_2_0_or_later?
529
+ case ENV["TERM"]
530
+ when /(?:term|screen)(?:-(?:256)?color)?\z/
531
+ true
532
+ when TERM_COLOR_SUPPORT
533
+ true
534
+ else
535
+ return true if ENV["EMACS"] == "t"
536
+ false
537
+ end
538
+ end
539
+
540
+ def windows?
541
+ /mswin|mingw/ === RUBY_PLATFORM
542
+ end
543
+
544
+ def ruby_2_0_or_later?
545
+ RUBY_VERSION >= "2.0.0"
546
+ end
547
+
548
+ def guess_progress_row_max
549
+ term_width = guess_term_width
550
+ if term_width.zero?
551
+ if ENV["EMACS"] == "t"
552
+ -1
553
+ else
554
+ 79
555
+ end
556
+ else
557
+ term_width
558
+ end
559
+ end
560
+
561
+ def guess_term_width
562
+ guess_term_width_from_io || guess_term_width_from_env || 0
563
+ end
564
+
565
+ def guess_term_width_from_io
566
+ if @output.respond_to?(:winsize)
567
+ begin
568
+ @output.winsize[1]
569
+ rescue SystemCallError
570
+ nil
571
+ end
572
+ else
573
+ nil
574
+ end
575
+ end
576
+
577
+ def guess_term_width_from_env
578
+ env = ENV["COLUMNS"] || ENV["TERM_WIDTH"]
579
+ return nil if env.nil?
580
+
581
+ begin
582
+ Integer(env)
583
+ rescue ArgumentError
584
+ nil
585
+ end
586
+ end
587
+ end
588
+
589
+ class ColorizedReadableDiffer < Diff::ReadableDiffer
590
+ def initialize(from, to, runner)
591
+ @runner = runner
592
+ super(from, to)
593
+ end
594
+
595
+ def need_diff?(options={})
596
+ return false if one_line_all_change?
597
+ operations.each do |tag,|
598
+ return true if [:replace, :equal].include?(tag)
599
+ end
600
+ false
601
+ end
602
+
603
+ private
604
+ def one_line_all_change?
605
+ return false if operations.size != 1
606
+
607
+ tag, from_start, from_end, to_start, to_end = operations.first
608
+ return false if tag != :replace
609
+ return false if [from_start, from_end] != [0, 1]
610
+ return false if [from_start, from_end] != [to_start, to_end]
611
+
612
+ _, _, _line_operations = line_operations(@from.first, @to.first)
613
+ _line_operations.size == 1
614
+ end
615
+
616
+ def output_single(something, color=nil)
617
+ @runner.__send__(:output_single, something, color)
618
+ end
619
+
620
+ def output(something, color=nil)
621
+ @runner.__send__(:output, something, color)
622
+ end
623
+
624
+ def color(name)
625
+ @runner.__send__(:color, name)
626
+ end
627
+
628
+ def cut_off_ratio
629
+ 0
630
+ end
631
+
632
+ def default_ratio
633
+ 0
634
+ end
635
+
636
+ def tag(mark, color_name, contents)
637
+ _color = color(color_name)
638
+ contents.each do |content|
639
+ output_single(mark, _color)
640
+ output_single(" ")
641
+ output(content)
642
+ end
643
+ end
644
+
645
+ def tag_deleted(contents)
646
+ tag("-", "diff-deleted-tag", contents)
647
+ end
648
+
649
+ def tag_inserted(contents)
650
+ tag("+", "diff-inserted-tag", contents)
651
+ end
652
+
653
+ def tag_equal(contents)
654
+ tag(" ", "normal", contents)
655
+ end
656
+
657
+ def tag_difference(contents)
658
+ tag("?", "diff-difference-tag", contents)
659
+ end
660
+
661
+ def diff_line(from_line, to_line)
662
+ to_operations = []
663
+ from_line, to_line, _operations = line_operations(from_line, to_line)
664
+
665
+ no_replace = true
666
+ _operations.each do |tag,|
667
+ if tag == :replace
668
+ no_replace = false
669
+ break
670
+ end
671
+ end
672
+
673
+ output_single("?", color("diff-difference-tag"))
674
+ output_single(" ")
675
+ _operations.each do |tag, from_start, from_end, to_start, to_end|
676
+ from_width = compute_width(from_line, from_start, from_end)
677
+ to_width = compute_width(to_line, to_start, to_end)
678
+ case tag
679
+ when :replace
680
+ output_single(from_line[from_start...from_end],
681
+ color("diff-deleted"))
682
+ if (from_width < to_width)
683
+ output_single(" " * (to_width - from_width))
684
+ end
685
+ to_operations << Proc.new do
686
+ output_single(to_line[to_start...to_end],
687
+ color("diff-inserted"))
688
+ if (to_width < from_width)
689
+ output_single(" " * (from_width - to_width))
690
+ end
691
+ end
692
+ when :delete
693
+ output_single(from_line[from_start...from_end],
694
+ color("diff-deleted"))
695
+ unless no_replace
696
+ to_operations << Proc.new {output_single(" " * from_width)}
697
+ end
698
+ when :insert
699
+ if no_replace
700
+ output_single(to_line[to_start...to_end],
701
+ color("diff-inserted"))
702
+ else
703
+ output_single(" " * to_width)
704
+ to_operations << Proc.new do
705
+ output_single(to_line[to_start...to_end],
706
+ color("diff-inserted"))
707
+ end
708
+ end
709
+ when :equal
710
+ output_single(from_line[from_start...from_end])
711
+ unless no_replace
712
+ to_operations << Proc.new {output_single(" " * to_width)}
713
+ end
714
+ else
715
+ raise "unknown tag: #{tag}"
716
+ end
717
+ end
718
+ output("")
719
+
720
+ unless to_operations.empty?
721
+ output_single("?", color("diff-difference-tag"))
722
+ output_single(" ")
723
+ to_operations.each do |operation|
724
+ operation.call
725
+ end
726
+ output("")
727
+ end
728
+ end
729
+ end
730
+ end
731
+ end
732
+ end
733
+ end