You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.8 KiB

  1. -module(rebar_file_utils_SUITE).
  2. -export([all/0,
  3. groups/0,
  4. init_per_group/2,
  5. end_per_group/2,
  6. raw_tmpdir/1,
  7. empty_tmpdir/1,
  8. simple_tmpdir/1,
  9. multi_tmpdir/1,
  10. reset_nonexistent_dir/1,
  11. reset_empty_dir/1,
  12. reset_dir/1,
  13. path_from_ancestor/1,
  14. canonical_path/1]).
  15. -include_lib("common_test/include/ct.hrl").
  16. -include_lib("eunit/include/eunit.hrl").
  17. -include_lib("kernel/include/file.hrl").
  18. all() ->
  19. [{group, tmpdir},
  20. {group, reset_dir},
  21. path_from_ancestor, canonical_path].
  22. groups() ->
  23. [{tmpdir, [], [raw_tmpdir, empty_tmpdir, simple_tmpdir, multi_tmpdir]},
  24. {reset_dir, [], [reset_nonexistent_dir, reset_empty_dir, reset_dir]}].
  25. init_per_group(reset_dir, Config) ->
  26. TmpDir = rebar_file_utils:system_tmpdir(["rebar_file_utils_SUITE", "resetable"]),
  27. [{tmpdir, TmpDir}|Config];
  28. init_per_group(_, Config) -> Config.
  29. end_per_group(_, Config) -> Config.
  30. raw_tmpdir(_Config) ->
  31. case rebar_file_utils:system_tmpdir() of
  32. "/tmp" -> ok;
  33. "./tmp" -> ok
  34. end.
  35. empty_tmpdir(_Config) ->
  36. case rebar_file_utils:system_tmpdir([]) of
  37. "/tmp" -> ok;
  38. "./tmp" -> ok
  39. end.
  40. simple_tmpdir(_Config) ->
  41. case rebar_file_utils:system_tmpdir(["test"]) of
  42. "/tmp/test" -> ok;
  43. "./tmp/test" -> ok
  44. end.
  45. multi_tmpdir(_Config) ->
  46. case rebar_file_utils:system_tmpdir(["a", "b", "c"]) of
  47. "/tmp/a/b/c" -> ok;
  48. "./tmp/a/b/c" -> ok
  49. end.
  50. reset_nonexistent_dir(Config) ->
  51. TmpDir = ?config(tmpdir, Config),
  52. _ = ec_file:remove(TmpDir, [recursive]),
  53. ?assertNot(filelib:is_dir(TmpDir)),
  54. ok = rebar_file_utils:reset_dir(TmpDir),
  55. ?assert(filelib:is_dir(TmpDir)),
  56. {ok, []} = file:list_dir(TmpDir).
  57. reset_empty_dir(Config) ->
  58. TmpDir = ?config(tmpdir, Config),
  59. _ = ec_file:remove(TmpDir, [recursive]),
  60. _ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
  61. ?assert(filelib:is_dir(TmpDir)),
  62. ok = rebar_file_utils:reset_dir(TmpDir),
  63. ?assert(filelib:is_dir(TmpDir)),
  64. {ok, []} = file:list_dir(TmpDir).
  65. reset_dir(Config) ->
  66. TmpDir = ?config(tmpdir, Config),
  67. _ = ec_file:remove(TmpDir, [recursive]),
  68. _ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
  69. ?assert(filelib:is_dir(TmpDir)),
  70. lists:foreach(fun(Name) -> file:write_file(filename:join([TmpDir, Name]), <<>>) end,
  71. ["a", "b", "c"]),
  72. lists:foreach(fun(File) -> ?assert(filelib:is_file(filename:join([TmpDir, File]))) end,
  73. ["a", "b", "c"]),
  74. ok = rebar_file_utils:reset_dir(TmpDir),
  75. ?assert(filelib:is_dir(TmpDir)),
  76. {ok, []} = file:list_dir(TmpDir).
  77. path_from_ancestor(_Config) ->
  78. ?assertEqual({ok, "foo/bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/")),
  79. ?assertEqual({ok, "bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo")),
  80. ?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar", "foo")),
  81. ?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar/", "foo/")),
  82. ?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/qux")),
  83. ?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo/bar/baz/qux")).
  84. canonical_path(_Config) ->
  85. ?assertEqual(filename:nativename("/"), rebar_file_utils:canonical_path("/")),
  86. ?assertEqual(filename:nativename("/"), rebar_file_utils:canonical_path("/../../..")),
  87. ?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/bar/..")),
  88. ?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/../foo")),
  89. ?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/.")),
  90. ?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/./.")),
  91. ?assertEqual("/foo/bar", rebar_file_utils:canonical_path("/foo/./bar")).