hirohig_palindrome 0.1.0

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 (283) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +8 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +8 -0
  6. data/Gemfile.lock +30 -0
  7. data/README.md +36 -0
  8. data/Rakefile +10 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/hirohig_palindrome.gemspec +33 -0
  12. data/lib/hirohig_palindrome/version.rb +3 -0
  13. data/lib/hirohig_palindrome.rb +17 -0
  14. data/vendor/.DS_Store +0 -0
  15. data/vendor/bundle/.DS_Store +0 -0
  16. data/vendor/bundle/ruby/.DS_Store +0 -0
  17. data/vendor/bundle/ruby/2.6.0/.DS_Store +0 -0
  18. data/vendor/bundle/ruby/2.6.0/bin/rake +27 -0
  19. data/vendor/bundle/ruby/2.6.0/cache/ansi-1.5.0.gem +0 -0
  20. data/vendor/bundle/ruby/2.6.0/cache/builder-3.2.4.gem +0 -0
  21. data/vendor/bundle/ruby/2.6.0/cache/minitest-5.14.0.gem +0 -0
  22. data/vendor/bundle/ruby/2.6.0/cache/minitest-reporters-1.2.0.gem +0 -0
  23. data/vendor/bundle/ruby/2.6.0/cache/rake-12.3.3.gem +0 -0
  24. data/vendor/bundle/ruby/2.6.0/cache/ruby-progressbar-1.10.1.gem +0 -0
  25. data/vendor/bundle/ruby/2.6.0/gems/.DS_Store +0 -0
  26. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/.index +77 -0
  27. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/.yardopts +8 -0
  28. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/DEMO.md +451 -0
  29. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/HISTORY.md +217 -0
  30. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/LICENSE.txt +23 -0
  31. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/NOTICE.md +170 -0
  32. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/README.md +91 -0
  33. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/01_ansicode.md +65 -0
  34. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/02_core.md +11 -0
  35. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/03_logger.md +30 -0
  36. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/04_progressbar.md +62 -0
  37. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/05_mixin.md +37 -0
  38. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/06_string.md +56 -0
  39. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/07_columns.md +89 -0
  40. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/08_table.md +28 -0
  41. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/09_diff.md +47 -0
  42. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/10_bbcode.md +24 -0
  43. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/11_terminal.md +8 -0
  44. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/applique/ae.rb +1 -0
  45. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/demo/applique/output.rb +5 -0
  46. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/bbcode.rb +334 -0
  47. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/chain.rb +50 -0
  48. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/chart.rb +100 -0
  49. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/code.rb +349 -0
  50. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/columns.rb +197 -0
  51. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/constants.rb +25 -0
  52. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/core.rb +30 -0
  53. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/diff.rb +215 -0
  54. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/hexdump.rb +122 -0
  55. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/logger.rb +211 -0
  56. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/mixin.rb +121 -0
  57. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/progressbar.rb +292 -0
  58. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/string.rb +254 -0
  59. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/table.rb +179 -0
  60. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/curses.rb +26 -0
  61. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/stty.rb +62 -0
  62. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/termios.rb +68 -0
  63. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal/win32.rb +107 -0
  64. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/terminal.rb +44 -0
  65. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi/version.rb +15 -0
  66. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi.rb +22 -0
  67. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/lib/ansi.yml +77 -0
  68. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_ansicode.rb +43 -0
  69. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_bbcode.rb +35 -0
  70. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_mixin.rb +35 -0
  71. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/case_progressbar.rb +21 -0
  72. data/vendor/bundle/ruby/2.6.0/gems/ansi-1.5.0/test/test_helper.rb +3 -0
  73. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/CHANGES +119 -0
  74. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/MIT-LICENSE +20 -0
  75. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/README.md +258 -0
  76. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/Rakefile +194 -0
  77. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/builder.blurb +27 -0
  78. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/builder.gemspec +45 -0
  79. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/jamis.rb +592 -0
  80. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-1.2.4.rdoc +31 -0
  81. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-2.0.0.rdoc +46 -0
  82. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/doc/releases/builder-2.1.1.rdoc +58 -0
  83. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/blankslate.rb +138 -0
  84. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/blankslate.rb +24 -0
  85. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/version.rb +9 -0
  86. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xchar.rb +198 -0
  87. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlbase.rb +200 -0
  88. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlevents.rb +64 -0
  89. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder/xmlmarkup.rb +345 -0
  90. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/lib/builder.rb +14 -0
  91. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/publish.rake +21 -0
  92. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/tags.rake +63 -0
  93. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/rakelib/testing.rake +8 -0
  94. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/helper.rb +13 -0
  95. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/performance.rb +42 -0
  96. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/preload.rb +40 -0
  97. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_blankslate.rb +208 -0
  98. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_eventbuilder.rb +151 -0
  99. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_markupbuilder.rb +617 -0
  100. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_method_caching.rb +63 -0
  101. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_namecollision.rb +40 -0
  102. data/vendor/bundle/ruby/2.6.0/gems/builder-3.2.4/test/test_xchar.rb +85 -0
  103. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/.autotest +34 -0
  104. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/History.rdoc +1380 -0
  105. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/Manifest.txt +27 -0
  106. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/README.rdoc +764 -0
  107. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/Rakefile +72 -0
  108. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/design_rationale.rb +52 -0
  109. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/hoe/minitest.rb +32 -0
  110. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/assertions.rb +807 -0
  111. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/autorun.rb +13 -0
  112. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/benchmark.rb +455 -0
  113. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/expectations.rb +303 -0
  114. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/hell.rb +11 -0
  115. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/mock.rb +240 -0
  116. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/parallel.rb +70 -0
  117. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/pride.rb +4 -0
  118. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/pride_plugin.rb +142 -0
  119. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/spec.rb +342 -0
  120. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/test.rb +220 -0
  121. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest/unit.rb +45 -0
  122. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/lib/minitest.rb +1053 -0
  123. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/metametameta.rb +117 -0
  124. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_assertions.rb +1567 -0
  125. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_benchmark.rb +137 -0
  126. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_mock.rb +872 -0
  127. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_reporter.rb +299 -0
  128. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_spec.rb +1041 -0
  129. data/vendor/bundle/ruby/2.6.0/gems/minitest-5.14.0/test/minitest/test_minitest_test.rb +1080 -0
  130. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.gitignore +27 -0
  131. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.ruby-gemset +1 -0
  132. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.travis.yml +10 -0
  133. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/.yardopts +6 -0
  134. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/CHANGELOG.md +40 -0
  135. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/Gemfile +2 -0
  136. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/LICENSE +20 -0
  137. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/README.md +115 -0
  138. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/Rakefile +60 -0
  139. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/default-reporter.png +0 -0
  140. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/mean_time_reporter.png +0 -0
  141. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/progress-reporter.png +0 -0
  142. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/assets/spec-reporter.png +0 -0
  143. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/extensible_backtrace_filter.rb +67 -0
  144. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/minitest_reporter_plugin.rb +75 -0
  145. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/old_activesupport_fix.rb +24 -0
  146. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/relative_position.rb +26 -0
  147. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/ansi.rb +31 -0
  148. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/base_reporter.rb +117 -0
  149. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/default_reporter.rb +228 -0
  150. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/html_reporter.rb +221 -0
  151. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/junit_reporter.rb +157 -0
  152. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/mean_time_reporter.rb +392 -0
  153. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/progress_reporter.rb +96 -0
  154. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/ruby_mate_reporter.rb +54 -0
  155. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/rubymine_reporter.rb +117 -0
  156. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/spec_reporter.rb +61 -0
  157. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters/version.rb +5 -0
  158. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/reporters.rb +89 -0
  159. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/lib/minitest/templates/index.html.erb +83 -0
  160. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/minitest-reporters.gemspec +31 -0
  161. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/junit_filename_bug_example_test.rb +21 -0
  162. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/mean_time_test.rb +8 -0
  163. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/progress_detailed_skip_test.rb +8 -0
  164. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/progress_test.rb +8 -0
  165. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/sample_test.rb +15 -0
  166. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/fixtures/spec_test.rb +13 -0
  167. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/gallery/bad_test.rb +25 -0
  168. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/gallery/good_test.rb +14 -0
  169. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/junit_reporter_test.rb +12 -0
  170. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/mean_time_reporter_test.rb +7 -0
  171. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/integration/reporters/progress_reporter_test.rb +34 -0
  172. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/test_helper.rb +22 -0
  173. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/extensible_backtrace_filter_test.rb +42 -0
  174. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/mean_time_reporter_unit_test.rb +152 -0
  175. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/minitest_reporter_plugin_test.rb +14 -0
  176. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/reporters_test.rb +52 -0
  177. data/vendor/bundle/ruby/2.6.0/gems/minitest-reporters-1.2.0/test/unit/minitest/spec_reporter_test.rb +41 -0
  178. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/CONTRIBUTING.rdoc +43 -0
  179. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/Gemfile +3 -0
  180. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/History.rdoc +2344 -0
  181. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/MIT-LICENSE +21 -0
  182. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/README.rdoc +156 -0
  183. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/Rakefile +41 -0
  184. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/azure-pipelines.yml +11 -0
  185. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/bundle +105 -0
  186. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/console +7 -0
  187. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rake +29 -0
  188. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rdoc +29 -0
  189. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/rubocop +29 -0
  190. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/bin/setup +6 -0
  191. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/command_line_usage.rdoc +158 -0
  192. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile1 +38 -0
  193. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/Rakefile2 +35 -0
  194. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/a.c +6 -0
  195. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/b.c +6 -0
  196. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/example/main.c +11 -0
  197. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/glossary.rdoc +42 -0
  198. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/jamis.rb +592 -0
  199. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/proto_rake.rdoc +127 -0
  200. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rake.1 +156 -0
  201. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rakefile.rdoc +622 -0
  202. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/doc/rational.rdoc +151 -0
  203. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/exe/rake +27 -0
  204. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/application.rb +824 -0
  205. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/backtrace.rb +24 -0
  206. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/clean.rb +78 -0
  207. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cloneable.rb +17 -0
  208. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/cpu_counter.rb +107 -0
  209. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/default_loader.rb +15 -0
  210. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/dsl_definition.rb +195 -0
  211. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/early_time.rb +22 -0
  212. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/core.rb +26 -0
  213. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/ext/string.rb +176 -0
  214. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_creation_task.rb +25 -0
  215. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_list.rb +435 -0
  216. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_task.rb +54 -0
  217. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils.rb +137 -0
  218. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/file_utils_ext.rb +145 -0
  219. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_chain.rb +57 -0
  220. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/invocation_exception_mixin.rb +17 -0
  221. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/late_time.rb +18 -0
  222. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/linked_list.rb +112 -0
  223. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/loaders/makefile.rb +54 -0
  224. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/multi_task.rb +14 -0
  225. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/name_space.rb +38 -0
  226. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/packagetask.rb +207 -0
  227. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/phony.rb +16 -0
  228. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/private_reader.rb +21 -0
  229. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/promise.rb +100 -0
  230. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/pseudo_status.rb +30 -0
  231. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_module.rb +67 -0
  232. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rake_test_loader.rb +27 -0
  233. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/rule_recursion_overflow_error.rb +20 -0
  234. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/scope.rb +43 -0
  235. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task.rb +413 -0
  236. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_argument_error.rb +8 -0
  237. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_arguments.rb +109 -0
  238. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/task_manager.rb +324 -0
  239. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/tasklib.rb +12 -0
  240. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/testtask.rb +224 -0
  241. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_history_display.rb +49 -0
  242. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/thread_pool.rb +163 -0
  243. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/trace_output.rb +23 -0
  244. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/version.rb +10 -0
  245. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake/win32.rb +51 -0
  246. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/lib/rake.rb +71 -0
  247. data/vendor/bundle/ruby/2.6.0/gems/rake-12.3.3/rake.gemspec +42 -0
  248. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/LICENSE.txt +19 -0
  249. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/README.md +38 -0
  250. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/Rakefile +2 -0
  251. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/base.rb +183 -0
  252. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/calculators/length.rb +100 -0
  253. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/calculators/running_average.rb +9 -0
  254. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/bar.rb +102 -0
  255. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/percentage.rb +29 -0
  256. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/rate.rb +43 -0
  257. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/time.rb +107 -0
  258. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components/title.rb +13 -0
  259. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/components.rb +5 -0
  260. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/errors/invalid_progress_error.rb +4 -0
  261. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/formatter.rb +27 -0
  262. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/molecule.rb +60 -0
  263. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format/string.rb +36 -0
  264. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/format.rb +3 -0
  265. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/output.rb +68 -0
  266. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/non_tty.rb +47 -0
  267. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/null.rb +33 -0
  268. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/outputs/tty.rb +32 -0
  269. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/progress.rb +118 -0
  270. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/refinements/enumerator.rb +23 -0
  271. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/refinements.rb +1 -0
  272. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/throttle.rb +25 -0
  273. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/time.rb +32 -0
  274. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/timer.rb +72 -0
  275. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar/version.rb +3 -0
  276. data/vendor/bundle/ruby/2.6.0/gems/ruby-progressbar-1.10.1/lib/ruby-progressbar.rb +22 -0
  277. data/vendor/bundle/ruby/2.6.0/specifications/ansi-1.5.0.gemspec +49 -0
  278. data/vendor/bundle/ruby/2.6.0/specifications/builder-3.2.4.gemspec +23 -0
  279. data/vendor/bundle/ruby/2.6.0/specifications/minitest-5.14.0.gemspec +41 -0
  280. data/vendor/bundle/ruby/2.6.0/specifications/minitest-reporters-1.2.0.gemspec +48 -0
  281. data/vendor/bundle/ruby/2.6.0/specifications/rake-12.3.3.gemspec +49 -0
  282. data/vendor/bundle/ruby/2.6.0/specifications/ruby-progressbar-1.10.1.gemspec +46 -0
  283. metadata +326 -0
