Macのrubyのreadlineに不具合がある!?(7)
パッチを作成する前に、GNU Readline を使用した場合の ruby の Readline の仕様を明確にするため単体テストを記述する。
これがあればデグレードを防げる。
ext/readline/gnu-readline 以下に GNU Readline 5.2 版。
ext/readline/editline 以下に Mac OSX 10.5 の Edit Line(libedit) 版。
以下は GNU Readline 版でテストを実行した結果。全て通る。
~/work/ruby/ruby_1_9 $ ./ruby19trunk -Iext/readline/gnu-readline test/readline/test_readline_history.rb Loaded suite test/readline/test_readline_history Started ................. Finished in 0.004555 seconds. 17 tests, 159 assertions, 0 failures, 0 errors
以下は libedit 版でテストを実行した結果。失敗しまくる。
~/work/ruby/ruby_1_9 $ ./ruby19trunk -Iext/readline/editline test/readline/test_readline_history.rb Loaded suite test/readline/test_readline_history Started ..F..FEF..EEFFF.. Finished in 0.017272 seconds. 1) Failure: test_each(Readline::TestHistory) [test/readline/test_readline_history.rb:144:in `block in test_each' test/readline/test_readline_history.rb:142:in `each' test/readline/test_readline_history.rb:142:in `test_each']: <"1:a"> expected but was <"2:b">. 2) Failure: test_get(Readline::TestHistory) [test/readline/test_readline_history.rb:22:in `block in test_get' test/readline/test_readline_history.rb:21:in `each' test/readline/test_readline_history.rb:21:in `each_with_index' test/readline/test_readline_history.rb:21:in `test_get']: <"1:a"> expected but was <"2:b">. 3) Error: test_get__negative(Readline::TestHistory): IndexError: invalid index test/readline/test_readline_history.rb:29:in `[]' test/readline/test_readline_history.rb:29:in `block in test_get__negative' test/readline/test_readline_history.rb:28:in `each' test/readline/test_readline_history.rb:28:in `test_get__negative' 4) Failure: test_get__out_of_range(Readline::TestHistory) [test/readline/test_readline_history.rb:37:in `block in test_get__out_of_range' test/readline/test_readline_history.rb:36:in `each' test/readline/test_readline_history.rb:36:in `test_get__out_of_range']: i=<-6>. <IndexError> exception expected but none was thrown. 5) Error: test_push(Readline::TestHistory): IndexError: invalid index test/readline/test_readline_history.rb:85:in `[]' test/readline/test_readline_history.rb:85:in `block in test_push' test/readline/test_readline_history.rb:83:in `times' test/readline/test_readline_history.rb:83:in `test_push' 6) Error: test_push__operator(Readline::TestHistory): IndexError: invalid index test/readline/test_readline_history.rb:93:in `[]' test/readline/test_readline_history.rb:93:in `block in test_push__operator' test/readline/test_readline_history.rb:91:in `times' test/readline/test_readline_history.rb:91:in `test_push__operator' 7) Failure: test_push__plural(Readline::TestHistory) [test/readline/test_readline_history.rb:101:in `block in test_push__plural' test/readline/test_readline_history.rb:100:in `each' test/readline/test_readline_history.rb:100:in `test_push__plural']: <"0"> expected but was <"1">. 8) Failure: test_set(Readline::TestHistory) [test/readline/test_readline_history.rb:56:in `block in test_set' test/readline/test_readline_history.rb:53:in `times' test/readline/test_readline_history.rb:53:in `test_set']: <"set: 0"> expected but was <"2:b">. 9) Failure: test_set__out_of_range(Readline::TestHistory) [test/readline/test_readline_history.rb:68:in `block in test_set__out_of_range' test/readline/test_readline_history.rb:67:in `each' test/readline/test_readline_history.rb:67:in `test_set__out_of_range']: index=<-6>. <IndexError> exception expected but none was thrown. 17 tests, 98 assertions, 6 failures, 3 errors
さぁ、テストを通すぞ。