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

Sign up to get free protection for your applications and to get access to all the features.
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