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