win32-api 1.5.3-universal-mingw32 → 1.6.0-universal-mingw32

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 (358) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +174 -169
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +24 -0
  5. data/README +129 -131
  6. data/Rakefile +185 -182
  7. data/appveyor.yml +42 -0
  8. data/ext/win32/api.c +1092 -1092
  9. data/lib/win32/api.rb +14 -8
  10. data/lib/win32/ruby21_32/win32/api.so +0 -0
  11. data/lib/win32/ruby21_64/win32/api.so +0 -0
  12. data/lib/win32/ruby22_32/win32/api.so +0 -0
  13. data/lib/win32/ruby22_64/win32/api.so +0 -0
  14. data/lib/win32/ruby23_32/win32/api.so +0 -0
  15. data/lib/win32/ruby23_64/win32/api.so +0 -0
  16. data/lib/win32/ruby2_32/win32/api.so +0 -0
  17. data/lib/win32/ruby2_64/win32/api.so +0 -0
  18. data/test/test_win32_api.rb +145 -145
  19. data/vendor/bundle/ruby/2.2.0/bin/devkit +23 -0
  20. data/vendor/bundle/ruby/2.2.0/bin/devkit.bat +6 -0
  21. data/vendor/bundle/ruby/2.2.0/bin/rake +23 -0
  22. data/vendor/bundle/ruby/2.2.0/bin/rake.bat +6 -0
  23. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/CHANGELOG +55 -0
  24. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/LICENSE +339 -0
  25. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/README.md +73 -0
  26. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/Rakefile +8 -0
  27. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/colorize.gemspec +35 -0
  28. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize.rb +12 -0
  29. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize/class_methods.rb +116 -0
  30. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize/instance_methods.rb +135 -0
  31. data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/test/test_colorize.rb +161 -0
  32. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Gemfile +4 -0
  33. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/LICENSE.txt +22 -0
  34. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/README.md +34 -0
  35. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Rakefile +1 -0
  36. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Rspec-example-matchers.txt +184 -0
  37. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/bin/devkit +87 -0
  38. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/devkit.gemspec +27 -0
  39. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit.rb +18 -0
  40. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/core.rb +53 -0
  41. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/identity.rb +78 -0
  42. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/ssh_identity.rb +53 -0
  43. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/version.rb +3 -0
  44. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/core_spec.rb +46 -0
  45. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/identity_spec.rb +1 -0
  46. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/ssh_identity_spec.rb +1 -0
  47. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit_spec.rb +5 -0
  48. data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/spec_helper.rb +8 -0
  49. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/AUTHORS +3 -0
  50. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/COPYING +339 -0
  51. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Changelog.md +415 -0
  52. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Gemfile +9 -0
  53. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/INSTALL +59 -0
  54. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/LICENSE +7 -0
  55. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/README.rdoc +74 -0
  56. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Rakefile +30 -0
  57. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/TODO +6 -0
  58. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/ansi_colors.rb +38 -0
  59. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/asking_for_arrays.rb +18 -0
  60. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/basic_usage.rb +75 -0
  61. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/color_scheme.rb +32 -0
  62. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/get_character.rb +12 -0
  63. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/limit.rb +12 -0
  64. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/menus.rb +65 -0
  65. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/overwrite.rb +19 -0
  66. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/page_and_wrap.rb +322 -0
  67. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/password.rb +7 -0
  68. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/repeat_entry.rb +21 -0
  69. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/trapping_eof.rb +22 -0
  70. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/using_readline.rb +17 -0
  71. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/highline.gemspec +37 -0
  72. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline.rb +1048 -0
  73. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/color_scheme.rb +134 -0
  74. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/compatibility.rb +16 -0
  75. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/import.rb +41 -0
  76. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/menu.rb +381 -0
  77. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/question.rb +480 -0
  78. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/simulate.rb +48 -0
  79. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/style.rb +192 -0
  80. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/version.rb +4 -0
  81. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/setup.rb +1360 -0
  82. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/highline.css +65 -0
  83. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/images/logo.png +0 -0
  84. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/index.html +58 -0
  85. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/string_methods.rb +32 -0
  86. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_color_scheme.rb +96 -0
  87. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_highline.rb +1402 -0
  88. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_import.rb +52 -0
  89. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_menu.rb +439 -0
  90. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_simulator.rb +23 -0
  91. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_string_highline.rb +38 -0
  92. data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_style.rb +578 -0
  93. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/BSDL +22 -0
  94. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/COPYING +57 -0
  95. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/Gemfile +9 -0
  96. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/LEGAL +4 -0
  97. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/README.rdoc +19 -0
  98. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/Rakefile +16 -0
  99. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/benchmarks/bm_yhpg.rb +59 -0
  100. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/benchmarks/helper.rb +8 -0
  101. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert.rb +338 -0
  102. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb +82 -0
  103. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/version.rb +3 -0
  104. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/power_assert.gemspec +23 -0
  105. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/test/helper.rb +10 -0
  106. data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/test/test_power_assert.rb +512 -0
  107. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/CONTRIBUTING.rdoc +38 -0
  108. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/History.rdoc +719 -0
  109. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/MIT-LICENSE +21 -0
  110. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/Manifest.txt +154 -0
  111. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/README.rdoc +157 -0
  112. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/Rakefile +82 -0
  113. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/bin/rake +33 -0
  114. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/command_line_usage.rdoc +158 -0
  115. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/Rakefile1 +38 -0
  116. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/Rakefile2 +35 -0
  117. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/a.c +6 -0
  118. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/b.c +6 -0
  119. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/main.c +11 -0
  120. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/glossary.rdoc +42 -0
  121. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/jamis.rb +591 -0
  122. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/proto_rake.rdoc +127 -0
  123. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rake.1 +141 -0
  124. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rakefile.rdoc +624 -0
  125. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rational.rdoc +151 -0
  126. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.4.14.rdoc +23 -0
  127. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.4.15.rdoc +35 -0
  128. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.0.rdoc +53 -0
  129. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.3.rdoc +78 -0
  130. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.4.rdoc +46 -0
  131. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.6.0.rdoc +141 -0
  132. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.0.rdoc +119 -0
  133. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.1.rdoc +59 -0
  134. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.2.rdoc +121 -0
  135. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.3.rdoc +47 -0
  136. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.0.rdoc +114 -0
  137. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.2.rdoc +165 -0
  138. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.3.rdoc +112 -0
  139. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.4.rdoc +147 -0
  140. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.5.rdoc +53 -0
  141. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.6.rdoc +37 -0
  142. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.7.rdoc +55 -0
  143. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.0.rdoc +112 -0
  144. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.1.rdoc +52 -0
  145. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
  146. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.2.rdoc +49 -0
  147. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.3.rdoc +102 -0
  148. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.4.rdoc +60 -0
  149. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.5.rdoc +55 -0
  150. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.6.rdoc +64 -0
  151. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.0.rdoc +178 -0
  152. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.1.rdoc +58 -0
  153. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.2.rdoc +53 -0
  154. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.3.rdoc +191 -0
  155. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.1.0.rdoc +61 -0
  156. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake.rb +73 -0
  157. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/application.rb +787 -0
  158. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/backtrace.rb +23 -0
  159. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/clean.rb +76 -0
  160. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/cloneable.rb +16 -0
  161. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/compositepublisher.rb +21 -0
  162. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/ftptools.rb +137 -0
  163. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/sshpublisher.rb +60 -0
  164. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/cpu_counter.rb +120 -0
  165. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/default_loader.rb +14 -0
  166. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/dsl_definition.rb +194 -0
  167. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/early_time.rb +21 -0
  168. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_creation_task.rb +24 -0
  169. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_list.rb +436 -0
  170. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_task.rb +46 -0
  171. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_utils.rb +123 -0
  172. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/invocation_chain.rb +56 -0
  173. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/invocation_exception_mixin.rb +16 -0
  174. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/late_time.rb +17 -0
  175. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/linked_list.rb +111 -0
  176. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/loaders/makefile.rb +53 -0
  177. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/multi_task.rb +13 -0
  178. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/name_space.rb +38 -0
  179. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/packagetask.rb +199 -0
  180. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/phony.rb +15 -0
  181. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/private_reader.rb +20 -0
  182. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/promise.rb +99 -0
  183. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/pseudo_status.rb +29 -0
  184. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rake_module.rb +38 -0
  185. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rake_test_loader.rb +22 -0
  186. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  187. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/scope.rb +42 -0
  188. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task.rb +391 -0
  189. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_argument_error.rb +7 -0
  190. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_arguments.rb +102 -0
  191. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_manager.rb +316 -0
  192. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/tasklib.rb +11 -0
  193. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/testtask.rb +204 -0
  194. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/thread_history_display.rb +48 -0
  195. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/thread_pool.rb +163 -0
  196. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/trace_output.rb +22 -0
  197. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/version.rb +7 -0
  198. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/win32.rb +50 -0
  199. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/rakelib/test_times.rake +25 -0
  200. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/file_creation.rb +34 -0
  201. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/helper.rb +134 -0
  202. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/support/rakefile_definitions.rb +476 -0
  203. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/support/ruby_runner.rb +34 -0
  204. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_private_reader.rb +42 -0
  205. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake.rb +40 -0
  206. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_application.rb +659 -0
  207. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_application_options.rb +468 -0
  208. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_backtrace.rb +119 -0
  209. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_clean.rb +61 -0
  210. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_cpu_counter.rb +68 -0
  211. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_definitions.rb +84 -0
  212. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_directory_task.rb +76 -0
  213. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_dsl.rb +40 -0
  214. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_early_time.rb +31 -0
  215. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_creation_task.rb +56 -0
  216. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_list.rb +687 -0
  217. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_list_path_map.rb +15 -0
  218. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_task.rb +197 -0
  219. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_utils.rb +318 -0
  220. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_ftp_file.rb +74 -0
  221. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_functional.rb +484 -0
  222. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_invocation_chain.rb +64 -0
  223. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_late_time.rb +18 -0
  224. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_linked_list.rb +84 -0
  225. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_makefile_loader.rb +46 -0
  226. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_multi_task.rb +64 -0
  227. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_name_space.rb +57 -0
  228. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_package_task.rb +79 -0
  229. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map.rb +168 -0
  230. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map_explode.rb +34 -0
  231. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map_partial.rb +18 -0
  232. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_pseudo_status.rb +21 -0
  233. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_rake_test_loader.rb +20 -0
  234. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_reduce_compat.rb +26 -0
  235. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_require.rb +40 -0
  236. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_rules.rb +388 -0
  237. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_scope.rb +44 -0
  238. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task.rb +430 -0
  239. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_argument_parsing.rb +119 -0
  240. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_arguments.rb +134 -0
  241. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_manager.rb +178 -0
  242. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_manager_argument_resolution.rb +19 -0
  243. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_with_arguments.rb +172 -0
  244. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_test_task.rb +130 -0
  245. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_thread_pool.rb +145 -0
  246. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_top_level_functions.rb +71 -0
  247. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_win32.rb +72 -0
  248. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_thread_history_display.rb +101 -0
  249. data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_trace_output.rb +52 -0
  250. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/COPYING +64 -0
  251. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/GPL +339 -0
  252. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/LGPL +502 -0
  253. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/PSFL +271 -0
  254. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/README.md +101 -0
  255. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/Rakefile +71 -0
  256. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test-unit.rb +34 -0
  257. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit.rb +505 -0
  258. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/assertion-failed-error.rb +25 -0
  259. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/assertions.rb +2218 -0
  260. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/attribute-matcher.rb +26 -0
  261. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/attribute.rb +158 -0
  262. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/auto-runner-loader.rb +17 -0
  263. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/autorunner.rb +536 -0
  264. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/code-snippet-fetcher.rb +58 -0
  265. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector.rb +73 -0
  266. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/descendant.rb +19 -0
  267. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/dir.rb +108 -0
  268. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/load.rb +202 -0
  269. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/objectspace.rb +34 -0
  270. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/xml.rb +249 -0
  271. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/color-scheme.rb +198 -0
  272. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/color.rb +134 -0
  273. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/data.rb +262 -0
  274. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/diff.rb +746 -0
  275. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/error.rb +158 -0
  276. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/exception-handler.rb +82 -0
  277. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/failure.rb +169 -0
  278. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/fault-location-detector.rb +100 -0
  279. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/fixture.rb +295 -0
  280. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/notification.rb +136 -0
  281. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/omission.rb +195 -0
  282. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/pending.rb +154 -0
  283. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/priority.rb +192 -0
  284. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/console.rb +59 -0
  285. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/emacs.rb +8 -0
  286. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/xml.rb +15 -0
  287. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/test-suite-creator.rb +89 -0
  288. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testcase.rb +811 -0
  289. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testresult.rb +132 -0
  290. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testsuite.rb +175 -0
  291. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/console/outputlevel.rb +15 -0
  292. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/console/testrunner.rb +693 -0
  293. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  294. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunner.rb +53 -0
  295. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunnermediator.rb +114 -0
  296. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  297. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/xml/testrunner.rb +224 -0
  298. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/backtracefilter.rb +59 -0
  299. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/method-owner-finder.rb +28 -0
  300. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/observable.rb +90 -0
  301. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/output.rb +31 -0
  302. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/procwrapper.rb +48 -0
  303. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/version.rb +5 -0
  304. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/adder.rb +13 -0
  305. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/subtracter.rb +12 -0
  306. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_adder.rb +20 -0
  307. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_subtracter.rb +20 -0
  308. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_user.rb +23 -0
  309. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test-descendant.rb +178 -0
  310. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test-load.rb +442 -0
  311. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test_dir.rb +406 -0
  312. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test_objectspace.rb +100 -0
  313. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header-label.csv +3 -0
  314. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header-label.tsv +3 -0
  315. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header.csv +3 -0
  316. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header.tsv +3 -0
  317. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/no-header.csv +2 -0
  318. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/no-header.tsv +2 -0
  319. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/plus.csv +3 -0
  320. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/run-test.rb +22 -0
  321. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-assertions.rb +2160 -0
  322. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-attribute-matcher.rb +38 -0
  323. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-attribute.rb +123 -0
  324. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-code-snippet.rb +37 -0
  325. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-color-scheme.rb +82 -0
  326. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-color.rb +47 -0
  327. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-data.rb +303 -0
  328. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-diff.rb +518 -0
  329. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-emacs-runner.rb +60 -0
  330. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-error.rb +26 -0
  331. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-failure.rb +33 -0
  332. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-fault-location-detector.rb +163 -0
  333. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-fixture.rb +713 -0
  334. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-notification.rb +33 -0
  335. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-omission.rb +81 -0
  336. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-pending.rb +70 -0
  337. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-priority.rb +173 -0
  338. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-case.rb +1171 -0
  339. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-result.rb +113 -0
  340. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-suite-creator.rb +97 -0
  341. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-suite.rb +150 -0
  342. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/testunit-test-util.rb +31 -0
  343. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/ui/test_testrunmediator.rb +20 -0
  344. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test-method-owner-finder.rb +38 -0
  345. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test-output.rb +11 -0
  346. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_backtracefilter.rb +52 -0
  347. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_observable.rb +102 -0
  348. data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_procwrapper.rb +36 -0
  349. data/vendor/bundle/ruby/2.2.0/specifications/colorize-0.7.7.gemspec +38 -0
  350. data/vendor/bundle/ruby/2.2.0/specifications/devkit-0.1.0.gemspec +46 -0
  351. data/vendor/bundle/ruby/2.2.0/specifications/highline-1.7.8.gemspec +37 -0
  352. data/vendor/bundle/ruby/2.2.0/specifications/power_assert-0.3.0.gemspec +41 -0
  353. data/vendor/bundle/ruby/2.2.0/specifications/rake-11.1.2.gemspec +43 -0
  354. data/vendor/bundle/ruby/2.2.0/specifications/test-unit-3.1.9.gemspec +47 -0
  355. data/win32-api.gemspec +27 -27
  356. metadata +345 -5
  357. data/lib/win32/ruby18/win32/api.so +0 -0
  358. data/lib/win32/ruby19/win32/api.so +0 -0
