elixir-lang / elixir

Elixir is a dynamic, functional language for building scalable and maintainable applications
https://elixir-lang.org/
Apache License 2.0
24.55k stars 3.38k forks source link

There are just 49 failures out of 1075 tests on Windows #1231

Closed AlbertMoscow closed 11 years ago

AlbertMoscow commented 11 years ago

https://github.com/elixir-lang/elixir/blob/stable/lib/elixir/test/elixir/file_test.exs

....FFFFFFF....FF..FF.....FF.............FFFF......FFFFFFFFFF..FFF...F..F....FF.....FFF..........FF...

Failures:

1) test_rm_rf (FileTest.Rm) \ (File.CopyError) could not copy recursively from u:/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to u:/elixir/lib/elixir/test/tmp/tmp: I/O error at file_test.exs:772

2) test_rm_rf! (FileTest.Rm) \ (File.CopyError) could not copy recursively from u:/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to u:/elixir/lib/elixir/test/tmp/tmp: I/O error at file_test.exs:842

3) test_rm_rf_with_char_list (FileTest.Rm) \ (File.CopyError) could not copy recursively from u:/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to u:/elixir/lib/elixir/test/tmp/tmp: I/O error at file_test.exs:806

4) test_rm_rf_with_file (FileTest.Rm) \ (ExUnit.ExpectationError) expected: {:error,:eio} to be equal to (==): {:ok,["u:/elixir/lib/elixir/test/tmp/tmp"]} at file_test.exs:826

5) test_rm_rf_with_invalid (FileTest.Rm) \ (ExUnit.ExpectationError) expected: {:ok,[]} to be equal to (==): {:error,:enotdir} at file_test.exs:836

6) test_rm_rf_with_invalid! (FileTest.Rm) \ (ExUnit.AssertionError) Expected File.Error exception but nothing was raised at file_test.exs:861

7) test_rm_rf_with_symlink (FileTest.Rm) \ (ExUnit.AssertionError) Expected false to be true at file_test.exs:794

8) test_rmdir_with_file (FileTest.Rm) \ (ExUnit.ExpectationError) expected: {:error,:eio} to be equal to (==): {:error,:enotdir} at file_test.exs:751

9) test_rmdir_with_file! (FileTest.Rm) \ (ExUnit.ExpectationError) expected file.error[reason: :eio, action: "remove directory", path: "u:/elixir/lib/elixir/test/elixir/fixtures/file.txt"]'s message: "could not remove directory u:/elixir/lib/elixir/test/elixir/fixtures/file.txt: not a directory" to match: "could not remove directory u:/elixir/lib/elixir/test/elixir/fixtures/file.txt: I/O error" at file_test.exs:764

10) test_mkdir_p_with_invalid_path (FileTest.Mkdir) \ (ExUnit.ExpectationError) expected: {:error,:enoent} to be equal to (==): {:error,:enotdir} at file_test.exs:670

11) test_mkdir_p_with_invalid_path! (FileTest.Mkdir) \ (ExUnit.ExpectationError) expected file.error[reason: :enoent, action: "make directory (with -p)", path: "u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test"]'s message: "could not make directory (with -p) u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: not a directory" to match: "could not make directory (with -p) u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: no such file or directory" at file_test.exs:689

12) test_mkdir_with_invalid_path (FileTest.Mkdir) \ (ExUnit.ExpectationError) expected: {:error,:enoent} to be equal to (==): {:error,:enotdir} at file_test.exs:589

13) test_mkdir_with_invalid_path! (FileTest.Mkdir) \ (ExUnit.ExpectationError) expected file.error[reason: :enoent, action: "make directory", path: "u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test"]'s message: "could not make directory u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: not a directory" to match: "could not make directory u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: no such file or directory" at file_test.exs:608

14) test_read! (FileTest.OpenReadWrite) \ (ExUnit.ExpectationError) expected: "FOO\r\n" to be equal to (==): "FOO\n" at file_test.exs:436

15) test_read_with_binary (FileTest.OpenReadWrite) \ (ExUnit.ExpectationError) expected: {:ok,"FOO\r\n"} to match pattern (=): {:ok, "FOO\n"} at file_test.exs:422

16) test_read_with_list (FileTest.OpenReadWrite) \ (ExUnit.ExpectationError) expected: {:ok,"FOO\r\n"} to match pattern (=): {:ok, "FOO\n"} at file_test.exs:427

17) test_read_with_utf8 (FileTest.OpenReadWrite) \ (ExUnit.ExpectationError) expected: {:ok,"Русский\r\n日\r\n"} to match pattern (=): {:ok, "Русский\n日\n"} at file_test.exs:432

18) test_cp_r! (FileTest.Cp) \ (File.CopyError) could not copy recursively from u:/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to u:/elixir/lib/elixir/test/tmp/tmp: I/O error at file_test.exs:347

19) test_cp_r_with_dir_and_file_conflict (FileTest.Cp) \ (ExUnit.ExpectationError) expected: {:error,:eio} to be equal to (==): {:error,:enotdir} at file_test.exs:271

20) test_cp_r_with_src_dir_and_dest_dir (FileTest.Cp) \ (MatchError) no match of right hand side value: {:error,:eio} at file_test.exs:188

21) test_cp_r_with_src_dir_and_dest_dir_using_lists (FileTest.Cp) \ (MatchError) no match of right hand side value: {:error,:eio} at file_test.exs:288

22) test_cp_r_with_src_dir_and_dest_file (FileTest.Cp) \ (ExUnit.ExpectationError) expected: {:error,:enoent} to be equal to (==): {:error,:enotdir} at file_test.exs:232

23) test_cp_r_with_src_dir_and_dest_unknown (FileTest.Cp) \ (MatchError) no match of right hand side value: {:error,:eio} at file_test.exs:247

24) test_cp_r_with_src_dir_dot_and_dest_dir (FileTest.Cp) \ (MatchError) no match of right hand side value: {:error,:eio} at file_test.exs:215

25) test_cp_r_with_src_file_and_dest_dir (FileTest.Cp) \ (ExUnit.AssertionError) Expected true to be false at file_test.exs:156

26) test_cp_r_with_src_file_and_dest_file (FileTest.Cp) \ (ExUnit.ExpectationError) expected: {:error,:eio} to be equal to (==): {:ok,["u:/elixir/lib/elixir/test/tmp/sample.txt"]} at file_test.exs:141

27) test_cp_r_with_src_file_and_dest_unknown (FileTest.Cp) \ (ExUnit.AssertionError) Expected true to be false at file_test.exs:169

28) test_cp_r_with_src_with_file_conflict (FileTest.Cp) \ (File.Error) could not write to file u:/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory at file_test.exs:305

29) test_cp_r_with_src_with_file_conflict_callback (FileTest.Cp) \ (File.Error) could not write to file u:/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory at file_test.exs:321

30) test_cp_with_conflict (FileTest.Cp) \ (ExUnit.ExpectationError) expected: "FOO\r\n" to be equal to (==): "FOO\n" at file_test.exs:84

31) test_cp_with_src_file_and_dest_dir (FileTest.Cp) \ (ExUnit.AssertionError) Expected true to be false at file_test.exs:48

