Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

106 строки
3.8 KiB

-module(rebar_file_utils_SUITE).
-export([all/0,
groups/0,
init_per_group/2,
end_per_group/2,
raw_tmpdir/1,
empty_tmpdir/1,
simple_tmpdir/1,
multi_tmpdir/1,
reset_nonexistent_dir/1,
reset_empty_dir/1,
reset_dir/1,
path_from_ancestor/1,
canonical_path/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
-include_lib("kernel/include/file.hrl").
all() ->
[{group, tmpdir},
{group, reset_dir},
path_from_ancestor, canonical_path].
groups() ->
[{tmpdir, [], [raw_tmpdir, empty_tmpdir, simple_tmpdir, multi_tmpdir]},
{reset_dir, [], [reset_nonexistent_dir, reset_empty_dir, reset_dir]}].
init_per_group(reset_dir, Config) ->
TmpDir = rebar_file_utils:system_tmpdir(["rebar_file_utils_SUITE", "resetable"]),
[{tmpdir, TmpDir}|Config];
init_per_group(_, Config) -> Config.
end_per_group(_, Config) -> Config.
raw_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir() of
"/tmp" -> ok;
"./tmp" -> ok
end.
empty_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir([]) of
"/tmp" -> ok;
"./tmp" -> ok
end.
simple_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir(["test"]) of
"/tmp/test" -> ok;
"./tmp/test" -> ok
end.
multi_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir(["a", "b", "c"]) of
"/tmp/a/b/c" -> ok;
"./tmp/a/b/c" -> ok
end.
reset_nonexistent_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
?assertNot(filelib:is_dir(TmpDir)),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir(TmpDir).
reset_empty_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
_ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
?assert(filelib:is_dir(TmpDir)),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir(TmpDir).
reset_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
_ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
?assert(filelib:is_dir(TmpDir)),
lists:foreach(fun(Name) -> file:write_file(filename:join([TmpDir, Name]), <<>>) end,
["a", "b", "c"]),
lists:foreach(fun(File) -> ?assert(filelib:is_file(filename:join([TmpDir, File]))) end,
["a", "b", "c"]),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir(TmpDir).
path_from_ancestor(_Config) ->
?assertEqual({ok, "foo/bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/")),
?assertEqual({ok, "bar/baz"}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo")),
?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar", "foo")),
?assertEqual({ok, "bar"}, rebar_file_utils:path_from_ancestor("foo/bar/", "foo/")),
?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/qux")),
?assertEqual({error, badparent}, rebar_file_utils:path_from_ancestor("/foo/bar/baz", "/foo/bar/baz/qux")).
canonical_path(_Config) ->
?assertEqual(filename:nativename("/"), rebar_file_utils:canonical_path("/")),
?assertEqual(filename:nativename("/"), rebar_file_utils:canonical_path("/../../..")),
?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/bar/..")),
?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/../foo")),
?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/.")),
?assertEqual("/foo", rebar_file_utils:canonical_path("/foo/./.")),
?assertEqual("/foo/bar", rebar_file_utils:canonical_path("/foo/./bar")).