1%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- 2%% ex: ts=4 sw=4 et 3-module(rebar_dia_tests). 4 5-include_lib("eunit/include/eunit.hrl"). 6 7-define(REBAR_SCRIPT, "../rebar"). 8 9-define(TMP_DIR, "dia_project/"). 10 11dia_test_() -> 12 case supported_otp_version() of 13 true -> 14 {"Test the dia compiler", 15 setup, fun() -> setup_project(), rebar("compile") end, 16 fun teardown/1, 17 fun(RebarOut) -> 18 [{"Check ebin is created", 19 ?_assert(filelib:is_dir("ebin") =:= true)}, 20 21 {"Check include is created", 22 ?_assert(filelib:is_dir("include") =:= true)}, 23 24 {"Check dia/a.dia is compiled", 25 ?_assert(string:str(RebarOut, "Compiled dia/a.dia") /= 0)}, 26 27 {"Check dia/b.dia is compiled", 28 ?_assert(string:str(RebarOut, "Compiled dia/b.dia") /= 0)} 29 ] 30 end}; 31 false -> {setup, fun() -> ok end, []} 32 end. 33 34 35%% ==================================================================== 36%% Setup and Teardown 37%% ==================================================================== 38 39-define(myapp_dia_a, 40 ["@id 0\n", 41 "@name a\n", 42 "@vendor 1 ABC\n", 43 "@avp_types\n", 44 " IMSI 1 UTF8String V" 45 ]). 46 47-define(myapp_dia_b, 48 ["@id 2\n", 49 "@name b\n", 50 "@vendor 2 ABC\n", 51 "@inherits a\n", 52 "@avp_types\n", 53 " IMEIV 900 OctetString MV" 54 ]). 55 56-define(myapp_rebarconfig, 57 ["{dia_first_files, [\"dia/a.dia\"]}.\n", 58 "{dia_opts, []}.\n" 59 ]). 60 61supported_otp_version() -> 62 Min = rebar_require_vsn:version_tuple(keep_going, "15", "configured"), 63 Otp = rebar_require_vsn:version_tuple(keep_going, 64 erlang:system_info(otp_release), 65 "OTP Release"), 66 Otp >= Min. 67 68 69setup_environment() -> 70 ok = file:make_dir(?TMP_DIR), 71 prepare_rebar_script(), 72 ok = file:set_cwd(?TMP_DIR). 73 74prepare_project() -> 75 setup_environment(), 76 rebar("create-app appid=myapp"). 77 78 79setup_project() -> 80 prepare_project(), 81 ok = file:make_dir("dia"), 82 ok = file:write_file("dia/a.dia", ?myapp_dia_a), 83 ok = file:write_file("dia/b.dia", ?myapp_dia_b), 84 ok = file:write_file("rebar.config", ?myapp_rebarconfig). 85 86 87teardown(_) -> 88 ok = file:set_cwd(".."), 89 ok = remove_tmp_dir(). 90 91remove_tmp_dir() -> 92 ok = rebar_file_utils:rm_rf(?TMP_DIR). 93 94%% ==================================================================== 95%% Helper Functions 96%% ==================================================================== 97 98prepare_rebar_script() -> 99 Rebar = ?TMP_DIR ++ "rebar", 100 {ok, _} = file:copy(?REBAR_SCRIPT, Rebar), 101 case os:type() of 102 {unix, _} -> 103 [] = os:cmd("chmod u+x " ++ Rebar); 104 {win32, _} -> 105 {ok, _} = file:copy(?REBAR_SCRIPT ++ ".cmd", 106 ?TMP_DIR ++ "rebar.cmd") 107 end. 108 109rebar(Args) when is_list(Args) -> 110 os:cmd(filename:nativename("./rebar") ++ " " ++ Args). 111