rake icon indicating copy to clipboard operation
rake copied to clipboard

Rake::TestTask raises an error when the test path includes non-ascii characters on Windows

Open masa-kunikata opened this issue 6 years ago • 4 comments

When a test file path includes non-ascii characters, rake test task Rake::TestTask fails with a message

File does not exist: [test_target_file_name]

It seems the task can't find a file with non-ascii path on Windows.


Summary page including a procedure for reproducing https://github.com/masa-kunikata/rake_test_task_non_ascii_path

masa-kunikata avatar Dec 24 '19 23:12 masa-kunikata

I think the cause of this error is Ruby's bug.

The Rake::TestTask job is executing an external ruby process. The external process calls rake_test_loader.rb with ruby's command -I option. When the current directory path includes non-ascii character, require fails because of ruby's bug reported below.

Non-ASCII characters in the path to ruby executable break require paths https://bugs.ruby-lang.org/issues/9737

A case "require" fails when current directory path contains Japanese character https://bugs.ruby-lang.org/issues/13863#note-5

masa-kunikata avatar Dec 26 '19 10:12 masa-kunikata

Do you still have this problem? Could you check whether https://github.com/ruby/rake/pull/357 fixes it?

deivid-rodriguez avatar Jun 12 '20 11:06 deivid-rodriguez

@deivid-rodriguez Thank you for your reply!!!

It seems that the error occurs even with the #357 patch.

Though the error message is different from the original one, I think the root cause is the same and it lies in Ruby itself.


Summary

current dir -> Non ascii path
"あいうえお"
Ascii path
"abcde"
rake v13.0.1 Error
File does not exist: target
OK
rake v13.0.1
patched #357 PR
Error
cannot load such file -- target (LoadError)
OK

Details

  • Non ascii path current directory

    C:\temp\rake_test_task_non_ascii_path\あいうえお>rake

(Error) rake v13.0.1
C:/Ruby26-x64/bin/ruby.exe -w -I"lib;lib;test" -I"C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib" "C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb" "test/target_test.rb"

File does not exist: target

rake aborted! Command failed with status (1): [ruby -w -I"lib;lib;test" -I"C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib" "C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb" "test/target_test.rb" ]

Tasks: TOP => default => tsk (See full trace by running task with --trace)

(Error) rake v13.0.1 patched #357 PR
C:/Ruby26-x64/bin/ruby.exe -w -I"lib;lib;test" -rC:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader "test/target_test.rb"
Traceback (most recent call last):
        2: from test/target_test.rb:2:in `
' 1: from C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require' C:/Ruby26-x64/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- target (LoadError) rake aborted! Command failed with status (1): [ruby -w -I"lib;lib;test" -rC:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader "test/target_test.rb" ] Tasks: TOP => default => tsk (See full trace by running task with --trace)
  • Ascii path current directory

    C:\temp\rake_test_task_non_ascii_path\abcde>rake

(OK) rake v13.0.1
C:/Ruby26-x64/bin/ruby.exe -w -I"lib;lib;test" -I"C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib" "C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader.rb" "test/target_test.rb"
Loaded suite C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader
Started
.
Finished in 0.0015035 seconds.
------------------------------------------------------------------------------------------------------------------------
1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
------------------------------------------------------------------------------------------------------------------------
665.11 tests/s, 665.11 assertions/s
(OK) rake v13.0.1 patched #357 PR
C:/Ruby26-x64/bin/ruby.exe -w -I"lib;lib;test" -rC:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rake-13.0.1/lib/rake/rake_test_loader "test/target_test.rb"
Loaded suite test/target_test
Started
.
Finished in 0.0012415 seconds.
------------------------------------------------------------------------------------------------------------------------
1 tests, 1 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
------------------------------------------------------------------------------------------------------------------------
805.48 tests/s, 805.48 assertions/s

masa-kunikata avatar Jun 14 '20 07:06 masa-kunikata

Right, I figured that would be the case, but since the crashing code is no longer hit with #357 I figured it was worth trying just to make sure! In any case, it wouldn't have really fixed the root cause, only circumvent it.

I hope your issue gets fixed!

deivid-rodriguez avatar Jun 14 '20 10:06 deivid-rodriguez