32) test_cp_with_src_file_and_dest_unknown (FileTest.Cp) \ (ExUnit.AssertionError) Expected true to be false at file_test.exs:61

33) test_copy (FileTest) \ (ExUnit.ExpectationError) expected: {:ok,5} to be equal to (==): {:ok,4} at file_test.exs:993

34) test_copy! (FileTest) \ (ExUnit.ExpectationError) expected: 5 to be equal to (==): 4 at file_test.exs:1023

35) test_cwd_and_cd_with_utf8 (FileTest) \ (File.Error) could not set current working directory to u:/elixir/lib/elixir/test/elixir/fixtures/héllò: no such file or directory stacktrace: /Volumes/Work/github/elixir/lib/elixir/lib/file.ex:892: File.cd!/2 file_test.exs:1062: FileTest.test_cwd_and_cd_with_utf8/1

36) test_invalid_cd (FileTest) \ (ExUnit.ExpectationError) expected: {:error,:enoent} to be equal to (==): {:error,:enotdir} at file_test.exs:1069

37) test_invalid_cd! (FileTest) \ (ExUnit.ExpectationError) expected file.error[reason: :enoent, action: "set current working directory to", path: "u:/elixir/lib/elixir/test/elixir/fixtures/file.txt"]'s message: "could not set current working directory to u:/elixir/lib/elixir/test/elixir/fixtures/file.txt: not a directory" to match: "could not set current working directory to u:/elixir/lib/elixir/test/elixir/fixtures/file.txt: no such file or directory" at file_test.exs:1074

38) test_touch_with_failure (FileTest) \ (ExUnit.ExpectationError) expected: {:error,:enoent} to be equal to (==): {:error,:enotdir} at file_test.exs:1118

39) test_touch_with_failure! (FileTest) \ (ExUnit.ExpectationError) expected file.error[reason: :enoent, action: "touch", path: "u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/bar"]'s message: "could not touch u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/bar: not a directory" to match: "could not touch u:/elixir/lib/elixir/test/elixir/fixtures/file.txt/bar: no such file or directory" at file_test.exs:1127

Finished in 6.8 seconds (1.4s on load, 5.3s on tests) 102 tests, 39 failures [Finished in 9.2s with exit code 1]

https://github.com/elixir-lang/elixir/blob/stable/lib/elixir/test/elixir/io_test.exs

..F........

Failures:

1) test_getn (IOTest) \ (ExUnit.ExpectationError) expected: "\n" to be equal to (==): "\r" at io_test.exs:29

Finished in 0.5 seconds (0.2s on load, 0.3s on tests) 11 tests, 1 failures [Finished in 2.8s with exit code 1]

https://github.com/elixir-lang/elixir/blob/stable/lib/elixir/test/elixir/path_test.exs

FF....FFF...........F.FF

Failures:

1) test_absname_with_binary (PathTest) \ (ExUnit.ExpectationError) expected: "u:/foo/bar" to be equal to (==): "/foo/bar" at path_test.exs:82

2) test_absname_with_list (PathTest) \ (ExUnit.ExpectationError) expected: 'u:/foo/bar' to be equal to (==): '/foo/bar' at path_test.exs:94

3) test_expand_path_with_binary (PathTest) \ (ExUnit.ExpectationError) expected: "u:/foo/bar" to be equal to (==): "/foo/bar" at path_test.exs:116

4) test_expand_path_with_list (PathTest) \ (ExUnit.ExpectationError) expected: 'u:/foo/bar' to be equal to (==): '/foo/bar' at path_test.exs:132

5) test_expand_path_with_user_home (PathTest) \ (ExUnit.ExpectationError) expected: "C:\erl5.10.1\erts-5.10.1\bin;C:\elixir\bin" to be equal to (==): "c:/erl5.10.1/erts-5.10.1/bin;C:elixir/bin" at path_test.exs:103

6) test_split_with_binary (PathTest) \ (ExUnit.ExpectationError) expected: [] to be equal to (==): ["/"] at path_test.exs:241

7) test_type (PathTest) \ (ExUnit.ExpectationError) expected: :volumerelative to be equal to (==): :absolute at path_test.exs:67

8) test_wildcard (PathTest) \ (ExUnit.ExpectationError) expected: [] to be equal to (==): ["u:/elixir/lib/elixir/test/elixir/fixtures/héllò"] at path_test.exs:10

Finished in 0.5 seconds (0.3s on load, 0.1s on tests) 24 tests, 8 failures [Finished in 2.9s with exit code 1]

https://github.com/elixir-lang/elixir/blob/stable/lib/elixir/test/elixir/system_test.exs

..."binary" is not recognized as an internal or external command, operable program or batch file. "binary" is not recognized as an internal or external command, operable program or batch file. ..F.....

Failures:

1) test_cwd_with_utf8 (SystemTest) \ (File.Error) could not set current working directory to u:/elixir/lib/elixir/test/elixir/fixtures/héllò: no such file or directory stacktrace: /Volumes/Work/github/elixir/lib/elixir/lib/file.ex:892: File.cd!/2 system_test.exs:24: SystemTest.test_cwd_with_utf8/1

Finished in 4.8 seconds (0.2s on load, 4.6s on tests) 11 tests, 1 failures [Finished in 7.0s with exit code 1]

And it seems to me this one especially needs to be rethought:

test :cmd do assert is_binary(System.cmd "binary") assert is_list(System.cmd 'binary') end

josevalim commented 11 years ago

Oh, this is awesome! Thanks for the report.

@AlbertMoscow, how have you compiled Elixir on Windows? Doesn't it require make to run all the Makefile commands?

alexrp commented 11 years ago

Last I checked, you can build Elixir in a MinGW shell.

AlbertMoscow commented 11 years ago

@josevalim, that's right! I used MinGW shell with MSYS installed when was trying to compile Elixir on Windows.

http://www.mingw.org/wiki/MSYS

http://www.mingw.org/wiki/Getting_Started

http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

One should never forget to add to his or her Path:

;C:\MinGW\bin;C:\MinGW\msys\1.0\bin

and restart the computer. :)

josevalim commented 11 years ago

Thanks @AlbertMoscow! I have fixed a couple of those but I don't have a Windows machine set up. Would you be interested in helping us getting our suite green on Windows? I am making myself available for any kind of help you may need on this task. :)

AlbertMoscow commented 11 years ago

@josevalim, of course! Do you mean testing your fixes on my Windows machine, don't you?

josevalim commented 11 years ago

@AlbertMoscow I mean by testing my fixes and helping us investigating and fixing the other ones. :)

AlbertMoscow commented 11 years ago

@josevalim, I believe we understood each other! :)

AlbertMoscow commented 11 years ago

José, are your fixes in master branch? I'd like to test them.

josevalim commented 11 years ago

In the master branch, yes.

AlbertMoscow commented 11 years ago

Great news! There are two books awaiting for Elixir 1.0 to come out by the end of this year, so you guys have whole six months to fix all 46 remaining failures in 1074 tests on Windows. :)

josevalim commented 11 years ago

And with our community growing every day, hopefully many developers will help us tackle this task by sending lovely pull requests! :D :heart: :green_heart: :blue_heart: :yellow_heart: :purple_heart:

