This is for 8a705245e55575d4d310a2e956b89a36a5931971.
[ruby/irb] Add tests for RubyLex
The set_auto_indent method calculates the correct number of spaces for
indenting a line. We think there might be a few bugs in this method so
we are testing the current functionality to make sure nothing breaks
when we address those bugs.
Example test failure:
1) Failure:
TestIRB::TestRubyLex#test_auto_indent [/Users/Ben/Projects/irb/test/irb/test_ruby_lex.rb:75]:
Calculated the wrong number of spaces for:
def each_top_level_statement
initialize_input
catch(:TERM_INPUT) do
loop do
begin
prompt
unless l = lex
throw :TERM_INPUT if @line == ''
else
.
<10> expected but was
<12>.
This commit fixes the check_newline_depth_difference method to multiple
open braces on one line into account. Before this change we were
subtracting from the depth in check_newline_depth_difference on
every open brace. This is the right thing to do if the opening and
closing brace are on the same line. For example in a method definition we
have an opening and closing parentheses we want to add 1 to our depth,
and then remove it.
def foo()
end
However this isn't the correct behavior when the brace spans multiple
lines. If a brace spans multiple lines we don't want to subtract from
check_newline_depth_difference and we want to treat the braces the same
way as we do end and allow check_corresponding_token_depth to pop the
correct depth.
If we had put multiple open braces on a line the with no closing brace
spaces_of_nest array keeps getting '0' added to it. This means that when
we pop off of this array we are saying that we should be in position zero
for the next line. This is an issue because we don't always want to be
in position 0 after a closing brace.
Example:
[[[
]
]
]
In the above example the 'spaces_of_nest' array looks like this after
the first line is entered: [0,0,0]. We really want to be indented 4
spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e.
we want it to be: [0,2,4].
We also saw this issue with a heredoc inside of an array.
Introduce an abstracted structure about the encoding of Reline
The command prompt on Windows always uses Unicode to take input and print
output but most Reline implementation depends on Encoding.default_external.
This commit introduces an abstracted structure about the encoding of Reline.
[ruby/irb] Fix compatibility with rails before 5.2
Rails before 5.2 added Array#append as an alias to Array#<< ,
so that it expects only one argument.
However ruby-2.5 added Array#append as an alias to Array#push
which takes any number of arguments.
If irb completion is used in rails c (for example "IO.")
it fails with:
irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError)
Using Array#push instead of Array#append fixes compatibility.
The previous detection per get_screen_size fails when stdout is passed
to a pipe. That is the case when running ruby tests in parallel ("-j" switch).
In this case Reline believes that it's running on MinTTY and the tests
are running with ANSI IOGate instead of the Windows adapter on MINGW.
So parallel test results were different to that of a single process.
This commit fixes these differencies.
Reline: Fix changed test results due to change to UTF-8 on Windows
In commit f8ea2860b0cac1aec79978e6c44168802958e8af the Reline encoding
for native windows console was changed to hardcoded UTF-8.
This caused failures in reline and readline tests, but they were hidden,
because parallel ruby tests incorrectly used Reline::ANSI as IOGate.
Tests failures were raised in single process mode, but not with -j switch.
This patch corrects encodings on native Windows console.
[ruby/irb] [ruby/irb] Rewrite an expression to detect multiline
The previous version of the test method used a symbol, ":abcdefg" to complete
but longer symbols that can be completed are defined by other test methods of
other libs.
test/irb/test_completion.rb: suppress a warning: unused literal ignored
[ruby/reline] Use IO#write instead of IO#print
IO#print always adds a string of $\ automatically.
Reline inports the test files and uses them in its CI. Adding the ENV control allows it to only run the TestRelineAsReadline classes.
Omit test_using_quoting_detection_proc_with_multibyte_input temporarily for random order test
support random order test.
test_readline:
HISTORY should be empty.
test_using_quoting_detection_proc:
test_using_quoting_detection_proc_with_multibyte_input:
Readline.completer_quote_characters= and
Readline.completer_word_break_characters= doesn't accept nil,
so skip if previous values are nil.
Set Readline.completion_append_character = nil always
GNU Readline add a white space when Readline.completion_append_character is
not initialized.
Fix a typo [ci skip]
skip test if Reline.completion_proc is nil.
Some other tests can set Reline.completion_proc, so if it is nil,
simply skip this test.
Reset Reline.point
TestRelineAsReadline#test_insert_text expects Readline.point == 0
at the beginning of the test, but a test violate this assumption.
Failures:
1) Bundler.setup when Bundler is bundled doesn't blow up
Failure/Error: expect(err).to be_empty
expected `"fatal: not a git repository (or any of the parent directories): .git\nfatal: not a git repository (o...the parent directories): .git\nfatal: not a git repository (or any of the parent directories): .git".empty?` to return true, got false
Commands:
$ /home/runner/work/actions/actions/snapshot-master/ruby \
-I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
-rsupport/hax -rsupport/artifice/fail \
/home/runner/work/actions/actions/snapshot-master/libexec/bundle install --retry 0
Resolving dependencies...
Using bundler 2.1.4
Bundle complete! 1 Gemfile dependency, 1 gem now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
# $? => 0
$ /home/runner/work/actions/actions/snapshot-master/ruby \
-I/home/runner/work/actions/actions/snapshot-master/lib:/home/runner/work/actions/actions/snapshot-master/spec/bundler \
-rsupport/hax -rsupport/artifice/fail \
/home/runner/work/actions/actions/snapshot-master/libexec/bundle exec ruby -e \
require\ \'bundler\'\;\ Bundler.setup
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
fatal: not a git repository (or any of the parent directories): .git
# $? => 0
# ./spec/bundler/runtime/setup_spec.rb:1056:in `block (3 levels) in <top (required)>'
# ./spec/bundler/spec_helper.rb:111:in `block (3 levels) in <top (required)>'
# ./spec/bundler/spec_helper.rb:111:in `block (2 levels) in <top (required)>'
# ./spec/bundler/spec_helper.rb:78:in `block (2 levels) in <top (required)>'
make: *** [yes-test-bundler] Error 1
[ruby/irb] Unnamed groups are not captured when named groups are used
Ruby 2.7 backport about IRB (#2990)
Legacy mode:¶
Before this patch:¶
After this patch:¶
https://github.com/ruby/reline/commit/6074069c7d
Drop an invalid char as UTF-8
Add test_completion_with_indent_and_completer_quote_characters
This is for 8a705245e55575d4d310a2e956b89a36a5931971.
The set_auto_indent method calculates the correct number of spaces for
indenting a line. We think there might be a few bugs in this method so
we are testing the current functionality to make sure nothing breaks
when we address those bugs.
Example test failure:
https://github.com/ruby/irb/commit/752d5597ab
This is a workaround for https://github.com/ruby/irb/issues/50
https://github.com/ruby/reline/commit/5725677d1a
This commit fixes the check_newline_depth_difference method to multiple
open braces on one line into account. Before this change we were
subtracting from the depth in check_newline_depth_difference on
every open brace. This is the right thing to do if the opening and
closing brace are on the same line. For example in a method definition we
have an opening and closing parentheses we want to add 1 to our depth,
and then remove it.
However this isn't the correct behavior when the brace spans multiple
lines. If a brace spans multiple lines we don't want to subtract from
check_newline_depth_difference and we want to treat the braces the same
way as we do
end
and allow check_corresponding_token_depth to pop thecorrect depth.
Example of bad behavior:
Example of desired behavior:
https://github.com/ruby/irb/commit/7dc8af01e0
TestRelineAsReadline#test_input_metachar passes on MinGW
Add "require 'openstruct'" what is forgotten
[ruby/irb] Fix lib name of OpenStruct
https://github.com/ruby/irb/commit/1f3a84ab6b
Add load path and require for ruby/ruby
Rescue EOFError
If C-d is pressed before IRB is ready, IRB crashes because EOFError occurs.
Complete indented and quoted string correctly
def foo
''.upca[TAB]
This will be completed to be:
def foo
''.upcase
The indent was gone. This commit fixes the bug.
https://github.com/ruby/irb/issues/55
If we had put multiple open braces on a line the with no closing brace
spaces_of_nest array keeps getting '0' added to it. This means that when
we pop off of this array we are saying that we should be in position zero
for the next line. This is an issue because we don't always want to be
in position 0 after a closing brace.
Example:
In the above example the 'spaces_of_nest' array looks like this after
the first line is entered: [0,0,0]. We really want to be indented 4
spaces for the 1st closing brace 2 for the 2nd and 0 for the 3rd. i.e.
we want it to be: [0,2,4].
We also saw this issue with a heredoc inside of an array.
https://github.com/ruby/irb/commit/80c69c8272
Support history-size in .inputrc correctly
Introduce an abstracted structure about the encoding of Reline
The command prompt on Windows always uses Unicode to take input and print
output but most Reline implementation depends on Encoding.default_external.
This commit introduces an abstracted structure about the encoding of Reline.
Remove an unused setting variable
Use Reline.encoding_system_needs if exists
Add tests for vi_insert and vi_add
Implement vi_insert_at_bol and vi_add_at_eol
[ruby/reline] Implement vi_to_next_char
https://github.com/ruby/reline/commit/066ecb0a21
https://github.com/ruby/reline/commit/0ad3ee63fa
https://github.com/ruby/readline-ext/commit/4d44c12832
Stop using minitest dependent methods
Skip a test that uses assert_ruby_status if it doesn't exist
Use omit instead of skip
Check DONT_RUN_RELINE_TEST envvar
[ruby/irb] Add newline_before_multiline_output
https://github.com/ruby/irb/commit/9eb1801a66
Rails before 5.2 added Array#append as an alias to Array#<< ,
so that it expects only one argument.
However ruby-2.5 added Array#append as an alias to Array#push
which takes any number of arguments.
If irb completion is used in
rails c
(for example "IO.")it fails with:
irb/completion.rb:206:in `<<': wrong number of arguments (given 3, expected 1) (ArgumentError)
Using Array#push instead of Array#append fixes compatibility.
https://github.com/ruby/irb/commit/5b7bbf9c34
The previous detection per get_screen_size fails when stdout is passed
to a pipe. That is the case when running ruby tests in parallel ("-j" switch).
In this case Reline believes that it's running on MinTTY and the tests
are running with ANSI IOGate instead of the Windows adapter on MINGW.
So parallel test results were different to that of a single process.
This commit fixes these differencies.
The code is taken from git sources and translated to ruby.
NtQueryObject() is replaced by GetFileInformationByHandleEx(), because
NtQueryObject() is undocumented and is more difficult to use:
https://github.com/git-for-windows/git/blob/c5a03b1e29c69f3f06c8fabd92493edb73469176/compat/winansi.c#L558
In commit f8ea2860b0cac1aec79978e6c44168802958e8af the Reline encoding
for native windows console was changed to hardcoded UTF-8.
This caused failures in reline and readline tests, but they were hidden,
because parallel ruby tests incorrectly used Reline::ANSI as IOGate.
Tests failures were raised in single process mode, but not with -j switch.
This patch corrects encodings on native Windows console.
https://github.com/ruby/irb/commit/ed5cf375a6
https://github.com/ruby/irb/commit/5b7bbf9c34
https://github.com/ruby/reline/commit/8538e0e10f
Always refer to Reline::IOGate.encoding
Always use UTF-8 for Reline::GeneralIO on Windows
Use test_mode on Reline::History::Test for encoding
[ruby/reline] Support GNOME style Home/End key sequences [Bug #16510]
https://github.com/ruby/reline/commit/788f0df845
https://github.com/ruby/irb/commit/e37dc7e58e
https://github.com/ruby/irb/commit/8f1ab2400c
[ruby/irb] Exclude useless files from RDoc
Fix inaccuracy in encoding tests
These tests assume
Encoding.find('locale') == Encoding.find('external')
and fail if they are distinct.
I mistook Right and Bottom.
https://github.com/ruby/reline/commit/8be401c5f5
A newline is automatically inserted if a character is rendered at eol on
Windows command prompt.
https://github.com/ruby/reline/commit/4bfea07e4a
https://github.com/ruby/reline/commit/41deb1a3d9
https://github.com/ruby/readline-ext/commit/efaca4a5f4
https://github.com/ruby/readline-ext/commit/c0a6303168
https://github.com/ruby/readline-ext/commit/106c31fc1b
This reverts commit 425b2064d394639101854c83a061a0918b33b857.
This cherry-pick was a mistake.
https://github.com/ruby/readline-ext/commit/1df99d1481
https://github.com/ruby/readline-ext/commit/8c33abb13c
https://github.com/ruby/readline-ext/commit/b0b5f709bd
Fix readline build dependency
[ruby/irb] Add test_complete_symbol
https://github.com/ruby/irb/commit/dbbf086c1f
IRB::InputCompletor::PerfectMatchedProc crashes when doc not found because a
variable name was incorrect.
https://github.com/ruby/irb/commit/889fd4928f
A closed brace in auto-indent shouldn't affect the next brace in the same line,
but it behaves like below:
p() {
}
It's a bug.
https://github.com/ruby/irb/commit/fbe59e344f
https://github.com/ruby/irb/commit/5d628ca40e
This reverts commit 3af3431c2c145134996e66f3d8d9ade8ad81bde0.
https://github.com/ruby/irb/commit/6184b227ad
The previous version of the test method used a symbol, ":abcdefg" to complete
but longer symbols that can be completed are defined by other test methods of
other libs.
test/irb/test_completion.rb: suppress a warning: unused literal ignored
[ruby/reline] Use IO#write instead of IO#print
IO#print always adds a string of $\ automatically.
https://github.com/ruby/reline/commit/a93119c847
https://github.com/ruby/irb/commit/a71753f15a
https://github.com/ruby/reline/commit/ea2b182466
irb
doesn't run because this file isn't included in the gem.https://github.com/ruby/irb/commit/73cda56d25
https://github.com/ruby/irb/commit/dd56e06df5
support multi-run test for test_readline.rb
[ruby/irb]
yield
outside method definition is a syntax errorhttps://github.com/ruby/irb/commit/dbc7b059c7
In ruby/ruby, the tests run on both readline & reline by creating four test classes:
Reline inports the test files and uses them in its CI. Adding the ENV control allows it to only run the
TestRelineAsReadline
classes.Omit test_using_quoting_detection_proc_with_multibyte_input temporarily for random order test
support random order test.
test_readline:
HISTORY should be empty.
test_using_quoting_detection_proc:
test_using_quoting_detection_proc_with_multibyte_input:
Readline.completer_quote_characters= and
Readline.completer_word_break_characters= doesn't accept nil,
so skip if previous values are nil.
GNU Readline add a white space when Readline.completion_append_character is
not initialized.
Fix a typo [ci skip]
skip test if Reline.completion_proc is nil.
Some other tests can set Reline.completion_proc, so if it is nil,
simply skip this test.
TestRelineAsReadline#test_insert_text expects Readline.point == 0
at the beginning of the test, but a test violate this assumption.
Convert incompatible encoding symbol names
Ignore incompatible convert of symbols
Add workaround for test-bundler failure
https://github.com/ruby/actions/runs/500526558?check_suite_focus=true#step:16:127
https://github.com/ruby/irb/commit/0a641a69b0
https://github.com/ruby/reline/commit/962ebf5a1b
The old implementation performance test code:
and run
time test.rb
:The new implementation performance test code:
and run
time test.rb
:https://github.com/ruby/irb/commit/40d6610baf
https://github.com/ruby/reline/commit/bce7e7562b
https://github.com/ruby/reline/commit/f092519525
https://github.com/ruby/reline/commit/b0f32f5de4
https://github.com/ruby/reline/commit/2a8061daec
https://github.com/ruby/irb/commit/13572d8cdc
https://github.com/ruby/reline/commit/623dffdd75
intr: true
https://github.com/ruby/io-console/commit/baaf929041
[ruby/io-console] bump up to 0.5.4
[ruby/io-console] Update the minimum requirement of Ruby version
https://github.com/ruby/io-console/commit/73e7b6318a
This breaks tests using this path on JRuby because the
jruby
executable turns into
jjruby
after the sub.https://github.com/ruby/io-console/commit/e5951aa34c
[ruby/io-console] bump up to 0.5.5
[ruby/io-console] Prefer keyword arguments
https://github.com/ruby/io-console/commit/5facbfc4c8
intr:
https://github.com/ruby/io-console/commit/82b630cd79
https://github.com/ruby/io-console/commit/41b6f09574
Co-authored-by: KOBAYASHI Shuji [email protected]
Co-authored-by: Ben [email protected]
Co-authored-by: Yusuke Endoh [email protected]
Co-authored-by: MSP-Greg [email protected]
Co-authored-by: Nobuyoshi Nakada [email protected]
Co-authored-by: Kenta Murata [email protected]
Co-authored-by: Lars Kanis [email protected]
Co-authored-by: Lars Kanis [email protected]
Co-authored-by: Alan Wu [email protected]
Co-authored-by: Hiroshi SHIBATA [email protected]
Co-authored-by: Nobuhiro IMAI [email protected]
Co-authored-by: Nick Lewis [email protected]
Co-authored-by: S-H-GAMELINKS [email protected]
Co-authored-by: Koichi Sasada [email protected]
Co-authored-by: Kazuhiro NISHIYAMA [email protected]
Co-authored-by: Charles Oliver Nutter [email protected]