You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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