ToJans commented 11 years ago

@AlbertMoscow I also have mingw etc, and eveything in the path, but somehow I get the following error:

Tom@Jommeke /C/dev/elixir/elixir
$ mix compile
/c/Program Files/elixir/bin/elixir: line 2: [: too many arguments
/c/Program Files/elixir/bin/elixir: line 2: [: too many arguments
c:/dev/elixir/elixir/lib/eex/lib/eex/smart_engine.ex:1: redefining module EEx.TransformerEngine
c:/dev/elixir/elixir/lib/elixir/lib/behaviour.ex:1: redefining module Behaviour
c:/dev/elixir/elixir/lib/eex/lib/eex/tokenizer.ex:1: redefining module EEx.Tokenizer
c:/dev/elixir/elixir/lib/eex/lib/eex/engine.ex:1: redefining module EEx.Engine
c:/dev/elixir/elixir/lib/elixir/lib/application/behaviour.ex:1: redefining module Application.Behaviour
c:/dev/elixir/elixir/lib/eex/lib/eex/compiler.ex:1: redefining module EEx.State
c:/dev/elixir/elixir/lib/elixir/lib/access.ex:3: redefining module Access
c:/dev/elixir/elixir/lib/eex/lib/eex.ex:1: redefining module EEx.SyntaxError
c:/dev/elixir/elixir/lib/eex/lib/eex/smart_engine.ex:47: redefining module EEx.AssignsEngine
Compiled lib/elixir/lib/application/behaviour.ex
Compiled lib/eex/lib/eex/engine.ex
c:/dev/elixir/elixir/lib/eex/lib/eex/smart_engine.ex:88: redefining module EEx.SmartEngine
c:/dev/elixir/elixir/lib/elixir/lib/binary/chars.ex:3: redefining module Binary.Chars
c:/dev/elixir/elixir/lib/elixir/lib/access.ex:22: redefining module Access.List
Compiled lib/elixir/lib/behaviour.ex
Compiled lib/eex/lib/eex/tokenizer.ex
c:/dev/elixir/elixir/lib/elixir/lib/binary/inspect.ex:3: redefining module Binary.Inspect
c:/dev/elixir/elixir/lib/elixir/lib/bitwise.ex:1: redefining module Bitwise
Compiled lib/eex/lib/eex/smart_engine.ex
c:/dev/elixir/elixir/lib/elixir/lib/access.ex:47: redefining module Access.Atom
== Compilation error on file lib/eex/lib/eex.ex ==
c:/dev/elixir/elixir/lib/elixir/lib/code.ex:1: redefining module Code
** (CompileError) c:/dev/elixir/elixir/lib/eex/lib/eex.ex:1: type '->'(_) undefined

Any tips/pointers/... ?

josevalim commented 11 years ago

All, you need to run make compile and make test. Please don't use mix to compile elixir as it runs into bootstrapping issues! :D

ToJans commented 11 years ago

Tried with make, other error:

Tom@Jommeke /C/dev/elixir/elixir
$ make compile
==> elixir (compile)
{error_logger,{{2013,6,17},{14,26,37}},std_error,"File operation error: eio. Target: :c:/dev/elixir/elixir/bin/../lib. Function: list_dir. Process: code_server.
"}

=ERROR REPORT==== 17-Jun-2013::16:26:37 ===
File operation error: eio. Target: :c:/dev/elixir/elixir/bin/../lib. Function: list_dir. Process: code_server.
{"init terminating in do_boot",{undef,[{elixir,start_cli,[],[]},{init,start_it,1,[{file,"init.erl"},{line,1054}]},{init,start_em,1,[{file,"init.erl"},{line,1034
}]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
make: *** [lib/mix/ebin/mix.app] Error 1
josevalim commented 11 years ago

Try make clean, to clean up any possible garbage generated by mix compile and then please try make compile again. Maybe git clean -df to remove unchecked files too.

ToJans commented 11 years ago

it crashes again on lib/mix/lib/mix/version.ex I presume:

==> eex (compile)
Compiled lib/eex/lib/eex/engine.ex
Compiled lib/eex/lib/eex/tokenizer.ex
Compiled lib/eex/lib/eex/smart_engine.ex
Compiled lib/eex/lib/eex.ex
Compiled lib/eex/lib/eex/compiler.ex
==> mix (compile)
Compiled lib/mix/lib/mix/archive.ex
Compiled lib/mix/lib/mix/deps/lock.ex
Compiled lib/mix/lib/mix/cli.ex
Compiled lib/mix/lib/mix/generator.ex
Compiled lib/mix/lib/mix.ex
Compiled lib/mix/lib/mix/local.ex
Compiled lib/mix/lib/mix/scm.ex
Compiled lib/mix/lib/mix/scm/path.ex
Compiled lib/mix/lib/mix/rebar.ex
Compiled lib/mix/lib/mix/shell.ex
Compiled lib/mix/lib/mix/scm/git.ex
Compiled lib/mix/lib/mix/sup.ex
Compiled lib/mix/lib/mix/shell/io.ex
Compiled lib/mix/lib/mix/shell/process.ex
Compiled lib/mix/lib/mix/deps/converger.ex
Compiled lib/mix/lib/mix/task.ex
Compiled lib/mix/lib/mix/tasks/iex.ex
Compiled lib/mix/lib/mix/tasks/archive.ex
Compiled lib/mix/lib/mix/tasks/loadpaths.ex
Compiled lib/mix/lib/mix/tasks/deps.unlock.ex
Compiled lib/mix/lib/mix/tasks/do.ex
Compiled lib/mix/lib/mix/tasks/clean.ex
Compiled lib/mix/lib/mix/tasks/local.rebar.ex
Compiled lib/mix/lib/mix/tasks/compile.yecc.ex
Compiled lib/mix/lib/mix/tasks/local.ex
Compiled lib/mix/lib/mix/tasks/run.ex
Compiled lib/mix/lib/mix/tasks/compile.leex.ex
Compiled lib/mix/lib/mix/tasks/app.start.ex
Compiled lib/mix/lib/mix/tasks/local.uninstall.ex
Compiled lib/mix/lib/mix/tasks/help.ex
Compiled lib/mix/lib/mix/tasks/compile.ex
Compiled lib/mix/lib/mix/tasks/local.install.ex
Compiled lib/mix/lib/mix/tasks/compile.elixir.ex
Compiled lib/mix/lib/mix/tasks/test.ex
Compiled lib/mix/lib/mix/deps/retriever.ex
Compiled lib/mix/lib/mix/tasks/compile.app.ex
Compiled lib/mix/lib/mix/tasks/escriptize.ex
Compiled lib/mix/lib/mix/deps.ex
Compiled lib/mix/lib/mix/utils.ex
Compiled lib/mix/lib/mix/tasks/deps.loadpaths.ex
Compiled lib/mix/lib/mix/tasks/deps.ex
Compiled lib/mix/lib/mix/tasks/deps.clean.ex
Compiled lib/mix/lib/mix/tasks/deps.check.ex
Compiled lib/mix/lib/mix/tasks/deps.get.ex
Compiled lib/mix/lib/mix/tasks/deps.update.ex
Compiled lib/mix/lib/mix/tasks/deps.compile.ex
Compiled lib/mix/lib/mix/tasks/compile.erlang.ex
Compiled lib/mix/lib/mix/server.ex
Compiled lib/mix/lib/mix/project.ex
Compiled lib/mix/lib/mix/tasks/new.ex
Compiled lib/mix/lib/mix/exceptions.ex
Compiled lib/mix/lib/mix/version.ex
{error_logger,{{2013,6,17},{14,34,9}},std_error,"File operation error: eio. Target: :c:/dev/elixir/elixir/bin/../lib. Function: list_dir. Process: code_server."
}

=ERROR REPORT==== 17-Jun-2013::16:34:09 ===
File operation error: eio. Target: :c:/dev/elixir/elixir/bin/../lib. Function: list_dir. Process: code_server.
{"init terminating in do_boot",{undef,[{elixir,start_cli,[],[]},{init,start_it,1,[{file,"init.erl"},{line,1054}]},{init,start_em,1,[{file,"init.erl"},{line,1034
}]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
make: *** [lib/mix/ebin/mix.app] Error 1

Tom@Jommeke /C/dev/elixir/elixir
josevalim commented 11 years ago

@ToJans It seems it compiled mix successfully and then it attempted to run something else but failed. It seems Elixir is failing to boot in the first place. Can you get bin/elixir -v to run?

ToJans commented 11 years ago

Elixir works:

Tom@Jommeke /C/dev/elixir/elixir
$ bin/elixir -v
Elixir 0.9.3.dev

However, when I run make test it crashes, because it tries to compile mix I think. Could it be that this has something to do with a place where you fetch the version, or is this hard-coded? When I run bin/mix -v I get the wrong version:

Tom@Jommeke /C/dev/elixir/elixir
$ bin/mix -v
Elixir 0.9.2.dev
josevalim commented 11 years ago

Ah, I know what is happening! The Makefile is trying to run bin/elixir which calls:

$ erl -env ERL_LIBS $ERL_LIBS:"$SCRIPT_PATH/../lib"

Notice it uses : as a separator but, for Windows, the separator should be ;. So Erlang considers the path to be invalid and fails to boot. Now, I don't know why bin/mix -v works... maybe because it is automatically picking up the .bat file?

Anyway, the solution seems to change the Makefile to pick the bin/elixir.bat instead of bin/elixir for Windows. We could give it a rough try though: Try replacing bin/elixir by bin/elixir.bat in the Makefile, the same for bin/elixirc. Does it solve the issue?

ToJans commented 11 years ago

I tried it, but it does not work, as MSys has problems executing batch files apparently:

checkout this gist: https://gist.github.com/ToJans/5797448/revisions

josevalim commented 11 years ago

@ToJans for now, it may be easier to change the bin/elixir file to use ; instead of : in your local version. Do you have any idea of how we could find this information out in the shell file?

ToJans commented 11 years ago

I have not tried yet,as I first have to put the kids to bed, but in the mean time I found a way to detect msys:

Tom@Jommeke /C/dev/elixir/elixir/bin
$ which msys-1.0.dll
/bin/msys-1.0.dll

I would assume msys-1.0.dll is unavailable on non-msys-systems ;-)

josevalim commented 11 years ago

Is there a way we could run this check but without the version? :)

ToJans commented 11 years ago
Tom@Jommeke /C/dev/elixir/elixir/bin
$ echo $MSYSTEM
MINGW32
josevalim commented 11 years ago

@ToJans Awesome! Can you send a pull request that changes our bin/elixir file to use ";" or ":" based on $MSYSTEM or would you prefer if I tackled that here? :) I really appreciate all the help!

ToJans commented 11 years ago

I changed all the : to \;, but the build seems to fail: https://gist.github.com/ToJans/5799189/revisions This is the output from make compile(after a make clean):

Tom@Jommeke /C/dev/elixir/elixir
$ make clean
==> elixir (clean)
rm -rf ebin
rm -rf lib/*/ebin
rm -rf lib/*/test/tmp
rm -rf lib/mix/test/fixtures/git_repo
rm -rf lib/*/tmp
rm -rf lib/elixir/src/elixir.app.src
rm -rf lib/elixir/src/*_lexer.erl
rm -rf lib/elixir/src/*_parser.erl
rm -rf lib/elixir/test/ebin

Tom@Jommeke /C/dev/elixir/elixir
$ make compile
==> elixir (compile)
Compiled src/elixir_parser.yrl
Compiled src/elixir.erl
Compiled src/elixir_aliases.erl
Compiled src/elixir_clauses.erl
Compiled src/elixir_code_server.erl
Compiled src/elixir_compiler.erl
Compiled src/elixir_def_defaults.erl
Compiled src/elixir_def_local.erl
Compiled src/elixir_def.erl
Compiled src/elixir_def_overridable.erl
Compiled src/elixir_errors.erl
Compiled src/elixir_import.erl
Compiled src/elixir_dispatch.erl
Compiled src/elixir_literal.erl
Compiled src/elixir_interpolation.erl
Compiled src/elixir_module.erl
Compiled src/elixir_partials.erl
Compiled src/elixir_macros.erl
Compiled src/elixir_quote.erl
Compiled src/elixir_scope.erl
Compiled src/elixir_sup.erl
Compiled src/elixir_tracker.erl
Compiled src/elixir_translator.erl
Compiled src/elixir_tree_helpers.erl
Compiled src/elixir_tokenizer.erl
Compiled src/elixir_try.erl
Compiled src/elixir_parser.erl
==> bootstrap (compile)
Compiled lib/elixir/lib/kernel.ex
Compiled lib/elixir/lib/keyword.ex
Compiled lib/elixir/lib/list.ex
Compiled lib/elixir/lib/kernel/typespec.ex
Compiled lib/elixir/lib/module.ex
Compiled lib/elixir/lib/record.ex
Compiled lib/elixir/lib/macro.ex
Compiled lib/elixir/lib/macro/env.ex
Compiled lib/elixir/lib/exception.ex
Compiled lib/elixir/lib/code.ex
Compiled lib/elixir/lib/protocol.ex
Compiled lib/elixir/lib/enum.ex
Compiled lib/elixir/lib/binary/inspect.ex
Compiled lib/elixir/lib/binary/chars.ex
Compiled lib/elixir/lib/io.ex
Compiled lib/elixir/lib/path.ex
Compiled lib/elixir/lib/system.ex
Compiled lib/elixir/lib/kernel/cli.ex
Compiled lib/elixir/lib/kernel/error_handler.ex
Compiled lib/elixir/lib/kernel/parallel_compiler.ex
Compiled lib/elixir/lib/kernel/record_rewriter.ex
Compiled lib/elixir/lib/module/dispatch_tracker.ex
==> kernel (compile)
{"init terminating in do_boot",{undef,[{elixir,start_cli,[],[]},{init,start_it,1,[{file,"init.erl"},{line,1054}]},{init,start_em,1,[{file,"init.erl"},{line,1034
}]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
make: *** [lib/elixir/ebin/Elixir.Kernel.beam] Error 1
josevalim commented 11 years ago

The code is failing because it can't find the elixir.beam file. So I am assuming that replacing ":" by ";" in ERL_LIBS wasn't effective, as it still can't find the directory. :(

Here are some ideas. If you replace in bin/elixir:

-env ERL_LIBS $ERL_LIBS:"$SCRIPT_PATH/../lib"

Simply by:

-env ERL_LIBS $SCRIPT_PATH/../lib

Does it work?

Also, what is $SCRIPT_PATH/../lib returning for you? Maybe it is pointing to the wrong location? If so, maybe that's why it can't find elixir.beam?

ToJans commented 11 years ago

$SCRIPT_PATH/../lib points to /c:/dev/elixir/elixir/bin/../lib The beam file is not under the lib folder, but under the lib/elixir/ebin/elixir folder, maybe that is the problem?

Tom@Jommeke /C/dev/elixir/elixir
$ ls lib/
eex/     elixir/  ex_unit/ iex/     mix/

Tom@Jommeke /C/dev/elixir/elixir
$ ls lib/elixir/
ebin/         include/      lib/          mix.exs       priv/         rebar.config  src/          test/

Tom@Jommeke /C/dev/elixir/elixir
$ ls lib/elixir/ebin/
Display all 147 possibilities? (y or n)

Tom@Jommeke /C/dev/elixir/elixir
$ ls lib/elixir/ebin/elixir
elixir.app                   elixir_def.beam              elixir_import.beam           elixir_partials.beam         elixir_translator.beam
elixir.beam                  elixir_def_defaults.beam     elixir_interpolation.beam    elixir_quote.beam            elixir_tree_helpers.beam
elixir_aliases.beam          elixir_def_local.beam        elixir_literal.beam          elixir_scope.beam            elixir_try.beam
elixir_clauses.beam          elixir_def_overridable.beam  elixir_macros.beam           elixir_sup.beam
elixir_code_server.beam      elixir_dispatch.beam         elixir_module.beam           elixir_tokenizer.beam
elixir_compiler.beam         elixir_errors.beam           elixir_parser.beam           elixir_tracker.beam
josevalim commented 11 years ago

/c:/dev/elixir/elixir/bin/../lib this is supposed to be correct (unless Windows is choking on the ..). ERL_LIBS works by automatically adding everything in */ebin to the load path, that's why it is expected to work. :)

ToJans commented 11 years ago

Aha!! I found out a while ago that on windows things like erl -pa lib/*/ebin do not work on windows... I solved this by adding -pa lib/xxx/ebin for every individual folder. Somehow all of this does not make sense, as @AlbertMoscow had no problems compiling... Maybe we should wait for his input? Another idea: maybe we can setup a screen sharing session or something similar tomorrow, as I feel this might go a bit quicker; I can use Skype or Join.me or something similar....

AlbertMoscow commented 11 years ago

@ToJans, hi! I assume, you have msysgit (Git for Windows) installed on your computer along with MinGW and MSYS (if not, please, download it from here: http://git-scm.com/downloads).

Here is my approach of how to make test the master branch of Elixir on Windows:

1) Run "Git Bash" and type in this:

$ pwd

$ git clone https://github.com/elixir-lang/elixir.git --branch master

The first command (pwd) shows your working directory.

The second command clones master branch into 'elixir' folder in your working directory. If the folder doesn't exist, it will be created. So before running the second command, please check, if the folder 'elixir' exists in your working directory and delete it, if it's there, to start all from scratch.

In my case the output of pwd command is "/u".

2) Run "MinGW Shell" and type in this:

$ cd u:

$ cd elixir/

$ make test

That's all!

ToJans commented 11 years ago

This is with MSysGit image

And his is with c:\mingw\msys\1.0\Msys.bat

image

josevalim commented 11 years ago

Could it be a mingw version issue? Btw, @ToJans I have sent you an e-mail regarding screen sharing session. Did you get it? :)

josevalim commented 11 years ago

Btw, regarding which path separator we should use, I found this on Stack Overflow.

dch commented 11 years ago

Just adding me in to keep track of this issue. Note that cygwin returns $OSTYPE=cygwin as well.

Also for the various NIFs that are used (e.g. exdoc's sundown dependency) we can expect different behaviour depending on what compiler is used (gcc / mingw chain, gcc / cygwin, and the more common MS VC++ under cmd.exe).

josevalim commented 11 years ago

Elixir should be compiling on MinGW after this commit. @AlbertMoscow, could you please you can still compile Elixir? Since it already worked for you, I want to make sure it isn't broken after those latest changes.

AlbertMoscow commented 11 years ago

@josevalim, sure! BTW, one more failure was eliminated. :)

my1

my2

my3

my4

my5

AlbertMoscow commented 11 years ago

This is an output for "make compile" after "make clean" command:

tovmasyan@input255 /u/elixir $ make clean ==> elixir (clean) rm -rf ebin rm -rf lib//ebin rm -rf lib//test/tmp rm -rf lib/mix/test/fixtures/gitrepo rm -rf lib//tmp rm -rf lib/elixir/src/elixir.app.src rm -rf lib/elixir/src/__lexer.erl rm -rf lib/elixir/src/*_parser.erl rm -rf lib/elixir/test/ebin

tovmasyan@input255 /u/elixir $ make compile ==> elixir (compile) Compiled src/elixir_parser.yrl Compiled src/elixir_clauses.erl Compiled src/elixir_aliases.erl Compiled src/elixir.erl Compiled src/elixir_code_server.erl Compiled src/elixir_compiler.erl Compiled src/elixir_def.erl Compiled src/elixir_def_defaults.erl Compiled src/elixir_def_local.erl Compiled src/elixir_def_overridable.erl Compiled src/elixir_errors.erl Compiled src/elixir_dispatch.erl Compiled src/elixir_import.erl Compiled src/elixir_literal.erl Compiled src/elixir_interpolation.erl Compiled src/elixir_macros.erl Compiled src/elixir_module.erl Compiled src/elixir_partials.erl Compiled src/elixir_quote.erl Compiled src/elixir_scope.erl Compiled src/elixir_sup.erl Compiled src/elixir_tracker.erl Compiled src/elixir_tokenizer.erl Compiled src/elixir_translator.erl Compiled src/elixir_tree_helpers.erl Compiled src/elixir_try.erl Compiled src/elixir_parser.erl ==> bootstrap (compile) Compiled lib/elixir/lib/kernel.ex Compiled lib/elixir/lib/keyword.ex Compiled lib/elixir/lib/list.ex Compiled lib/elixir/lib/kernel/typespec.ex Compiled lib/elixir/lib/module.ex Compiled lib/elixir/lib/record.ex Compiled lib/elixir/lib/macro.ex Compiled lib/elixir/lib/macro/env.ex Compiled lib/elixir/lib/exception.ex Compiled lib/elixir/lib/code.ex Compiled lib/elixir/lib/protocol.ex Compiled lib/elixir/lib/enum.ex Compiled lib/elixir/lib/binary/inspect.ex Compiled lib/elixir/lib/binary/chars.ex Compiled lib/elixir/lib/io.ex Compiled lib/elixir/lib/path.ex Compiled lib/elixir/lib/system.ex Compiled lib/elixir/lib/kernel/cli.ex Compiled lib/elixir/lib/kernel/error_handler.ex Compiled lib/elixir/lib/kernel/parallel_compiler.ex Compiled lib/elixir/lib/kernel/record_rewriter.ex Compiled lib/elixir/lib/module/dispatch_tracker.ex ==> kernel (compile) Compiled lib/elixir/lib/application/behaviour.ex Compiled lib/elixir/lib/behaviour.ex Compiled lib/elixir/lib/access.ex Compiled lib/elixir/lib/binary/chars.ex Compiled lib/elixir/lib/bitwise.ex Compiled lib/elixir/lib/code.ex Compiled lib/elixir/lib/binary/inspect.ex Compiled lib/elixir/lib/dict.ex Compiled lib/elixir/lib/enum.ex Compiled lib/elixir/lib/gen_event/behaviour.ex Compiled lib/elixir/lib/gen_server/behaviour.ex Compiled lib/elixir/lib/hash_dict.ex Compiled lib/elixir/lib/exception.ex Compiled lib/elixir/lib/io.ex Compiled lib/elixir/lib/kernel/cli.ex Compiled lib/elixir/lib/kernel/error_handler.ex Compiled lib/elixir/lib/kernel/parallel_compiler.ex Compiled lib/elixir/lib/kernel.ex Compiled lib/elixir/lib/kernel/parallel_require.ex Compiled lib/elixir/lib/kernel/record_rewriter.ex Compiled lib/elixir/lib/kernel/special_forms.ex Compiled lib/elixir/lib/keyword.ex Compiled lib/elixir/lib/kernel/typespec.ex Compiled lib/elixir/lib/list.ex Compiled lib/elixir/lib/list_dict.ex Compiled lib/elixir/lib/list/chars.ex Compiled lib/elixir/lib/macro/env.ex Compiled lib/elixir/lib/macro.ex Compiled lib/elixir/lib/module/dispatch_tracker.ex Compiled lib/elixir/lib/module.ex Compiled lib/elixir/lib/node.ex Compiled lib/elixir/lib/option_parser.ex Compiled lib/elixir/lib/port.ex Compiled lib/elixir/lib/path.ex Compiled lib/elixir/lib/process.ex Compiled lib/elixir/lib/protocol.ex Compiled lib/elixir/lib/range.ex Compiled lib/elixir/lib/record.ex Compiled lib/elixir/lib/record/extractor.ex Compiled lib/elixir/lib/regex.ex Compiled lib/elixir/lib/io/ansi.ex Compiled lib/elixir/lib/string.ex Compiled lib/elixir/lib/file.ex Compiled lib/elixir/lib/supervisor/behaviour.ex Compiled lib/elixir/lib/tuple.ex Compiled lib/elixir/lib/uri.ex Compiled lib/elixir/lib/system.ex Compiled lib/elixir/lib/uri/parser.ex Compiled lib/elixir/lib/uri/http.ex Compiled lib/elixir/lib/uri/https.ex Compiled lib/elixir/lib/uri/ftp.ex Compiled lib/elixir/lib/uri/ldap.ex Compiled lib/elixir/lib/uri/sftp.ex Compiled lib/elixir/lib/uri/tftp.ex make[1]: Entering directory /u/elixir' ==> unicode (compile) This step can take up to a minute to compile in order to embed the Unicode database Compiled lib/elixir/priv/unicode.ex make[1]: Leaving directory/u/elixir' ==> elixir (compile) ==> eex (compile) Compiled lib/eex/lib/eex/compiler.ex Compiled lib/eex/lib/eex.ex Compiled lib/eex/lib/eex/engine.ex Compiled lib/eex/lib/eex/smart_engine.ex Compiled lib/eex/lib/eex/tokenizer.ex ==> mix (compile) Compiled lib/mix/lib/mix/archive.ex Compiled lib/mix/lib/mix.ex Compiled lib/mix/lib/mix/cli.ex Compiled lib/mix/lib/mix/deps/converger.ex Compiled lib/mix/lib/mix/deps/lock.ex Compiled lib/mix/lib/mix/deps.ex Compiled lib/mix/lib/mix/deps/retriever.ex Compiled lib/mix/lib/mix/generator.ex Compiled lib/mix/lib/mix/local.ex Compiled lib/mix/lib/mix/exceptions.ex Compiled lib/mix/lib/mix/rebar.ex Compiled lib/mix/lib/mix/scm.ex Compiled lib/mix/lib/mix/scm/path.ex Compiled lib/mix/lib/mix/scm/git.ex Compiled lib/mix/lib/mix/shell.ex Compiled lib/mix/lib/mix/shell/io.ex Compiled lib/mix/lib/mix/shell/process.ex Compiled lib/mix/lib/mix/sup.ex Compiled lib/mix/lib/mix/project.ex Compiled lib/mix/lib/mix/server.ex Compiled lib/mix/lib/mix/task.ex u:/elixir/lib/mix/lib/mix/tasks/archive.ex:25: variable argv is unused Compiled lib/mix/lib/mix/tasks/archive.ex Compiled lib/mix/lib/mix/tasks/clean.ex Compiled lib/mix/lib/mix/tasks/app.start.ex Compiled lib/mix/lib/mix/tasks/compile.app.ex Compiled lib/mix/lib/mix/tasks/compile.elixir.ex Compiled lib/mix/lib/mix/tasks/compile.ex Compiled lib/mix/lib/mix/tasks/compile.leex.ex Compiled lib/mix/lib/mix/tasks/compile.erlang.ex Compiled lib/mix/lib/mix/tasks/compile.yecc.ex Compiled lib/mix/lib/mix/tasks/deps.check.ex Compiled lib/mix/lib/mix/tasks/deps.clean.ex Compiled lib/mix/lib/mix/tasks/deps.compile.ex Compiled lib/mix/lib/mix/tasks/deps.ex Compiled lib/mix/lib/mix/tasks/deps.get.ex Compiled lib/mix/lib/mix/tasks/deps.loadpaths.ex Compiled lib/mix/lib/mix/tasks/deps.unlock.ex Compiled lib/mix/lib/mix/tasks/deps.update.ex Compiled lib/mix/lib/mix/tasks/do.ex Compiled lib/mix/lib/mix/tasks/help.ex Compiled lib/mix/lib/mix/tasks/iex.ex Compiled lib/mix/lib/mix/tasks/escriptize.ex Compiled lib/mix/lib/mix/tasks/loadpaths.ex Compiled lib/mix/lib/mix/tasks/local.ex Compiled lib/mix/lib/mix/tasks/local.install.ex Compiled lib/mix/lib/mix/tasks/local.rebar.ex Compiled lib/mix/lib/mix/tasks/local.uninstall.ex Compiled lib/mix/lib/mix/tasks/run.ex Compiled lib/mix/lib/mix/tasks/test.ex Compiled lib/mix/lib/mix/utils.ex Compiled lib/mix/lib/mix/tasks/new.ex Compiled lib/mix/lib/mix/version.ex Generated mix.app ==> ex_unit (compile) Compiled lib/ex_unit/lib/ex_unit.ex Compiled lib/ex_unit/lib/ex_unit/assertions.ex Compiled lib/ex_unit/lib/ex_unit/callbacks.ex Compiled lib/ex_unit/lib/ex_unit/case.ex Compiled lib/ex_unit/lib/ex_unit/case_template.ex Compiled lib/ex_unit/lib/ex_unit/capture_io.ex Compiled lib/ex_unit/lib/ex_unit/formatter.ex Compiled lib/ex_unit/lib/ex_unit/doc_test.ex Compiled lib/ex_unit/lib/ex_unit/cli_formatter.ex Compiled lib/ex_unit/lib/ex_unit/server.ex Compiled lib/ex_unit/lib/ex_unit/runner.ex Compiled lib/ex_unit/lib/ex_unit/sup.ex Generated ex_unit.app Generated eex.app ==> iex (compile) Compiled lib/iex/lib/iex.ex Compiled lib/iex/lib/iex/cli.ex Compiled lib/iex/lib/iex/autocomplete.ex Compiled lib/iex/lib/iex/history.ex Compiled lib/iex/lib/iex/helpers.ex Compiled lib/iex/lib/iex/introspection.ex Compiled lib/iex/lib/iex/remsh.ex Compiled lib/iex/lib/iex/options.ex Compiled lib/iex/lib/iex/server.ex Generated iex.app

tovmasyan@input255 /u/elixir $

You can notice a warning "variable argv is unused" in line:

u:/elixir/lib/mix/lib/mix/tasks/archive.ex:25: variable argv is unused

ToJans commented 11 years ago

Right now I get 38 errors; the most of them are windows-file/path related, so we should probably implement different tests here, unless this is unexpected behavior?

Failures:

  1) test_absname_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:84

  2) test_absname_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:96

  3) test_expand_path_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:118

  4) test_expand_path_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:134

  5) test_argv (SystemTest)
     ** (SyntaxError) nofile:1: syntax error before: 'ERROR'
     stacktrace:

  6) test_at_exit (SystemTest)
     ** (ExUnit.ExpectationError)
                  expected: []
       to be equal to (==): '0\n'
     at test/elixir/system_test.exs:51

  7) test_path (Kernel.CLI.OptionParsingTest)
     ** (Protocol.UndefinedError) protocol Enumerable not implemented for nil
     at test/elixir/kernel/cli_test.exs:25

  8) test_possible_deadlock (Kernel.CLI.CompileTest)
     ** (ExUnit.AssertionError) expected foo.ex to miss module Bar
     at test/elixir/kernel/cli_test.exs:88

  9) test_rm_rf (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:772

  10) test_rm_rf! (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:842

  11) test_rm_rf_with_char_list (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:806

  12) test_rm_rf_with_file (FileTest.Rm)
     ** (ExUnit.ExpectationError)
                  expected: {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp","c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a"]}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp"]}
     at test/elixir/file_test.exs:826

  13) test_rm_rf_with_invalid (FileTest.Rm)
     ** (ExUnit.ExpectationError)
                  expected: {:ok,[]}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:836

  14) test_rm_rf_with_invalid! (FileTest.Rm)
     ** (ExUnit.AssertionError) Expected File.Error exception but nothing was raised
     at test/elixir/file_test.exs:861

  15) test_rm_rf_with_symlink (FileTest.Rm)
     ** (ExUnit.AssertionError) Expected false to be true
     at test/elixir/file_test.exs:794

  16) test_rmdir_with_file (FileTest.Rm)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:751

  17) test_rmdir_with_file! (FileTest.Rm)
     ** (ExUnit.ExpectationError)
       expected error message: "could not remove directory c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt: not a directory"
                     to match: "could not remove directory c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt: I/O error"
     at test/elixir/file_test.exs:764

  18) test_mkdir_p_with_invalid_path (FileTest.Mkdir)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:670

  19) test_mkdir_p_with_invalid_path! (FileTest.Mkdir)
     ** (ExUnit.ExpectationError)
       expected error message: "could not make directory (with -p) c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: not a directory"
                     to match: "could not make directory (with -p) c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: no such file or directory
"
     at test/elixir/file_test.exs:689

  20) test_mkdir_with_invalid_path (FileTest.Mkdir)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:589

  21) test_mkdir_with_invalid_path! (FileTest.Mkdir)
     ** (ExUnit.ExpectationError)
       expected error message: "could not make directory c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: not a directory"
                     to match: "could not make directory c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/test: no such file or directory"
     at test/elixir/file_test.exs:608

  22) test_cp_r! (FileTest.Cp)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:347

  23) test_cp_r_with_dir_and_file_conflict (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:271

  24) test_cp_r_with_src_dir_and_dest_dir (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:188

  25) test_cp_r_with_src_dir_and_dest_dir_using_lists (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:288

  26) test_cp_r_with_src_dir_and_dest_file (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:232

  27) test_cp_r_with_src_dir_and_dest_unknown (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:247

  28) test_cp_r_with_src_dir_dot_and_dest_dir (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:215

  29) test_cp_r_with_src_file_and_dest_dir (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/file.txt"]}
     at test/elixir/file_test.exs:157

  30) test_cp_r_with_src_file_and_dest_file (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/sample.txt"]}
     at test/elixir/file_test.exs:141

  31) test_cp_r_with_src_file_and_dest_unknown (FileTest.Cp)
     ** (ExUnit.AssertionError) Expected true to be false
     at test/elixir/file_test.exs:169

  32) test_cp_r_with_src_with_file_conflict (FileTest.Cp)
     ** (File.Error) could not write to file c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory
     at test/elixir/file_test.exs:305

  33) test_cp_r_with_src_with_file_conflict_callback (FileTest.Cp)
     ** (File.Error) could not write to file c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory
     at test/elixir/file_test.exs:321

  34) test_cp_with_src_file_and_dest_unknown (FileTest.Cp)
     ** (ExUnit.AssertionError) Expected true to be false
     at test/elixir/file_test.exs:61

  35) test_invalid_cd (FileTest)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:1073

  36) test_invalid_cd! (FileTest)
     ** (ExUnit.ExpectationError)
       expected error message: "could not set current working directory to c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt: not a directory"
                     to match: "could not set current working directory to c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt: no such file or direct
ory"
     at test/elixir/file_test.exs:1078

  37) test_touch_with_failure (FileTest)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:1122

  38) test_touch_with_failure! (FileTest)
     ** (ExUnit.ExpectationError)
       expected error message: "could not touch c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/bar: not a directory"
                     to match: "could not touch c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/file.txt/bar: no such file or directory"
     at test/elixir/file_test.exs:1131

Finished in 8.4 seconds (5.1s on load, 3.2s on tests)
1086 tests, 38 failures
make: *** [test_kernel] Error 1
josevalim commented 11 years ago

Tom, I don't think that's the desired behaviour. But I also wouldn't necessarily blame the tests. It may be bugs in the implementation too. So we'll need to look at them one by one!

ToJans commented 11 years ago

Hey José,

These are my findings

1. Drive letters: 1-4

In windows there is no such thing as a root path for a machine, it is always a root path for a drive. You could strip the drive letter from the implementation, but I am wondering whether that is the right thing to do, as c:/blah is different from `d:/blah' (different devices), so I would assume altering the test would fix the problem here.

2. Error EnotDir instead of EIO: 23-30,35,37

These are probably based on the fact that {:error,:enoent}is received, and the expected value is {:error,:enotdir}, so if you fix the first, the rest will probably be easy; once again I have no idea whether this is an implementation error, a platform difference, or the need for platform-specific tests. If we decide the implementation should capture & translate the output, this should be easy to fix.

3. Slightly different errormessage: 36,38

This is about a different expected literal: returned: /fixtures/file.txt/bar: not a directory expected:/fixtures/file.txt/bar: no such file or directory Once again this is one that can easily be fixed in the implementation.

If you can tell me what you prefer, I can fix these issues.

T.

josevalim commented 11 years ago

Regarding 2, there are many places in file.ex where we are expecting for a { :error, :enoent }. I assume we should update some of those function to also expect for a { :error, :enotdir }. This should allow a good part of the tests to pass.

Regarding 3, we should change the test to many on any of those messages.

Regarding 1, I am not sure how to proceed too. :)

edgurgel commented 11 years ago

About 1:

At least erlang has some support for drives: http://www.erlang.org/doc/man/file.html#get_cwd-1

ToJans commented 11 years ago

I would like to know whether the way I implemented my changes represent the best way to verify, or is there a better construct to follow in Elixir: https://github.com/ToJans/elixir/commit/11ebcc244988f875af59275da2530e36601e734d

ToJans commented 11 years ago

Could you take another look please (especially about the duplication of is_io_error? ; I 'd assume there is no other way if you want to keep them private? https://github.com/ToJans/elixir/commit/d5388ef4474047f030f267a52314f2656b5e298b

ToJans commented 11 years ago

Pull request #1277 reduces the errors to 32 failures.

josevalim commented 11 years ago

I pushed another commit that must have reduced the number of failures more. :)

ToJans commented 11 years ago

26 errors

Failures:

  1) test_absname_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:84

  2) test_absname_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:96

  3) test_expand_path_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:118

  4) test_expand_path_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:134

  5) test_argv (SystemTest)
     ** (SyntaxError) nofile:1: syntax error before: 'ERROR'
     stacktrace:

  6) test_at_exit (Kernel.CLI.AtExitTest)
     ** (ExUnit.ExpectationError)
                  expected: 'goodbye '
       to be equal to (==): 'goodbye cruel world with status 0\n'
     at test/elixir/kernel/cli_test.exs:39

  7) test_possible_deadlock (Kernel.CLI.CompileTest)
     ** (ExUnit.AssertionError) expected foo.ex to miss module Bar
     at test/elixir/kernel/cli_test.exs:88

  8) test_rm_rf (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:784

  9) test_rm_rf! (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:854

  10) test_rm_rf_with_char_list (FileTest.Rm)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:818

  11) test_rm_rf_with_file (FileTest.Rm)
     ** (ExUnit.ExpectationError)
                  expected: {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp","c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a"]}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp"]}
     at test/elixir/file_test.exs:838

  12) test_rm_rf_with_invalid (FileTest.Rm)
     ** (ExUnit.ExpectationError)
                  expected: {:ok,[]}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:848

  13) test_rm_rf_with_invalid! (FileTest.Rm)
     ** (ExUnit.AssertionError) Expected File.Error exception but nothing was raised
     at test/elixir/file_test.exs:873

  14) test_rm_rf_with_symlink (FileTest.Rm)
     ** (ExUnit.AssertionError) Expected false to be true
     at test/elixir/file_test.exs:806

  15) test_cp_r! (FileTest.Cp)
     ** (File.CopyError) could not copy recursively from c:/dev/elixir/elixir/lib/elixir/test/elixir/fixtures/cp_r/. to c:/dev/elixir/elixir/lib/elixir/test/tmp
/tmp: I/O error
     at test/elixir/file_test.exs:348

  16) test_cp_r_with_src_dir_and_dest_dir (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:189

  17) test_cp_r_with_src_dir_and_dest_dir_using_lists (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:289

  18) test_cp_r_with_src_dir_and_dest_unknown (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:248

  19) test_cp_r_with_src_dir_dot_and_dest_dir (FileTest.Cp)
     ** (MatchError) no match of right hand side value: {:error,:eio}
     at test/elixir/file_test.exs:216

  20) test_cp_r_with_src_file_and_dest_dir (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/file.txt"]}
     at test/elixir/file_test.exs:158

  21) test_cp_r_with_src_file_and_dest_file (FileTest.Cp)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:eio}
       to be equal to (==): {:ok,["c:/dev/elixir/elixir/lib/elixir/test/tmp/sample.txt"]}
     at test/elixir/file_test.exs:142

  22) test_cp_r_with_src_file_and_dest_unknown (FileTest.Cp)
     ** (ExUnit.AssertionError) Expected true to be false
     at test/elixir/file_test.exs:170

  23) test_cp_r_with_src_with_file_conflict (FileTest.Cp)
     ** (File.Error) could not write to file c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory
     at test/elixir/file_test.exs:306

  24) test_cp_r_with_src_with_file_conflict_callback (FileTest.Cp)
     ** (File.Error) could not write to file c:/dev/elixir/elixir/lib/elixir/test/tmp/tmp/a/1.txt: no such file or directory
     at test/elixir/file_test.exs:322

  25) test_cp_with_src_file_and_dest_unknown (FileTest.Cp)
     ** (ExUnit.AssertionError) Expected true to be false
     at test/elixir/file_test.exs:62

  26) test_touch_with_failure (FileTest)
     ** (ExUnit.ExpectationError)
                  expected: {:error,:enoent}
       to be equal to (==): {:error,:enotdir}
     at test/elixir/file_test.exs:1139

Finished in 8.3 seconds (5.0s on load, 3.2s on tests)
1091 tests, 26 failures
make: *** [test_kernel] Error 1
ToJans commented 11 years ago

Down to 8 errors...

Failures:

  1) test_absname_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:84

  2) test_absname_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:96

  3) test_expand_path_with_binary (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: "c:/foo/bar"
       to be equal to (==): "/foo/bar"
     at test/elixir/path_test.exs:118

  4) test_expand_path_with_list (PathTest)
     ** (ExUnit.ExpectationError)
                  expected: 'c:/foo/bar'
       to be equal to (==): '/foo/bar'
     at test/elixir/path_test.exs:134

  5) test_argv (SystemTest)
     ** (SyntaxError) nofile:1: syntax error before: 'ERROR'
     stacktrace:

  6) test_at_exit (Kernel.CLI.AtExitTest)
     ** (ExUnit.ExpectationError)
                  expected: 'goodbye '
       to be equal to (==): 'goodbye cruel world with status 0\n'
     at test/elixir/kernel/cli_test.exs:39

  7) test_possible_deadlock (Kernel.CLI.CompileTest)
     ** (ExUnit.AssertionError) expected foo.ex to miss module Bar
     at test/elixir/kernel/cli_test.exs:88

  8) test_rm_rf_with_symlink (FileTest.Rm)
     ** (ExUnit.AssertionError) Expected false to be true
     at test/elixir/file_test.exs:774

Finished in 8.5 seconds (5.1s on load, 3.3s on tests)
1091 tests, 8 failures
make: *** [test_kernel] Error 1
josevalim commented 11 years ago

Since the history in this issue is long, I am closing it and opening a new one with the remaining failures. :) Thanks everyone!