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.
- checksums.yaml +4 -4
- data/CHANGES +174 -169
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/README +129 -131
- data/Rakefile +185 -182
- data/appveyor.yml +42 -0
- data/ext/win32/api.c +1092 -1092
- data/lib/win32/api.rb +14 -8
- data/lib/win32/ruby21_32/win32/api.so +0 -0
- data/lib/win32/ruby21_64/win32/api.so +0 -0
- data/lib/win32/ruby22_32/win32/api.so +0 -0
- data/lib/win32/ruby22_64/win32/api.so +0 -0
- data/lib/win32/ruby23_32/win32/api.so +0 -0
- data/lib/win32/ruby23_64/win32/api.so +0 -0
- data/lib/win32/ruby2_32/win32/api.so +0 -0
- data/lib/win32/ruby2_64/win32/api.so +0 -0
- data/test/test_win32_api.rb +145 -145
- data/vendor/bundle/ruby/2.2.0/bin/devkit +23 -0
- data/vendor/bundle/ruby/2.2.0/bin/devkit.bat +6 -0
- data/vendor/bundle/ruby/2.2.0/bin/rake +23 -0
- data/vendor/bundle/ruby/2.2.0/bin/rake.bat +6 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/CHANGELOG +55 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/LICENSE +339 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/README.md +73 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/Rakefile +8 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/colorize.gemspec +35 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize.rb +12 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize/class_methods.rb +116 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/lib/colorize/instance_methods.rb +135 -0
- data/vendor/bundle/ruby/2.2.0/gems/colorize-0.7.7/test/test_colorize.rb +161 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Gemfile +4 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/README.md +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Rakefile +1 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/Rspec-example-matchers.txt +184 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/bin/devkit +87 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/devkit.gemspec +27 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit.rb +18 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/core.rb +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/identity.rb +78 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/ssh_identity.rb +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/lib/devkit/version.rb +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/core_spec.rb +46 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/identity_spec.rb +1 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit/ssh_identity_spec.rb +1 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/devkit_spec.rb +5 -0
- data/vendor/bundle/ruby/2.2.0/gems/devkit-0.1.0/spec/spec_helper.rb +8 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/AUTHORS +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/COPYING +339 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Changelog.md +415 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Gemfile +9 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/INSTALL +59 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/LICENSE +7 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/README.rdoc +74 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/Rakefile +30 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/TODO +6 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/ansi_colors.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/asking_for_arrays.rb +18 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/basic_usage.rb +75 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/color_scheme.rb +32 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/get_character.rb +12 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/limit.rb +12 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/menus.rb +65 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/overwrite.rb +19 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/page_and_wrap.rb +322 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/password.rb +7 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/repeat_entry.rb +21 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/trapping_eof.rb +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/examples/using_readline.rb +17 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/highline.gemspec +37 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline.rb +1048 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/color_scheme.rb +134 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/compatibility.rb +16 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/import.rb +41 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/menu.rb +381 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/question.rb +480 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/simulate.rb +48 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/style.rb +192 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/lib/highline/version.rb +4 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/setup.rb +1360 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/highline.css +65 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/images/logo.png +0 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/site/index.html +58 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/string_methods.rb +32 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_color_scheme.rb +96 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_highline.rb +1402 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_import.rb +52 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_menu.rb +439 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_simulator.rb +23 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_string_highline.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/highline-1.7.8/test/tc_style.rb +578 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/BSDL +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/COPYING +57 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/Gemfile +9 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/LEGAL +4 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/README.rdoc +19 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/Rakefile +16 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/benchmarks/bm_yhpg.rb +59 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/benchmarks/helper.rb +8 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert.rb +338 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/enable_tracepoint_events.rb +82 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/lib/power_assert/version.rb +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/power_assert.gemspec +23 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/test/helper.rb +10 -0
- data/vendor/bundle/ruby/2.2.0/gems/power_assert-0.3.0/test/test_power_assert.rb +512 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/CONTRIBUTING.rdoc +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/History.rdoc +719 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/Manifest.txt +154 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/README.rdoc +157 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/Rakefile +82 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/bin/rake +33 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/command_line_usage.rdoc +158 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/jamis.rb +591 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rake.1 +141 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rakefile.rdoc +624 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.6.rdoc +37 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.8.7.rdoc +55 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.0.rdoc +112 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.1.rdoc +52 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.2.rdoc +49 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.3.rdoc +102 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.4.rdoc +60 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.5.rdoc +55 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-0.9.6.rdoc +64 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.0.rdoc +178 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.1.rdoc +58 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.2.rdoc +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.0.3.rdoc +191 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/doc/release_notes/rake-10.1.0.rdoc +61 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake.rb +73 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/application.rb +787 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/backtrace.rb +23 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/clean.rb +76 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/cloneable.rb +16 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/compositepublisher.rb +21 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/ftptools.rb +137 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/contrib/sshpublisher.rb +60 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/cpu_counter.rb +120 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/default_loader.rb +14 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/dsl_definition.rb +194 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/early_time.rb +21 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_creation_task.rb +24 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_list.rb +436 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_task.rb +46 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/file_utils.rb +123 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/invocation_chain.rb +56 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/invocation_exception_mixin.rb +16 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/late_time.rb +17 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/linked_list.rb +111 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/loaders/makefile.rb +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/multi_task.rb +13 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/packagetask.rb +199 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/phony.rb +15 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/private_reader.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/promise.rb +99 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/pseudo_status.rb +29 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rake_module.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rake_test_loader.rb +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/scope.rb +42 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task.rb +391 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_argument_error.rb +7 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_arguments.rb +102 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/task_manager.rb +316 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/tasklib.rb +11 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/testtask.rb +204 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/thread_history_display.rb +48 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/thread_pool.rb +163 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/trace_output.rb +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/version.rb +7 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/lib/rake/win32.rb +50 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/rakelib/test_times.rake +25 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/file_creation.rb +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/helper.rb +134 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/support/rakefile_definitions.rb +476 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/support/ruby_runner.rb +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_private_reader.rb +42 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake.rb +40 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_application.rb +659 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_application_options.rb +468 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_backtrace.rb +119 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_clean.rb +61 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_cpu_counter.rb +68 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_definitions.rb +84 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_directory_task.rb +76 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_dsl.rb +40 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_early_time.rb +31 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_creation_task.rb +56 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_list.rb +687 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_list_path_map.rb +15 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_task.rb +197 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_file_utils.rb +318 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_ftp_file.rb +74 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_functional.rb +484 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_invocation_chain.rb +64 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_late_time.rb +18 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_linked_list.rb +84 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_makefile_loader.rb +46 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_multi_task.rb +64 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_name_space.rb +57 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_package_task.rb +79 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map.rb +168 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map_explode.rb +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_path_map_partial.rb +18 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_pseudo_status.rb +21 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_rake_test_loader.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_reduce_compat.rb +26 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_require.rb +40 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_rules.rb +388 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_scope.rb +44 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task.rb +430 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_argument_parsing.rb +119 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_arguments.rb +134 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_manager.rb +178 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_manager_argument_resolution.rb +19 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_task_with_arguments.rb +172 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_test_task.rb +130 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_thread_pool.rb +145 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_top_level_functions.rb +71 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_rake_win32.rb +72 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_thread_history_display.rb +101 -0
- data/vendor/bundle/ruby/2.2.0/gems/rake-11.1.2/test/test_trace_output.rb +52 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/COPYING +64 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/GPL +339 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/LGPL +502 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/PSFL +271 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/README.md +101 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/Rakefile +71 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test-unit.rb +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit.rb +505 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/assertion-failed-error.rb +25 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/assertions.rb +2218 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/attribute-matcher.rb +26 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/attribute.rb +158 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/auto-runner-loader.rb +17 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/autorunner.rb +536 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/code-snippet-fetcher.rb +58 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector.rb +73 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/descendant.rb +19 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/dir.rb +108 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/load.rb +202 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/objectspace.rb +34 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/collector/xml.rb +249 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/color-scheme.rb +198 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/color.rb +134 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/data.rb +262 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/diff.rb +746 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/error.rb +158 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/exception-handler.rb +82 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/failure.rb +169 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/fault-location-detector.rb +100 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/fixture.rb +295 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/notification.rb +136 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/omission.rb +195 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/pending.rb +154 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/priority.rb +192 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/console.rb +59 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/emacs.rb +8 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/runner/xml.rb +15 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/test-suite-creator.rb +89 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testcase.rb +811 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testresult.rb +132 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/testsuite.rb +175 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/console/outputlevel.rb +15 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/console/testrunner.rb +693 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/emacs/testrunner.rb +49 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunner.rb +53 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunnermediator.rb +114 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/testrunnerutilities.rb +41 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/ui/xml/testrunner.rb +224 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/backtracefilter.rb +59 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/method-owner-finder.rb +28 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/observable.rb +90 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/output.rb +31 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/util/procwrapper.rb +48 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/lib/test/unit/version.rb +5 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/adder.rb +13 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/subtracter.rb +12 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_adder.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_subtracter.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/sample/test_user.rb +23 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test-descendant.rb +178 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test-load.rb +442 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test_dir.rb +406 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/collector/test_objectspace.rb +100 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header-label.csv +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header-label.tsv +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header.csv +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/header.tsv +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/no-header.csv +2 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/no-header.tsv +2 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/fixtures/plus.csv +3 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/run-test.rb +22 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-assertions.rb +2160 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-attribute-matcher.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-attribute.rb +123 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-code-snippet.rb +37 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-color-scheme.rb +82 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-color.rb +47 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-data.rb +303 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-diff.rb +518 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-emacs-runner.rb +60 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-error.rb +26 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-failure.rb +33 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-fault-location-detector.rb +163 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-fixture.rb +713 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-notification.rb +33 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-omission.rb +81 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-pending.rb +70 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-priority.rb +173 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-case.rb +1171 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-result.rb +113 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-suite-creator.rb +97 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/test-test-suite.rb +150 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/testunit-test-util.rb +31 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/ui/test_testrunmediator.rb +20 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test-method-owner-finder.rb +38 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test-output.rb +11 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_backtracefilter.rb +52 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_observable.rb +102 -0
- data/vendor/bundle/ruby/2.2.0/gems/test-unit-3.1.9/test/util/test_procwrapper.rb +36 -0
- data/vendor/bundle/ruby/2.2.0/specifications/colorize-0.7.7.gemspec +38 -0
- data/vendor/bundle/ruby/2.2.0/specifications/devkit-0.1.0.gemspec +46 -0
- data/vendor/bundle/ruby/2.2.0/specifications/highline-1.7.8.gemspec +37 -0
- data/vendor/bundle/ruby/2.2.0/specifications/power_assert-0.3.0.gemspec +41 -0
- data/vendor/bundle/ruby/2.2.0/specifications/rake-11.1.2.gemspec +43 -0
- data/vendor/bundle/ruby/2.2.0/specifications/test-unit-3.1.9.gemspec +47 -0
- data/win32-api.gemspec +27 -27
- metadata +345 -5
- data/lib/win32/ruby18/win32/api.so +0 -0
- 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 | 
            +
            }
         | 
| Binary file | 
| @@ -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…</h2>
         | 
| 11 | 
            +
             | 
| 12 | 
            +
             | 
| 13 | 
            +
            	<h3>Saving time.</h3>
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 16 | 
            +
            	<p>Command line interfaces are meant to be easy.  So why shouldn’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’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
         |