Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

145 wiersze
5.4 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. resolve_link/1,
  16. split_dirname/1,
  17. mv_warning_is_ignored/1]).
  18. -include_lib("common_test/include/ct.hrl").
  19. -include_lib("eunit/include/eunit.hrl").
  20. -include_lib("kernel/include/file.hrl").
  21. all() ->
  22. [{group, tmpdir},
  23. {group, reset_dir},
  24. path_from_ancestor,
  25. canonical_path,
  26. resolve_link,
  27. split_dirname,
  28. mv_warning_is_ignored].
  29. groups() ->
  30. [{tmpdir, [], [raw_tmpdir, empty_tmpdir, simple_tmpdir, multi_tmpdir]},
  31. {reset_dir, [], [reset_nonexistent_dir, reset_empty_dir, reset_dir]}].
  32. init_per_group(reset_dir, Config) ->
  33. TmpDir = rebar_file_utils:system_tmpdir(["rebar_file_utils_SUITE", "resetable"]),
  34. [{tmpdir, TmpDir}|Config];
  35. init_per_group(_, Config) -> Config.
  36. end_per_group(_, Config) -> Config.
  37. raw_tmpdir(_Config) ->
  38. case rebar_file_utils:system_tmpdir() of
  39. "/tmp" -> ok;
  40. "./tmp" -> ok
  41. end.
  42. empty_tmpdir(_Config) ->
  43. case rebar_file_utils:system_tmpdir([]) of
  44. "/tmp" -> ok;
  45. "./tmp" -> ok
  46. end.
  47. simple_tmpdir(_Config) ->
  48. case rebar_file_utils:system_tmpdir(["test"]) of
  49. "/tmp/test" -> ok;
  50. "./tmp/test" -> ok
  51. end.
  52. multi_tmpdir(_Config) ->
  53. case rebar_file_utils:system_tmpdir(["a", "b", "c"]) of
  54. "/tmp/a/b/c" -> ok;
  55. "./tmp/a/b/c" -> ok
  56. end.
  57. reset_nonexistent_dir(Config) ->
  58. TmpDir = ?config(tmpdir, Config),
  59. _ = ec_file:remove(TmpDir, [recursive]),
  60. ?assertNot(filelib:is_dir(TmpDir)),
  61. ok = rebar_file_utils:reset_dir(TmpDir),
  62. ?assert(filelib:is_dir(TmpDir)),
  63. {ok, []} = rebar_utils:list_dir(TmpDir).
  64. reset_empty_dir(Config) ->
  65. TmpDir = ?config(tmpdir, Config),
  66. _ = ec_file:remove(TmpDir, [recursive]),
  67. _ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
  68. ?assert(filelib:is_dir(TmpDir)),
  69. ok = rebar_file_utils:reset_dir(TmpDir),
  70. ?assert(filelib:is_dir(TmpDir)),
  71. {ok, []} = rebar_utils:list_dir(TmpDir).
  72. reset_dir(Config) ->
  73. TmpDir = ?config(tmpdir, Config),
  74. _ = ec_file:remove(TmpDir, [recursive]),
  75. _ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
  76. ?assert(filelib:is_dir(TmpDir)),
  77. lists:foreach(fun(Name) -> file:write_file(filename:join([TmpDir, Name]), <<>>) end,
  78. ["a", "b", "c"]),
  79. lists:foreach(fun(File) -> ?assert(filelib:is_file(filename:join([TmpDir, File]))) end,
  80. ["a", "b", "c"]),
  81. ok = rebar_file_utils:reset_dir(TmpDir),
  82. ?assert(filelib:is_dir(TmpDir)),
  83. {ok, []} = rebar_utils:list_dir(TmpDir).
  84. path_from_ancestor(_Config) ->
  85. ?assertEqual({ok, "foo/bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/")),
  86. ?assertEqual({ok, "bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo")),
  87. ?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar", "foo")),
  88. ?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar/", "foo/")),
  89. ?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/qux")),
  90. ?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo/bar/baz/qux")).
  91. canonical_path(_Config) ->
  92. %% We find the root so that the name works both on unix-likes and
  93. %% with Windows.
  94. Root = case os:type() of
  95. {win32, _} -> filename:nativename(filename:absname("/")); % C:\, with proper drive
  96. _ -> "/"
  97. end,
  98. ?assertEqual(filename:nativename(Root), rebar_file_utils:canonical_path("/")),
  99. ?assertEqual(filename:nativename(Root), rebar_file_utils:canonical_path("/../../..")),
  100. ?assertEqual(Root ++ "foo", rebar_file_utils:canonical_path("/foo/bar/..")),
  101. ?assertEqual(Root ++ "foo", rebar_file_utils:canonical_path("/foo/../foo")),
  102. ?assertEqual(Root ++ "foo", rebar_file_utils:canonical_path("/foo/.")),
  103. ?assertEqual(Root ++ "foo", rebar_file_utils:canonical_path("/foo/./.")),
  104. ?assertEqual(filename:nativename(Root ++ "foo/bar"),
  105. rebar_file_utils:canonical_path("/foo/./bar")).
  106. resolve_link(_Config) ->
  107. TmpDir = rebar_file_utils:system_tmpdir(
  108. ["rebar_file_utils_SUITE", "resolve_link"]),
  109. Link = filename:join(TmpDir, "link"),
  110. Target = filename:join(TmpDir, "link-target"),
  111. ec_file:remove(TmpDir, [recursive]),
  112. ok = filelib:ensure_dir(Target),
  113. ok = file:write_file(Target, <<>>),
  114. ok = file:make_symlink(Target, Link),
  115. ?assertEqual(Target, rebar_file_utils:resolve_link(Link)).
  116. split_dirname(_Config) ->
  117. ?assertEqual({".", ""}, rebar_file_utils:split_dirname("")),
  118. ?assertEqual({"/", ""}, rebar_file_utils:split_dirname("/")),
  119. ?assertEqual({"/", "foo"}, rebar_file_utils:split_dirname("/foo")),
  120. ?assertEqual({".", "foo"}, rebar_file_utils:split_dirname("foo")),
  121. ?assertEqual({"/foo", "bar"}, rebar_file_utils:split_dirname("/foo/bar")),
  122. ?assertEqual({"foo", "bar"}, rebar_file_utils:split_dirname("foo/bar")).
  123. mv_warning_is_ignored(_Config) ->
  124. meck:new(rebar_utils, [passthrough]),
  125. meck:expect(rebar_utils, sh, fun("mv ding dong", _) -> {ok, "Warning"} end),
  126. ok = rebar_file_utils:mv("ding", "dong"),
  127. meck:unload(rebar_utils).