diff --git a/src/geef_ref.erl b/src/geef_ref.erl index 51139e7..a6bc40d 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -2,6 +2,7 @@ -export([lookup/2, iterator/1, iterator/2, next/1, resolve/1, create/4, create_symbolic/4, dwim/2, shorthand/1]). -export([has_log/1, has_log/2]). +-export([is_branch/1, is_tag/1, is_note/1, is_remote/1]). -include("geef_records.hrl"). @@ -113,3 +114,18 @@ has_log(Repo, Name) -> -spec has_log(ref()) -> {ok, boolean()} | {error, term()}. has_log(#geef_reference{repo=Repo, name=Name}) -> has_log(Repo, Name). + +-define(assert_prefix(FunctionName, Prefix), +FunctionName(<>) -> + true; +FunctionName(#geef_reference{name=Name}) -> + FunctionName(Name); +FunctionName(Name) when is_list(Name) -> + FunctionName(iolist_to_binary(Name)); +FunctionName(_) -> + false). + +?assert_prefix(is_branch, "refs/heads/"). +?assert_prefix(is_tag, "refs/tags/"). +?assert_prefix(is_note, "refs/notes/"). +?assert_prefix(is_remote, "refs/remotes/"). diff --git a/test/ref_test.erl b/test/ref_test.erl new file mode 100644 index 0000000..e4fe8fb --- /dev/null +++ b/test/ref_test.erl @@ -0,0 +1,39 @@ +-module(ref_test). +-compile([export_all]). + +-include_lib("eunit/include/eunit.hrl"). +-include("src/geef_records.hrl"). + +test_fun(F, [{Name, Val} | Tail]) -> + ?assertEqual(Val, F(Name)), + test_fun(F, Tail); +test_fun(_, []) -> + ok. + +branch_test() -> + ?assertEqual(true, geef_ref:is_branch("refs/heads/master")), + ?assertEqual(true, geef_ref:is_branch(<<"refs/heads/master">>)), + ?assertEqual(false, geef_ref:is_branch("refs/tags/v0.1")), + ?assertEqual(false, geef_ref:is_branch(#geef_reference{name= <<"refs/tags/foo">>})), + ?assertEqual(true, geef_ref:is_branch(#geef_reference{name= <<"refs/heads/foo">>})). + +tag_test() -> + ?assertEqual(false, geef_ref:is_tag("refs/heads/master")), + ?assertEqual(true, geef_ref:is_tag(<<"refs/tags/mastery">>)), + ?assertEqual(true, geef_ref:is_tag("refs/tags/v0.1")), + ?assertEqual(true, geef_ref:is_tag(#geef_reference{name= <<"refs/tags/foo">>})), + ?assertEqual(false, geef_ref:is_tag(#geef_reference{name= <<"refs/heads/foo">>})). + +note_test() -> + ?assertEqual(false, geef_ref:is_note("refs/heads/master")), + ?assertEqual(true, geef_ref:is_note(<<"refs/notes/commits">>)), + ?assertEqual(true, geef_ref:is_note("refs/notes/bugs")), + ?assertEqual(true, geef_ref:is_note(#geef_reference{name= <<"refs/notes/foo">>})), + ?assertEqual(false, geef_ref:is_note(#geef_reference{name= <<"refs/heads/foo">>})). + +remote_test() -> + ?assertEqual(false, geef_ref:is_remote("refs/heads/master")), + ?assertEqual(true, geef_ref:is_remote(<<"refs/remotes/origin/master">>)), + ?assertEqual(true, geef_ref:is_remote("refs/remotes/origin/development")), + ?assertEqual(true, geef_ref:is_remote(#geef_reference{name= <<"refs/remotes/svn">>})), + ?assertEqual(false, geef_ref:is_remote(#geef_reference{name= <<"refs/heads/foo">>})).