Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

1190 řádky
45 KiB

  1. -module(rebar_ct_SUITE).
  2. -export([all/0,
  3. groups/0,
  4. init_per_group/2,
  5. end_per_group/2]).
  6. -export([basic_app_default_dirs/1,
  7. basic_app_default_beams/1,
  8. basic_app_ct_macro/1,
  9. multi_app_default_dirs/1,
  10. multi_app_default_beams/1,
  11. multi_app_ct_macro/1,
  12. single_app_dir/1,
  13. single_extra_dir/1,
  14. single_unmanaged_dir/1,
  15. single_suite/1,
  16. single_extra_suite/1,
  17. single_unmanaged_suite/1,
  18. multi_suite/1,
  19. all_suite/1,
  20. single_dir_and_single_suite/1,
  21. suite_at_root/1,
  22. suite_at_app_root/1,
  23. data_dir_correct/1,
  24. cmd_label/1,
  25. cmd_config/1,
  26. cmd_allow_user_terms/1,
  27. cmd_logdir/1,
  28. cmd_logopts/1,
  29. cmd_verbosity/1,
  30. cmd_repeat/1,
  31. cmd_duration/1,
  32. cmd_until/1,
  33. cmd_force_stop/1,
  34. cmd_basic_html/1,
  35. cmd_stylesheet/1,
  36. cmd_decrypt_key/1,
  37. cmd_decrypt_file/1,
  38. cmd_abort_if_missing_suites/1,
  39. cmd_multiply_timetraps/1,
  40. cmd_scale_timetraps/1,
  41. cmd_create_priv_dir/1,
  42. cmd_include_dir/1,
  43. cfg_opts/1,
  44. cfg_arbitrary_opts/1,
  45. cfg_test_spec/1,
  46. cfg_cover_spec/1,
  47. cfg_atom_suites/1,
  48. cover_compiled/1,
  49. misspecified_ct_opts/1,
  50. misspecified_ct_compile_opts/1,
  51. misspecified_ct_first_files/1]).
  52. -include_lib("common_test/include/ct.hrl").
  53. all() -> [{group, basic_app},
  54. {group, multi_app},
  55. {group, dirs_and_suites},
  56. {group, data_dirs},
  57. {group, ct_opts},
  58. {group, cover},
  59. cfg_opts, cfg_arbitrary_opts,
  60. cfg_test_spec, cfg_cover_spec,
  61. cfg_atom_suites,
  62. misspecified_ct_opts,
  63. misspecified_ct_compile_opts,
  64. misspecified_ct_first_files].
  65. groups() -> [{basic_app, [], [basic_app_default_dirs,
  66. basic_app_default_beams,
  67. basic_app_ct_macro]},
  68. {multi_app, [], [multi_app_default_dirs,
  69. multi_app_default_beams,
  70. multi_app_ct_macro]},
  71. {dirs_and_suites, [], [single_app_dir,
  72. single_extra_dir,
  73. single_unmanaged_dir,
  74. single_suite,
  75. single_extra_suite,
  76. single_unmanaged_suite,
  77. multi_suite,
  78. all_suite,
  79. single_dir_and_single_suite,
  80. suite_at_root,
  81. suite_at_app_root]},
  82. {data_dirs, [], [data_dir_correct]},
  83. {ct_opts, [], [cmd_label,
  84. cmd_config,
  85. cmd_allow_user_terms,
  86. cmd_logdir,
  87. cmd_logopts,
  88. cmd_verbosity,
  89. cmd_repeat,
  90. cmd_duration,
  91. cmd_until,
  92. cmd_force_stop,
  93. cmd_basic_html,
  94. cmd_stylesheet,
  95. cmd_decrypt_key,
  96. cmd_decrypt_file,
  97. cmd_abort_if_missing_suites,
  98. cmd_multiply_timetraps,
  99. cmd_scale_timetraps,
  100. cmd_create_priv_dir,
  101. cmd_include_dir]},
  102. {cover, [], [cover_compiled]}].
  103. init_per_group(basic_app, Config) ->
  104. C = rebar_test_utils:init_rebar_state(Config, "ct_"),
  105. AppDir = ?config(apps, C),
  106. Name = rebar_test_utils:create_random_name(atom_to_list(basic_app) ++ "_"),
  107. Vsn = rebar_test_utils:create_random_vsn(),
  108. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  109. Suite = filename:join([AppDir, "test", Name ++ "_SUITE.erl"]),
  110. ok = filelib:ensure_dir(Suite),
  111. ok = file:write_file(Suite, test_suite(Name)),
  112. {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
  113. Tests = rebar_prv_common_test:prepare_tests(State),
  114. {ok, NewState} = rebar_prv_common_test:compile(State, Tests),
  115. {ok, T} = Tests,
  116. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  117. [{result, Opts}, {appnames, [Name]}, {compile_state, NewState}|C];
  118. init_per_group(multi_app, Config) ->
  119. C = rebar_test_utils:init_rebar_state(Config, "ct_"),
  120. AppDir = ?config(apps, C),
  121. Name1 = rebar_test_utils:create_random_name(atom_to_list(multi_app) ++ "_"),
  122. Vsn1 = rebar_test_utils:create_random_vsn(),
  123. AppDir1 = filename:join([AppDir, "apps", Name1]),
  124. rebar_test_utils:create_app(AppDir1, Name1, Vsn1, [kernel, stdlib]),
  125. Suite1 = filename:join([AppDir1, "test", Name1 ++ "_SUITE.erl"]),
  126. ok = filelib:ensure_dir(Suite1),
  127. ok = file:write_file(Suite1, test_suite(Name1)),
  128. Name2 = rebar_test_utils:create_random_name(atom_to_list(multi_app) ++ "_"),
  129. Vsn2 = rebar_test_utils:create_random_vsn(),
  130. AppDir2 = filename:join([AppDir, "apps", Name2]),
  131. rebar_test_utils:create_app(AppDir2, Name2, Vsn2, [kernel, stdlib]),
  132. Suite2 = filename:join([AppDir2, "test", Name2 ++ "_SUITE.erl"]),
  133. ok = filelib:ensure_dir(Suite2),
  134. ok = file:write_file(Suite2, test_suite(Name2)),
  135. Suite3 = filename:join([AppDir, "test", "extras_SUITE.erl"]),
  136. ok = filelib:ensure_dir(Suite3),
  137. ok = file:write_file(Suite3, test_suite("extras")),
  138. {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
  139. Tests = rebar_prv_common_test:prepare_tests(State),
  140. {ok, NewState} = rebar_prv_common_test:compile(State, Tests),
  141. {ok, T} = Tests,
  142. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  143. [{result, Opts}, {appnames, [Name1, Name2]}, {compile_state, NewState}|C];
  144. init_per_group(dirs_and_suites, Config) ->
  145. C = rebar_test_utils:init_rebar_state(Config, "ct_"),
  146. AppDir = ?config(apps, C),
  147. Name1 = rebar_test_utils:create_random_name(atom_to_list(dirs_and_suites) ++ "_"),
  148. Vsn1 = rebar_test_utils:create_random_vsn(),
  149. AppDir1 = filename:join([AppDir, "apps", Name1]),
  150. rebar_test_utils:create_app(AppDir1, Name1, Vsn1, [kernel, stdlib]),
  151. Suite1 = filename:join([AppDir1, "test", Name1 ++ "_SUITE.erl"]),
  152. ok = filelib:ensure_dir(Suite1),
  153. ok = file:write_file(Suite1, test_suite(Name1)),
  154. Name2 = rebar_test_utils:create_random_name(atom_to_list(dir_and_suites) ++ "_"),
  155. Vsn2 = rebar_test_utils:create_random_vsn(),
  156. AppDir2 = filename:join([AppDir, "apps", Name2]),
  157. rebar_test_utils:create_app(AppDir2, Name2, Vsn2, [kernel, stdlib]),
  158. Suite2 = filename:join([AppDir2, "test", Name2 ++ "_SUITE.erl"]),
  159. ok = filelib:ensure_dir(Suite2),
  160. ok = file:write_file(Suite2, test_suite(Name2)),
  161. Suite3 = filename:join([AppDir, "test", "extras_SUITE.erl"]),
  162. ok = filelib:ensure_dir(Suite3),
  163. ok = file:write_file(Suite3, test_suite("extras")),
  164. Suite4 = filename:join([AppDir, "root_SUITE.erl"]),
  165. ok = file:write_file(Suite4, test_suite("root")),
  166. ok = file:write_file(filename:join([AppDir, "root_SUITE.hrl"]), <<>>),
  167. ok = filelib:ensure_dir(filename:join([AppDir, "root_SUITE_data", "dummy.txt"])),
  168. ok = file:write_file(filename:join([AppDir, "root_SUITE_data", "some_data.txt"]), <<>>),
  169. Suite5 = filename:join([AppDir, "apps", Name2, "app_root_SUITE.erl"]),
  170. ok = file:write_file(Suite5, test_suite("app_root")),
  171. ok = file:write_file(filename:join([AppDir, "apps", Name2, "app_root_SUITE.hrl"]), <<>>),
  172. ok = filelib:ensure_dir(filename:join([AppDir, "apps", Name2, "app_root_SUITE_data", "dummy.txt"])),
  173. ok = file:write_file(filename:join([AppDir, "apps", Name2, "app_root_SUITE_data", "some_data.txt"]), <<>>),
  174. {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
  175. [{s, State}, {appnames, [Name1, Name2]}|C];
  176. init_per_group(ct_opts, Config) ->
  177. C = rebar_test_utils:init_rebar_state(Config, "ct_opts"),
  178. AppDir = ?config(apps, C),
  179. Name = rebar_test_utils:create_random_name("ct_opts_"),
  180. Vsn = rebar_test_utils:create_random_vsn(),
  181. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  182. {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
  183. [{result, State}, {name, Name}|C];
  184. init_per_group(cover, Config) ->
  185. C = rebar_test_utils:init_rebar_state(Config, "ct_opts"),
  186. AppDir = ?config(apps, C),
  187. Name = rebar_test_utils:create_random_name("ct_opts_"),
  188. Vsn = rebar_test_utils:create_random_vsn(),
  189. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  190. {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
  191. [{result, State}, {name, Name}|C];
  192. init_per_group(_, Config) -> Config.
  193. end_per_group(_Group, _Config) -> ok.
  194. basic_app_default_dirs(Config) ->
  195. AppDir = ?config(apps, Config),
  196. [Name] = ?config(appnames, Config),
  197. Result = ?config(result, Config),
  198. Expect = filename:join([AppDir, "_build", "test", "lib", Name, "test"]),
  199. Dir = proplists:get_value(dir, Result),
  200. [Expect] = Dir.
  201. basic_app_default_beams(Config) ->
  202. AppDir = ?config(apps, Config),
  203. [Name] = ?config(appnames, Config),
  204. File = filename:join([AppDir,
  205. "_build",
  206. "test",
  207. "lib",
  208. Name,
  209. "test",
  210. Name ++ "_SUITE.beam"]),
  211. true = filelib:is_file(File).
  212. basic_app_ct_macro(Config) ->
  213. State = ?config(compile_state, Config),
  214. [App] = rebar_state:project_apps(State),
  215. Opts = rebar_app_info:opts(App),
  216. ErlOpts = dict:fetch(erl_opts, Opts),
  217. true = lists:member({d, 'COMMON_TEST'}, ErlOpts).
  218. multi_app_default_dirs(Config) ->
  219. AppDir = ?config(apps, Config),
  220. [Name1, Name2] = ?config(appnames, Config),
  221. Result = ?config(result, Config),
  222. Expect1 = filename:absname(filename:join([AppDir, "_build", "test", "lib", Name1, "test"])),
  223. Expect2 = filename:absname(filename:join([AppDir, "_build", "test", "lib", Name2, "test"])),
  224. Expect3 = filename:absname(filename:join([AppDir, "_build", "test", "extras", "test"])),
  225. Dirs = proplists:get_value(dir, Result),
  226. true = (lists:sort([Expect1, Expect2, Expect3]) == lists:sort(Dirs)).
  227. multi_app_default_beams(Config) ->
  228. AppDir = ?config(apps, Config),
  229. [Name1, Name2] = ?config(appnames, Config),
  230. File1 = filename:join([AppDir,
  231. "_build",
  232. "test",
  233. "lib",
  234. Name1,
  235. "test",
  236. Name1 ++ "_SUITE.beam"]),
  237. File2 = filename:join([AppDir,
  238. "_build",
  239. "test",
  240. "lib",
  241. Name2,
  242. "test",
  243. Name2 ++ "_SUITE.beam"]),
  244. File3 = filename:join([AppDir,
  245. "_build",
  246. "test",
  247. "extras",
  248. "test",
  249. "extras_SUITE.beam"]),
  250. true = filelib:is_file(File1),
  251. true = filelib:is_file(File2),
  252. true = filelib:is_file(File3).
  253. multi_app_ct_macro(Config) ->
  254. State = ?config(compile_state, Config),
  255. Apps = rebar_state:project_apps(State),
  256. lists:foreach(fun(App) ->
  257. Opts = rebar_app_info:opts(App),
  258. ErlOpts = dict:fetch(erl_opts, Opts),
  259. true = lists:member({d, 'COMMON_TEST'}, ErlOpts)
  260. end, Apps).
  261. single_app_dir(Config) ->
  262. AppDir = ?config(apps, Config),
  263. [Name1, _Name2] = ?config(appnames, Config),
  264. State = ?config(s, Config),
  265. LibDirs = rebar_dir:lib_dirs(State),
  266. State1 = rebar_app_discover:do(State, LibDirs),
  267. Providers = rebar_state:providers(State1),
  268. Namespace = rebar_state:namespace(State1),
  269. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  270. GetOptSpec = providers:opts(CommandProvider),
  271. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  272. ["--dir=" ++ filename:join([AppDir,
  273. "apps",
  274. Name1,
  275. "test"])]),
  276. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  277. Tests = rebar_prv_common_test:prepare_tests(State2),
  278. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  279. {ok, T} = Tests,
  280. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  281. Expect = filename:join([AppDir, "_build", "test", "lib", Name1, "test"]),
  282. Dir = proplists:get_value(dir, Opts),
  283. [Expect] = Dir.
  284. single_extra_dir(Config) ->
  285. AppDir = ?config(apps, Config),
  286. State = ?config(s, Config),
  287. LibDirs = rebar_dir:lib_dirs(State),
  288. State1 = rebar_app_discover:do(State, LibDirs),
  289. Providers = rebar_state:providers(State1),
  290. Namespace = rebar_state:namespace(State1),
  291. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  292. GetOptSpec = providers:opts(CommandProvider),
  293. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--dir=" ++ filename:join([AppDir,
  294. "test"])]),
  295. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  296. Tests = rebar_prv_common_test:prepare_tests(State2),
  297. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  298. {ok, T} = Tests,
  299. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  300. Expect = filename:join([AppDir, "_build", "test", "extras", "test"]),
  301. Dir = proplists:get_value(dir, Opts),
  302. [Expect] = Dir.
  303. single_unmanaged_dir(Config) ->
  304. PrivDir = ?config(priv_dir, Config),
  305. State = ?config(s, Config),
  306. Suite = filename:join([PrivDir, "unmanaged_dir", "unmanaged_dir_SUITE.erl"]),
  307. ok = filelib:ensure_dir(Suite),
  308. ok = file:write_file(Suite, test_suite("unmanaged_dir")),
  309. LibDirs = rebar_dir:lib_dirs(State),
  310. State1 = rebar_app_discover:do(State, LibDirs),
  311. Providers = rebar_state:providers(State1),
  312. Namespace = rebar_state:namespace(State1),
  313. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  314. GetOptSpec = providers:opts(CommandProvider),
  315. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--dir=" ++ filename:absname(filename:join([PrivDir,
  316. "unmanaged_dir"]))]),
  317. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  318. Tests = rebar_prv_common_test:prepare_tests(State2),
  319. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  320. {ok, T} = Tests,
  321. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  322. Expect = filename:join([PrivDir, "unmanaged_dir"]),
  323. Dir = proplists:get_value(dir, Opts),
  324. [Expect] = Dir.
  325. single_suite(Config) ->
  326. AppDir = ?config(apps, Config),
  327. [Name1, _Name2] = ?config(appnames, Config),
  328. State = ?config(s, Config),
  329. LibDirs = rebar_dir:lib_dirs(State),
  330. State1 = rebar_app_discover:do(State, LibDirs),
  331. Providers = rebar_state:providers(State1),
  332. Namespace = rebar_state:namespace(State1),
  333. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  334. GetOptSpec = providers:opts(CommandProvider),
  335. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  336. ["--suite=" ++ filename:join([AppDir,
  337. "apps",
  338. Name1,
  339. "test",
  340. Name1 ++ "_SUITE"])]),
  341. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  342. Tests = rebar_prv_common_test:prepare_tests(State2),
  343. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  344. {ok, T} = Tests,
  345. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  346. Expect = filename:join([AppDir,
  347. "_build",
  348. "test",
  349. "lib",
  350. Name1,
  351. "test",
  352. Name1 ++ "_SUITE"]),
  353. Suite = proplists:get_value(suite, Opts),
  354. [Expect] = Suite.
  355. single_extra_suite(Config) ->
  356. AppDir = ?config(apps, Config),
  357. [_Name1, _Name2] = ?config(appnames, Config),
  358. State = ?config(s, Config),
  359. LibDirs = rebar_dir:lib_dirs(State),
  360. State1 = rebar_app_discover:do(State, LibDirs),
  361. Providers = rebar_state:providers(State1),
  362. Namespace = rebar_state:namespace(State1),
  363. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  364. GetOptSpec = providers:opts(CommandProvider),
  365. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  366. ["--suite=" ++ filename:join([AppDir,
  367. "test",
  368. "extra_SUITE"])]),
  369. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  370. Tests = rebar_prv_common_test:prepare_tests(State2),
  371. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  372. {ok, T} = Tests,
  373. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  374. Expect = filename:join([AppDir,
  375. "_build",
  376. "test",
  377. "extras",
  378. "test",
  379. "extra_SUITE"]),
  380. Suite = proplists:get_value(suite, Opts),
  381. [Expect] = Suite.
  382. single_unmanaged_suite(Config) ->
  383. PrivDir = ?config(priv_dir, Config),
  384. [_Name1, _Name2] = ?config(appnames, Config),
  385. State = ?config(s, Config),
  386. Suite = filename:join([PrivDir, "unmanaged", "unmanaged_SUITE.erl"]),
  387. ok = filelib:ensure_dir(Suite),
  388. ok = file:write_file(Suite, test_suite("unmanaged")),
  389. LibDirs = rebar_dir:lib_dirs(State),
  390. State1 = rebar_app_discover:do(State, LibDirs),
  391. Providers = rebar_state:providers(State1),
  392. Namespace = rebar_state:namespace(State1),
  393. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  394. GetOptSpec = providers:opts(CommandProvider),
  395. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  396. ["--suite=" ++ filename:absname(filename:join([PrivDir,
  397. "unmanaged",
  398. "unmanaged_SUITE"]))]),
  399. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  400. Tests = rebar_prv_common_test:prepare_tests(State2),
  401. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  402. {ok, T} = Tests,
  403. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  404. Expect = filename:join([PrivDir,
  405. "unmanaged",
  406. "unmanaged_SUITE"]),
  407. SuitePath = proplists:get_value(suite, Opts),
  408. [Expect] = SuitePath.
  409. multi_suite(Config) ->
  410. AppDir = ?config(apps, Config),
  411. [Name1, Name2] = ?config(appnames, Config),
  412. State = ?config(s, Config),
  413. LibDirs = rebar_dir:lib_dirs(State),
  414. State1 = rebar_app_discover:do(State, LibDirs),
  415. Providers = rebar_state:providers(State1),
  416. Namespace = rebar_state:namespace(State1),
  417. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  418. GetOptSpec = providers:opts(CommandProvider),
  419. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  420. ["--suite=" ++ filename:join([AppDir,
  421. "apps",
  422. Name1,
  423. "test",
  424. Name1 ++ "_SUITE," ++ AppDir,
  425. "apps",
  426. Name2,
  427. "test",
  428. Name2 ++ "_SUITE"])]),
  429. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  430. Tests = rebar_prv_common_test:prepare_tests(State2),
  431. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  432. {ok, T} = Tests,
  433. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  434. Expect1 = filename:join([AppDir,
  435. "_build",
  436. "test",
  437. "lib",
  438. Name1,
  439. "test",
  440. Name1 ++ "_SUITE"]),
  441. Expect2 = filename:join([AppDir,
  442. "_build",
  443. "test",
  444. "lib",
  445. Name2,
  446. "test",
  447. Name2 ++ "_SUITE"]),
  448. Suites = proplists:get_value(suite, Opts),
  449. true = (lists:sort([Expect1, Expect2]) == lists:sort(Suites)).
  450. all_suite(Config) ->
  451. AppDir = ?config(apps, Config),
  452. [Name1, Name2] = ?config(appnames, Config),
  453. State = ?config(s, Config),
  454. LibDirs = rebar_dir:lib_dirs(State),
  455. State1 = rebar_app_discover:do(State, LibDirs),
  456. Providers = rebar_state:providers(State1),
  457. Namespace = rebar_state:namespace(State1),
  458. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  459. GetOptSpec = providers:opts(CommandProvider),
  460. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  461. ["--suite=" ++ filename:join([AppDir,
  462. "apps",
  463. Name1,
  464. "test",
  465. Name1 ++ "_SUITE," ++ AppDir,
  466. "apps",
  467. Name2,
  468. "test",
  469. Name2 ++ "_SUITE," ++ AppDir,
  470. "test",
  471. "extra_SUITE"])]),
  472. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  473. Tests = rebar_prv_common_test:prepare_tests(State2),
  474. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  475. {ok, T} = Tests,
  476. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  477. Expect1 = filename:join([AppDir,
  478. "_build",
  479. "test",
  480. "lib",
  481. Name1,
  482. "test",
  483. Name1 ++ "_SUITE"]),
  484. Expect2 = filename:join([AppDir,
  485. "_build",
  486. "test",
  487. "lib",
  488. Name2,
  489. "test",
  490. Name2 ++ "_SUITE"]),
  491. Expect3 = filename:join([AppDir,
  492. "_build",
  493. "test",
  494. "extras",
  495. "test",
  496. "extra_SUITE"]),
  497. Suites = proplists:get_value(suite, Opts),
  498. true = (lists:sort([Expect1, Expect2, Expect3]) == lists:sort(Suites)).
  499. single_dir_and_single_suite(Config) ->
  500. AppDir = ?config(apps, Config),
  501. [_Name1, _Name2] = ?config(appnames, Config),
  502. State = ?config(s, Config),
  503. LibDirs = rebar_dir:lib_dirs(State),
  504. State1 = rebar_app_discover:do(State, LibDirs),
  505. Providers = rebar_state:providers(State1),
  506. Namespace = rebar_state:namespace(State1),
  507. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  508. GetOptSpec = providers:opts(CommandProvider),
  509. {ok, GetOptResult} = getopt:parse(GetOptSpec,
  510. ["--dir=" ++ filename:join([AppDir, "test"]),
  511. "--suite=extra_SUITE"]),
  512. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  513. Tests = rebar_prv_common_test:prepare_tests(State2),
  514. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  515. {ok, T} = Tests,
  516. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  517. Expect = filename:join([AppDir,
  518. "_build",
  519. "test",
  520. "extras",
  521. "test"]),
  522. Dir = proplists:get_value(dir, Opts),
  523. [Expect] = Dir,
  524. Suite = proplists:get_value(suite, Opts),
  525. ["extra_SUITE"] = Suite.
  526. suite_at_root(Config) ->
  527. AppDir = ?config(apps, Config),
  528. State = ?config(s, Config),
  529. LibDirs = rebar_dir:lib_dirs(State),
  530. State1 = rebar_app_discover:do(State, LibDirs),
  531. Providers = rebar_state:providers(State1),
  532. Namespace = rebar_state:namespace(State1),
  533. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  534. GetOptSpec = providers:opts(CommandProvider),
  535. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--suite=" ++ filename:join([AppDir, "root_SUITE"])]),
  536. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  537. Tests = rebar_prv_common_test:prepare_tests(State2),
  538. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  539. {ok, T} = Tests,
  540. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  541. Suite = proplists:get_value(suite, Opts),
  542. Expected = filename:join([AppDir, "_build", "test", "extras", "root_SUITE"]),
  543. [Expected] = Suite,
  544. TestHrl = filename:join([AppDir, "_build", "test", "extras", "root_SUITE.hrl"]),
  545. true = filelib:is_file(TestHrl),
  546. TestBeam = filename:join([AppDir, "_build", "test", "extras", "root_SUITE.beam"]),
  547. true = filelib:is_file(TestBeam),
  548. DataDir = filename:join([AppDir, "_build", "test", "extras", "root_SUITE_data"]),
  549. true = filelib:is_dir(DataDir),
  550. DataFile = filename:join([AppDir, "_build", "test", "extras", "root_SUITE_data", "some_data.txt"]),
  551. true = filelib:is_file(DataFile).
  552. suite_at_app_root(Config) ->
  553. AppDir = ?config(apps, Config),
  554. [_Name1, Name2] = ?config(appnames, Config),
  555. State = ?config(s, Config),
  556. LibDirs = rebar_dir:lib_dirs(State),
  557. State1 = rebar_app_discover:do(State, LibDirs),
  558. Providers = rebar_state:providers(State1),
  559. Namespace = rebar_state:namespace(State1),
  560. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  561. GetOptSpec = providers:opts(CommandProvider),
  562. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--suite=" ++ filename:join([AppDir, "apps", Name2, "app_root_SUITE"])]),
  563. State2 = rebar_state:command_parsed_args(State1, GetOptResult),
  564. Tests = rebar_prv_common_test:prepare_tests(State2),
  565. {ok, NewState} = rebar_prv_common_test:compile(State2, Tests),
  566. {ok, T} = Tests,
  567. Opts = rebar_prv_common_test:translate_paths(NewState, T),
  568. Suite = proplists:get_value(suite, Opts),
  569. Expected = filename:join([AppDir, "_build", "test", "lib", Name2, "app_root_SUITE"]),
  570. [Expected] = Suite,
  571. TestHrl = filename:join([AppDir, "_build", "test", "lib", Name2, "app_root_SUITE.hrl"]),
  572. true = filelib:is_file(TestHrl),
  573. TestBeam = filename:join([AppDir, "_build", "test", "lib", Name2, "app_root_SUITE.beam"]),
  574. true = filelib:is_file(TestBeam),
  575. DataDir = filename:join([AppDir, "_build", "test", "lib", Name2, "app_root_SUITE_data"]),
  576. true = filelib:is_dir(DataDir),
  577. DataFile = filename:join([AppDir, "_build", "test", "lib", Name2, "app_root_SUITE_data", "some_data.txt"]),
  578. true = filelib:is_file(DataFile).
  579. %% this test probably only fails when this suite is run via rebar3 with the --cover flag
  580. data_dir_correct(Config) ->
  581. DataDir = ?config(data_dir, Config),
  582. Parts = filename:split(DataDir),
  583. ["rebar_ct_SUITE_data","test","rebar","lib","test","_build"|_] = lists:reverse(Parts).
  584. cmd_label(Config) ->
  585. State = ?config(result, Config),
  586. Providers = rebar_state:providers(State),
  587. Namespace = rebar_state:namespace(State),
  588. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  589. GetOptSpec = providers:opts(CommandProvider),
  590. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--label=this_is_a_label"]),
  591. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  592. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  593. true = lists:member({label, "this_is_a_label"}, TestOpts).
  594. cmd_config(Config) ->
  595. State = ?config(result, Config),
  596. Providers = rebar_state:providers(State),
  597. Namespace = rebar_state:namespace(State),
  598. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  599. GetOptSpec = providers:opts(CommandProvider),
  600. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--config=config/foo,config/bar,config/baz"]),
  601. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  602. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  603. true = lists:member({config, ["config/foo", "config/bar", "config/baz"]}, TestOpts).
  604. cmd_allow_user_terms(Config) ->
  605. State = ?config(result, Config),
  606. Providers = rebar_state:providers(State),
  607. Namespace = rebar_state:namespace(State),
  608. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  609. GetOptSpec = providers:opts(CommandProvider),
  610. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--allow_user_terms=true"]),
  611. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  612. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  613. true = lists:member({allow_user_terms, true}, TestOpts).
  614. cmd_logdir(Config) ->
  615. State = ?config(result, Config),
  616. Providers = rebar_state:providers(State),
  617. Namespace = rebar_state:namespace(State),
  618. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  619. GetOptSpec = providers:opts(CommandProvider),
  620. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--logdir=/tmp/ct_logs"]),
  621. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  622. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  623. true = lists:member({logdir, "/tmp/ct_logs"}, TestOpts).
  624. cmd_logopts(Config) ->
  625. State = ?config(result, Config),
  626. Providers = rebar_state:providers(State),
  627. Namespace = rebar_state:namespace(State),
  628. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  629. GetOptSpec = providers:opts(CommandProvider),
  630. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--logopts=no_src,no_nl"]),
  631. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  632. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  633. true = lists:member({logopts, [no_src, no_nl]}, TestOpts).
  634. cmd_verbosity(Config) ->
  635. State = ?config(result, Config),
  636. Providers = rebar_state:providers(State),
  637. Namespace = rebar_state:namespace(State),
  638. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  639. GetOptSpec = providers:opts(CommandProvider),
  640. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--verbosity=43"]),
  641. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  642. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  643. true = lists:member({verbosity, 43}, TestOpts).
  644. cmd_repeat(Config) ->
  645. State = ?config(result, Config),
  646. Providers = rebar_state:providers(State),
  647. Namespace = rebar_state:namespace(State),
  648. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  649. GetOptSpec = providers:opts(CommandProvider),
  650. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--repeat=3"]),
  651. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  652. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  653. true = lists:member({repeat, 3}, TestOpts).
  654. cmd_duration(Config) ->
  655. State = ?config(result, Config),
  656. Providers = rebar_state:providers(State),
  657. Namespace = rebar_state:namespace(State),
  658. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  659. GetOptSpec = providers:opts(CommandProvider),
  660. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--duration=001500"]),
  661. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  662. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  663. true = lists:member({duration, "001500"}, TestOpts).
  664. cmd_until(Config) ->
  665. State = ?config(result, Config),
  666. Providers = rebar_state:providers(State),
  667. Namespace = rebar_state:namespace(State),
  668. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  669. GetOptSpec = providers:opts(CommandProvider),
  670. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--until=001500"]),
  671. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  672. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  673. true = lists:member({until, "001500"}, TestOpts).
  674. cmd_force_stop(Config) ->
  675. State = ?config(result, Config),
  676. Providers = rebar_state:providers(State),
  677. Namespace = rebar_state:namespace(State),
  678. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  679. GetOptSpec = providers:opts(CommandProvider),
  680. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--force_stop=skip_rest"]),
  681. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  682. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  683. true = lists:member({force_stop, skip_rest}, TestOpts).
  684. cmd_basic_html(Config) ->
  685. State = ?config(result, Config),
  686. Providers = rebar_state:providers(State),
  687. Namespace = rebar_state:namespace(State),
  688. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  689. GetOptSpec = providers:opts(CommandProvider),
  690. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--basic_html"]),
  691. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  692. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  693. true = lists:member({basic_html, true}, TestOpts).
  694. cmd_stylesheet(Config) ->
  695. State = ?config(result, Config),
  696. Providers = rebar_state:providers(State),
  697. Namespace = rebar_state:namespace(State),
  698. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  699. GetOptSpec = providers:opts(CommandProvider),
  700. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--stylesheet=resources/tests.css"]),
  701. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  702. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  703. true = lists:member({stylesheet, "resources/tests.css"}, TestOpts).
  704. cmd_decrypt_key(Config) ->
  705. State = ?config(result, Config),
  706. Providers = rebar_state:providers(State),
  707. Namespace = rebar_state:namespace(State),
  708. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  709. GetOptSpec = providers:opts(CommandProvider),
  710. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--decrypt_key==ac467e30"]),
  711. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  712. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  713. true = lists:member({decrypt_key, "=ac467e30"}, TestOpts).
  714. cmd_decrypt_file(Config) ->
  715. State = ?config(result, Config),
  716. Providers = rebar_state:providers(State),
  717. Namespace = rebar_state:namespace(State),
  718. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  719. GetOptSpec = providers:opts(CommandProvider),
  720. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--decrypt_file=../keyfile.pem"]),
  721. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  722. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  723. true = lists:member({decrypt_file, "../keyfile.pem"}, TestOpts).
  724. cmd_abort_if_missing_suites(Config) ->
  725. State = ?config(result, Config),
  726. Providers = rebar_state:providers(State),
  727. Namespace = rebar_state:namespace(State),
  728. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  729. GetOptSpec = providers:opts(CommandProvider),
  730. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--abort_if_missing_suites"]),
  731. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  732. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  733. true = lists:member({abort_if_missing_suites, true}, TestOpts).
  734. cmd_multiply_timetraps(Config) ->
  735. State = ?config(result, Config),
  736. Providers = rebar_state:providers(State),
  737. Namespace = rebar_state:namespace(State),
  738. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  739. GetOptSpec = providers:opts(CommandProvider),
  740. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--multiply_timetraps=3"]),
  741. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  742. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  743. true = lists:member({multiply_timetraps, 3}, TestOpts).
  744. cmd_scale_timetraps(Config) ->
  745. State = ?config(result, Config),
  746. Providers = rebar_state:providers(State),
  747. Namespace = rebar_state:namespace(State),
  748. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  749. GetOptSpec = providers:opts(CommandProvider),
  750. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--scale_timetraps"]),
  751. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  752. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  753. true = lists:member({scale_timetraps, true}, TestOpts).
  754. cmd_create_priv_dir(Config) ->
  755. State = ?config(result, Config),
  756. Providers = rebar_state:providers(State),
  757. Namespace = rebar_state:namespace(State),
  758. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  759. GetOptSpec = providers:opts(CommandProvider),
  760. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--create_priv_dir=manual_per_tc"]),
  761. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  762. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(NewState),
  763. true = lists:member({create_priv_dir, manual_per_tc}, TestOpts).
  764. cmd_include_dir(Config) ->
  765. State = ?config(result, Config),
  766. AppDir = ?config(apps, Config),
  767. Providers = rebar_state:providers(State),
  768. Namespace = rebar_state:namespace(State),
  769. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  770. GetOptSpec = providers:opts(CommandProvider),
  771. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--include=foo/bar/baz,qux"]),
  772. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  773. Tests = rebar_prv_common_test:prepare_tests(NewState),
  774. {ok, _} = rebar_prv_common_test:compile(NewState, Tests),
  775. Name = ?config(name, Config),
  776. Beam = filename:join([AppDir, "_build", "test", "lib", Name, "ebin", Name ++ ".beam"]),
  777. {ok, {_, [{compile_info, Info}]}} = beam_lib:chunks(Beam, [compile_info]),
  778. CompileOpts = proplists:get_value(options, Info),
  779. true = lists:member({i, "foo/bar/baz"}, CompileOpts),
  780. true = lists:member({i, "qux"}, CompileOpts).
  781. cfg_opts(Config) ->
  782. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_opts_"),
  783. AppDir = ?config(apps, C),
  784. Name = rebar_test_utils:create_random_name("ct_cfg_opts_"),
  785. Vsn = rebar_test_utils:create_random_vsn(),
  786. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  787. RebarConfig = [{ct_opts, [{label, "this_is_a_label"}, {decrypt_file, "../keyfile.pem"}]}],
  788. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  789. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State),
  790. true = lists:member({label, "this_is_a_label"}, TestOpts),
  791. true = lists:member({decrypt_file, "../keyfile.pem"}, TestOpts).
  792. %% allow even nonsensical opts to be passed to ct_run for futureproofing
  793. cfg_arbitrary_opts(Config) ->
  794. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_arbitrary_opts_"),
  795. AppDir = ?config(apps, C),
  796. Name = rebar_test_utils:create_random_name("ct_cfg_arbitrary_opts_"),
  797. Vsn = rebar_test_utils:create_random_vsn(),
  798. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  799. RebarConfig = [{ct_opts, [{foo, 1}, {bar, 2}, {baz, 3}]}],
  800. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  801. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State),
  802. true = lists:member({foo, 1}, TestOpts),
  803. true = lists:member({bar, 2}, TestOpts),
  804. true = lists:member({baz, 3}, TestOpts).
  805. cfg_test_spec(Config) ->
  806. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_test_spec_opts_"),
  807. AppDir = ?config(apps, C),
  808. Name = rebar_test_utils:create_random_name("ct_cfg_test_spec_opts_"),
  809. Vsn = rebar_test_utils:create_random_vsn(),
  810. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  811. RebarConfig = [{ct_opts, [Opt = {test_spec, "spec/foo.spec"}]}],
  812. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  813. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State),
  814. false = lists:member(Opt, TestOpts).
  815. cfg_cover_spec(Config) ->
  816. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_cover_spec_opts_"),
  817. AppDir = ?config(apps, C),
  818. Name = rebar_test_utils:create_random_name("ct_cfg_cover_spec_opts_"),
  819. Vsn = rebar_test_utils:create_random_vsn(),
  820. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  821. RebarConfig = [{ct_opts, [Opt = {cover, "spec/foo.spec"}]}],
  822. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  823. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State),
  824. false = lists:member(Opt, TestOpts).
  825. cfg_atom_suites(Config) ->
  826. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_atom_suites_"),
  827. AppDir = ?config(apps, C),
  828. Name = rebar_test_utils:create_random_name("ct_cfg_atom_suites_"),
  829. Vsn = rebar_test_utils:create_random_vsn(),
  830. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  831. RebarConfig = [{ct_opts, [{suite, [foo, bar, baz]}]}],
  832. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  833. {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State),
  834. true = lists:member({suite, ["foo", "bar", "baz"]}, TestOpts).
  835. cover_compiled(Config) ->
  836. State = ?config(result, Config),
  837. Providers = rebar_state:providers(State),
  838. Namespace = rebar_state:namespace(State),
  839. CommandProvider = providers:get_provider(ct, Providers, Namespace),
  840. GetOptSpec = providers:opts(CommandProvider),
  841. {ok, GetOptResult} = getopt:parse(GetOptSpec, ["--cover"]),
  842. NewState = rebar_state:command_parsed_args(State, GetOptResult),
  843. Tests = rebar_prv_common_test:prepare_tests(NewState),
  844. {ok, _} = rebar_prv_common_test:compile(NewState, Tests),
  845. Name = ?config(name, Config),
  846. Mod = list_to_atom(Name),
  847. {file, _} = cover:is_compiled(Mod).
  848. misspecified_ct_opts(Config) ->
  849. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_atom_suites_"),
  850. AppDir = ?config(apps, C),
  851. Name = rebar_test_utils:create_random_name("ct_cfg_atom_suites_"),
  852. Vsn = rebar_test_utils:create_random_vsn(),
  853. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  854. RebarConfig = [{ct_opts, {basic_html, false}}],
  855. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  856. {error, {rebar_prv_common_test, Error}} = rebar_prv_common_test:prepare_tests(State),
  857. {badconfig, {"Value `~p' of option `~p' must be a list", {{basic_html, false}, ct_opts}}} = Error.
  858. misspecified_ct_compile_opts(Config) ->
  859. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_atom_suites_"),
  860. AppDir = ?config(apps, C),
  861. Name = rebar_test_utils:create_random_name("ct_cfg_atom_suites_"),
  862. Vsn = rebar_test_utils:create_random_vsn(),
  863. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  864. RebarConfig = [{ct_compile_opts, {d, whatever}}],
  865. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  866. Tests = rebar_prv_common_test:prepare_tests(State),
  867. {error, {rebar_prv_common_test, Error}} = rebar_prv_common_test:compile(State, Tests),
  868. {badconfig, {"Value `~p' of option `~p' must be a list", {{d, whatever}, ct_compile_opts}}} = Error.
  869. misspecified_ct_first_files(Config) ->
  870. C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_atom_suites_"),
  871. AppDir = ?config(apps, C),
  872. Name = rebar_test_utils:create_random_name("ct_cfg_atom_suites_"),
  873. Vsn = rebar_test_utils:create_random_vsn(),
  874. rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
  875. RebarConfig = [{ct_first_files, some_file}],
  876. {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return),
  877. Tests = rebar_prv_common_test:prepare_tests(State),
  878. {error, {rebar_prv_common_test, Error}} = rebar_prv_common_test:compile(State, Tests),
  879. {badconfig, {"Value `~p' of option `~p' must be a list", {some_file, ct_first_files}}} = Error.
  880. %% helper for generating test data
  881. test_suite(Name) ->
  882. io_lib:format("-module(~ts_SUITE).\n"
  883. "-compile(export_all).\n"
  884. "all() -> [some_test].\n"
  885. "some_test(_) -> ok.\n", [Name]).