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,25 @@
1
+ #--
2
+ #
3
+ # Author:: Nathaniel Talbott.
4
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
+ # License:: Ruby license.
6
+
7
+ module Test
8
+ module Unit
9
+
10
+ # Thrown by Test::Unit::Assertions when an assertion fails.
11
+ class AssertionFailedError < StandardError
12
+ attr_accessor :expected, :actual, :user_message
13
+ attr_accessor :inspected_expected, :inspected_actual
14
+ def initialize(message=nil, options=nil)
15
+ options ||= {}
16
+ @expected = options[:expected]
17
+ @actual = options[:actual]
18
+ @inspected_expected = options[:inspected_expected]
19
+ @inspected_actual = options[:inspected_actual]
20
+ @user_message = options[:user_message]
21
+ super(message)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,2256 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
3
+ # Copyright (c) 2009-2013 Kouhei Sutou. All rights reserved.
4
+ # License:: Ruby license.
5
+
6
+ require 'test/unit/assertion-failed-error'
7
+ require 'test/unit/util/backtracefilter'
8
+ require 'test/unit/util/method-owner-finder'
9
+ require 'test/unit/diff'
10
+
11
+ begin
12
+ require 'power_assert'
13
+ rescue LoadError, SyntaxError
14
+ end
15
+
16
+ module Test
17
+ module Unit
18
+
19
+ ##
20
+ # Test::Unit::Assertions contains the standard Test::Unit assertions.
21
+ # Assertions is included in Test::Unit::TestCase.
22
+ #
23
+ # To include it in your own code and use its functionality, you simply
24
+ # need to rescue Test::Unit::AssertionFailedError. Additionally you may
25
+ # override add_assertion to get notified whenever an assertion is made.
26
+ #
27
+ # Notes:
28
+ #
29
+ # * The message to each assertion, if given, will be propagated with the
30
+ # failure.
31
+ # * It is easy to add your own assertions based on assert_block().
32
+ #
33
+ # @example Example Custom Assertion
34
+ #
35
+ # def deny(boolean, message=nil)
36
+ # message = build_message(message, '<?> is not false or nil.', boolean)
37
+ # assert_block(message) do
38
+ # not boolean
39
+ # end
40
+ # end
41
+
42
+ module Assertions
43
+
44
+ ##
45
+ # The assertion upon which all other assertions are based. Passes if the
46
+ # block yields true.
47
+ #
48
+ # @example
49
+ # assert_block "Couldn't do the thing" do
50
+ # do_the_thing
51
+ # end
52
+ def assert_block(message="assert_block failed.")
53
+ _wrap_assertion do
54
+ if (! yield)
55
+ options = {}
56
+ if message.respond_to?(:user_message)
57
+ options[:user_message] = message.user_message
58
+ end
59
+ raise AssertionFailedError.new(message.to_s, options)
60
+ end
61
+ end
62
+ end
63
+
64
+ # @private
65
+ NOT_SPECIFIED = Object.new
66
+
67
+ # @overload assert(object, message=nil)
68
+ #
69
+ # Asserts that `object` is not false nor nil.
70
+ #
71
+ # Normally, you don't need to use this assertion. Use more
72
+ # specific assertions such as #assert_equal and
73
+ # #assert_include.
74
+ #
75
+ # @example Pass patterns
76
+ # assert(true) # => pass
77
+ # assert([1, 2].include?(1)) # => pass
78
+ #
79
+ # @example Failure patterns
80
+ # assert(nil) # => failure
81
+ # assert(false) # => failure
82
+ # assert([1, 2].include?(5)) # => failure
83
+ #
84
+ # @param [Object] object The check target.
85
+ # @param [String] message The additional user message. It is
86
+ # showed when the assertion is failed.
87
+ # @return [void]
88
+ #
89
+ # @overload assert(message=nil) {}
90
+ #
91
+ # Asserts that the givens block returns not false nor nil.
92
+ #
93
+ # This style uses Power Assert. It means that you can see each
94
+ # object values in method chains on failure. See the following
95
+ # example about Power Assert.
96
+ #
97
+ # @example Power Assert
98
+ # coins = [1, 5, 50]
99
+ # target_coin = 10
100
+ # assert do
101
+ # coins.include?(target_coin)
102
+ # end
103
+ # # =>
104
+ # # coins.include?(target_coin)
105
+ # # | | |
106
+ # # | | 10
107
+ # # | false
108
+ # # [1, 5, 50]
109
+ #
110
+ # We recommend you to use Power Assert for predicate method
111
+ # checks rather than existing assertions such as
112
+ # #assert_include and #assert_predicate. Power Assert shows
113
+ # useful message for debugging.
114
+ #
115
+ # We don't recommend you use Power Assert for equality
116
+ # check. You should use #assert_equal for the case. Because
117
+ # #assert_equal shows more useful message for debugging.
118
+ #
119
+ # @example Pass patterns
120
+ # assert {true} # => pass
121
+ # assert {[1, 2].include?(1)} # => pass
122
+ #
123
+ # @example Failure patterns
124
+ # assert {nil} # => failure
125
+ # assert {false} # => failure
126
+ # assert {[1, 2].include?(5)} # => failure
127
+ #
128
+ # @param [String] message The additional user message. It is
129
+ # showed when the assertion is failed.
130
+ # @yield [] Given no parameters to the block.
131
+ # @yieldreturn [Object] The checked object.
132
+ # @return [void]
133
+ def assert(object=NOT_SPECIFIED, message=nil, &block)
134
+ _wrap_assertion do
135
+ have_object = !NOT_SPECIFIED.equal?(object)
136
+ if block
137
+ message = object if have_object
138
+ if defined?(PowerAssert)
139
+ PowerAssert.start(block, :assertion_method => __callee__) do |pa|
140
+ pa_message = AssertionMessage.delayed_literal(&pa.message_proc)
141
+ assertion_message = build_message(message, "?", pa_message)
142
+ assert_block(assertion_message) do
143
+ pa.yield
144
+ end
145
+ end
146
+ else
147
+ assert(yield, message)
148
+ end
149
+ else
150
+ unless have_object
151
+ raise ArgumentError, "wrong number of arguments (0 for 1..2)"
152
+ end
153
+ assertion_message = nil
154
+ case message
155
+ when nil, String, Proc
156
+ when AssertionMessage
157
+ assertion_message = message
158
+ else
159
+ error_message = "assertion message must be String, Proc or "
160
+ error_message += "#{AssertionMessage}: "
161
+ error_message += "<#{message.inspect}>(<#{message.class}>)"
162
+ raise ArgumentError, error_message, filter_backtrace(caller)
163
+ end
164
+ assertion_message ||= build_message(message,
165
+ "<?> is not true.",
166
+ object)
167
+ assert_block(assertion_message) do
168
+ object
169
+ end
170
+ end
171
+ end
172
+ end
173
+
174
+ # Asserts that `object` is false or nil.
175
+ #
176
+ # @note Just for minitest compatibility. :<
177
+ #
178
+ # @param [Object] object The object to be asserted.
179
+ # @return [void]
180
+ #
181
+ # @example Pass patterns
182
+ # refute(false) # => pass
183
+ # refute(nil) # => pass
184
+ #
185
+ # @example Failure patterns
186
+ # refute(true) # => failure
187
+ # refute("string") # => failure
188
+ #
189
+ # @since 2.5.3
190
+ def refute(object, message=nil)
191
+ _wrap_assertion do
192
+ assertion_message = nil
193
+ case message
194
+ when nil, String, Proc
195
+ when AssertionMessage
196
+ assertion_message = message
197
+ else
198
+ error_message = "assertion message must be String, Proc or "
199
+ error_message += "#{AssertionMessage}: "
200
+ error_message += "<#{message.inspect}>(<#{message.class}>)"
201
+ raise ArgumentError, error_message, filter_backtrace(caller)
202
+ end
203
+ assert_block("refute should not be called with a block.") do
204
+ !block_given?
205
+ end
206
+ assertion_message ||= build_message(message,
207
+ "<?> is neither nil or false.",
208
+ object)
209
+ assert_block(assertion_message) do
210
+ not object
211
+ end
212
+ end
213
+ end
214
+
215
+ ##
216
+ # Passes if `expected` == `actual`.
217
+ #
218
+ # Note that the ordering of arguments is important, since a helpful
219
+ # error message is generated when this one fails that tells you the
220
+ # values of expected and actual.
221
+ #
222
+ # @example
223
+ # assert_equal 'MY STRING', 'my string'.upcase
224
+ def assert_equal(expected, actual, message=nil)
225
+ diff = AssertionMessage.delayed_diff(expected, actual)
226
+ if expected.respond_to?(:encoding) and
227
+ actual.respond_to?(:encoding) and
228
+ expected.encoding != actual.encoding
229
+ format = <<EOT
230
+ <?>(?) expected but was
231
+ <?>(?).?
232
+ EOT
233
+ full_message = build_message(message, format,
234
+ expected, expected.encoding.name,
235
+ actual, actual.encoding.name,
236
+ diff)
237
+ else
238
+ full_message = build_message(message, <<EOT, expected, actual, diff)
239
+ <?> expected but was
240
+ <?>.?
241
+ EOT
242
+ end
243
+ begin
244
+ assert_block(full_message) { expected == actual }
245
+ rescue AssertionFailedError => failure
246
+ _set_failed_information(failure, expected, actual)
247
+ raise failure # For JRuby. :<
248
+ end
249
+ end
250
+
251
+ ##
252
+ # Passes if the block raises one of the expected
253
+ # exceptions. When an expected exception is an Exception
254
+ # object, passes if expected_exception == actual_exception.
255
+ #
256
+ # @example
257
+ # assert_raise(RuntimeError, LoadError) do
258
+ # raise 'Boom!!!'
259
+ # end # -> pass
260
+ #
261
+ # assert_raise do
262
+ # raise Exception, 'Any exception should be raised!!!'
263
+ # end # -> pass
264
+ #
265
+ # assert_raise(RuntimeError.new("XXX")) {raise "XXX"} # -> pass
266
+ # assert_raise(MyError.new("XXX")) {raise "XXX"} # -> fail
267
+ # assert_raise(RuntimeError.new("ZZZ")) {raise "XXX"} # -> fail
268
+ def assert_raise(*args, &block)
269
+ assert_expected_exception = Proc.new do |*_args|
270
+ message, assert_exception_helper, actual_exception = _args
271
+ expected = assert_exception_helper.expected_exceptions
272
+ diff = AssertionMessage.delayed_diff(expected, actual_exception)
273
+ full_message = build_message(message,
274
+ "<?> exception expected but was\n<?>.?",
275
+ expected, actual_exception, diff)
276
+ begin
277
+ assert_block(full_message) do
278
+ expected == [] or
279
+ assert_exception_helper.expected?(actual_exception)
280
+ end
281
+ rescue AssertionFailedError => failure
282
+ _set_failed_information(failure, expected, actual_exception)
283
+ raise failure # For JRuby. :<
284
+ end
285
+ end
286
+ _assert_raise(assert_expected_exception, *args, &block)
287
+ end
288
+
289
+ # Just for minitest compatibility. :<
290
+ alias_method :assert_raises, :assert_raise
291
+
292
+ ##
293
+ # Passes if the block raises one of the given
294
+ # exceptions or sub exceptions of the given exceptions.
295
+ #
296
+ # @example
297
+ # assert_raise_kind_of(SystemCallError) do
298
+ # raise Errno::EACCES
299
+ # end
300
+ def assert_raise_kind_of(*args, &block)
301
+ assert_expected_exception = Proc.new do |*_args|
302
+ message, assert_exception_helper, actual_exception = _args
303
+ expected = assert_exception_helper.expected_exceptions
304
+ full_message = build_message(message,
305
+ "<?> family exception expected " +
306
+ "but was\n<?>.",
307
+ expected, actual_exception)
308
+ assert_block(full_message) do
309
+ assert_exception_helper.expected?(actual_exception, :kind_of?)
310
+ end
311
+ end
312
+ _assert_raise(assert_expected_exception, *args, &block)
313
+ end
314
+
315
+
316
+ ##
317
+ # Passes if `object`.instance_of?(`klass`). When `klass` is
318
+ # an array of classes, it passes if any class
319
+ # satisfies +object.instance_of?(class).
320
+ #
321
+ # @example
322
+ # assert_instance_of(String, 'foo') # -> pass
323
+ # assert_instance_of([Fixnum, NilClass], 100) # -> pass
324
+ # assert_instance_of([Numeric, NilClass], 100) # -> fail
325
+ def assert_instance_of(klass, object, message=nil)
326
+ _wrap_assertion do
327
+ if klass.is_a?(Array)
328
+ klasses = klass
329
+ else
330
+ klasses = [klass]
331
+ end
332
+ assert_block("The first parameter to assert_instance_of should be " +
333
+ "a Class or an Array of Class.") do
334
+ klasses.all? {|k| k.is_a?(Class)}
335
+ end
336
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
337
+ "<#{value}>"
338
+ end
339
+ full_message = build_message(message, <<EOT, object, klass_message, object.class)
340
+ <?> was expected to be instance_of\\?
341
+ ? but was
342
+ <?>.
343
+ EOT
344
+ assert_block(full_message) do
345
+ klasses.any? {|k| object.instance_of?(k)}
346
+ end
347
+ end
348
+ end
349
+
350
+ ##
351
+ # Passes if `object`.instance_of?(`klass`) does not hold.
352
+ # When `klass` is an array of classes, it passes if no class
353
+ # satisfies +object.instance_of?(class).
354
+ #
355
+ # @example
356
+ # assert_not_instance_of(String, 100) # -> pass
357
+ # assert_not_instance_of([Fixnum, NilClass], '100') # -> pass
358
+ # assert_not_instance_of([Numeric, NilClass], 100) # -> fail
359
+ #
360
+ # @since 3.0.0
361
+ def assert_not_instance_of(klass, object, message=nil)
362
+ _wrap_assertion do
363
+ if klass.is_a?(Array)
364
+ klasses = klass
365
+ else
366
+ klasses = [klass]
367
+ end
368
+ assert_block("The first parameter to assert_not_instance_of should be " +
369
+ "a Class or an Array of Class.") do
370
+ klasses.all? {|k| k.is_a?(Class)}
371
+ end
372
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
373
+ "<#{value}>"
374
+ end
375
+ full_message = build_message(message,
376
+ "<?> was expected to not be instance_of\\?\n" +
377
+ "? but was.",
378
+ object,
379
+ klass_message)
380
+ assert_block(full_message) do
381
+ klasses.none? {|k| object.instance_of?(k)}
382
+ end
383
+ end
384
+ end
385
+
386
+ # Just for minitest compatibility. :<
387
+ #
388
+ # @since 3.0.0
389
+ alias_method :refute_instance_of, :assert_not_instance_of
390
+
391
+ ##
392
+ # Passes if `object` is nil.
393
+ #
394
+ # @example
395
+ # assert_nil [1, 2].uniq!
396
+ def assert_nil(object, message=nil)
397
+ full_message = build_message(message, <<EOT, object)
398
+ <?> was expected to be nil.
399
+ EOT
400
+ assert_block(full_message) { object.nil? }
401
+ end
402
+
403
+ ##
404
+ # Passes if `object`.kind_of?(`klass`). When `klass` is
405
+ # an array of classes or modules, it passes if any
406
+ # class or module satisfies +object.kind_of?(class_or_module).
407
+ #
408
+ # @example
409
+ # assert_kind_of(Object, 'foo') # -> pass
410
+ # assert_kind_of([Fixnum, NilClass], 100) # -> pass
411
+ # assert_kind_of([Fixnum, NilClass], "string") # -> fail
412
+ def assert_kind_of(klass, object, message=nil)
413
+ _wrap_assertion do
414
+ if klass.is_a?(Array)
415
+ klasses = klass
416
+ else
417
+ klasses = [klass]
418
+ end
419
+ assert_block("The first parameter to assert_kind_of should be " +
420
+ "a kind_of Module or an Array of a kind_of Module.") do
421
+ klasses.all? {|k| k.kind_of?(Module)}
422
+ end
423
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
424
+ "<#{value}>"
425
+ end
426
+ full_message = build_message(message,
427
+ "<?> was expected to be kind_of\\?\n" +
428
+ "? but was\n" +
429
+ "<?>.",
430
+ object,
431
+ klass_message,
432
+ object.class)
433
+ assert_block(full_message) do
434
+ klasses.any? {|k| object.kind_of?(k)}
435
+ end
436
+ end
437
+ end
438
+
439
+ ##
440
+ # Passes if `object`.kind_of?(`klass`) does not hold.
441
+ # When `klass` is an array of classes or modules, it passes only if all
442
+ # classes (and modules) do not satisfy +object.kind_of?(class_or_module).
443
+ #
444
+ # @example
445
+ # assert_not_kind_of(Fixnum, 'foo') # -> pass
446
+ # assert_not_kind_of([Fixnum, NilClass], '0') # -> pass
447
+ # assert_not_kind_of([Fixnum, NilClass], 100) # -> fail
448
+ #
449
+ # @since 3.0.0
450
+ def assert_not_kind_of(klass, object, message=nil)
451
+ _wrap_assertion do
452
+ if klass.is_a?(Array)
453
+ klasses = klass
454
+ else
455
+ klasses = [klass]
456
+ end
457
+ assert_block("The first parameter to assert_not_kind_of should be " +
458
+ "a kind_of Module or an Array of a kind_of Module.") do
459
+ klasses.all? {|k| k.kind_of?(Module)}
460
+ end
461
+ klass_message = AssertionMessage.maybe_container(klass) do |value|
462
+ "<#{value}>"
463
+ end
464
+ full_message = build_message(message,
465
+ "<?> was expected to not be kind_of\\?\n" +
466
+ "? but was.",
467
+ object,
468
+ klass_message)
469
+ assert_block(full_message) do
470
+ klasses.none? {|k| object.kind_of?(k)}
471
+ end
472
+ end
473
+ end
474
+
475
+ # Just for minitest compatibility. :<
476
+ #
477
+ # @since 3.0.0
478
+ alias_method :refute_kind_of, :assert_not_kind_of
479
+
480
+ ##
481
+ # Passes if `object` .respond_to? `method`
482
+ #
483
+ # @example
484
+ # assert_respond_to 'bugbear', :slice
485
+ def assert_respond_to(object, method, message=nil)
486
+ _wrap_assertion do
487
+ full_message = build_message(message,
488
+ "<?>.kind_of\\?(Symbol) or\n" +
489
+ "<?>.respond_to\\?(:to_str) expected",
490
+ method, method)
491
+ assert_block(full_message) do
492
+ method.kind_of?(Symbol) or method.respond_to?(:to_str)
493
+ end
494
+ full_message = build_message(message,
495
+ "<?>.respond_to\\?(?) expected\n" +
496
+ "(Class: <?>)",
497
+ object, method, object.class)
498
+ assert_block(full_message) {object.respond_to?(method)}
499
+ end
500
+ end
501
+
502
+ ##
503
+ # Passes if `object` does not .respond_to? `method`.
504
+ #
505
+ # @example
506
+ # assert_not_respond_to('bugbear', :nonexistence) # -> pass
507
+ # assert_not_respond_to('bugbear', :size) # -> fail
508
+ def assert_not_respond_to(object, method, message=nil)
509
+ _wrap_assertion do
510
+ full_message = build_message(message,
511
+ "<?>.kind_of\\?(Symbol) or\n" +
512
+ "<?>.respond_to\\?(:to_str) expected",
513
+ method, method)
514
+ assert_block(full_message) do
515
+ method.kind_of?(Symbol) or method.respond_to?(:to_str)
516
+ end
517
+ full_message = build_message(message,
518
+ "!<?>.respond_to\\?(?) expected\n" +
519
+ "(Class: <?>)",
520
+ object, method, object.class)
521
+ assert_block(full_message) {!object.respond_to?(method)}
522
+ end
523
+ end
524
+
525
+ # Just for minitest compatibility. :<
526
+ #
527
+ # @since 2.5.3
528
+ alias_method :refute_respond_to, :assert_not_respond_to
529
+
530
+ ##
531
+ # Passes if `pattern` =~ `string`.
532
+ #
533
+ # @example
534
+ # assert_match(/\d+/, 'five, 6, seven')
535
+ def assert_match(pattern, string, message=nil)
536
+ _wrap_assertion do
537
+ pattern = Regexp.new(Regexp.escape(pattern)) if pattern.is_a?(String)
538
+ full_message = build_message(message,
539
+ "<?> was expected to be =~\n<?>.",
540
+ pattern, string)
541
+ assert_block(full_message) { pattern =~ string }
542
+ end
543
+ end
544
+
545
+ ##
546
+ # Passes if `actual` .equal? `expected` (i.e. they are the same
547
+ # instance).
548
+ #
549
+ # @example
550
+ # o = Object.new
551
+ # assert_same o, o
552
+ def assert_same(expected, actual, message=nil)
553
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
554
+ <?>
555
+ with id <?> was expected to be equal\\? to
556
+ <?>
557
+ with id <?>.
558
+ EOT
559
+ assert_block(full_message) { actual.equal?(expected) }
560
+ end
561
+
562
+ ##
563
+ # Compares the `object1` with `object2` using `operator`.
564
+ #
565
+ # Passes if object1.__send__(operator, object2) is true.
566
+ #
567
+ # @example
568
+ # assert_operator 5, :>=, 4
569
+ def assert_operator(object1, operator, object2, message=nil)
570
+ _wrap_assertion do
571
+ full_message = build_message(nil, "<?>\ngiven as the operator for #assert_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
572
+ assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
573
+ full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
574
+ <?> was expected to be
575
+ ?
576
+ <?>.
577
+ EOT
578
+ assert_block(full_message) { object1.__send__(operator, object2) }
579
+ end
580
+ end
581
+
582
+ ##
583
+ # Compares the `object1` with `object2` using `operator`.
584
+ #
585
+ # Passes if object1.__send__(operator, object2) is not true.
586
+ #
587
+ # @example
588
+ # assert_not_operator(5, :<, 4) # => pass
589
+ # assert_not_operator(5, :>, 4) # => fail
590
+ #
591
+ # @since 3.0.0
592
+ def assert_not_operator(object1, operator, object2, message=nil)
593
+ _wrap_assertion do
594
+ full_message = build_message(nil, "<?>\ngiven as the operator for #assert_not_operator must be a Symbol or #respond_to\\?(:to_str).", operator)
595
+ assert_block(full_message){operator.kind_of?(Symbol) || operator.respond_to?(:to_str)}
596
+ full_message = build_message(message, <<EOT, object1, AssertionMessage.literal(operator), object2)
597
+ <?> was expected to not be
598
+ ?
599
+ <?>.
600
+ EOT
601
+ assert_block(full_message) { ! object1.__send__(operator, object2) }
602
+ end
603
+ end
604
+
605
+ # Just for minitest compatibility. :<
606
+ #
607
+ # @since 3.0.0
608
+ alias_method :refute_operator, :assert_not_operator
609
+
610
+ ##
611
+ # Passes if block does not raise an exception.
612
+ #
613
+ # @example
614
+ # assert_nothing_raised do
615
+ # [1, 2].uniq
616
+ # end
617
+ def assert_nothing_raised(*args)
618
+ _wrap_assertion do
619
+ if args.last.is_a?(String)
620
+ message = args.pop
621
+ else
622
+ message = ""
623
+ end
624
+
625
+ assert_exception_helper = AssertExceptionHelper.new(self, args)
626
+ begin
627
+ yield
628
+ rescue Exception => e
629
+ if ((args.empty? && !e.instance_of?(AssertionFailedError)) ||
630
+ assert_exception_helper.expected?(e))
631
+ failure_message = build_message(message, "Exception raised:\n?", e)
632
+ assert_block(failure_message) {false}
633
+ else
634
+ raise
635
+ end
636
+ end
637
+ end
638
+ end
639
+
640
+ ##
641
+ # Flunk always fails.
642
+ #
643
+ # @example
644
+ # flunk 'Not done testing yet.'
645
+ def flunk(message="Flunked")
646
+ assert_block(build_message(message)){false}
647
+ end
648
+
649
+ ##
650
+ # Passes if ! `actual` .equal? `expected`
651
+ #
652
+ # @example
653
+ # assert_not_same Object.new, Object.new
654
+ def assert_not_same(expected, actual, message=nil)
655
+ full_message = build_message(message, <<EOT, expected, expected.__id__, actual, actual.__id__)
656
+ <?>
657
+ with id <?> was expected to not be equal\\? to
658
+ <?>
659
+ with id <?>.
660
+ EOT
661
+ assert_block(full_message) { !actual.equal?(expected) }
662
+ end
663
+
664
+ # Just for minitest compatibility. :<
665
+ #
666
+ # @since 2.5.3
667
+ alias_method :refute_same, :assert_not_same
668
+
669
+ ##
670
+ # Passes if `expected` != `actual`
671
+ #
672
+ # @example
673
+ # assert_not_equal 'some string', 5
674
+ def assert_not_equal(expected, actual, message=nil)
675
+ full_message = build_message(message,
676
+ "<?> was expected to be != to\n<?>.",
677
+ expected, actual)
678
+ assert_block(full_message) { expected != actual }
679
+ end
680
+
681
+ # Just for minitest compatibility. :<
682
+ #
683
+ # @since 2.5.3
684
+ alias_method :refute_equal, :assert_not_equal
685
+
686
+ ##
687
+ # Passes if ! `object` .nil?
688
+ #
689
+ # @example
690
+ # assert_not_nil '1 two 3'.sub!(/two/, '2')
691
+ def assert_not_nil(object, message=nil)
692
+ full_message = build_message(message,
693
+ "<?> was expected to not be nil.",
694
+ object)
695
+ assert_block(full_message){!object.nil?}
696
+ end
697
+
698
+ # Just for minitest compatibility. :<
699
+ #
700
+ # @since 2.5.3
701
+ alias_method :refute_nil, :assert_not_nil
702
+
703
+ ##
704
+ # Passes if `regexp` !~ `string`
705
+ #
706
+ # @example
707
+ # assert_not_match(/two/, 'one 2 three') # -> pass
708
+ # assert_not_match(/three/, 'one 2 three') # -> fail
709
+ def assert_not_match(pattern, string, message=nil)
710
+ _wrap_assertion do
711
+ pattern = Regexp.new(Regexp.escape(pattern)) if pattern.is_a?(String)
712
+ full_message = build_message(message,
713
+ "<?> was expected to not match\n<?>.",
714
+ pattern, string)
715
+ assert_block(full_message) { pattern !~ string }
716
+ end
717
+ end
718
+
719
+ # Just for minitest compatibility. :<
720
+ #
721
+ # @since 2.5.3
722
+ alias_method :refute_match, :assert_not_match
723
+
724
+ ##
725
+ # Deprecated. Use #assert_not_match instead.
726
+ #
727
+ # Passes if `regexp` !~ `string`
728
+ #
729
+ # @example
730
+ # assert_no_match(/two/, 'one 2 three') # -> pass
731
+ # assert_no_match(/three/, 'one 2 three') # -> fail
732
+ def assert_no_match(regexp, string, message="")
733
+ _wrap_assertion do
734
+ assert_instance_of(Regexp, regexp,
735
+ "The first argument to assert_no_match " +
736
+ "should be a Regexp.")
737
+ assert_not_match(regexp, string, message)
738
+ end
739
+ end
740
+
741
+ # @private
742
+ class ThrowTagExtractor
743
+ @@have_uncaught_throw_error = const_defined?(:UncaughtThrowError)
744
+
745
+ UncaughtThrowPatterns = {
746
+ NameError => /^uncaught throw `(.+)'$/,
747
+ ArgumentError => /^uncaught throw (`.+'|.+)$/,
748
+ ThreadError => /^uncaught throw `(.+)' in thread /,
749
+ }
750
+
751
+ def initialize(error)
752
+ @error = error
753
+ end
754
+
755
+ def extract_tag
756
+ tag = nil
757
+ if @@have_uncaught_throw_error
758
+ return nil unless @error.is_a?(UncaughtThrowError)
759
+ tag = @error.tag
760
+ else
761
+ pattern = UncaughtThrowPatterns[@error.class]
762
+ return nil if pattern.nil?
763
+ return nil unless pattern =~ @error.message
764
+ tag = $1
765
+ end
766
+ normalize_tag(tag)
767
+ end
768
+
769
+ private
770
+ def normalize_tag(tag)
771
+ case tag
772
+ when /\A:/
773
+ tag[1..-1].intern
774
+ when /\A`(.+)'\z/
775
+ $1.intern
776
+ when String
777
+ tag.intern
778
+ else
779
+ tag
780
+ end
781
+ end
782
+ end
783
+
784
+ ##
785
+ # Passes if the block throws `expected_object`
786
+ #
787
+ # @example
788
+ # assert_throw(:done) do
789
+ # throw(:done)
790
+ # end
791
+ def assert_throw(expected_object, message=nil, &proc)
792
+ _wrap_assertion do
793
+ begin
794
+ catch([]) {}
795
+ rescue TypeError
796
+ assert_instance_of(Symbol, expected_object,
797
+ "assert_throws expects the symbol that should be thrown for its first argument")
798
+ end
799
+ assert_block("Should have passed a block to assert_throw.") do
800
+ block_given?
801
+ end
802
+ caught = true
803
+ begin
804
+ catch(expected_object) do
805
+ proc.call
806
+ caught = false
807
+ end
808
+ full_message = build_message(message,
809
+ "<?> should have been thrown.",
810
+ expected_object)
811
+ assert_block(full_message) {caught}
812
+ rescue => error
813
+ extractor = ThrowTagExtractor.new(error)
814
+ tag = extractor.extract_tag
815
+ raise if tag.nil?
816
+ full_message = build_message(message,
817
+ "<?> was expected to be thrown but\n" +
818
+ "<?> was thrown.",
819
+ expected_object, tag)
820
+ flunk(full_message)
821
+ end
822
+ end
823
+ end
824
+
825
+ # Just for minitest compatibility. :<
826
+ #
827
+ # @since 2.5.3
828
+ alias_method :assert_throws, :assert_throw
829
+
830
+ ##
831
+ # Passes if block does not throw anything.
832
+ #
833
+ # @example
834
+ # assert_nothing_thrown do
835
+ # [1, 2].uniq
836
+ # end
837
+ def assert_nothing_thrown(message=nil, &proc)
838
+ _wrap_assertion do
839
+ assert(block_given?, "Should have passed a block to assert_nothing_thrown")
840
+ begin
841
+ proc.call
842
+ rescue => error
843
+ extractor = ThrowTagExtractor.new(error)
844
+ tag = extractor.extract_tag
845
+ raise if tag.nil?
846
+ full_message = build_message(message,
847
+ "<?> was thrown when nothing was expected",
848
+ tag)
849
+ flunk(full_message)
850
+ end
851
+ assert(true, "Expected nothing to be thrown")
852
+ end
853
+ end
854
+
855
+ ##
856
+ # Passes if `expected_float` and `actual_float` are equal
857
+ # within `delta` tolerance.
858
+ #
859
+ # @example
860
+ # assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
861
+ def assert_in_delta(expected_float, actual_float, delta=0.001, message="")
862
+ _wrap_assertion do
863
+ _assert_in_delta_validate_arguments(expected_float,
864
+ actual_float,
865
+ delta)
866
+ full_message = _assert_in_delta_message(expected_float,
867
+ actual_float,
868
+ delta,
869
+ message)
870
+ assert_block(full_message) do
871
+ (expected_float.to_f - actual_float.to_f).abs <= delta.to_f
872
+ end
873
+ end
874
+ end
875
+
876
+ ##
877
+ # Passes if `expected_float` and `actual_float` are
878
+ # not equal within `delta` tolerance.
879
+ #
880
+ # @example
881
+ # assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00002) # -> pass
882
+ # assert_not_in_delta(0.05, (50000.0 / 10**6), 0.00001) # -> fail
883
+ def assert_not_in_delta(expected_float, actual_float, delta=0.001, message="")
884
+ _wrap_assertion do
885
+ _assert_in_delta_validate_arguments(expected_float,
886
+ actual_float,
887
+ delta)
888
+ full_message = _assert_in_delta_message(expected_float,
889
+ actual_float,
890
+ delta,
891
+ message,
892
+ :negative_assertion => true)
893
+ assert_block(full_message) do
894
+ (expected_float.to_f - actual_float.to_f).abs > delta.to_f
895
+ end
896
+ end
897
+ end
898
+
899
+ # Just for minitest compatibility. :<
900
+ #
901
+ # @since 2.5.3
902
+ alias_method :refute_in_delta, :assert_not_in_delta
903
+
904
+ private
905
+ def _assert_in_delta_validate_arguments(expected_float,
906
+ actual_float,
907
+ delta)
908
+ {
909
+ expected_float => "first float",
910
+ actual_float => "second float",
911
+ delta => "delta"
912
+ }.each do |float, name|
913
+ assert_respond_to(float, :to_f,
914
+ "The arguments must respond to to_f; " +
915
+ "the #{name} did not")
916
+ end
917
+ delta = delta.to_f
918
+ assert_operator(delta, :>=, 0.0, "The delta should not be negative")
919
+ end
920
+
921
+ def _assert_in_delta_message(expected_float, actual_float, delta,
922
+ message, options={})
923
+ if options[:negative_assertion]
924
+ format = <<-EOT
925
+ <?> -/+ <?> was expected to not include
926
+ <?>.
927
+ EOT
928
+ else
929
+ format = <<-EOT
930
+ <?> -/+ <?> was expected to include
931
+ <?>.
932
+ EOT
933
+ end
934
+ arguments = [expected_float, delta, actual_float]
935
+ normalized_expected = expected_float.to_f
936
+ normalized_actual = actual_float.to_f
937
+ normalized_delta = delta.to_f
938
+ relation_format = nil
939
+ relation_arguments = nil
940
+ if normalized_actual < normalized_expected - normalized_delta
941
+ relation_format = "<<?> < <?>-<?>[?] <= <?>+<?>[?]>"
942
+ relation_arguments = [actual_float,
943
+ expected_float, delta,
944
+ normalized_expected - normalized_delta,
945
+ expected_float, delta,
946
+ normalized_expected + normalized_delta]
947
+ elsif normalized_actual <= normalized_expected + normalized_delta
948
+ relation_format = "<<?>-<?>[?] <= <?> <= <?>+<?>[?]>"
949
+ relation_arguments = [expected_float, delta,
950
+ normalized_expected - normalized_delta,
951
+ actual_float,
952
+ expected_float, delta,
953
+ normalized_expected + normalized_delta]
954
+ else
955
+ relation_format = "<<?>-<?>[?] <= <?>+<?>[?] < <?>>"
956
+ relation_arguments = [expected_float, delta,
957
+ normalized_expected - normalized_delta,
958
+ expected_float, delta,
959
+ normalized_expected + normalized_delta,
960
+ actual_float]
961
+ end
962
+
963
+ if relation_format
964
+ format += <<-EOT
965
+
966
+ Relation:
967
+ #{relation_format}
968
+ EOT
969
+ arguments.concat(relation_arguments)
970
+ end
971
+
972
+ build_message(message, format, *arguments)
973
+ end
974
+
975
+ public
976
+ ##
977
+ # Passes if `expected_float` and `actual_float` are equal
978
+ # within `epsilon` relative error of `expected_float`.
979
+ #
980
+ # @example
981
+ # assert_in_epsilon(10000.0, 9900.0, 0.1) # -> pass
982
+ # assert_in_epsilon(10000.0, 9899.0, 0.1) # -> fail
983
+ def assert_in_epsilon(expected_float, actual_float, epsilon=0.001,
984
+ message="")
985
+ _wrap_assertion do
986
+ _assert_in_epsilon_validate_arguments(expected_float,
987
+ actual_float,
988
+ epsilon)
989
+ full_message = _assert_in_epsilon_message(expected_float,
990
+ actual_float,
991
+ epsilon,
992
+ message)
993
+ assert_block(full_message) do
994
+ normalized_expected_float = expected_float.to_f
995
+ if normalized_expected_float.zero?
996
+ delta = epsilon.to_f ** 2
997
+ else
998
+ delta = normalized_expected_float * epsilon.to_f
999
+ end
1000
+ delta = delta.abs
1001
+ (normalized_expected_float - actual_float.to_f).abs <= delta
1002
+ end
1003
+ end
1004
+ end
1005
+
1006
+ ##
1007
+ # Passes if `expected_float` and `actual_float` are
1008
+ # not equal within `epsilon` relative error of
1009
+ # `expected_float`.
1010
+ #
1011
+ # @example
1012
+ # assert_not_in_epsilon(10000.0, 9900.0, 0.1) # -> fail
1013
+ # assert_not_in_epsilon(10000.0, 9899.0, 0.1) # -> pass
1014
+ def assert_not_in_epsilon(expected_float, actual_float, epsilon=0.001,
1015
+ message="")
1016
+ _wrap_assertion do
1017
+ _assert_in_epsilon_validate_arguments(expected_float,
1018
+ actual_float,
1019
+ epsilon)
1020
+ full_message = _assert_in_epsilon_message(expected_float,
1021
+ actual_float,
1022
+ epsilon,
1023
+ message,
1024
+ :negative_assertion => true)
1025
+ assert_block(full_message) do
1026
+ normalized_expected_float = expected_float.to_f
1027
+ delta = normalized_expected_float * epsilon.to_f
1028
+ (normalized_expected_float - actual_float.to_f).abs > delta
1029
+ end
1030
+ end
1031
+ end
1032
+
1033
+ # Just for minitest compatibility. :<
1034
+ #
1035
+ # @since 3.0.0
1036
+ alias_method :refute_in_epsilon, :assert_not_in_epsilon
1037
+
1038
+ private
1039
+ def _assert_in_epsilon_validate_arguments(expected_float,
1040
+ actual_float,
1041
+ epsilon)
1042
+ {
1043
+ expected_float => "first float",
1044
+ actual_float => "second float",
1045
+ epsilon => "epsilon"
1046
+ }.each do |float, name|
1047
+ assert_respond_to(float, :to_f,
1048
+ "The arguments must respond to to_f; " +
1049
+ "the #{name} did not")
1050
+ end
1051
+ epsilon = epsilon.to_f
1052
+ assert_operator(epsilon, :>=, 0.0, "The epsilon should not be negative")
1053
+ end
1054
+
1055
+ def _assert_in_epsilon_message(expected_float, actual_float, epsilon,
1056
+ message, options={})
1057
+ normalized_expected = expected_float.to_f
1058
+ normalized_actual = actual_float.to_f
1059
+ normalized_epsilon = epsilon.to_f
1060
+ delta = normalized_expected * normalized_epsilon
1061
+
1062
+ if options[:negative_assertion]
1063
+ format = <<-EOT
1064
+ <?> -/+ (<?> * <?>)[?] was expected to not include
1065
+ <?>.
1066
+ EOT
1067
+ else
1068
+ format = <<-EOT
1069
+ <?> -/+ (<?> * <?>)[?] was expected to include
1070
+ <?>.
1071
+ EOT
1072
+ end
1073
+ arguments = [expected_float, expected_float, epsilon, delta,
1074
+ actual_float]
1075
+
1076
+ relation_format = nil
1077
+ relation_arguments = nil
1078
+ if normalized_actual < normalized_expected - delta
1079
+ relation_format = "<<?> < <?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?]>"
1080
+ relation_arguments = [actual_float,
1081
+ expected_float, expected_float, epsilon,
1082
+ normalized_expected - delta,
1083
+ expected_float, expected_float, epsilon,
1084
+ normalized_expected + delta]
1085
+ elsif normalized_actual <= normalized_expected + delta
1086
+ relation_format = "<<?>-(<?>*<?>)[?] <= <?> <= <?>+(<?>*<?>)[?]>"
1087
+ relation_arguments = [expected_float, expected_float, epsilon,
1088
+ normalized_expected - delta,
1089
+ actual_float,
1090
+ expected_float, expected_float, epsilon,
1091
+ normalized_expected + delta]
1092
+ else
1093
+ relation_format = "<<?>-(<?>*<?>)[?] <= <?>+(<?>*<?>)[?] < <?>>"
1094
+ relation_arguments = [expected_float, expected_float, epsilon,
1095
+ normalized_expected - delta,
1096
+ expected_float, expected_float, epsilon,
1097
+ normalized_expected + delta,
1098
+ actual_float]
1099
+ end
1100
+
1101
+ if relation_format
1102
+ format += <<-EOT
1103
+
1104
+ Relation:
1105
+ #{relation_format}
1106
+ EOT
1107
+ arguments.concat(relation_arguments)
1108
+ end
1109
+
1110
+ build_message(message, format, *arguments)
1111
+ end
1112
+
1113
+ public
1114
+ ##
1115
+ # Passes if the method send returns a true value.
1116
+ #
1117
+ # `send_array` is composed of:
1118
+ # * A receiver
1119
+ # * A method
1120
+ # * Arguments to the method
1121
+ #
1122
+ # @example
1123
+ # assert_send([[1, 2], :member?, 1]) # -> pass
1124
+ # assert_send([[1, 2], :member?, 4]) # -> fail
1125
+ def assert_send(send_array, message=nil)
1126
+ _wrap_assertion do
1127
+ assert_instance_of(Array, send_array,
1128
+ "assert_send requires an array " +
1129
+ "of send information")
1130
+ assert_operator(send_array.size, :>=, 2,
1131
+ "assert_send requires at least a receiver " +
1132
+ "and a message name")
1133
+ format = <<EOT
1134
+ <?> was expected to respond to
1135
+ <?(*?)> with a true value but was
1136
+ <?>.
1137
+ EOT
1138
+ receiver, message_name, *arguments = send_array
1139
+ result = nil
1140
+ full_message =
1141
+ build_message(message,
1142
+ format,
1143
+ receiver,
1144
+ AssertionMessage.literal(message_name.to_s),
1145
+ arguments,
1146
+ AssertionMessage.delayed_literal {result})
1147
+ assert_block(full_message) do
1148
+ result = receiver.__send__(message_name, *arguments)
1149
+ result
1150
+ end
1151
+ end
1152
+ end
1153
+
1154
+ ##
1155
+ # Passes if the method send doesn't return a true value.
1156
+ #
1157
+ # `send_array` is composed of:
1158
+ # * A receiver
1159
+ # * A method
1160
+ # * Arguments to the method
1161
+ #
1162
+ # @example
1163
+ # assert_not_send([[1, 2], :member?, 1]) # -> fail
1164
+ # assert_not_send([[1, 2], :member?, 4]) # -> pass
1165
+ def assert_not_send(send_array, message=nil)
1166
+ _wrap_assertion do
1167
+ assert_instance_of(Array, send_array,
1168
+ "assert_not_send requires an array " +
1169
+ "of send information")
1170
+ assert_operator(send_array.size, :>=, 2,
1171
+ "assert_not_send requires at least a receiver " +
1172
+ "and a message name")
1173
+ format = <<EOT
1174
+ <?> was expected to respond to
1175
+ <?(*?)> with not a true value but was
1176
+ <?>.
1177
+ EOT
1178
+ receiver, message_name, *arguments = send_array
1179
+ result = nil
1180
+ full_message =
1181
+ build_message(message,
1182
+ format,
1183
+ receiver,
1184
+ AssertionMessage.literal(message_name.to_s),
1185
+ arguments,
1186
+ AssertionMessage.delayed_literal {result})
1187
+ assert_block(full_message) do
1188
+ result = receiver.__send__(message_name, *arguments)
1189
+ not result
1190
+ end
1191
+ end
1192
+ end
1193
+
1194
+ ##
1195
+ # Passes if `actual` is a boolean value.
1196
+ #
1197
+ # @example
1198
+ # assert_boolean(true) # -> pass
1199
+ # assert_boolean(nil) # -> fail
1200
+ def assert_boolean(actual, message=nil)
1201
+ _wrap_assertion do
1202
+ assert_block(build_message(message,
1203
+ "<true> or <false> expected but was\n<?>",
1204
+ actual)) do
1205
+ [true, false].include?(actual)
1206
+ end
1207
+ end
1208
+ end
1209
+
1210
+ ##
1211
+ # Passes if `actual` is true.
1212
+ #
1213
+ # @example
1214
+ # assert_true(true) # -> pass
1215
+ # assert_true(:true) # -> fail
1216
+ def assert_true(actual, message=nil)
1217
+ _wrap_assertion do
1218
+ assert_block(build_message(message,
1219
+ "<true> expected but was\n<?>",
1220
+ actual)) do
1221
+ actual == true
1222
+ end
1223
+ end
1224
+ end
1225
+
1226
+ ##
1227
+ # Passes if `actual` is false.
1228
+ #
1229
+ # @example
1230
+ # assert_false(false) # -> pass
1231
+ # assert_false(nil) # -> fail
1232
+ def assert_false(actual, message=nil)
1233
+ _wrap_assertion do
1234
+ assert_block(build_message(message,
1235
+ "<false> expected but was\n<?>",
1236
+ actual)) do
1237
+ actual == false
1238
+ end
1239
+ end
1240
+ end
1241
+
1242
+ ##
1243
+ # Passes if expression "`expected` `operator`
1244
+ # `actual`" is true.
1245
+ #
1246
+ # @example
1247
+ # assert_compare(1, "<", 10) # -> pass
1248
+ # assert_compare(1, ">=", 10) # -> fail
1249
+ def assert_compare(expected, operator, actual, message=nil)
1250
+ _wrap_assertion do
1251
+ assert_send([["<", "<=", ">", ">="], :include?, operator.to_s])
1252
+ case operator.to_s
1253
+ when "<"
1254
+ operator_description = "less than"
1255
+ when "<="
1256
+ operator_description = "less than or equal to"
1257
+ when ">"
1258
+ operator_description = "greater than"
1259
+ when ">="
1260
+ operator_description = "greater than or equal to"
1261
+ end
1262
+ template = <<-EOT
1263
+ <?> #{operator} <?> should be true
1264
+ <?> was expected to be #{operator_description}
1265
+ <?>.
1266
+ EOT
1267
+ full_message = build_message(message, template,
1268
+ expected, actual,
1269
+ expected, actual)
1270
+ assert_block(full_message) do
1271
+ expected.__send__(operator, actual)
1272
+ end
1273
+ end
1274
+ end
1275
+
1276
+ ##
1277
+ # Passes if assertion is failed in block.
1278
+ #
1279
+ # @example
1280
+ # assert_fail_assertion {assert_equal("A", "B")} # -> pass
1281
+ # assert_fail_assertion {assert_equal("A", "A")} # -> fail
1282
+ def assert_fail_assertion(message=nil)
1283
+ _wrap_assertion do
1284
+ full_message = build_message(message,
1285
+ "Failed assertion was expected.")
1286
+ assert_block(full_message) do
1287
+ begin
1288
+ yield
1289
+ false
1290
+ rescue AssertionFailedError
1291
+ true
1292
+ end
1293
+ end
1294
+ end
1295
+ end
1296
+
1297
+ ##
1298
+ # Passes if an exception is raised in block and its
1299
+ # message is `expected`.
1300
+ #
1301
+ # @example
1302
+ # assert_raise_message("exception") {raise "exception"} # -> pass
1303
+ # assert_raise_message(/exc/i) {raise "exception"} # -> pass
1304
+ # assert_raise_message("exception") {raise "EXCEPTION"} # -> fail
1305
+ # assert_raise_message("exception") {} # -> fail
1306
+ def assert_raise_message(expected, message=nil)
1307
+ _wrap_assertion do
1308
+ full_message = build_message(message,
1309
+ "<?> exception message was expected " +
1310
+ "but none was thrown.",
1311
+ expected)
1312
+ exception = nil
1313
+ assert_block(full_message) do
1314
+ begin
1315
+ yield
1316
+ false
1317
+ rescue Exception => exception
1318
+ true
1319
+ end
1320
+ end
1321
+
1322
+ actual = exception.message
1323
+ diff = AssertionMessage.delayed_diff(expected, actual)
1324
+ full_message =
1325
+ build_message(message,
1326
+ "<?> exception message expected but was\n" +
1327
+ "<?>.?", expected, actual, diff)
1328
+ assert_block(full_message) do
1329
+ if expected.is_a?(Regexp)
1330
+ expected =~ actual
1331
+ else
1332
+ expected == actual
1333
+ end
1334
+ end
1335
+ end
1336
+ end
1337
+
1338
+ ##
1339
+ # Passes if `object`.const_defined?(`constant_name`)
1340
+ #
1341
+ # @example
1342
+ # assert_const_defined(Test, :Unit) # -> pass
1343
+ # assert_const_defined(Object, :Nonexistent) # -> fail
1344
+ def assert_const_defined(object, constant_name, message=nil)
1345
+ _wrap_assertion do
1346
+ full_message = build_message(message,
1347
+ "<?>.const_defined\\?(<?>) expected.",
1348
+ object, constant_name)
1349
+ assert_block(full_message) do
1350
+ object.const_defined?(constant_name)
1351
+ end
1352
+ end
1353
+ end
1354
+
1355
+ ##
1356
+ # Passes if !`object`.const_defined?(`constant_name`)
1357
+ #
1358
+ # @example
1359
+ # assert_not_const_defined(Object, :Nonexistent) # -> pass
1360
+ # assert_not_const_defined(Test, :Unit) # -> fail
1361
+ def assert_not_const_defined(object, constant_name, message=nil)
1362
+ _wrap_assertion do
1363
+ full_message = build_message(message,
1364
+ "!<?>.const_defined\\?(<?>) expected.",
1365
+ object, constant_name)
1366
+ assert_block(full_message) do
1367
+ !object.const_defined?(constant_name)
1368
+ end
1369
+ end
1370
+ end
1371
+
1372
+ ##
1373
+ # Passes if `object`.`predicate` is _true_.
1374
+ #
1375
+ # @example
1376
+ # assert_predicate([], :empty?) # -> pass
1377
+ # assert_predicate([1], :empty?) # -> fail
1378
+ def assert_predicate(object, predicate, message=nil)
1379
+ _wrap_assertion do
1380
+ assert_respond_to(object, predicate, message)
1381
+ actual = object.__send__(predicate)
1382
+ full_message = build_message(message,
1383
+ "<?>.? is true value expected but was\n" +
1384
+ "<?>",
1385
+ object,
1386
+ AssertionMessage.literal(predicate),
1387
+ actual)
1388
+ assert_block(full_message) do
1389
+ actual
1390
+ end
1391
+ end
1392
+ end
1393
+
1394
+ ##
1395
+ # Passes if `object`.`predicate` is not _true_.
1396
+ #
1397
+ # @example
1398
+ # assert_not_predicate([1], :empty?) # -> pass
1399
+ # assert_not_predicate([], :empty?) # -> fail
1400
+ def assert_not_predicate(object, predicate, message=nil)
1401
+ _wrap_assertion do
1402
+ assert_respond_to(object, predicate, message)
1403
+ actual = object.__send__(predicate)
1404
+ full_message = build_message(message,
1405
+ "<?>.? is false value expected but was\n" +
1406
+ "<?>",
1407
+ object,
1408
+ AssertionMessage.literal(predicate),
1409
+ actual)
1410
+ assert_block(full_message) do
1411
+ not actual
1412
+ end
1413
+ end
1414
+ end
1415
+
1416
+ # Just for minitest compatibility. :<
1417
+ #
1418
+ # @since 3.0.0
1419
+ alias_method :refute_predicate, :assert_not_predicate
1420
+
1421
+ ##
1422
+ # Passes if `object`#`alias_name` is an alias method of
1423
+ # `object`#`original_name`.
1424
+ #
1425
+ # @example
1426
+ # assert_alias_method([], :length, :size) # -> pass
1427
+ # assert_alias_method([], :size, :length) # -> pass
1428
+ # assert_alias_method([], :each, :size) # -> fail
1429
+ def assert_alias_method(object, alias_name, original_name, message=nil)
1430
+ _wrap_assertion do
1431
+ find_method_failure_message = Proc.new do |method_name|
1432
+ build_message(message,
1433
+ "<?>.? doesn't exist\n" +
1434
+ "(Class: <?>)",
1435
+ object,
1436
+ AssertionMessage.literal(method_name),
1437
+ object.class)
1438
+ end
1439
+
1440
+ alias_method = original_method = nil
1441
+ assert_block(find_method_failure_message.call(alias_name)) do
1442
+ begin
1443
+ alias_method = object.method(alias_name)
1444
+ true
1445
+ rescue NameError
1446
+ false
1447
+ end
1448
+ end
1449
+ assert_block(find_method_failure_message.call(original_name)) do
1450
+ begin
1451
+ original_method = object.method(original_name)
1452
+ true
1453
+ rescue NameError
1454
+ false
1455
+ end
1456
+ end
1457
+
1458
+ full_message = build_message(message,
1459
+ "<?> is alias of\n" +
1460
+ "<?> expected",
1461
+ alias_method,
1462
+ original_method)
1463
+ assert_block(full_message) do
1464
+ alias_method == original_method
1465
+ end
1466
+ end
1467
+ end
1468
+
1469
+ ##
1470
+ # Passes if `path` exists.
1471
+ #
1472
+ # @example
1473
+ # assert_path_exist("/tmp") # -> pass
1474
+ # assert_path_exist("/bin/sh") # -> pass
1475
+ # assert_path_exist("/nonexistent") # -> fail
1476
+ def assert_path_exist(path, message=nil)
1477
+ _wrap_assertion do
1478
+ failure_message = build_message(message,
1479
+ "<?> was expected to exist",
1480
+ path)
1481
+ assert_block(failure_message) do
1482
+ File.exist?(path)
1483
+ end
1484
+ end
1485
+ end
1486
+
1487
+ ##
1488
+ # Passes if `path` doesn't exist.
1489
+ #
1490
+ # @example
1491
+ # assert_path_not_exist("/nonexistent") # -> pass
1492
+ # assert_path_not_exist("/tmp") # -> fail
1493
+ # assert_path_not_exist("/bin/sh") # -> fail
1494
+ def assert_path_not_exist(path, message=nil)
1495
+ _wrap_assertion do
1496
+ failure_message = build_message(message,
1497
+ "<?> was expected to not exist",
1498
+ path)
1499
+ assert_block(failure_message) do
1500
+ not File.exist?(path)
1501
+ end
1502
+ end
1503
+ end
1504
+
1505
+ ##
1506
+ # Passes if `collection` includes `object`.
1507
+ #
1508
+ # @example
1509
+ # assert_include([1, 10], 1) # -> pass
1510
+ # assert_include(1..10, 5) # -> pass
1511
+ # assert_include([1, 10], 5) # -> fail
1512
+ # assert_include(1..10, 20) # -> fail
1513
+ def assert_include(collection, object, message=nil)
1514
+ _wrap_assertion do
1515
+ assert_respond_to(collection, :include?,
1516
+ "The collection must respond to :include?.")
1517
+ full_message = build_message(message,
1518
+ "<?> was expected to include\n<?>.",
1519
+ collection,
1520
+ object)
1521
+ assert_block(full_message) do
1522
+ collection.include?(object)
1523
+ end
1524
+ end
1525
+ end
1526
+
1527
+ # Just for minitest compatibility. :<
1528
+ #
1529
+ # @since 2.5.3
1530
+ alias_method :assert_includes, :assert_include
1531
+
1532
+ ##
1533
+ # Passes if `collection` doesn't include `object`.
1534
+ #
1535
+ # @example
1536
+ # assert_not_include([1, 10], 5) # -> pass
1537
+ # assert_not_include(1..10, 20) # -> pass
1538
+ # assert_not_include([1, 10], 1) # -> fail
1539
+ # assert_not_include(1..10, 5) # -> fail
1540
+ def assert_not_include(collection, object, message=nil)
1541
+ _wrap_assertion do
1542
+ assert_respond_to(collection, :include?,
1543
+ "The collection must respond to :include?.")
1544
+ full_message = build_message(message,
1545
+ "<?> was expected to not include\n<?>.",
1546
+ collection,
1547
+ object)
1548
+ assert_block(full_message) do
1549
+ not collection.include?(object)
1550
+ end
1551
+ end
1552
+ end
1553
+
1554
+ # Just for minitest compatibility. :<
1555
+ #
1556
+ # @since 3.0.0
1557
+ alias_method :assert_not_includes, :assert_not_include
1558
+
1559
+ # Just for minitest compatibility. :<
1560
+ #
1561
+ # @since 3.0.0
1562
+ alias_method :refute_includes, :assert_not_include
1563
+
1564
+ ##
1565
+ # Passes if `object` is empty.
1566
+ #
1567
+ # @example
1568
+ # assert_empty("") # -> pass
1569
+ # assert_empty([]) # -> pass
1570
+ # assert_empty({}) # -> pass
1571
+ # assert_empty(" ") # -> fail
1572
+ # assert_empty([nil]) # -> fail
1573
+ # assert_empty({1 => 2}) # -> fail
1574
+ def assert_empty(object, message=nil)
1575
+ _wrap_assertion do
1576
+ assert_respond_to(object, :empty?,
1577
+ "The object must respond to :empty?.")
1578
+ full_message = build_message(message,
1579
+ "<?> was expected to be empty.",
1580
+ object)
1581
+ assert_block(full_message) do
1582
+ object.empty?
1583
+ end
1584
+ end
1585
+ end
1586
+
1587
+ ##
1588
+ # Passes if `object` is not empty.
1589
+ #
1590
+ # @example
1591
+ # assert_not_empty(" ") # -> pass
1592
+ # assert_not_empty([nil]) # -> pass
1593
+ # assert_not_empty({1 => 2}) # -> pass
1594
+ # assert_not_empty("") # -> fail
1595
+ # assert_not_empty([]) # -> fail
1596
+ # assert_not_empty({}) # -> fail
1597
+ def assert_not_empty(object, message=nil)
1598
+ _wrap_assertion do
1599
+ assert_respond_to(object, :empty?,
1600
+ "The object must respond to :empty?.")
1601
+ full_message = build_message(message,
1602
+ "<?> was expected to not be empty.",
1603
+ object)
1604
+ assert_block(full_message) do
1605
+ not object.empty?
1606
+ end
1607
+ end
1608
+ end
1609
+
1610
+ # Just for minitest compatibility. :<
1611
+ #
1612
+ # @since 3.0.0
1613
+ alias_method :refute_empty, :assert_not_empty
1614
+
1615
+ ##
1616
+ # Builds a failure message. `user_message` is added before the
1617
+ # `template` and `arguments` replaces the '?'s positionally in
1618
+ # the template.
1619
+ def build_message(user_message, template=nil, *arguments)
1620
+ template &&= template.chomp
1621
+ return AssertionMessage.new(user_message, template, arguments)
1622
+ end
1623
+
1624
+ private
1625
+ def _wrap_assertion(&block)
1626
+ @_assertion_wrapped ||= false
1627
+ if @_assertion_wrapped
1628
+ block.call
1629
+ else
1630
+ @_assertion_wrapped = true
1631
+ begin
1632
+ add_assertion
1633
+ block.call
1634
+ ensure
1635
+ @_assertion_wrapped = false
1636
+ end
1637
+ end
1638
+ end
1639
+
1640
+ public
1641
+ # Called whenever an assertion is made. Define this in classes
1642
+ # that include Test::Unit::Assertions to record assertion
1643
+ # counts.
1644
+ #
1645
+ # This is a public API for developers who extend test-unit.
1646
+ #
1647
+ # @return [void]
1648
+ def add_assertion
1649
+ end
1650
+
1651
+ ##
1652
+ # Select whether or not to use the pretty-printer. If this option is set
1653
+ # to false before any assertions are made, pp.rb will not be required.
1654
+ def self.use_pp=(value)
1655
+ AssertionMessage.use_pp = value
1656
+ end
1657
+
1658
+ private
1659
+ def _assert_raise(assert_expected_exception, *args, &block)
1660
+ _wrap_assertion do
1661
+ if args.last.is_a?(String)
1662
+ message = args.pop
1663
+ else
1664
+ message = ""
1665
+ end
1666
+
1667
+ assert_exception_helper = AssertExceptionHelper.new(self, args)
1668
+ expected = assert_exception_helper.expected_exceptions
1669
+ actual_exception = nil
1670
+ full_message = build_message(message,
1671
+ "<?> exception was expected " +
1672
+ "but none was thrown.",
1673
+ expected)
1674
+ assert_block(full_message) do
1675
+ begin
1676
+ yield
1677
+ false
1678
+ rescue Exception => actual_exception
1679
+ true
1680
+ end
1681
+ end
1682
+ assert_expected_exception.call(message, assert_exception_helper,
1683
+ actual_exception)
1684
+ actual_exception
1685
+ end
1686
+ end
1687
+
1688
+ def _set_failed_information(failure, expected, actual)
1689
+ failure.expected = expected
1690
+ failure.actual = actual
1691
+ failure.inspected_expected = AssertionMessage.convert(expected)
1692
+ failure.inspected_actual = AssertionMessage.convert(actual)
1693
+ end
1694
+
1695
+ class AssertionMessage
1696
+ @use_pp = true
1697
+ class << self
1698
+ attr_accessor :use_pp
1699
+
1700
+ def literal(value)
1701
+ Literal.new(value)
1702
+ end
1703
+
1704
+ def delayed_literal(&block)
1705
+ DelayedLiteral.new(block)
1706
+ end
1707
+
1708
+ def maybe_container(value, &formatter)
1709
+ MaybeContainer.new(value, &formatter)
1710
+ end
1711
+
1712
+ MAX_DIFF_TARGET_STRING_SIZE = 1000
1713
+ def max_diff_target_string_size
1714
+ return @@max_diff_target_string_size if @@max_diff_target_string_size
1715
+
1716
+ size = ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"]
1717
+ if size
1718
+ begin
1719
+ size = Integer(size)
1720
+ rescue ArgumentError
1721
+ size = nil
1722
+ end
1723
+ end
1724
+ size || MAX_DIFF_TARGET_STRING_SIZE
1725
+ end
1726
+
1727
+ @@max_diff_target_string_size = nil
1728
+ def max_diff_target_string_size=(size)
1729
+ @@max_diff_target_string_size = size
1730
+ end
1731
+
1732
+ def diff_target_string?(string)
1733
+ if string.respond_to?(:bytesize)
1734
+ string.bytesize < max_diff_target_string_size
1735
+ else
1736
+ string.size < max_diff_target_string_size
1737
+ end
1738
+ end
1739
+
1740
+ def ensure_diffable_string(string)
1741
+ if string.respond_to?(:encoding) and
1742
+ !string.encoding.ascii_compatible?
1743
+ string = string.dup.force_encoding("ASCII-8BIT")
1744
+ end
1745
+ string
1746
+ end
1747
+
1748
+ def prepare_for_diff(from, to)
1749
+ if !from.is_a?(String) or !to.is_a?(String)
1750
+ from = convert(from)
1751
+ to = convert(to)
1752
+ end
1753
+
1754
+ if diff_target_string?(from) and diff_target_string?(to)
1755
+ from = ensure_diffable_string(from)
1756
+ to = ensure_diffable_string(to)
1757
+ [from, to]
1758
+ else
1759
+ [nil, nil]
1760
+ end
1761
+ end
1762
+
1763
+ def delayed_diff(from, to)
1764
+ delayed_literal do
1765
+ from, to = prepare_for_diff(from, to)
1766
+
1767
+ diff = "" if from.nil? or to.nil?
1768
+ diff ||= Diff.readable(from, to)
1769
+ if /^[-+]/ !~ diff
1770
+ diff = ""
1771
+ elsif /^[ ?]/ =~ diff or /(?:.*\n){2,}/ =~ diff
1772
+ diff = "\n\ndiff:\n#{diff}"
1773
+ else
1774
+ diff = ""
1775
+ end
1776
+
1777
+ if Diff.need_fold?(diff)
1778
+ folded_diff = Diff.folded_readable(from, to)
1779
+ diff += "\n\nfolded diff:\n#{folded_diff}"
1780
+ end
1781
+
1782
+ diff
1783
+ end
1784
+ end
1785
+
1786
+ def convert(object)
1787
+ if object.is_a?(Exception)
1788
+ object = AssertExceptionHelper::WrappedException.new(object)
1789
+ end
1790
+ inspector = Inspector.new(object)
1791
+ if use_pp
1792
+ begin
1793
+ require "pp" unless defined?(PP)
1794
+ begin
1795
+ return PP.pp(inspector, String.new).chomp
1796
+ rescue NameError
1797
+ end
1798
+ rescue LoadError
1799
+ self.use_pp = false
1800
+ end
1801
+ end
1802
+ inspector.inspect
1803
+ end
1804
+ end
1805
+
1806
+ class Inspector
1807
+ include Comparable
1808
+
1809
+ class << self
1810
+ def cached_new(object, inspected_objects)
1811
+ inspected_objects[object.object_id] ||=
1812
+ new(object, inspected_objects)
1813
+ end
1814
+
1815
+ @@inspector_classes = []
1816
+ def inspector_classes
1817
+ @@inspector_classes
1818
+ end
1819
+
1820
+ def register_inspector_class(inspector_class)
1821
+ @@inspector_classes << inspector_class
1822
+ end
1823
+
1824
+ def unregister_inspector_class(inspector_class)
1825
+ @@inspector_classes.delete(inspector_class)
1826
+ end
1827
+ end
1828
+
1829
+ attr_reader :object
1830
+ def initialize(object, inspected_objects={})
1831
+ @inspected_objects = inspected_objects
1832
+ @object = object
1833
+ @inspected_objects[@object.object_id] = self
1834
+ @inspect_target = inspect_target
1835
+ end
1836
+
1837
+ alias_method :native_inspect, :inspect
1838
+ def inspect
1839
+ @inspect_target.inspect
1840
+ end
1841
+
1842
+ def pretty_print(q)
1843
+ @inspect_target.pretty_print(q)
1844
+ end
1845
+
1846
+ def pretty_print_cycle(q)
1847
+ @inspect_target.pretty_print_cycle(q)
1848
+ end
1849
+
1850
+ def <=>(other)
1851
+ if other.is_a?(self.class)
1852
+ @object <=> other.object
1853
+ else
1854
+ @object <=> other
1855
+ end
1856
+ end
1857
+
1858
+ private
1859
+ def inspect_target
1860
+ self.class.inspector_classes.each do |inspector_class|
1861
+ if inspector_class.target?(@object)
1862
+ return inspector_class.new(@object, @inspected_objects)
1863
+ end
1864
+ end
1865
+ @object
1866
+ end
1867
+ end
1868
+
1869
+ class NumericInspector
1870
+ Inspector.register_inspector_class(self)
1871
+
1872
+ class << self
1873
+ def target?(object)
1874
+ object.is_a?(Numeric)
1875
+ end
1876
+ end
1877
+
1878
+ def initialize(numeric, inspected_objects)
1879
+ @inspected_objects = inspected_objects
1880
+ @numeric = numeric
1881
+ end
1882
+
1883
+ def inspect
1884
+ @numeric.to_s
1885
+ end
1886
+
1887
+ def pretty_print(q)
1888
+ q.text(@numeric.to_s)
1889
+ end
1890
+
1891
+ def pretty_print_cycle(q)
1892
+ q.text(@numeric.to_s)
1893
+ end
1894
+ end
1895
+
1896
+ class HashInspector
1897
+ Inspector.register_inspector_class(self)
1898
+
1899
+ class << self
1900
+ def target?(object)
1901
+ object.is_a?(Hash) or ENV.equal?(object)
1902
+ end
1903
+ end
1904
+
1905
+ def initialize(hash, inspected_objects)
1906
+ @inspected_objects = inspected_objects
1907
+ @hash = {}
1908
+ hash.each do |key, value|
1909
+ key = Inspector.cached_new(key, @inspected_objects)
1910
+ value = Inspector.cached_new(value, @inspected_objects)
1911
+ @hash[key] = value
1912
+ end
1913
+ end
1914
+
1915
+ def inspect
1916
+ @hash.inspect
1917
+ end
1918
+
1919
+ def pretty_print(q)
1920
+ q.group(1, '{', '}') do
1921
+ q.seplist(self, nil, :each_pair) do |k, v|
1922
+ q.group do
1923
+ q.pp(k)
1924
+ q.text('=>')
1925
+ q.group(1) do
1926
+ q.breakable('')
1927
+ q.pp(v)
1928
+ end
1929
+ end
1930
+ end
1931
+ end
1932
+ end
1933
+
1934
+ def pretty_print_cycle(q)
1935
+ @hash.pretty_print_cycle(q)
1936
+ end
1937
+
1938
+ def each_pair
1939
+ keys = @hash.keys
1940
+ begin
1941
+ keys = keys.sort # FIXME: more cleverly
1942
+ rescue ArgumentError
1943
+ end
1944
+ keys.each do |key|
1945
+ yield(key, @hash[key])
1946
+ end
1947
+ end
1948
+ end
1949
+
1950
+ class ArrayInspector
1951
+ Inspector.register_inspector_class(self)
1952
+
1953
+ class << self
1954
+ def target?(object)
1955
+ object.is_a?(Array)
1956
+ end
1957
+ end
1958
+
1959
+ def initialize(array, inspected_objects)
1960
+ @inspected_objects = inspected_objects
1961
+ @array = array.collect do |element|
1962
+ Inspector.cached_new(element, @inspected_objects)
1963
+ end
1964
+ end
1965
+
1966
+ def inspect
1967
+ @array.inspect
1968
+ end
1969
+
1970
+ def pretty_print(q)
1971
+ q.group(1, '[', ']') do
1972
+ q.seplist(self) do |v|
1973
+ q.pp(v)
1974
+ end
1975
+ end
1976
+ end
1977
+
1978
+ def pretty_print_cycle(q)
1979
+ @array.pretty_print_cycle(q)
1980
+ end
1981
+
1982
+ def each(&block)
1983
+ @array.each(&block)
1984
+ end
1985
+ end
1986
+
1987
+ class Literal
1988
+ def initialize(value)
1989
+ @value = value
1990
+ end
1991
+
1992
+ def inspect
1993
+ @value.to_s
1994
+ end
1995
+ end
1996
+
1997
+ class DelayedLiteral
1998
+ def initialize(value)
1999
+ @value = value
2000
+ end
2001
+
2002
+ def inspect
2003
+ @value.call.to_s
2004
+ end
2005
+ end
2006
+
2007
+ class MaybeContainer
2008
+ def initialize(value, &formatter)
2009
+ @value = value
2010
+ @formatter = formatter
2011
+ end
2012
+
2013
+ def inspect
2014
+ if @value.is_a?(Array)
2015
+ values = @value.collect do |value|
2016
+ @formatter.call(AssertionMessage.convert(value))
2017
+ end
2018
+ "[#{values.join(', ')}]"
2019
+ else
2020
+ @formatter.call(AssertionMessage.convert(@value))
2021
+ end
2022
+ end
2023
+ end
2024
+
2025
+ class Template
2026
+ def self.create(string)
2027
+ parts = (string ? string.scan(/(?=[^\\])\?|(?:\\\?|[^\?])+/m) : [])
2028
+ self.new(parts)
2029
+ end
2030
+
2031
+ attr_reader :count
2032
+
2033
+ def initialize(parts)
2034
+ @parts = parts
2035
+ @count = parts.find_all{|e| e == '?'}.size
2036
+ end
2037
+
2038
+ def result(parameters)
2039
+ raise "The number of parameters does not match the number of substitutions." if(parameters.size != count)
2040
+ params = parameters.dup
2041
+ expanded_template = ""
2042
+ @parts.each do |part|
2043
+ if part == '?'
2044
+ param = params.shift
2045
+ if Object.const_defined?(:Encoding)
2046
+ expanded_template += concatenatable(param,
2047
+ expanded_template.encoding)
2048
+ else
2049
+ expanded_template += param
2050
+ end
2051
+ else
2052
+ expanded_template += part.gsub(/\\\?/m, '?')
2053
+ end
2054
+ end
2055
+ expanded_template
2056
+ end
2057
+
2058
+ private
2059
+ def concatenatable(text, encoding)
2060
+ if Encoding.compatible?(text, encoding)
2061
+ text
2062
+ else
2063
+ text.dup.force_encoding(encoding)
2064
+ end
2065
+ end
2066
+ end
2067
+
2068
+ include Util::BacktraceFilter
2069
+
2070
+ def initialize(user_message, template_string, parameters)
2071
+ @user_message = user_message
2072
+ @template_string = template_string
2073
+ @parameters = parameters
2074
+ end
2075
+
2076
+ def convert(object)
2077
+ self.class.convert(object)
2078
+ end
2079
+
2080
+ def template
2081
+ @template ||= Template.create(@template_string)
2082
+ end
2083
+
2084
+ def user_message
2085
+ return nil unless @user_message
2086
+ message = @user_message
2087
+ message = message.call if message.respond_to?(:call)
2088
+ message.to_s
2089
+ end
2090
+
2091
+ def to_s
2092
+ message_parts = []
2093
+ head = user_message
2094
+ if head and not head.empty?
2095
+ message_parts << add_period(head)
2096
+ end
2097
+ tail = template.result(@parameters.collect{|e| convert(e)})
2098
+ message_parts << tail unless(tail.empty?)
2099
+ message_parts.join("\n")
2100
+ end
2101
+
2102
+ private
2103
+ def add_period(string)
2104
+ (string =~ /\.\Z/ ? string : string + '.')
2105
+ end
2106
+ end
2107
+
2108
+ class AssertExceptionHelper
2109
+ class WrappedException
2110
+ attr_reader :exception
2111
+ def initialize(exception)
2112
+ @exception = exception
2113
+ end
2114
+
2115
+ def inspect
2116
+ if default_inspect?
2117
+ inspected = "#{@exception.class.inspect}(<#{@exception.message}>)"
2118
+ unless (@exception.backtrace || []).empty?
2119
+ inspected += "\n"
2120
+ @exception.backtrace.each do |trace|
2121
+ inspected << "#{trace}\n"
2122
+ end
2123
+ end
2124
+ inspected
2125
+ else
2126
+ @exception.inspect
2127
+ end
2128
+ end
2129
+
2130
+ def method_missing(name, *args, &block)
2131
+ @exception.__send__(name, *args, &block)
2132
+ end
2133
+
2134
+ private
2135
+ def default_inspect?
2136
+ inspect_method = @exception.method(:inspect)
2137
+ if inspect_method.respond_to?(:owner) and
2138
+ inspect_method.owner == Exception
2139
+ true
2140
+ else
2141
+ default_inspect_method = Exception.instance_method(:inspect)
2142
+ default_inspect_method.bind(@exception).call == @exception.inspect
2143
+ end
2144
+ end
2145
+ end
2146
+
2147
+ def initialize(test_case, expected_exceptions)
2148
+ @test_case = test_case
2149
+ @expected_exceptions = expected_exceptions
2150
+ @expected_classes, @expected_modules, @expected_objects =
2151
+ split_expected_exceptions(expected_exceptions)
2152
+ end
2153
+
2154
+ def expected_exceptions
2155
+ exceptions = @expected_exceptions.collect do |exception|
2156
+ if exception.is_a?(Exception)
2157
+ WrappedException.new(exception)
2158
+ else
2159
+ exception
2160
+ end
2161
+ end
2162
+ if exceptions.size == 1
2163
+ exceptions[0]
2164
+ else
2165
+ exceptions
2166
+ end
2167
+ end
2168
+
2169
+ def expected?(actual_exception, equality=nil)
2170
+ equality ||= :instance_of?
2171
+ expected_class?(actual_exception, equality) or
2172
+ expected_module?(actual_exception) or
2173
+ expected_object?(actual_exception)
2174
+ end
2175
+
2176
+ private
2177
+ def split_expected_exceptions(expected_exceptions)
2178
+ exception_modules = []
2179
+ exception_objects = []
2180
+ exception_classes = []
2181
+ expected_exceptions.each do |exception_type|
2182
+ if exception_type.instance_of?(Module)
2183
+ exception_modules << exception_type
2184
+ elsif exception_object?(exception_type)
2185
+ exception_objects << exception_type
2186
+ elsif exception_class?(exception_type)
2187
+ exception_classes << exception_type
2188
+ else
2189
+ full_message =
2190
+ @test_case.__send__(:build_message,
2191
+ nil,
2192
+ "<?> must be " +
2193
+ "a subclass of Exception, " +
2194
+ "an object of Exception subclasses " +
2195
+ "or a Module",
2196
+ exception_type)
2197
+ @test_case.flunk(full_message)
2198
+ end
2199
+ end
2200
+ [exception_classes, exception_modules, exception_objects]
2201
+ end
2202
+
2203
+ def exception_object?(exception_type)
2204
+ return true if exception_type.is_a?(Exception)
2205
+
2206
+ if Object.const_defined?(:Java)
2207
+ return true if exception_type.is_a?(Java::JavaLang::Throwable)
2208
+ end
2209
+
2210
+ false
2211
+ end
2212
+
2213
+ def exception_class?(exception_type)
2214
+ return true if exception_type <= Exception
2215
+
2216
+ if Object.const_defined?(:Java)
2217
+ return true if exception_type <= Java::JavaLang::Throwable
2218
+ end
2219
+
2220
+ false
2221
+ end
2222
+
2223
+ def expected_class?(actual_exception, equality)
2224
+ @expected_classes.any? do |expected_class|
2225
+ actual_exception.__send__(equality, expected_class)
2226
+ end
2227
+ end
2228
+
2229
+ def expected_module?(actual_exception)
2230
+ @expected_modules.any? do |expected_module|
2231
+ actual_exception.is_a?(expected_module)
2232
+ end
2233
+ end
2234
+
2235
+ def expected_object?(actual_exception)
2236
+ @expected_objects.any? do |expected_object|
2237
+ expected_object == actual_exception or
2238
+ fallback_exception_object_equal(expected_object, actual_exception)
2239
+ end
2240
+ end
2241
+
2242
+ def fallback_exception_object_equal(expected_object, actual_exception)
2243
+ owner = Util::MethodOwnerFinder.find(expected_object, :==)
2244
+ if owner == Kernel or owner == Exception
2245
+ expected_object.class == actual_exception.class and
2246
+ expected_object.message == actual_exception.message
2247
+ else
2248
+ false
2249
+ end
2250
+ end
2251
+ end
2252
+
2253
+ # :startdoc:
2254
+ end
2255
+ end
2256
+ end