@@ -0,0 +1,65 @@
1
+ body {
2
+ margin: 0;
3
+ padding: 0;
4
+ text-align: center;
5
+ background: #abc;
6
+ font: 13px Trebuchet MS, Lucida Sans Unicode, Arial, sans-serif;
7
+ }
8
+
9
+ #container {
10
+ margin: 0 auto;
11
+ margin-top: 10px;
12
+ position: relative;
13
+ width: 785px;
14
+ background: #fff repeat;
15
+ padding-top: 20px;
16
+ }
17
+
18
+ #container #header {
19
+ padding-top: 20px;
20
+ height: 141px;
21
+ width: 785px;
22
+ background: url(images/logo.png) center no-repeat;
23
+ }
24
+
25
+ #container #content {
26
+ text-align: left;
27
+ margin-left: 230px;
28
+ width: 500px;
29
+ }
30
+
31
+ #container #sidebar {
32
+ text-align: left;
33
+ position: absolute;
34
+ top: 181px;
35
+ left: 0;
36
+ width: 170px;
37
+ margin-right: 25px;
38
+ }
39
+
40
+ #container #footer {
41
+ font: 9px Arial;
42
+ padding: 4px;
43
+ border-top: 1px solid;
44
+ color: #aaa;
45
+ }
46
+
47
+ ul {
48
+ list-style: none;
49
+ }
50
+
51
+ li {
52
+ border-bottom: 1px solid #e8e8e8;
53
+ padding-top: 10px;
54
+ }
55
+
56
+ a {
57
+ text-decoration: none;
58
+ color: #15528a;
59
+ }
60
+
61
+ pre {
62
+ padding: 5px;
63
+ padding-left: 20px;
64
+ font: 11px Courier;
65
+ }
@@ -0,0 +1,58 @@
1
+ <html>
2
+ <head>
3
+ <title> HighLine </title>
4
+ <style type="text/css"> @import url(highline.css); </style>
5
+ </head>
6
+ <body>
7
+ <div id="container">
8
+ <div id="header"></div>
9
+ <div id="content">
10
+ <h2>HighLine is about&#8230;</h2>
11
+
12
+
13
+ <h3>Saving time.</h3>
14
+
15
+
16
+ <p>Command line interfaces are meant to be easy. So why shouldn&#8217;t building
17
+ them be easy, too? HighLine provides a solid toolset to help you get
18
+ the job done cleanly so you can focus on the real task at hand,
19
+ <em>your task.</em></p>
20
+
21
+
22
+ <h3>Clean and intuitive design.</h3>
23
+
24
+
25
+ <p>Want to get a taste for how HighLine is used? Take a look at this simple
26
+ example, which asks a user for a zip code, automatically does validation,
27
+ and returns the result:</p>
28
+
29
+
30
+ <pre><code>zip = ask("Zip? ") { |q| q.validate = /\A\d{5}(?:-?\d{4})?\Z/ }</code></pre>
31
+
32
+
33
+ <h3>Hassle-free Installation.</h3>
34
+
35
+
36
+ <p>Installation is easy via RubyGems. Simply enter the command:</p>
37
+
38
+
39
+ <pre><code>sudo gem install highline</code></pre>
40
+
41
+
42
+ <p>and you&#8217;ll be on your way! Of course, manual installation is an option,
43
+ too.</p>
44
+ </div>
45
+ <div id="sidebar">
46
+ <ul>
47
+ <li><a href="http://rubyforge.org/projects/highline">Project Page</a></li>
48
+ <li><a href="http://highline.rubyforge.org/doc">Documentation</a></li>
49
+ <li><a href="https://github.com/JEG2/highline">Source</a></li>
50
+ <li><a href="mailto:james@grayproductions.net">Contact</a></li>
51
+ </ul>
52
+ </div>
53
+ <div id="footer">
54
+ Created by James Edward Gray II and Gregory Brown
55
+ </div>
56
+ </div>
57
+ </body>
58
+ </html>
@@ -0,0 +1,32 @@
1
+ # string_methods.rb
2
+ #
3
+ # Created by Richard LeBer 2011-06-27
4
+ #
5
+ # This is Free Software. See LICENSE and COPYING for details.
6
+ #
7
+ # String class convenience methods
8
+
9
+ module StringMethods
10
+ def test_color
11
+ assert_equal("\e[34mstring\e[0m", @string.color(:blue))
12
+ assert_equal("\e[1m\e[47mstring\e[0m", @string.color(:bold,:on_white))
13
+ assert_equal("\e[45mstring\e[0m", @string.on(:magenta))
14
+ assert_equal("\e[36mstring\e[0m", @string.cyan)
15
+ assert_equal("\e[41m\e[5mstring\e[0m\e[0m", @string.blink.on_red)
16
+ assert_equal("\e[38;5;137mstring\e[0m", @string.color(:rgb_906030))
17
+ assert_equal("\e[38;5;101mstring\e[0m", @string.rgb('606030'))
18
+ assert_equal("\e[38;5;107mstring\e[0m", @string.rgb('60','90','30'))
19
+ assert_equal("\e[38;5;107mstring\e[0m", @string.rgb(96,144,48))
20
+ assert_equal("\e[38;5;173mstring\e[0m", @string.rgb_c06030)
21
+ assert_equal("\e[48;5;137mstring\e[0m", @string.color(:on_rgb_906030))
22
+ assert_equal("\e[48;5;101mstring\e[0m", @string.on_rgb('606030'))
23
+ assert_equal("\e[48;5;107mstring\e[0m", @string.on_rgb('60','90','30'))
24
+ assert_equal("\e[48;5;107mstring\e[0m", @string.on_rgb(96,144,48))
25
+ assert_equal("\e[48;5;173mstring\e[0m", @string.on_rgb_c06030)
26
+ end
27
+
28
+ def test_uncolor
29
+ colored_string = HighLine::String("\e[38;5;137mstring\e[0m")
30
+ assert_equal "string", colored_string.uncolor
31
+ end
32
+ end
@@ -0,0 +1,96 @@
1
+ # tc_color_scheme.rb
2
+ #
3
+ # Created by Jeremy Hinegardner on 2007-01-24.
4
+ # Copyright 2007 Jeremy Hinegardner. All rights reserved.
5
+ #
6
+ # This is Free Software. See LICENSE and COPYING for details.
7
+
8
+ require "test/unit"
9
+
10
+ require "highline"
11
+ require "stringio"
12
+
13
+ class TestColorScheme < Test::Unit::TestCase
14
+ def setup
15
+ @input = StringIO.new
16
+ @output = StringIO.new
17
+ @terminal = HighLine.new(@input, @output)
18
+
19
+ @old_color_scheme = HighLine.color_scheme
20
+ end
21
+
22
+ def teardown
23
+ HighLine.color_scheme = @old_color_scheme
24
+ end
25
+
26
+ def test_using_color_scheme
27
+ assert_equal(false,HighLine.using_color_scheme?)
28
+
29
+ HighLine.color_scheme = HighLine::ColorScheme.new
30
+ assert_equal(true,HighLine.using_color_scheme?)
31
+ end
32
+
33
+ def test_scheme
34
+ HighLine.color_scheme = HighLine::SampleColorScheme.new
35
+
36
+ @terminal.say("This should be <%= color('warning yellow', :warning) %>.")
37
+ assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
38
+ @output.rewind
39
+
40
+ @terminal.say("This should be <%= color('warning yellow', 'warning') %>.")
41
+ assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
42
+ @output.rewind
43
+
44
+ @terminal.say("This should be <%= color('warning yellow', 'WarNing') %>.")
45
+ assert_equal("This should be \e[1m\e[33mwarning yellow\e[0m.\n",@output.string)
46
+ @output.rewind
47
+
48
+ # Check that keys are available, and as expected
49
+ assert_equal ["critical", "error", "warning", "notice", "info", "debug", "row_even", "row_odd"].sort,
50
+ HighLine.color_scheme.keys.sort
51
+
52
+ # Color scheme doesn't care if we use symbols or strings, and is case-insensitive
53
+ warning1 = HighLine.color_scheme[:warning]
54
+ warning2 = HighLine.color_scheme["warning"]
55
+ warning3 = HighLine.color_scheme[:wArning]
56
+ warning4 = HighLine.color_scheme["warniNg"]
57
+ assert_instance_of HighLine::Style, warning1
58
+ assert_instance_of HighLine::Style, warning2
59
+ assert_instance_of HighLine::Style, warning3
60
+ assert_instance_of HighLine::Style, warning4
61
+ assert_equal warning1, warning2
62
+ assert_equal warning1, warning3
63
+ assert_equal warning1, warning4
64
+
65
+ # Nonexistent keys return nil
66
+ assert_nil HighLine.color_scheme[:nonexistent]
67
+
68
+ # Same as above, for definitions
69
+ defn1 = HighLine.color_scheme.definition(:warning)
70
+ defn2 = HighLine.color_scheme.definition("warning")
71
+ defn3 = HighLine.color_scheme.definition(:wArning)
72
+ defn4 = HighLine.color_scheme.definition("warniNg")
73
+ assert_instance_of Array, defn1
74
+ assert_instance_of Array, defn2
75
+ assert_instance_of Array, defn3
76
+ assert_instance_of Array, defn4
77
+ assert_equal [:bold, :yellow], defn1
78
+ assert_equal [:bold, :yellow], defn2
79
+ assert_equal [:bold, :yellow], defn3
80
+ assert_equal [:bold, :yellow], defn4
81
+ assert_nil HighLine.color_scheme.definition(:nonexistent)
82
+
83
+ color_scheme_hash = HighLine.color_scheme.to_hash
84
+ assert_instance_of Hash, color_scheme_hash
85
+ assert_equal ["critical", "error", "warning", "notice", "info", "debug", "row_even", "row_odd"].sort,
86
+ color_scheme_hash.keys.sort
87
+ assert_instance_of Array, HighLine.color_scheme.definition(:warning)
88
+ assert_equal [:bold, :yellow], HighLine.color_scheme.definition(:warning)
89
+
90
+ # turn it back off, should raise an exception
91
+ HighLine.color_scheme = @old_color_scheme
92
+ assert_raises(NameError) {
93
+ @terminal.say("This should be <%= color('nothing at all', :error) %>.")
94
+ }
95
+ end
96
+ end
@@ -0,0 +1,1402 @@
1
+ # encoding: utf-8
2
+ # tc_highline.rb
3
+ #
4
+ # Created by James Edward Gray II on 2005-04-26.
5
+ # Copyright 2005 Gray Productions. All rights reserved.
6
+ #
7
+ # This is Free Software. See LICENSE and COPYING for details.
8
+
9
+ require "test/unit"
10
+
11
+ require "highline"
12
+ require "stringio"
13
+ require "readline"
14
+ require "tempfile"
15
+
16
+ if HighLine::CHARACTER_MODE == "Win32API"
17
+ class HighLine
18
+ # Override Windows' character reading so it's not tied to STDIN.
19
+ def get_character( input = STDIN )
20
+ input.getc
21
+ end
22
+ end
23
+ end
24
+
25
+ class TestHighLine < Test::Unit::TestCase
26
+ def setup
27
+ @input = StringIO.new
28
+ @output = StringIO.new
29
+ @terminal = HighLine.new(@input, @output)
30
+ end
31
+
32
+ def test_agree
33
+ @input << "y\nyes\nYES\nHell no!\nNo\n"
34
+ @input.rewind
35
+
36
+ assert_equal(true, @terminal.agree("Yes or no? "))
37
+ assert_equal(true, @terminal.agree("Yes or no? "))
38
+ assert_equal(true, @terminal.agree("Yes or no? "))
39
+ assert_equal(false, @terminal.agree("Yes or no? "))
40
+
41
+ @input.truncate(@input.rewind)
42
+ @input << "yellow"
43
+ @input.rewind
44
+
45
+ assert_equal(true, @terminal.agree("Yes or no? ", :getc))
46
+ end
47
+
48
+ def test_agree_with_block
49
+ @input << "\n\n"
50
+ @input.rewind
51
+
52
+ assert_equal(true, @terminal.agree("Yes or no? ") { |q| q.default = "y" })
53
+ assert_equal(false, @terminal.agree("Yes or no? ") { |q| q.default = "n" })
54
+ end
55
+
56
+ def test_ask
57
+ name = "James Edward Gray II"
58
+ @input << name << "\n"
59
+ @input.rewind
60
+
61
+ assert_equal(name, @terminal.ask("What is your name? "))
62
+
63
+ assert_raise(EOFError) { @terminal.ask("Any input left? ") }
64
+ end
65
+
66
+ def test_ask_string
67
+ name = "James Edward Gray II"
68
+ @input << name << "\n"
69
+ @input.rewind
70
+
71
+ assert_equal(name, @terminal.ask("What is your name? ", String))
72
+
73
+ assert_raise(EOFError) { @terminal.ask("Any input left? ", String) }
74
+ end
75
+
76
+ def test_indent
77
+ text = "Testing...\n"
78
+ @terminal.indent_level=1
79
+ @terminal.say(text)
80
+ assert_equal(' '*3+text, @output.string)
81
+
82
+ @output.truncate(@output.rewind)
83
+ @terminal.indent_level=3
84
+ @terminal.say(text)
85
+ assert_equal(' '*9+text, @output.string)
86
+
87
+ @output.truncate(@output.rewind)
88
+ @terminal.indent_level=0
89
+ @terminal.indent_size=5
90
+ @terminal.indent(2, text)
91
+ assert_equal(' '*10+text, @output.string)
92
+
93
+ @output.truncate(@output.rewind)
94
+ @terminal.indent_size=4
95
+ @terminal.indent {
96
+ @terminal.say(text)
97
+ }
98
+ assert_equal(' '*4+text, @output.string)
99
+
100
+ @output.truncate(@output.rewind)
101
+ @terminal.indent_size=2
102
+ @terminal.indent(3) { |t|
103
+ t.say(text)
104
+ }
105
+ assert_equal(' '*6+text, @output.string)
106
+
107
+ @output.truncate(@output.rewind)
108
+ @terminal.indent { |t|
109
+ t.indent {
110
+ t.indent {
111
+ t.indent { |tt|
112
+ tt.say(text)
113
+ }
114
+ }
115
+ }
116
+ }
117
+ assert_equal(' '*8+text, @output.string)
118
+
119
+ text = "Multi\nLine\nIndentation\n"
120
+ indent = ' '*4
121
+ @terminal.indent_level=2
122
+ @output.truncate(@output.rewind)
123
+ @terminal.say(text)
124
+ assert_equal("#{indent}Multi\n#{indent}Line\n#{indent}Indentation\n", @output.string)
125
+
126
+ @output.truncate(@output.rewind)
127
+ @terminal.multi_indent = false
128
+ @terminal.say(text)
129
+ assert_equal("#{indent}Multi\nLine\nIndentation\n", @output.string)
130
+
131
+ @output.truncate(@output.rewind)
132
+ @terminal.indent(0, text, true)
133
+ assert_equal("#{indent}Multi\n#{indent}Line\n#{indent}Indentation\n", @output.string)
134
+ end
135
+
136
+ def test_newline
137
+ @terminal.newline
138
+ @terminal.newline
139
+ assert_equal("\n\n", @output.string)
140
+ end
141
+
142
+ def test_bug_fixes
143
+ # auto-complete bug
144
+ @input << "ruby\nRuby\n"
145
+ @input.rewind
146
+
147
+ languages = [:Perl, :Python, :Ruby]
148
+ answer = @terminal.ask( "What is your favorite programming language? ",
149
+ languages )
150
+ assert_equal(languages.last, answer)
151
+
152
+ @input.truncate(@input.rewind)
153
+ @input << "ruby\n"
154
+ @input.rewind
155
+
156
+ answer = @terminal.ask( "What is your favorite programming language? ",
157
+ languages ) do |q|
158
+ q.case = :capitalize
159
+ end
160
+ assert_equal(languages.last, answer)
161
+
162
+ # poor auto-complete error message
163
+ @input.truncate(@input.rewind)
164
+ @input << "lisp\nruby\n"
165
+ @input.rewind
166
+ @output.truncate(@output.rewind)
167
+
168
+ answer = @terminal.ask( "What is your favorite programming language? ",
169
+ languages ) do |q|
170
+ q.case = :capitalize
171
+ end
172
+ assert_equal(languages.last, answer)
173
+ assert_equal( "What is your favorite programming language? " +
174
+ "You must choose one of [Perl, Python, Ruby].\n" +
175
+ "? ", @output.string )
176
+ end
177
+
178
+ def test_case_changes
179
+ @input << "jeg2\n"
180
+ @input.rewind
181
+
182
+ answer = @terminal.ask("Enter your initials ") do |q|
183
+ q.case = :up
184
+ end
185
+ assert_equal("JEG2", answer)
186
+
187
+ @input.truncate(@input.rewind)
188
+ @input << "cRaZY\n"
189
+ @input.rewind
190
+
191
+ answer = @terminal.ask("Enter a search string: ") do |q|
192
+ q.case = :down
193
+ end
194
+ assert_equal("crazy", answer)
195
+ end
196
+
197
+ def test_character_echo
198
+ @input << "password\r"
199
+ @input.rewind
200
+
201
+ answer = @terminal.ask("Please enter your password: ") do |q|
202
+ q.echo = "*"
203
+ end
204
+ assert_equal("password", answer)
205
+ assert_equal("Please enter your password: ********\n", @output.string)
206
+
207
+ @input.truncate(@input.rewind)
208
+ @input << "2"
209
+ @input.rewind
210
+ @output.truncate(@output.rewind)
211
+
212
+ answer = @terminal.ask( "Select an option (1, 2 or 3): ",
213
+ Integer ) do |q|
214
+ q.echo = "*"
215
+ q.character = true
216
+ end
217
+ assert_equal(2, answer)
218
+ assert_equal("Select an option (1, 2 or 3): *\n", @output.string)
219
+ end
220
+
221
+ def test_backspace_does_not_enter_prompt
222
+ @input << "\b\b"
223
+ @input.rewind
224
+ answer = @terminal.ask("Please enter your password: ") do |q|
225
+ q.echo = "*"
226
+ end
227
+ assert_equal("", answer)
228
+ assert_equal("Please enter your password: \n", @output.string)
229
+ end
230
+
231
+ def test_after_some_chars_backspace_does_not_enter_prompt_when_ascii
232
+ @input << "apple\b\b\b\b\b\b\b\b\b\b"
233
+ @input.rewind
234
+ answer = @terminal.ask("Please enter your password: ") do |q|
235
+ q.echo = "*"
236
+ end
237
+ assert_equal("", answer)
238
+ assert_equal("apple".size, @output.string.count("\b"))
239
+ end
240
+
241
+ def test_after_some_chars_backspace_does_not_enter_prompt_when_utf8
242
+ @input << "maçã\b\b\b\b\b\b\b\b"
243
+ @input.rewind
244
+ answer = @terminal.ask("Please enter your password: ") do |q|
245
+ q.echo = "*"
246
+ end
247
+ assert_equal("", answer)
248
+ assert_equal("maçã".size, @output.string.count("\b"))
249
+ end
250
+
251
+ def test_readline_mode
252
+ # Rubinius seems to be ignoring Readline input
253
+ # and output assignments. This ruins testing.
254
+ # but it doesn't mean readline is not working
255
+ # properly on rubinius.
256
+
257
+ return if RUBY_ENGINE == "rbx"
258
+
259
+ # Creating Tempfiles here because Readline.input
260
+ # and Readline.output only accepts a File object
261
+ # as argument (not any duck type as StringIO)
262
+
263
+ temp_stdin = Tempfile.new "temp_stdin"
264
+ temp_stdout = Tempfile.new "temp_stdout"
265
+
266
+ Readline.input = @input = File.open(temp_stdin.path, 'w+')
267
+ Readline.output = @output = File.open(temp_stdout.path, 'w+')
268
+
269
+ @terminal = HighLine.new(@input, @output)
270
+
271
+ @input << "any input\n"
272
+ @input.rewind
273
+
274
+ answer = @terminal.ask("Prompt: ") do |q|
275
+ q.readline = true
276
+ end
277
+
278
+ @output.rewind
279
+ output = @output.read
280
+
281
+ assert_equal "any input", answer
282
+ assert_match "Prompt: any input\n", output
283
+
284
+ @input.close
285
+ @output.close
286
+ Readline.input = STDIN
287
+ Readline.output = STDOUT
288
+ end
289
+
290
+ def test_readline_mode_with_limit_set
291
+ temp_stdin = Tempfile.new "temp_stdin"
292
+ temp_stdout = Tempfile.new "temp_stdout"
293
+
294
+ Readline.input = @input = File.open(temp_stdin.path, 'w+')
295
+ Readline.output = @output = File.open(temp_stdout.path, 'w+')
296
+
297
+ @terminal = HighLine.new(@input, @output)
298
+
299
+ @input << "any input\n"
300
+ @input.rewind
301
+
302
+ answer = @terminal.ask("Prompt: ") do |q|
303
+ q.limit = 50
304
+ q.readline = true
305
+ end
306
+
307
+ @output.rewind
308
+ output = @output.read
309
+
310
+ assert_equal "any input", answer
311
+ assert_equal "Prompt: any input\n", output
312
+
313
+ @input.close
314
+ @output.close
315
+ Readline.input = STDIN
316
+ Readline.output = STDOUT
317
+ end
318
+
319
+ def test_readline_on_non_echo_question_has_prompt
320
+ @input << "you can't see me"
321
+ @input.rewind
322
+ answer = @terminal.ask("Please enter some hidden text: ") do |q|
323
+ q.readline = true
324
+ q.echo = "*"
325
+ end
326
+ assert_equal("you can't see me", answer)
327
+ assert_equal("Please enter some hidden text: ****************\n", @output.string)
328
+ end
329
+
330
+ def test_character_reading
331
+ # WARNING: This method does NOT cover Unix and Windows savvy testing!
332
+ @input << "12345"
333
+ @input.rewind
334
+
335
+ answer = @terminal.ask("Enter a single digit: ", Integer) do |q|
336
+ q.character = :getc
337
+ end
338
+ assert_equal(1, answer)
339
+ end
340
+
341
+ def test_frozen_statement
342
+ @terminal.say('This is a frozen statement'.freeze)
343
+ assert_equal("This is a frozen statement\n", @output.string)
344
+ end
345
+
346
+ def test_color
347
+ @terminal.say("This should be <%= BLUE %>blue<%= CLEAR %>!")
348
+ assert_equal("This should be \e[34mblue\e[0m!\n", @output.string)
349
+
350
+ @output.truncate(@output.rewind)
351
+
352
+ @terminal.say( "This should be " +
353
+ "<%= BOLD + ON_WHITE %>bold on white<%= CLEAR %>!" )
354
+ assert_equal( "This should be \e[1m\e[47mbold on white\e[0m!\n",
355
+ @output.string )
356
+
357
+ @output.truncate(@output.rewind)
358
+
359
+ @terminal.say("This should be <%= color('cyan', CYAN) %>!")
360
+ assert_equal("This should be \e[36mcyan\e[0m!\n", @output.string)
361
+
362
+ @output.truncate(@output.rewind)
363
+
364
+ @terminal.say( "This should be " +
365
+ "<%= color('blinking on red', :blink, :on_red) %>!" )
366
+ assert_equal( "This should be \e[5m\e[41mblinking on red\e[0m!\n",
367
+ @output.string )
368
+
369
+ @output.truncate(@output.rewind)
370
+
371
+ @terminal.say("This should be <%= NONE %>none<%= CLEAR %>!")
372
+ assert_equal("This should be \e[38mnone\e[0m!\n", @output.string)
373
+
374
+ @output.truncate(@output.rewind)
375
+
376
+ @terminal.say("This should be <%= RGB_906030 %>rgb_906030<%= CLEAR %>!")
377
+ assert_equal("This should be \e[38;5;137mrgb_906030\e[0m!\n", @output.string)
378
+
379
+ @output.truncate(@output.rewind)
380
+
381
+ @terminal.say("This should be <%= ON_RGB_C06030 %>on_rgb_c06030<%= CLEAR %>!")
382
+ assert_equal("This should be \e[48;5;173mon_rgb_c06030\e[0m!\n", @output.string)
383
+
384
+ @output.truncate(@output.rewind)
385
+
386
+ # Does class method work, too?
387
+ @terminal.say("This should be <%= HighLine.color('reverse underlined magenta', :reverse, :underline, :magenta) %>!")
388
+ assert_equal( "This should be \e[7m\e[4m\e[35mreverse underlined magenta\e[0m!\n",
389
+ @output.string )
390
+
391
+ @output.truncate(@output.rewind)
392
+
393
+ # turn off color
394
+ old_setting = HighLine.use_color?
395
+ assert_nothing_raised(Exception) { HighLine.use_color = false }
396
+ @terminal.say("This should be <%= color('cyan', CYAN) %>!")
397
+ assert_equal("This should be cyan!\n", @output.string)
398
+ HighLine.use_color = old_setting
399
+ end
400
+
401
+ def test_uncolor
402
+ # instance method
403
+ assert_equal( "This should be reverse underlined magenta!\n",
404
+ @terminal.uncolor("This should be \e[7m\e[4m\e[35mreverse underlined magenta\e[0m!\n")
405
+ )
406
+
407
+ @output.truncate(@output.rewind)
408
+
409
+ # class method
410
+ assert_equal( "This should be reverse underlined magenta!\n",
411
+ HighLine.uncolor("This should be \e[7m\e[4m\e[35mreverse underlined magenta\e[0m!\n")
412
+ )
413
+
414
+ @output.truncate(@output.rewind)
415
+
416
+ # RGB color
417
+ assert_equal( "This should be rgb_906030!\n",
418
+ @terminal.uncolor("This should be \e[38;5;137mrgb_906030\e[0m!\n")
419
+ )
420
+ end
421
+
422
+ def test_grey_is_the_same_of_gray
423
+ @terminal.say("<%= GRAY %>")
424
+ gray_code = @output.string.dup
425
+ @output.truncate(@output.rewind)
426
+
427
+ @terminal.say("<%= GREY %>")
428
+ grey_code = @output.string.dup
429
+ @output.truncate(@output.rewind)
430
+
431
+ assert_equal gray_code, grey_code
432
+ end
433
+
434
+ def test_light_is_the_same_as_bright
435
+ @terminal.say("<%= BRIGHT_BLUE %>")
436
+ bright_blue_code = @output.string.dup
437
+ @output.truncate(@output.rewind)
438
+
439
+ @terminal.say("<%= LIGHT_BLUE %>")
440
+ light_blue_code = @output.string.dup
441
+ @output.truncate(@output.rewind)
442
+
443
+ assert_equal bright_blue_code, light_blue_code
444
+ end
445
+
446
+ def test_confirm
447
+ @input << "junk.txt\nno\nsave.txt\ny\n"
448
+ @input.rewind
449
+
450
+ answer = @terminal.ask("Enter a filename: ") do |q|
451
+ q.confirm = "Are you sure you want to overwrite <%= @answer %>? "
452
+ q.responses[:ask_on_error] = :question
453
+ end
454
+ assert_equal("save.txt", answer)
455
+ assert_equal( "Enter a filename: " +
456
+ "Are you sure you want to overwrite junk.txt? " +
457
+ "Enter a filename: " +
458
+ "Are you sure you want to overwrite save.txt? ",
459
+ @output.string )
460
+
461
+ @input.truncate(@input.rewind)
462
+ @input << "junk.txt\nyes\nsave.txt\nn\n"
463
+ @input.rewind
464
+ @output.truncate(@output.rewind)
465
+
466
+ answer = @terminal.ask("Enter a filename: ") do |q|
467
+ q.confirm = "Are you sure you want to overwrite <%= @answer %>? "
468
+ end
469
+ assert_equal("junk.txt", answer)
470
+ assert_equal( "Enter a filename: " +
471
+ "Are you sure you want to overwrite junk.txt? ",
472
+ @output.string )
473
+ end
474
+
475
+ def test_defaults
476
+ @input << "\nNo Comment\n"
477
+ @input.rewind
478
+
479
+ answer = @terminal.ask("Are you sexually active? ") do |q|
480
+ q.validate = /\Ay(?:es)?|no?|no comment\Z/i
481
+ end
482
+ assert_equal("No Comment", answer)
483
+
484
+ @input.truncate(@input.rewind)
485
+ @input << "\nYes\n"
486
+ @input.rewind
487
+ @output.truncate(@output.rewind)
488
+
489
+ answer = @terminal.ask("Are you sexually active? ") do |q|
490
+ q.default = "No Comment"
491
+ q.validate = /\Ay(?:es)?|no?|no comment\Z/i
492
+ end
493
+ assert_equal("No Comment", answer)
494
+ assert_equal( "Are you sexually active? |No Comment| ",
495
+ @output.string )
496
+ end
497
+
498
+ def test_default_with_String
499
+ @input << "\n"
500
+ @input.rewind
501
+
502
+ answer = @terminal.ask("Question: ") do |q|
503
+ q.default = "string"
504
+ end
505
+
506
+ assert_equal "string", answer
507
+ assert_equal "Question: |string| ", @output.string
508
+ end
509
+
510
+ def test_default_with_Symbol
511
+ # With a Symbol, it should show up the String version
512
+ # at prompt, but return the Symbol as answer
513
+
514
+ @input << "\n"
515
+ @input.rewind
516
+
517
+ answer = @terminal.ask("Question: ") do |q|
518
+ q.default = :string
519
+ end
520
+
521
+ assert_equal :string, answer
522
+ assert_equal "Question: |string| ", @output.string
523
+ end
524
+
525
+ def test_default_with_non_String_objects
526
+ # With a non-string object, it should not show
527
+ # any 'default' at prompt line. And should
528
+ # return the "default" object, without conversion.
529
+
530
+ @input << "\n"
531
+ @input.rewind
532
+
533
+ default_non_string_object = Object.new
534
+
535
+ answer = @terminal.ask("Question: ") do |q|
536
+ q.default = default_non_string_object
537
+ end
538
+
539
+ assert_equal default_non_string_object, answer
540
+ assert_equal "Question: ", @output.string
541
+ end
542
+
543
+ def test_string_preservation
544
+ @input << "Maybe\nYes\n"
545
+ @input.rewind
546
+
547
+ my_string = "Is that your final answer? "
548
+
549
+ @terminal.ask(my_string) { |q| q.default = "Possibly" }
550
+ @terminal.ask(my_string) { |q| q.default = "Maybe" }
551
+
552
+ assert_equal("Is that your final answer? ", my_string)
553
+ end
554
+
555
+ def test_empty
556
+ @input << "\n"
557
+ @input.rewind
558
+
559
+ answer = @terminal.ask("") do |q|
560
+ q.default = "yes"
561
+ q.validate = /\Ay(?:es)?|no?\Z/i
562
+ end
563
+ assert_equal("yes", answer)
564
+ end
565
+
566
+ def test_erb
567
+ @terminal.say( "The integers from 1 to 10 are:\n" +
568
+ "% (1...10).each do |n|\n" +
569
+ "\t<%= n %>,\n" +
570
+ "% end\n" +
571
+ "\tand 10" )
572
+ assert_equal( "The integers from 1 to 10 are:\n" +
573
+ "\t1,\n\t2,\n\t3,\n\t4,\n\t5,\n" +
574
+ "\t6,\n\t7,\n\t8,\n\t9,\n\tand 10\n",
575
+ @output.string )
576
+ end
577
+
578
+ def test_files
579
+ @input << "#{File.basename(__FILE__)[0, 5]}\n"
580
+ @input.rewind
581
+
582
+ assert_equal "tc_hi\n",@input.read
583
+ @input.rewind
584
+
585
+ file = @terminal.ask("Select a file: ", File) do |q|
586
+ q.directory = File.expand_path(File.dirname(__FILE__))
587
+ q.glob = "*.rb"
588
+ end
589
+ assert_instance_of(File, file)
590
+ assert_equal("# encoding: utf-8\n", file.gets)
591
+ file.close
592
+
593
+ @input.rewind
594
+
595
+ pathname = @terminal.ask("Select a file: ", Pathname) do |q|
596
+ q.directory = File.expand_path(File.dirname(__FILE__))
597
+ q.glob = "*.rb"
598
+ end
599
+ assert_instance_of(Pathname, pathname)
600
+ assert_equal(File.size(__FILE__), pathname.size)
601
+ end
602
+
603
+ def test_gather
604
+ @input << "James\nDana\nStorm\nGypsy\n\n"
605
+ @input.rewind
606
+
607
+ answers = @terminal.ask("Enter four names:") do |q|
608
+ q.gather = 4
609
+ end
610
+ assert_equal(%w{James Dana Storm Gypsy}, answers)
611
+ assert_equal("\n", @input.gets)
612
+ assert_equal("Enter four names:\n", @output.string)
613
+
614
+ @input.rewind
615
+
616
+ answers = @terminal.ask("Enter four names:") do |q|
617
+ q.gather = ""
618
+ end
619
+ assert_equal(%w{James Dana Storm Gypsy}, answers)
620
+
621
+ @input.rewind
622
+
623
+ answers = @terminal.ask("Enter four names:") do |q|
624
+ q.gather = /^\s*$/
625
+ end
626
+ assert_equal(%w{James Dana Storm Gypsy}, answers)
627
+
628
+ @input.truncate(@input.rewind)
629
+ @input << "29\n49\n30\n"
630
+ @input.rewind
631
+ @output.truncate(@output.rewind)
632
+
633
+ answers = @terminal.ask("<%= @key %>: ", Integer) do |q|
634
+ q.gather = { "Age" => 0, "Wife's Age" => 0, "Father's Age" => 0}
635
+ end
636
+ assert_equal( { "Age" => 29, "Wife's Age" => 30, "Father's Age" => 49},
637
+ answers )
638
+ assert_equal("Age: Father's Age: Wife's Age: ", @output.string)
639
+ end
640
+
641
+ def test_typing_verification
642
+ @input << "all work and no play makes jack a dull boy\n" * 3
643
+ @input.rewind
644
+
645
+ answer = @terminal.ask("How's work? ") do |q|
646
+ q.gather = 3
647
+ q.verify_match = true
648
+ end
649
+ assert_equal("all work and no play makes jack a dull boy", answer)
650
+
651
+ @input.truncate(@input.rewind)
652
+ @input << "all play and no work makes jack a mere toy\n"
653
+ @input << "all work and no play makes jack a dull boy\n" * 5
654
+ @input.rewind
655
+ @output.truncate(@output.rewind)
656
+
657
+ answer = @terminal.ask("How are things going? ") do |q|
658
+ q.gather = 3
659
+ q.verify_match = true
660
+ q.responses[:mismatch] = 'Typing mismatch!'
661
+ q.responses[:ask_on_error] = ''
662
+ end
663
+ assert_equal("all work and no play makes jack a dull boy", answer)
664
+
665
+ # now try using a hash for gather
666
+
667
+ @input.truncate(@input.rewind)
668
+ @input << "Password\nPassword\n"
669
+ @input.rewind
670
+ @output.truncate(@output.rewind)
671
+
672
+ answer = @terminal.ask("<%= @key %>: ") do |q|
673
+ q.verify_match = true
674
+ q.gather = {"Enter a password" => '', "Please type it again" => ''}
675
+ end
676
+ assert_equal("Password", answer)
677
+
678
+ @input.truncate(@input.rewind)
679
+ @input << "Password\nMistake\nPassword\nPassword\n"
680
+ @input.rewind
681
+ @output.truncate(@output.rewind)
682
+
683
+ answer = @terminal.ask("<%= @key %>: ") do |q|
684
+ q.verify_match = true
685
+ q.responses[:mismatch] = 'Typing mismatch!'
686
+ q.responses[:ask_on_error] = ''
687
+ q.gather = {"Enter a password" => '', "Please type it again" => ''}
688
+ end
689
+
690
+ assert_equal("Password", answer)
691
+ assert_equal( "Enter a password: " +
692
+ "Please type it again: " +
693
+ "Typing mismatch!\n" +
694
+ "Enter a password: " +
695
+ "Please type it again: ", @output.string )
696
+ end
697
+
698
+ def test_lists
699
+ digits = %w{Zero One Two Three Four Five Six Seven Eight Nine}
700
+ erb_digits = digits.dup
701
+ erb_digits[erb_digits.index("Five")] = "<%= color('Five', :blue) %%>"
702
+
703
+ @terminal.say("<%= list(#{digits.inspect}) %>")
704
+ assert_equal(digits.map { |d| "#{d}\n" }.join, @output.string)
705
+
706
+ @output.truncate(@output.rewind)
707
+
708
+ @terminal.say("<%= list(#{digits.inspect}, :inline) %>")
709
+ assert_equal( digits[0..-2].join(", ") + " or #{digits.last}\n",
710
+ @output.string )
711
+
712
+ @output.truncate(@output.rewind)
713
+
714
+ @terminal.say("<%= list(#{digits.inspect}, :inline, ' and ') %>")
715
+ assert_equal( digits[0..-2].join(", ") + " and #{digits.last}\n",
716
+ @output.string )
717
+
718
+ @output.truncate(@output.rewind)
719
+
720
+ @terminal.say("<%= list(#{digits.inspect}, :columns_down, 3) %>")
721
+ assert_equal( "Zero Four Eight\n" +
722
+ "One Five Nine \n" +
723
+ "Two Six \n" +
724
+ "Three Seven\n",
725
+ @output.string )
726
+
727
+ @output.truncate(@output.rewind)
728
+
729
+ @terminal.say("<%= list(#{erb_digits.inspect}, :columns_down, 3) %>")
730
+ assert_equal( "Zero Four Eight\n" +
731
+ "One \e[34mFive\e[0m Nine \n" +
732
+ "Two Six \n" +
733
+ "Three Seven\n",
734
+ @output.string )
735
+
736
+ colums_of_twenty = ["12345678901234567890"] * 5
737
+
738
+ @output.truncate(@output.rewind)
739
+
740
+ @terminal.say("<%= list(#{colums_of_twenty.inspect}, :columns_down) %>")
741
+ assert_equal( "12345678901234567890 12345678901234567890 " +
742
+ "12345678901234567890\n" +
743
+ "12345678901234567890 12345678901234567890\n",
744
+ @output.string )
745
+
746
+ @output.truncate(@output.rewind)
747
+
748
+ @terminal.say("<%= list(#{digits.inspect}, :columns_across, 3) %>")
749
+ assert_equal( "Zero One Two \n" +
750
+ "Three Four Five \n" +
751
+ "Six Seven Eight\n" +
752
+ "Nine \n",
753
+ @output.string )
754
+
755
+ colums_of_twenty.pop
756
+
757
+ @output.truncate(@output.rewind)
758
+
759
+ @terminal.say("<%= list( #{colums_of_twenty.inspect}, :columns_across ) %>")
760
+ assert_equal( "12345678901234567890 12345678901234567890 " +
761
+ "12345678901234567890\n" +
762
+ "12345678901234567890\n",
763
+ @output.string )
764
+
765
+ @output.truncate(@output.rewind)
766
+
767
+ wide = %w[0123456789 a b c d e f g h i j k l m n o p q r s t u v w x y z]
768
+
769
+ @terminal.say("<%= list( #{wide.inspect}, :uneven_columns_across ) %>")
770
+ assert_equal( "0123456789 a b c d e f g h i j k l m n o " +
771
+ "p q r s t u v w\n" +
772
+ "x y z\n",
773
+ @output.string )
774
+
775
+ @output.truncate(@output.rewind)
776
+
777
+ @terminal.say("<%= list( #{wide.inspect}, :uneven_columns_across, 10 ) %>")
778
+ assert_equal( "0123456789 a b c d e f g h i\n" +
779
+ "j k l m n o p q r s\n" +
780
+ "t u v w x y z\n",
781
+ @output.string )
782
+
783
+ @output.truncate(@output.rewind)
784
+
785
+ @terminal.say("<%= list( #{wide.inspect}, :uneven_columns_down ) %>")
786
+ assert_equal( "0123456789 b d f h j l n p r t v x z\n" +
787
+ "a c e g i k m o q s u w y\n",
788
+ @output.string )
789
+
790
+ @output.truncate(@output.rewind)
791
+
792
+ @terminal.say("<%= list( #{wide.inspect}, :uneven_columns_down, 10 ) %>")
793
+ assert_equal( "0123456789 c f i l o r u x\n" +
794
+ "a d g j m p s v y\n" +
795
+ "b e h k n q t w z\n",
796
+ @output.string )
797
+ end
798
+
799
+ def test_lists_with_zero_items
800
+ modes = [nil, :rows, :inline, :columns_across, :columns_down]
801
+ modes.each do |mode|
802
+ result = @terminal.list([], mode)
803
+ assert_equal("", result)
804
+ end
805
+ end
806
+
807
+ def test_lists_with_nil_items
808
+ modes = [nil]
809
+ modes.each do |mode|
810
+ result = @terminal.list([nil], mode)
811
+ assert_equal("\n", result)
812
+ end
813
+ end
814
+
815
+ def test_lists_with_one_item
816
+ items = ['Zero']
817
+ modes = { nil => "Zero\n",
818
+ :rows => "Zero\n",
819
+ :inline => "Zero",
820
+ :columns_across => "Zero\n",
821
+ :columns_down => "Zero\n" }
822
+
823
+ modes.each do |mode, expected|
824
+ result = @terminal.list(items, mode)
825
+ assert_equal(expected, result)
826
+ end
827
+ end
828
+
829
+ def test_lists_with_two_items
830
+ items = ['Zero', 'One']
831
+ modes = { nil => "Zero\nOne\n",
832
+ :rows => "Zero\nOne\n",
833
+ :inline => "Zero or One",
834
+ :columns_across => "Zero One \n",
835
+ :columns_down => "Zero One \n" }
836
+
837
+ modes.each do |mode, expected|
838
+ result = @terminal.list(items, mode)
839
+ assert_equal(expected, result)
840
+ end
841
+ end
842
+
843
+ def test_lists_with_three_items
844
+ items = ['Zero', 'One', 'Two']
845
+ modes = { nil => "Zero\nOne\nTwo\n",
846
+ :rows => "Zero\nOne\nTwo\n",
847
+ :inline => "Zero, One or Two",
848
+ :columns_across => "Zero One Two \n",
849
+ :columns_down => "Zero One Two \n" }
850
+
851
+ modes.each do |mode, expected|
852
+ result = @terminal.list(items, mode)
853
+ assert_equal(expected, result)
854
+ end
855
+ end
856
+
857
+ def test_mode
858
+ assert(%w[Win32API termios ncurses stty jline].include?(HighLine::CHARACTER_MODE),
859
+ "#{HighLine::CHARACTER_MODE} not in list")
860
+ end
861
+
862
+ class NameClass
863
+ def self.parse( string )
864
+ if string =~ /^\s*(\w+),\s*(\w+)\s+(\w+)\s*$/
865
+ self.new($2, $3, $1)
866
+ else
867
+ raise ArgumentError, "Invalid name format."
868
+ end
869
+ end
870
+
871
+ def initialize(first, middle, last)
872
+ @first, @middle, @last = first, middle, last
873
+ end
874
+
875
+ attr_reader :first, :middle, :last
876
+ end
877
+
878
+ def test_my_class_conversion
879
+ @input << "Gray, James Edward\n"
880
+ @input.rewind
881
+
882
+ answer = @terminal.ask("Your name? ", NameClass) do |q|
883
+ q.validate = lambda do |name|
884
+ names = name.split(/,\s*/)
885
+ return false unless names.size == 2
886
+ return false if names.first =~ /\s/
887
+ names.last.split.size == 2
888
+ end
889
+ end
890
+ assert_instance_of(NameClass, answer)
891
+ assert_equal("Gray", answer.last)
892
+ assert_equal("James", answer.first)
893
+ assert_equal("Edward", answer.middle)
894
+ end
895
+
896
+ def test_no_echo
897
+ @input << "password\r"
898
+ @input.rewind
899
+
900
+ answer = @terminal.ask("Please enter your password: ") do |q|
901
+ q.echo = false
902
+ end
903
+ assert_equal("password", answer)
904
+ assert_equal("Please enter your password: \n", @output.string)
905
+
906
+ @input.rewind
907
+ @output.truncate(@output.rewind)
908
+
909
+ answer = @terminal.ask("Pick a letter or number: ") do |q|
910
+ q.character = true
911
+ q.echo = false
912
+ end
913
+ assert_equal("p", answer)
914
+ assert_equal("a", @input.getc.chr)
915
+ assert_equal("Pick a letter or number: \n", @output.string)
916
+ end
917
+
918
+ def test_correct_string_encoding_when_echo_false
919
+ @input << "ação\r" # An UTF-8 portuguese word for 'action'
920
+ @input.rewind
921
+
922
+ answer = @terminal.ask("Please enter your password: ") do |q|
923
+ q.echo = false
924
+ end
925
+
926
+ assert_equal "ação", answer
927
+ assert_equal Encoding::default_external, answer.encoding
928
+ end
929
+
930
+ def test_backspace_with_ascii_when_echo_false
931
+ @input << "password\b\r"
932
+ @input.rewind
933
+
934
+ answer = @terminal.ask("Please enter your password: ") do |q|
935
+ q.echo = false
936
+ end
937
+
938
+ assert_not_equal("password", answer)
939
+ assert_equal("passwor", answer)
940
+ end
941
+
942
+ def test_backspace_with_utf8_when_echo_false
943
+ @input << "maçã\b\r"
944
+ @input.rewind
945
+
946
+ answer = @terminal.ask("Please enter your password: ") do |q|
947
+ q.echo = false
948
+ end
949
+
950
+ assert_not_equal("maçã", answer)
951
+ assert_equal("maç", answer)
952
+ end
953
+
954
+ def test_echoing_with_utf8_when_echo_is_star
955
+ @input << "maçã\r"
956
+ @input.rewind
957
+
958
+ answer = @terminal.ask("Type: ") do |q|
959
+ q.echo = "*"
960
+ end
961
+
962
+ assert_equal("Type: ****\n", @output.string)
963
+ assert_equal("maçã", answer)
964
+ end
965
+
966
+ def test_paging
967
+ @terminal.page_at = 22
968
+
969
+ @input << "\n\n"
970
+ @input.rewind
971
+
972
+ @terminal.say((1..50).map { |n| "This is line #{n}.\n"}.join)
973
+ assert_equal( (1..22).map { |n| "This is line #{n}.\n"}.join +
974
+ "\n-- press enter/return to continue or q to stop -- \n\n" +
975
+ (23..44).map { |n| "This is line #{n}.\n"}.join +
976
+ "\n-- press enter/return to continue or q to stop -- \n\n" +
977
+ (45..50).map { |n| "This is line #{n}.\n"}.join,
978
+ @output.string )
979
+ end
980
+
981
+ def test_statement_lines_count_equal_to_page_at_shouldnt_paginate
982
+ @terminal.page_at = 6
983
+
984
+ @input << "\n"
985
+ @input.rewind
986
+
987
+ list = "a\nb\nc\nd\ne\nf\n"
988
+
989
+ @terminal.say(list)
990
+ assert_equal(list, @output.string)
991
+ end
992
+
993
+ def test_statement_with_one_line_bigger_than_page_at_should_paginate
994
+ @terminal.page_at = 6
995
+
996
+ @input << "\n"
997
+ @input.rewind
998
+
999
+ list = "a\nb\nc\nd\ne\nf\ng\n"
1000
+
1001
+ paginated =
1002
+ "a\nb\nc\nd\ne\nf\n" \
1003
+ "\n-- press enter/return to continue or q to stop -- \n\n" \
1004
+ "g\n"
1005
+
1006
+ @terminal.say(list)
1007
+ assert_equal(paginated, @output.string)
1008
+ end
1009
+
1010
+ def test_quiting_paging_shouldnt_raise
1011
+ # See https://github.com/JEG2/highline/issues/168
1012
+
1013
+ @terminal.page_at = 6
1014
+
1015
+ @input << "q"
1016
+ @input.rewind
1017
+
1018
+ list = "a\nb\nc\nd\ne\nf\n"
1019
+
1020
+ assert_nothing_raised { @terminal.say(list) }
1021
+ end
1022
+
1023
+ def test_range_requirements
1024
+ @input << "112\n-541\n28\n"
1025
+ @input.rewind
1026
+
1027
+ answer = @terminal.ask("Tell me your age.", Integer) do |q|
1028
+ q.in = 0..105
1029
+ end
1030
+ assert_equal(28, answer)
1031
+ assert_equal( "Tell me your age.\n" +
1032
+ "Your answer isn't within the expected range " +
1033
+ "(included in 0..105).\n" +
1034
+ "? " +
1035
+ "Your answer isn't within the expected range " +
1036
+ "(included in 0..105).\n" +
1037
+ "? ", @output.string )
1038
+
1039
+ @input.truncate(@input.rewind)
1040
+ @input << "1\n-541\n28\n"
1041
+ @input.rewind
1042
+ @output.truncate(@output.rewind)
1043
+
1044
+ answer = @terminal.ask("Tell me your age.", Integer) do |q|
1045
+ q.above = 3
1046
+ end
1047
+ assert_equal(28, answer)
1048
+ assert_equal( "Tell me your age.\n" +
1049
+ "Your answer isn't within the expected range " +
1050
+ "(above 3).\n" +
1051
+ "? " +
1052
+ "Your answer isn't within the expected range " +
1053
+ "(above 3).\n" +
1054
+ "? ", @output.string )
1055
+
1056
+ @input.truncate(@input.rewind)
1057
+ @input << "1\n28\n-541\n"
1058
+ @input.rewind
1059
+ @output.truncate(@output.rewind)
1060
+
1061
+ answer = @terminal.ask("Lowest numer you can think of?", Integer) do |q|
1062
+ q.below = 0
1063
+ end
1064
+ assert_equal(-541, answer)
1065
+ assert_equal( "Lowest numer you can think of?\n" +
1066
+ "Your answer isn't within the expected range " +
1067
+ "(below 0).\n" +
1068
+ "? " +
1069
+ "Your answer isn't within the expected range " +
1070
+ "(below 0).\n" +
1071
+ "? ", @output.string )
1072
+
1073
+ @input.truncate(@input.rewind)
1074
+ @input << "1\n-541\n6\n"
1075
+ @input.rewind
1076
+ @output.truncate(@output.rewind)
1077
+
1078
+ answer = @terminal.ask("Enter a low even number: ", Integer) do |q|
1079
+ q.above = 0
1080
+ q.below = 10
1081
+ q.in = [2, 4, 6, 8]
1082
+ end
1083
+ assert_equal(6, answer)
1084
+ assert_equal( "Enter a low even number: " +
1085
+ "Your answer isn't within the expected range " +
1086
+ "(above 0, below 10, and included in [2, 4, 6, 8]).\n" +
1087
+ "? " +
1088
+ "Your answer isn't within the expected range " +
1089
+ "(above 0, below 10, and included in [2, 4, 6, 8]).\n" +
1090
+ "? ", @output.string )
1091
+ end
1092
+
1093
+ def test_reask
1094
+ number = 61676
1095
+ @input << "Junk!\n" << number << "\n"
1096
+ @input.rewind
1097
+
1098
+ answer = @terminal.ask("Favorite number? ", Integer)
1099
+ assert_kind_of(Integer, number)
1100
+ assert_instance_of(Fixnum, number)
1101
+ assert_equal(number, answer)
1102
+ assert_equal( "Favorite number? " +
1103
+ "You must enter a valid Integer.\n" +
1104
+ "? ", @output.string )
1105
+
1106
+ @input.rewind
1107
+ @output.truncate(@output.rewind)
1108
+
1109
+ answer = @terminal.ask("Favorite number? ", Integer) do |q|
1110
+ q.responses[:ask_on_error] = :question
1111
+ q.responses[:invalid_type] = "Not a valid number!"
1112
+ end
1113
+ assert_kind_of(Integer, number)
1114
+ assert_instance_of(Fixnum, number)
1115
+ assert_equal(number, answer)
1116
+ assert_equal( "Favorite number? " +
1117
+ "Not a valid number!\n" +
1118
+ "Favorite number? ", @output.string )
1119
+
1120
+ @input.truncate(@input.rewind)
1121
+ @input << "gen\ngene\n"
1122
+ @input.rewind
1123
+ @output.truncate(@output.rewind)
1124
+
1125
+ answer = @terminal.ask("Select a mode: ", [:generate, :gentle])
1126
+ assert_instance_of(Symbol, answer)
1127
+ assert_equal(:generate, answer)
1128
+ assert_equal( "Select a mode: " +
1129
+ "Ambiguous choice. " +
1130
+ "Please choose one of [generate, gentle].\n" +
1131
+ "? ", @output.string )
1132
+ end
1133
+
1134
+ def test_response_embedding
1135
+ @input << "112\n-541\n28\n"
1136
+ @input.rewind
1137
+
1138
+ answer = @terminal.ask("Tell me your age.", Integer) do |q|
1139
+ q.in = 0..105
1140
+ q.responses[:not_in_range] = "Need a <%= @question.answer_type %>" +
1141
+ " <%= @question.expected_range %>."
1142
+ end
1143
+ assert_equal(28, answer)
1144
+ assert_equal( "Tell me your age.\n" +
1145
+ "Need a Integer included in 0..105.\n" +
1146
+ "? " +
1147
+ "Need a Integer included in 0..105.\n" +
1148
+ "? ", @output.string )
1149
+ end
1150
+
1151
+ def test_say
1152
+ @terminal.say("This will have a newline.")
1153
+ assert_equal("This will have a newline.\n", @output.string)
1154
+
1155
+ @output.truncate(@output.rewind)
1156
+
1157
+ @terminal.say("This will also have one newline.\n")
1158
+ assert_equal("This will also have one newline.\n", @output.string)
1159
+
1160
+ @output.truncate(@output.rewind)
1161
+
1162
+ @terminal.say("This will not have a newline. ")
1163
+ assert_equal("This will not have a newline. ", @output.string)
1164
+
1165
+ @output.truncate(@output.rewind)
1166
+
1167
+ @terminal.say("This will not\n end with a newline. ")
1168
+ assert_equal("This will not\n end with a newline. ", @output.string)
1169
+
1170
+ @output.truncate(@output.rewind)
1171
+
1172
+ @terminal.say("This will \nend with a newline.")
1173
+ assert_equal("This will \nend with a newline.\n", @output.string)
1174
+
1175
+ @output.truncate(@output.rewind)
1176
+
1177
+ colorized = @terminal.color("This will not have a newline. ", :green)
1178
+ @terminal.say(colorized)
1179
+ assert_equal("\e[32mThis will not have a newline. \e[0m", @output.string)
1180
+
1181
+ @output.truncate(@output.rewind)
1182
+
1183
+ colorized = @terminal.color("This will have a newline.", :green)
1184
+ @terminal.say(colorized)
1185
+ assert_equal("\e[32mThis will have a newline.\e[0m\n", @output.string)
1186
+
1187
+ @output.truncate(@output.rewind)
1188
+
1189
+ assert_nothing_raised { @terminal.say(nil) }
1190
+ assert_equal("", @output.string)
1191
+ end
1192
+
1193
+ def test_say_handles_non_string_argument
1194
+ integer = 10
1195
+ hash = { :a => 20 }
1196
+
1197
+ assert_nothing_raised { @terminal.say(integer) }
1198
+ assert_equal String(integer), @output.string.chomp
1199
+
1200
+ @output.truncate(@output.rewind)
1201
+
1202
+ assert_nothing_raised { @terminal.say(hash) }
1203
+ assert_equal String(hash), @output.string.chomp
1204
+ end
1205
+
1206
+ def test_terminal_size
1207
+ assert_instance_of(Fixnum, @terminal.terminal_size[0])
1208
+ assert_instance_of(Fixnum, @terminal.terminal_size[1])
1209
+ end
1210
+
1211
+ def test_type_conversion
1212
+ number = 61676
1213
+ @input << number << "\n"
1214
+ @input.rewind
1215
+
1216
+ answer = @terminal.ask("Favorite number? ", Integer)
1217
+ assert_kind_of(Integer, answer)
1218
+ assert_instance_of(Fixnum, answer)
1219
+ assert_equal(number, answer)
1220
+
1221
+ @input.truncate(@input.rewind)
1222
+ number = 1_000_000_000_000_000_000_000_000_000_000
1223
+ @input << number << "\n"
1224
+ @input.rewind
1225
+
1226
+ answer = @terminal.ask("Favorite number? ", Integer)
1227
+ assert_kind_of(Integer, answer)
1228
+ assert_instance_of(Bignum, answer)
1229
+ assert_equal(number, answer)
1230
+
1231
+ @input.truncate(@input.rewind)
1232
+ number = 10.5002
1233
+ @input << number << "\n"
1234
+ @input.rewind
1235
+
1236
+ answer = @terminal.ask( "Favorite number? ",
1237
+ lambda { |n| n.to_f.abs.round } )
1238
+ assert_kind_of(Integer, answer)
1239
+ assert_instance_of(Fixnum, answer)
1240
+ assert_equal(11, answer)
1241
+
1242
+ @input.truncate(@input.rewind)
1243
+ animal = :dog
1244
+ @input << animal << "\n"
1245
+ @input.rewind
1246
+
1247
+ answer = @terminal.ask("Favorite animal? ", Symbol)
1248
+ assert_instance_of(Symbol, answer)
1249
+ assert_equal(animal, answer)
1250
+
1251
+ @input.truncate(@input.rewind)
1252
+ @input << "16th June 1976\n"
1253
+ @input.rewind
1254
+
1255
+ answer = @terminal.ask("Enter your birthday.", Date)
1256
+ assert_instance_of(Date, answer)
1257
+ assert_equal(16, answer.day)
1258
+ assert_equal(6, answer.month)
1259
+ assert_equal(1976, answer.year)
1260
+
1261
+ @input.truncate(@input.rewind)
1262
+ pattern = "^yes|no$"
1263
+ @input << pattern << "\n"
1264
+ @input.rewind
1265
+
1266
+ answer = @terminal.ask("Give me a pattern to match with: ", Regexp)
1267
+ assert_instance_of(Regexp, answer)
1268
+ assert_equal(/#{pattern}/, answer)
1269
+
1270
+ @input.truncate(@input.rewind)
1271
+ @input << "gen\n"
1272
+ @input.rewind
1273
+
1274
+ answer = @terminal.ask("Select a mode: ", [:generate, :run])
1275
+ assert_instance_of(Symbol, answer)
1276
+ assert_equal(:generate, answer)
1277
+ end
1278
+
1279
+ def test_validation
1280
+ @input << "system 'rm -rf /'\n105\n0b101_001\n"
1281
+ @input.rewind
1282
+
1283
+ answer = @terminal.ask("Enter a binary number: ") do |q|
1284
+ q.validate = /\A(?:0b)?[01_]+\Z/
1285
+ end
1286
+ assert_equal("0b101_001", answer)
1287
+ assert_equal( "Enter a binary number: " +
1288
+ "Your answer isn't valid " +
1289
+ "(must match /\\A(?:0b)?[01_]+\\Z/).\n" +
1290
+ "? " +
1291
+ "Your answer isn't valid " +
1292
+ "(must match /\\A(?:0b)?[01_]+\\Z/).\n" +
1293
+ "? ", @output.string )
1294
+
1295
+ @input.truncate(@input.rewind)
1296
+ @input << "Gray II, James Edward\n" +
1297
+ "Gray, Dana Ann Leslie\n" +
1298
+ "Gray, James Edward\n"
1299
+ @input.rewind
1300
+
1301
+ answer = @terminal.ask("Your name? ") do |q|
1302
+ q.validate = lambda do |name|
1303
+ names = name.split(/,\s*/)
1304
+ return false unless names.size == 2
1305
+ return false if names.first =~ /\s/
1306
+ names.last.split.size == 2
1307
+ end
1308
+ end
1309
+ assert_equal("Gray, James Edward", answer)
1310
+ end
1311
+
1312
+ def test_whitespace
1313
+ @input << " A lot\tof \t space\t \there! \n"
1314
+ @input.rewind
1315
+
1316
+ answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
1317
+ q.whitespace = :chomp
1318
+ end
1319
+ assert_equal(" A lot\tof \t space\t \there! ", answer)
1320
+
1321
+ @input.rewind
1322
+
1323
+ answer = @terminal.ask("Enter a whitespace filled string: ")
1324
+ assert_equal("A lot\tof \t space\t \there!", answer)
1325
+
1326
+ @input.rewind
1327
+
1328
+ answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
1329
+ q.whitespace = :strip_and_collapse
1330
+ end
1331
+ assert_equal("A lot of space here!", answer)
1332
+
1333
+ @input.rewind
1334
+
1335
+ answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
1336
+ q.whitespace = :remove
1337
+ end
1338
+ assert_equal("Alotofspacehere!", answer)
1339
+
1340
+ @input.rewind
1341
+
1342
+ answer = @terminal.ask("Enter a whitespace filled string: ") do |q|
1343
+ q.whitespace = :none
1344
+ end
1345
+ assert_equal(" A lot\tof \t space\t \there! \n", answer)
1346
+ end
1347
+
1348
+ def test_wrap
1349
+ @terminal.wrap_at = 80
1350
+
1351
+ @terminal.say("This is a very short line.")
1352
+ assert_equal("This is a very short line.\n", @output.string)
1353
+
1354
+ @output.truncate(@output.rewind)
1355
+
1356
+ @terminal.say( "This is a long flowing paragraph meant to span " +
1357
+ "several lines. This text should definitely be " +
1358
+ "wrapped at the set limit, in the result. Your code " +
1359
+ "does well with things like this.\n\n" +
1360
+ " * This is a simple embedded list.\n" +
1361
+ " * You're code should not mess with this...\n" +
1362
+ " * Because it's already formatted correctly and " +
1363
+ "does not\n" +
1364
+ " exceed the limit!" )
1365
+ assert_equal( "This is a long flowing paragraph meant to span " +
1366
+ "several lines. This text should\n" +
1367
+ "definitely be wrapped at the set limit, in the " +
1368
+ "result. Your code does well with\n" +
1369
+ "things like this.\n\n" +
1370
+ " * This is a simple embedded list.\n" +
1371
+ " * You're code should not mess with this...\n" +
1372
+ " * Because it's already formatted correctly and does " +
1373
+ "not\n" +
1374
+ " exceed the limit!\n", @output.string )
1375
+
1376
+ @output.truncate(@output.rewind)
1377
+
1378
+ @terminal.say("-=" * 50)
1379
+ assert_equal(("-=" * 40 + "\n") + ("-=" * 10 + "\n"), @output.string)
1380
+ end
1381
+
1382
+ def test_track_eof
1383
+ assert_raise(EOFError) { @terminal.ask("Any input left? ") }
1384
+
1385
+ # turn EOF tracking
1386
+ old_setting = HighLine.track_eof?
1387
+ assert_nothing_raised(Exception) { HighLine.track_eof = false }
1388
+ begin
1389
+ @terminal.ask("And now? ") # this will still blow up, nothing available
1390
+ rescue
1391
+ assert_not_equal(EOFError, $!.class) # but HighLine's safe guards are off
1392
+ end
1393
+ HighLine.track_eof = old_setting
1394
+ end
1395
+
1396
+ def test_version
1397
+ assert_not_nil(HighLine::VERSION)
1398
+ assert_instance_of(String, HighLine::VERSION)
1399
+ assert(HighLine::VERSION.frozen?)
1400
+ assert_match(/\A\d+\.\d+\.\d+\Z/, HighLine::VERSION)
1401
+ end
1402
+ end