@@ -0,0 +1,1053 @@
1
+ require "optparse"
2
+ require "thread"
3
+ require "mutex_m"
4
+ require "minitest/parallel"
5
+ require "stringio"
6
+
7
+ ##
8
+ # :include: README.rdoc
9
+
10
+ module Minitest
11
+ VERSION = "5.14.0" # :nodoc:
12
+ ENCS = "".respond_to? :encoding # :nodoc:
13
+
14
+ @@installed_at_exit ||= false
15
+ @@after_run = []
16
+ @extensions = []
17
+
18
+ mc = (class << self; self; end)
19
+
20
+ ##
21
+ # Parallel test executor
22
+
23
+ mc.send :attr_accessor, :parallel_executor
24
+
25
+ warn "DEPRECATED: use MT_CPU instead of N for parallel test runs" if ENV["N"]
26
+ n_threads = (ENV["MT_CPU"] || ENV["N"] || 2).to_i
27
+ self.parallel_executor = Parallel::Executor.new n_threads
28
+
29
+ ##
30
+ # Filter object for backtraces.
31
+
32
+ mc.send :attr_accessor, :backtrace_filter
33
+
34
+ ##
35
+ # Reporter object to be used for all runs.
36
+ #
37
+ # NOTE: This accessor is only available during setup, not during runs.
38
+
39
+ mc.send :attr_accessor, :reporter
40
+
41
+ ##
42
+ # Names of known extension plugins.
43
+
44
+ mc.send :attr_accessor, :extensions
45
+
46
+ ##
47
+ # The signal to use for dumping information to STDERR. Defaults to "INFO".
48
+
49
+ mc.send :attr_accessor, :info_signal
50
+ self.info_signal = "INFO"
51
+
52
+ ##
53
+ # Registers Minitest to run at process exit
54
+
55
+ def self.autorun
56
+ at_exit {
57
+ next if $! and not ($!.kind_of? SystemExit and $!.success?)
58
+
59
+ exit_code = nil
60
+
61
+ pid = Process.pid
62
+ at_exit {
63
+ next if Process.pid != pid
64
+ @@after_run.reverse_each(&:call)
65
+ exit exit_code || false
66
+ }
67
+
68
+ exit_code = Minitest.run ARGV
69
+ } unless @@installed_at_exit
70
+ @@installed_at_exit = true
71
+ end
72
+
73
+ ##
74
+ # A simple hook allowing you to run a block of code after everything
75
+ # is done running. Eg:
76
+ #
77
+ # Minitest.after_run { p $debugging_info }
78
+
79
+ def self.after_run &block
80
+ @@after_run << block
81
+ end
82
+
83
+ def self.init_plugins options # :nodoc:
84
+ self.extensions.each do |name|
85
+ msg = "plugin_#{name}_init"
86
+ send msg, options if self.respond_to? msg
87
+ end
88
+ end
89
+
90
+ def self.load_plugins # :nodoc:
91
+ return unless self.extensions.empty?
92
+
93
+ seen = {}
94
+
95
+ require "rubygems" unless defined? Gem
96
+
97
+ Gem.find_files("minitest/*_plugin.rb").each do |plugin_path|
98
+ name = File.basename plugin_path, "_plugin.rb"
99
+
100
+ next if seen[name]
101
+ seen[name] = true
102
+
103
+ require plugin_path
104
+ self.extensions << name
105
+ end
106
+ end
107
+
108
+ ##
109
+ # This is the top-level run method. Everything starts from here. It
110
+ # tells each Runnable sub-class to run, and each of those are
111
+ # responsible for doing whatever they do.
112
+ #
113
+ # The overall structure of a run looks like this:
114
+ #
115
+ # Minitest.autorun
116
+ # Minitest.run(args)
117
+ # Minitest.__run(reporter, options)
118
+ # Runnable.runnables.each
119
+ # runnable.run(reporter, options)
120
+ # self.runnable_methods.each
121
+ # self.run_one_method(self, runnable_method, reporter)
122
+ # Minitest.run_one_method(klass, runnable_method)
123
+ # klass.new(runnable_method).run
124
+
125
+ def self.run args = []
126
+ self.load_plugins unless args.delete("--no-plugins") || ENV["MT_NO_PLUGINS"]
127
+
128
+ options = process_args args
129
+
130
+ reporter = CompositeReporter.new
131
+ reporter << SummaryReporter.new(options[:io], options)
132
+ reporter << ProgressReporter.new(options[:io], options)
133
+
134
+ self.reporter = reporter # this makes it available to plugins
135
+ self.init_plugins options
136
+ self.reporter = nil # runnables shouldn't depend on the reporter, ever
137
+
138
+ self.parallel_executor.start if parallel_executor.respond_to?(:start)
139
+ reporter.start
140
+ begin
141
+ __run reporter, options
142
+ rescue Interrupt
143
+ warn "Interrupted. Exiting..."
144
+ end
145
+ self.parallel_executor.shutdown
146
+ reporter.report
147
+
148
+ reporter.passed?
149
+ end
150
+
151
+ ##
152
+ # Internal run method. Responsible for telling all Runnable
153
+ # sub-classes to run.
154
+
155
+ def self.__run reporter, options
156
+ suites = Runnable.runnables.reject { |s| s.runnable_methods.empty? }.shuffle
157
+ parallel, serial = suites.partition { |s| s.test_order == :parallel }
158
+
159
+ # If we run the parallel tests before the serial tests, the parallel tests
160
+ # could run in parallel with the serial tests. This would be bad because
161
+ # the serial tests won't lock around Reporter#record. Run the serial tests
162
+ # first, so that after they complete, the parallel tests will lock when
163
+ # recording results.
164
+ serial.map { |suite| suite.run reporter, options } +
165
+ parallel.map { |suite| suite.run reporter, options }
166
+ end
167
+
168
+ def self.process_args args = [] # :nodoc:
169
+ options = {
170
+ :io => $stdout,
171
+ }
172
+ orig_args = args.dup
173
+
174
+ OptionParser.new do |opts|
175
+ opts.banner = "minitest options:"
176
+ opts.version = Minitest::VERSION
177
+
178
+ opts.on "-h", "--help", "Display this help." do
179
+ puts opts
180
+ exit
181
+ end
182
+
183
+ opts.on "--no-plugins", "Bypass minitest plugin auto-loading (or set $MT_NO_PLUGINS)."
184
+
185
+ desc = "Sets random seed. Also via env. Eg: SEED=n rake"
186
+ opts.on "-s", "--seed SEED", Integer, desc do |m|
187
+ options[:seed] = m.to_i
188
+ end
189
+
190
+ opts.on "-v", "--verbose", "Verbose. Show progress processing files." do
191
+ options[:verbose] = true
192
+ end
193
+
194
+ opts.on "-n", "--name PATTERN", "Filter run on /regexp/ or string." do |a|
195
+ options[:filter] = a
196
+ end
197
+
198
+ opts.on "-e", "--exclude PATTERN", "Exclude /regexp/ or string from run." do |a|
199
+ options[:exclude] = a
200
+ end
201
+
202
+ unless extensions.empty?
203
+ opts.separator ""
204
+ opts.separator "Known extensions: #{extensions.join(", ")}"
205
+
206
+ extensions.each do |meth|
207
+ msg = "plugin_#{meth}_options"
208
+ send msg, opts, options if self.respond_to?(msg)
209
+ end
210
+ end
211
+
212
+ begin
213
+ opts.parse! args
214
+ rescue OptionParser::InvalidOption => e
215
+ puts
216
+ puts e
217
+ puts
218
+ puts opts
219
+ exit 1
220
+ end
221
+
222
+ orig_args -= args
223
+ end
224
+
225
+ unless options[:seed] then
226
+ srand
227
+ options[:seed] = (ENV["SEED"] || srand).to_i % 0xFFFF
228
+ orig_args << "--seed" << options[:seed].to_s
229
+ end
230
+
231
+ srand options[:seed]
232
+
233
+ options[:args] = orig_args.map { |s|
234
+ s =~ /[\s|&<>$()]/ ? s.inspect : s
235
+ }.join " "
236
+
237
+ options
238
+ end
239
+
240
+ def self.filter_backtrace bt # :nodoc:
241
+ backtrace_filter.filter bt
242
+ end
243
+
244
+ ##
245
+ # Represents anything "runnable", like Test, Spec, Benchmark, or
246
+ # whatever you can dream up.
247
+ #
248
+ # Subclasses of this are automatically registered and available in
249
+ # Runnable.runnables.
250
+
251
+ class Runnable
252
+ ##
253
+ # Number of assertions executed in this run.
254
+
255
+ attr_accessor :assertions
256
+
257
+ ##
258
+ # An assertion raised during the run, if any.
259
+
260
+ attr_accessor :failures
261
+
262
+ ##
263
+ # The time it took to run.
264
+
265
+ attr_accessor :time
266
+
267
+ def time_it # :nodoc:
268
+ t0 = Minitest.clock_time
269
+
270
+ yield
271
+ ensure
272
+ self.time = Minitest.clock_time - t0
273
+ end
274
+
275
+ ##
276
+ # Name of the run.
277
+
278
+ def name
279
+ @NAME
280
+ end
281
+
282
+ ##
283
+ # Set the name of the run.
284
+
285
+ def name= o
286
+ @NAME = o
287
+ end
288
+
289
+ ##
290
+ # Returns all instance methods matching the pattern +re+.
291
+
292
+ def self.methods_matching re
293
+ public_instance_methods(true).grep(re).map(&:to_s)
294
+ end
295
+
296
+ def self.reset # :nodoc:
297
+ @@runnables = []
298
+ end
299
+
300
+ reset
301
+
302
+ ##
303
+ # Responsible for running all runnable methods in a given class,
304
+ # each in its own instance. Each instance is passed to the
305
+ # reporter to record.
306
+
307
+ def self.run reporter, options = {}
308
+ filter = options[:filter] || "/./"
309
+ filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/%
310
+
311
+ filtered_methods = self.runnable_methods.find_all { |m|
312
+ filter === m || filter === "#{self}##{m}"
313
+ }
314
+
315
+ exclude = options[:exclude]
316
+ exclude = Regexp.new $1 if exclude =~ %r%/(.*)/%
317
+
318
+ filtered_methods.delete_if { |m|
319
+ exclude === m || exclude === "#{self}##{m}"
320
+ }
321
+
322
+ return if filtered_methods.empty?
323
+
324
+ with_info_handler reporter do
325
+ filtered_methods.each do |method_name|
326
+ run_one_method self, method_name, reporter
327
+ end
328
+ end
329
+ end
330
+
331
+ ##
332
+ # Runs a single method and has the reporter record the result.
333
+ # This was considered internal API but is factored out of run so
334
+ # that subclasses can specialize the running of an individual
335
+ # test. See Minitest::ParallelTest::ClassMethods for an example.
336
+
337
+ def self.run_one_method klass, method_name, reporter
338
+ reporter.prerecord klass, method_name
339
+ reporter.record Minitest.run_one_method(klass, method_name)
340
+ end
341
+
342
+ def self.with_info_handler reporter, &block # :nodoc:
343
+ handler = lambda do
344
+ unless reporter.passed? then
345
+ warn "Current results:"
346
+ warn ""
347
+ warn reporter.reporters.first
348
+ warn ""
349
+ end
350
+ end
351
+
352
+ on_signal ::Minitest.info_signal, handler, &block
353
+ end
354
+
355
+ SIGNALS = Signal.list # :nodoc:
356
+
357
+ def self.on_signal name, action # :nodoc:
358
+ supported = SIGNALS[name]
359
+
360
+ old_trap = trap name do
361
+ old_trap.call if old_trap.respond_to? :call
362
+ action.call
363
+ end if supported
364
+
365
+ yield
366
+ ensure
367
+ trap name, old_trap if supported
368
+ end
369
+
370
+ ##
371
+ # Each subclass of Runnable is responsible for overriding this
372
+ # method to return all runnable methods. See #methods_matching.
373
+
374
+ def self.runnable_methods
375
+ raise NotImplementedError, "subclass responsibility"
376
+ end
377
+
378
+ ##
379
+ # Returns all subclasses of Runnable.
380
+
381
+ def self.runnables
382
+ @@runnables
383
+ end
384
+
385
+ @@marshal_dump_warned = false
386
+
387
+ def marshal_dump # :nodoc:
388
+ unless @@marshal_dump_warned then
389
+ warn ["Minitest::Runnable#marshal_dump is deprecated.",
390
+ "You might be violating internals. From", caller.first].join " "
391
+ @@marshal_dump_warned = true
392
+ end
393
+
394
+ [self.name, self.failures, self.assertions, self.time]
395
+ end
396
+
397
+ def marshal_load ary # :nodoc:
398
+ self.name, self.failures, self.assertions, self.time = ary
399
+ end
400
+
401
+ def failure # :nodoc:
402
+ self.failures.first
403
+ end
404
+
405
+ def initialize name # :nodoc:
406
+ self.name = name
407
+ self.failures = []
408
+ self.assertions = 0
409
+ end
410
+
411
+ ##
412
+ # Runs a single method. Needs to return self.
413
+
414
+ def run
415
+ raise NotImplementedError, "subclass responsibility"
416
+ end
417
+
418
+ ##
419
+ # Did this run pass?
420
+ #
421
+ # Note: skipped runs are not considered passing, but they don't
422
+ # cause the process to exit non-zero.
423
+
424
+ def passed?
425
+ raise NotImplementedError, "subclass responsibility"
426
+ end
427
+
428
+ ##
429
+ # Returns a single character string to print based on the result
430
+ # of the run. One of <tt>"."</tt>, <tt>"F"</tt>,
431
+ # <tt>"E"</tt> or <tt>"S"</tt>.
432
+
433
+ def result_code
434
+ raise NotImplementedError, "subclass responsibility"
435
+ end
436
+
437
+ ##
438
+ # Was this run skipped? See #passed? for more information.
439
+
440
+ def skipped?
441
+ raise NotImplementedError, "subclass responsibility"
442
+ end
443
+ end
444
+
445
+ ##
446
+ # Shared code for anything that can get passed to a Reporter. See
447
+ # Minitest::Test & Minitest::Result.
448
+
449
+ module Reportable
450
+ ##
451
+ # Did this run pass?
452
+ #
453
+ # Note: skipped runs are not considered passing, but they don't
454
+ # cause the process to exit non-zero.
455
+
456
+ def passed?
457
+ not self.failure
458
+ end
459
+
460
+ ##
461
+ # The location identifier of this test. Depends on a method
462
+ # existing called class_name.
463
+
464
+ def location
465
+ loc = " [#{self.failure.location}]" unless passed? or error?
466
+ "#{self.class_name}##{self.name}#{loc}"
467
+ end
468
+
469
+ def class_name # :nodoc:
470
+ raise NotImplementedError, "subclass responsibility"
471
+ end
472
+
473
+ ##
474
+ # Returns ".", "F", or "E" based on the result of the run.
475
+
476
+ def result_code
477
+ self.failure and self.failure.result_code or "."
478
+ end
479
+
480
+ ##
481
+ # Was this run skipped?
482
+
483
+ def skipped?
484
+ self.failure and Skip === self.failure
485
+ end
486
+
487
+ ##
488
+ # Did this run error?
489
+
490
+ def error?
491
+ self.failures.any? { |f| UnexpectedError === f }
492
+ end
493
+ end
494
+
495
+ ##
496
+ # This represents a test result in a clean way that can be
497
+ # marshalled over a wire. Tests can do anything they want to the
498
+ # test instance and can create conditions that cause Marshal.dump to
499
+ # blow up. By using Result.from(a_test) you can be reasonably sure
500
+ # that the test result can be marshalled.
501
+
502
+ class Result < Runnable
503
+ include Minitest::Reportable
504
+
505
+ undef_method :marshal_dump
506
+ undef_method :marshal_load
507
+
508
+ ##
509
+ # The class name of the test result.
510
+
511
+ attr_accessor :klass
512
+
513
+ ##
514
+ # The location of the test method.
515
+
516
+ attr_accessor :source_location
517
+
518
+ ##
519
+ # Create a new test result from a Runnable instance.
520
+
521
+ def self.from runnable
522
+ o = runnable
523
+
524
+ r = self.new o.name
525
+ r.klass = o.class.name
526
+ r.assertions = o.assertions
527
+ r.failures = o.failures.dup
528
+ r.time = o.time
529
+
530
+ r.source_location = o.method(o.name).source_location rescue ["unknown", -1]
531
+
532
+ r
533
+ end
534
+
535
+ def class_name # :nodoc:
536
+ self.klass # for Minitest::Reportable
537
+ end
538
+
539
+ def to_s # :nodoc:
540
+ return location if passed? and not skipped?
541
+
542
+ failures.map { |failure|
543
+ "#{failure.result_label}:\n#{self.location}:\n#{failure.message}\n"
544
+ }.join "\n"
545
+ end
546
+ end
547
+
548
+ ##
549
+ # Defines the API for Reporters. Subclass this and override whatever
550
+ # you want. Go nuts.
551
+
552
+ class AbstractReporter
553
+ include Mutex_m
554
+
555
+ ##
556
+ # Starts reporting on the run.
557
+
558
+ def start
559
+ end
560
+
561
+ ##
562
+ # About to start running a test. This allows a reporter to show
563
+ # that it is starting or that we are in the middle of a test run.
564
+
565
+ def prerecord klass, name
566
+ end
567
+
568
+ ##
569
+ # Output and record the result of the test. Call
570
+ # {result#result_code}[rdoc-ref:Runnable#result_code] to get the
571
+ # result character string. Stores the result of the run if the run
572
+ # did not pass.
573
+
574
+ def record result
575
+ end
576
+
577
+ ##
578
+ # Outputs the summary of the run.
579
+
580
+ def report
581
+ end
582
+
583
+ ##
584
+ # Did this run pass?
585
+
586
+ def passed?
587
+ true
588
+ end
589
+ end
590
+
591
+ class Reporter < AbstractReporter # :nodoc:
592
+ ##
593
+ # The IO used to report.
594
+
595
+ attr_accessor :io
596
+
597
+ ##
598
+ # Command-line options for this run.
599
+
600
+ attr_accessor :options
601
+
602
+ def initialize io = $stdout, options = {} # :nodoc:
603
+ super()
604
+ self.io = io
605
+ self.options = options
606
+ end
607
+ end
608
+
609
+ ##
610
+ # A very simple reporter that prints the "dots" during the run.
611
+ #
612
+ # This is added to the top-level CompositeReporter at the start of
613
+ # the run. If you want to change the output of minitest via a
614
+ # plugin, pull this out of the composite and replace it with your
615
+ # own.
616
+
617
+ class ProgressReporter < Reporter
618
+ def prerecord klass, name #:nodoc:
619
+ if options[:verbose] then
620
+ io.print "%s#%s = " % [klass.name, name]
621
+ io.flush
622
+ end
623
+ end
624
+
625
+ def record result # :nodoc:
626
+ io.print "%.2f s = " % [result.time] if options[:verbose]
627
+ io.print result.result_code
628
+ io.puts if options[:verbose]
629
+ end
630
+ end
631
+
632
+ ##
633
+ # A reporter that gathers statistics about a test run. Does not do
634
+ # any IO because meant to be used as a parent class for a reporter
635
+ # that does.
636
+ #
637
+ # If you want to create an entirely different type of output (eg,
638
+ # CI, HTML, etc), this is the place to start.
639
+ #
640
+ # Example:
641
+ #
642
+ # class JenkinsCIReporter < StatisticsReporter
643
+ # def report
644
+ # super # Needed to calculate some statistics
645
+ #
646
+ # print "<testsuite "
647
+ # print "tests='#{count}' "
648
+ # print "failures='#{failures}' "
649
+ # # Remaining XML...
650
+ # end
651
+ # end
652
+
653
+ class StatisticsReporter < Reporter
654
+ ##
655
+ # Total number of assertions.
656
+
657
+ attr_accessor :assertions
658
+
659
+ ##
660
+ # Total number of test cases.
661
+
662
+ attr_accessor :count
663
+
664
+ ##
665
+ # An +Array+ of test cases that failed or were skipped.
666
+
667
+ attr_accessor :results
668
+
669
+ ##
670
+ # Time the test run started. If available, the monotonic clock is
671
+ # used and this is a +Float+, otherwise it's an instance of
672
+ # +Time+.
673
+
674
+ attr_accessor :start_time
675
+
676
+ ##
677
+ # Test run time. If available, the monotonic clock is used and
678
+ # this is a +Float+, otherwise it's an instance of +Time+.
679
+
680
+ attr_accessor :total_time
681
+
682
+ ##
683
+ # Total number of tests that failed.
684
+
685
+ attr_accessor :failures
686
+
687
+ ##
688
+ # Total number of tests that erred.
689
+
690
+ attr_accessor :errors
691
+
692
+ ##
693
+ # Total number of tests that where skipped.
694
+
695
+ attr_accessor :skips
696
+
697
+ def initialize io = $stdout, options = {} # :nodoc:
698
+ super
699
+
700
+ self.assertions = 0
701
+ self.count = 0
702
+ self.results = []
703
+ self.start_time = nil
704
+ self.total_time = nil
705
+ self.failures = nil
706
+ self.errors = nil
707
+ self.skips = nil
708
+ end
709
+
710
+ def passed? # :nodoc:
711
+ results.all?(&:skipped?)
712
+ end
713
+
714
+ def start # :nodoc:
715
+ self.start_time = Minitest.clock_time
716
+ end
717
+
718
+ def record result # :nodoc:
719
+ self.count += 1
720
+ self.assertions += result.assertions
721
+
722
+ results << result if not result.passed? or result.skipped?
723
+ end
724
+
725
+ ##
726
+ # Report on the tracked statistics.
727
+
728
+ def report
729
+ aggregate = results.group_by { |r| r.failure.class }
730
+ aggregate.default = [] # dumb. group_by should provide this
731
+
732
+ self.total_time = Minitest.clock_time - start_time
733
+ self.failures = aggregate[Assertion].size
734
+ self.errors = aggregate[UnexpectedError].size
735
+ self.skips = aggregate[Skip].size
736
+ end
737
+ end
738
+
739
+ ##
740
+ # A reporter that prints the header, summary, and failure details at
741
+ # the end of the run.
742
+ #
743
+ # This is added to the top-level CompositeReporter at the start of
744
+ # the run. If you want to change the output of minitest via a
745
+ # plugin, pull this out of the composite and replace it with your
746
+ # own.
747
+
748
+ class SummaryReporter < StatisticsReporter
749
+ # :stopdoc:
750
+ attr_accessor :sync
751
+ attr_accessor :old_sync
752
+ # :startdoc:
753
+
754
+ def start # :nodoc:
755
+ super
756
+
757
+ io.puts "Run options: #{options[:args]}"
758
+ io.puts
759
+ io.puts "# Running:"
760
+ io.puts
761
+
762
+ self.sync = io.respond_to? :"sync=" # stupid emacs
763
+ self.old_sync, io.sync = io.sync, true if self.sync
764
+ end
765
+
766
+ def report # :nodoc:
767
+ super
768
+
769
+ io.sync = self.old_sync
770
+
771
+ io.puts unless options[:verbose] # finish the dots
772
+ io.puts
773
+ io.puts statistics
774
+ aggregated_results io
775
+ io.puts summary
776
+ end
777
+
778
+ def statistics # :nodoc:
779
+ "Finished in %.6fs, %.4f runs/s, %.4f assertions/s." %
780
+ [total_time, count / total_time, assertions / total_time]
781
+ end
782
+
783
+ def aggregated_results io # :nodoc:
784
+ filtered_results = results.dup
785
+ filtered_results.reject!(&:skipped?) unless options[:verbose]
786
+
787
+ filtered_results.each_with_index { |result, i|
788
+ io.puts "\n%3d) %s" % [i+1, result]
789
+ }
790
+ io.puts
791
+ io
792
+ end
793
+
794
+ def to_s # :nodoc:
795
+ aggregated_results(StringIO.new(binary_string)).string
796
+ end
797
+
798
+ def summary # :nodoc:
799
+ extra = ""
800
+
801
+ extra = "\n\nYou have skipped tests. Run with --verbose for details." if
802
+ results.any?(&:skipped?) unless options[:verbose] or ENV["MT_NO_SKIP_MSG"]
803
+
804
+ "%d runs, %d assertions, %d failures, %d errors, %d skips%s" %
805
+ [count, assertions, failures, errors, skips, extra]
806
+ end
807
+
808
+ private
809
+
810
+ if '<3'.respond_to? :b
811
+ def binary_string; ''.b; end
812
+ else
813
+ def binary_string; ''.force_encoding(Encoding::ASCII_8BIT); end
814
+ end
815
+ end
816
+
817
+ ##
818
+ # Dispatch to multiple reporters as one.
819
+
820
+ class CompositeReporter < AbstractReporter
821
+ ##
822
+ # The list of reporters to dispatch to.
823
+
824
+ attr_accessor :reporters
825
+
826
+ def initialize *reporters # :nodoc:
827
+ super()
828
+ self.reporters = reporters
829
+ end
830
+
831
+ def io # :nodoc:
832
+ reporters.first.io
833
+ end
834
+
835
+ ##
836
+ # Add another reporter to the mix.
837
+
838
+ def << reporter
839
+ self.reporters << reporter
840
+ end
841
+
842
+ def passed? # :nodoc:
843
+ self.reporters.all?(&:passed?)
844
+ end
845
+
846
+ def start # :nodoc:
847
+ self.reporters.each(&:start)
848
+ end
849
+
850
+ def prerecord klass, name # :nodoc:
851
+ self.reporters.each do |reporter|
852
+ # TODO: remove conditional for minitest 6
853
+ reporter.prerecord klass, name if reporter.respond_to? :prerecord
854
+ end
855
+ end
856
+
857
+ def record result # :nodoc:
858
+ self.reporters.each do |reporter|
859
+ reporter.record result
860
+ end
861
+ end
862
+
863
+ def report # :nodoc:
864
+ self.reporters.each(&:report)
865
+ end
866
+ end
867
+
868
+ ##
869
+ # Represents run failures.
870
+
871
+ class Assertion < Exception
872
+ def error # :nodoc:
873
+ self
874
+ end
875
+
876
+ ##
877
+ # Where was this run before an assertion was raised?
878
+
879
+ def location
880
+ last_before_assertion = ""
881
+ self.backtrace.reverse_each do |s|
882
+ break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
883
+ last_before_assertion = s
884
+ end
885
+ last_before_assertion.sub(/:in .*$/, "")
886
+ end
887
+
888
+ def result_code # :nodoc:
889
+ result_label[0, 1]
890
+ end
891
+
892
+ def result_label # :nodoc:
893
+ "Failure"
894
+ end
895
+ end
896
+
897
+ ##
898
+ # Assertion raised when skipping a run.
899
+
900
+ class Skip < Assertion
901
+ def result_label # :nodoc:
902
+ "Skipped"
903
+ end
904
+ end
905
+
906
+ ##
907
+ # Assertion wrapping an unexpected error that was raised during a run.
908
+
909
+ class UnexpectedError < Assertion
910
+ # TODO: figure out how to use `cause` instead
911
+ attr_accessor :error # :nodoc:
912
+
913
+ def initialize error # :nodoc:
914
+ super "Unexpected exception"
915
+ self.error = error
916
+ end
917
+
918
+ def backtrace # :nodoc:
919
+ self.error.backtrace
920
+ end
921
+
922
+ def message # :nodoc:
923
+ bt = Minitest.filter_backtrace(self.backtrace).join "\n "
924
+ "#{self.error.class}: #{self.error.message}\n #{bt}"
925
+ end
926
+
927
+ def result_label # :nodoc:
928
+ "Error"
929
+ end
930
+ end
931
+
932
+ ##
933
+ # Provides a simple set of guards that you can use in your tests
934
+ # to skip execution if it is not applicable. These methods are
935
+ # mixed into Test as both instance and class methods so you
936
+ # can use them inside or outside of the test methods.
937
+ #
938
+ # def test_something_for_mri
939
+ # skip "bug 1234" if jruby?
940
+ # # ...
941
+ # end
942
+ #
943
+ # if windows? then
944
+ # # ... lots of test methods ...
945
+ # end
946
+
947
+ module Guard
948
+
949
+ ##
950
+ # Is this running on jruby?
951
+
952
+ def jruby? platform = RUBY_PLATFORM
953
+ "java" == platform
954
+ end
955
+
956
+ ##
957
+ # Is this running on maglev?
958
+
959
+ def maglev? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
960
+ where = Minitest.filter_backtrace(caller).first
961
+ where = where.split(/:in /, 2).first # clean up noise
962
+ warn "DEPRECATED: `maglev?` called from #{where}. This will fail in Minitest 6."
963
+ "maglev" == platform
964
+ end
965
+
966
+ ##
967
+ # Is this running on mri?
968
+
969
+ def mri? platform = RUBY_DESCRIPTION
970
+ /^ruby/ =~ platform
971
+ end
972
+
973
+ ##
974
+ # Is this running on macOS?
975
+
976
+ def osx? platform = RUBY_PLATFORM
977
+ /darwin/ =~ platform
978
+ end
979
+
980
+ ##
981
+ # Is this running on rubinius?
982
+
983
+ def rubinius? platform = defined?(RUBY_ENGINE) && RUBY_ENGINE
984
+ where = Minitest.filter_backtrace(caller).first
985
+ where = where.split(/:in /, 2).first # clean up noise
986
+ warn "DEPRECATED: `rubinius?` called from #{where}. This will fail in Minitest 6."
987
+ "rbx" == platform
988
+ end
989
+
990
+ ##
991
+ # Is this running on windows?
992
+
993
+ def windows? platform = RUBY_PLATFORM
994
+ /mswin|mingw/ =~ platform
995
+ end
996
+ end
997
+
998
+ ##
999
+ # The standard backtrace filter for minitest.
1000
+ #
1001
+ # See Minitest.backtrace_filter=.
1002
+
1003
+ class BacktraceFilter
1004
+
1005
+ MT_RE = %r%lib/minitest% #:nodoc:
1006
+
1007
+ ##
1008
+ # Filter +bt+ to something useful. Returns the whole thing if $DEBUG.
1009
+
1010
+ def filter bt
1011
+ return ["No backtrace"] unless bt
1012
+
1013
+ return bt.dup if $DEBUG
1014
+
1015
+ new_bt = bt.take_while { |line| line !~ MT_RE }
1016
+ new_bt = bt.select { |line| line !~ MT_RE } if new_bt.empty?
1017
+ new_bt = bt.dup if new_bt.empty?
1018
+
1019
+ new_bt
1020
+ end
1021
+ end
1022
+
1023
+ self.backtrace_filter = BacktraceFilter.new
1024
+
1025
+ def self.run_one_method klass, method_name # :nodoc:
1026
+ result = klass.new(method_name).run
1027
+ raise "#{klass}#run _must_ return a Result" unless Result === result
1028
+ result
1029
+ end
1030
+
1031
+ # :stopdoc:
1032
+
1033
+ if defined? Process::CLOCK_MONOTONIC # :nodoc:
1034
+ def self.clock_time
1035
+ Process.clock_gettime Process::CLOCK_MONOTONIC
1036
+ end
1037
+ else
1038
+ def self.clock_time
1039
+ Time.now
1040
+ end
1041
+ end
1042
+
1043
+ class Runnable # re-open
1044
+ def self.inherited klass # :nodoc:
1045
+ self.runnables << klass
1046
+ super
1047
+ end
1048
+ end
1049
+
1050
+ # :startdoc:
1051
+ end
1052
+
1053
+ require "minitest/test"