25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

182 satır
7.2 KiB

  1. -module(rebar_utils_SUITE).
  2. -export([all/0,
  3. init_per_testcase/2,
  4. end_per_testcase/2,
  5. groups/0,
  6. init_per_group/2,
  7. end_per_group/2,
  8. empty_arglist/1,
  9. single_task/1,
  10. single_task_with_immediate_comma/1,
  11. single_task_with_trailing_comma/1,
  12. multiple_task/1,
  13. multiple_task_no_spaces/1,
  14. multiple_task_with_immediate_comma/1,
  15. multiple_task_with_trailing_comma/1,
  16. task_with_arg/1,
  17. task_with_arg_with_immediate_comma/1,
  18. task_with_arg_with_trailing_comma/1,
  19. task_with_multiple_args/1,
  20. task_with_flag/1,
  21. task_with_flag_with_immediate_comma/1,
  22. task_with_flag_with_trailing_comma/1,
  23. task_with_flag_with_commas/1,
  24. task_with_multiple_flags/1,
  25. special_task_do/1,
  26. valid_otp_version/1,
  27. valid_otp_version_equal/1,
  28. invalid_otp_version/1,
  29. nonblacklisted_otp_version/1,
  30. blacklisted_otp_version/1,
  31. sh_does_not_miss_messages/1]).
  32. -include_lib("common_test/include/ct.hrl").
  33. -include_lib("eunit/include/eunit.hrl").
  34. -include_lib("kernel/include/file.hrl").
  35. init_per_testcase(_, Config) ->
  36. rebar_test_utils:init_rebar_state(Config).
  37. end_per_testcase(_, _Config) ->
  38. catch meck:unload().
  39. all() ->
  40. [{group, args_to_tasks},
  41. sh_does_not_miss_messages].
  42. groups() ->
  43. [{args_to_tasks, [], [empty_arglist,
  44. single_task,
  45. single_task_with_immediate_comma,
  46. single_task_with_trailing_comma,
  47. multiple_task,
  48. multiple_task_no_spaces,
  49. multiple_task_with_immediate_comma,
  50. multiple_task_with_trailing_comma,
  51. task_with_arg,
  52. task_with_arg_with_immediate_comma,
  53. task_with_arg_with_trailing_comma,
  54. task_with_multiple_args,
  55. task_with_flag,
  56. task_with_flag_with_immediate_comma,
  57. task_with_flag_with_trailing_comma,
  58. task_with_flag_with_commas,
  59. task_with_multiple_flags,
  60. special_task_do,
  61. valid_otp_version,
  62. valid_otp_version_equal,
  63. invalid_otp_version,
  64. nonblacklisted_otp_version,
  65. blacklisted_otp_version
  66. ]}].
  67. init_per_group(_, Config) -> Config.
  68. end_per_group(_, Config) -> Config.
  69. empty_arglist(_Config) ->
  70. [] = rebar_utils:args_to_tasks([]).
  71. single_task(_Config) ->
  72. [{"foo", []}] = rebar_utils:args_to_tasks(["foo"]).
  73. single_task_with_immediate_comma(_Config) ->
  74. [{"foo", []}] = rebar_utils:args_to_tasks(["foo,"]).
  75. single_task_with_trailing_comma(_Config) ->
  76. [{"foo", []}] = rebar_utils:args_to_tasks(["foo", ","]).
  77. multiple_task(_Config) ->
  78. [{"foo", []}, {"bar", []}, {"baz", []}] = rebar_utils:args_to_tasks(["foo,",
  79. "bar,",
  80. "baz"]).
  81. multiple_task_no_spaces(_Config) ->
  82. [{"foo", []}, {"bar", []}, {"baz", []}] = rebar_utils:args_to_tasks(["foo,bar,baz"]).
  83. multiple_task_with_immediate_comma(_Config) ->
  84. [{"foo", []}, {"bar", []}, {"baz", []}] = rebar_utils:args_to_tasks(["foo,",
  85. "bar,",
  86. "baz,"]).
  87. multiple_task_with_trailing_comma(_Config) ->
  88. [{"foo", []}, {"bar", []}, {"baz", []}] = rebar_utils:args_to_tasks(["foo",
  89. ",",
  90. "bar",
  91. ",",
  92. "baz",
  93. ","]).
  94. task_with_arg(_Config) ->
  95. [{"foo", ["bar"]}] = rebar_utils:args_to_tasks(["foo", "bar"]).
  96. task_with_arg_with_immediate_comma(_Config) ->
  97. [{"foo", ["bar"]}, {"baz", []}] = rebar_utils:args_to_tasks(["foo", "bar,", "baz"]).
  98. task_with_arg_with_trailing_comma(_Config) ->
  99. [{"foo", ["bar"]}, {"baz", []}] = rebar_utils:args_to_tasks(["foo", "bar", ",", "baz"]).
  100. task_with_multiple_args(_Config) ->
  101. [{"foo", ["bar", "baz"]}] = rebar_utils:args_to_tasks(["foo", "bar", "baz"]).
  102. task_with_flag(_Config) ->
  103. [{"foo", ["--bar"]}] = rebar_utils:args_to_tasks(["foo", "--bar"]).
  104. task_with_flag_with_immediate_comma(_Config) ->
  105. [{"foo", ["--bar"]}, {"baz", []}] = rebar_utils:args_to_tasks(["foo", "--bar,", "baz"]).
  106. task_with_flag_with_trailing_comma(_Config) ->
  107. [{"foo", ["--bar"]}, {"baz", []}] = rebar_utils:args_to_tasks(["foo", "--bar", ",", "baz"]).
  108. task_with_flag_with_commas(_Config) ->
  109. [{"foo", ["--bar=baz,qux"]}] = rebar_utils:args_to_tasks(["foo", "--bar=baz,qux"]).
  110. task_with_multiple_flags(_Config) ->
  111. [{"foo", ["--bar", "--baz"]}] = rebar_utils:args_to_tasks(["foo", "--bar", "--baz"]).
  112. special_task_do(_Config) ->
  113. [{"foo", []}, {"do", ["bar,", "baz"]}] = rebar_utils:args_to_tasks(["foo,",
  114. "do",
  115. "bar,",
  116. "baz"]).
  117. valid_otp_version(_Config) ->
  118. meck:new(rebar_utils, [passthrough]),
  119. meck:expect(rebar_utils, otp_release, fun() -> "42.4" end),
  120. rebar_utils:check_min_otp_version("42.3"),
  121. meck:unload(rebar_utils).
  122. valid_otp_version_equal(_Config) ->
  123. meck:new(rebar_utils, [passthrough]),
  124. meck:expect(rebar_utils, otp_release, fun() -> "42.3" end),
  125. rebar_utils:check_min_otp_version("42.3"),
  126. meck:unload(rebar_utils).
  127. invalid_otp_version(_Config) ->
  128. meck:new(rebar_utils, [passthrough]),
  129. meck:expect(rebar_utils, otp_release, fun() -> "17.4" end),
  130. ?assertException(throw, rebar_abort, rebar_utils:check_min_otp_version("42.3")),
  131. meck:unload(rebar_utils).
  132. nonblacklisted_otp_version(_Config) ->
  133. meck:new(rebar_utils, [passthrough]),
  134. meck:expect(rebar_utils, otp_release, fun() -> "42.4" end),
  135. rebar_utils:check_blacklisted_otp_versions(["1\\.2", "42\\.3"]),
  136. meck:unload(rebar_utils).
  137. blacklisted_otp_version(_Config) ->
  138. meck:new(rebar_utils, [passthrough]),
  139. meck:expect(rebar_utils, otp_release, fun() -> "42.4" end),
  140. ?assertException(throw, rebar_abort, rebar_utils:check_blacklisted_otp_versions(["1\\.2", "42\\.[1-4]"])),
  141. meck:unload(rebar_utils).
  142. sh_does_not_miss_messages(_Config) ->
  143. Source = "~nmain(_) ->~n io:format(\"donotmissme\").~n",
  144. file:write_file("do_not_miss_messages", io_lib:format(Source,[])),
  145. {ok, "donotmissme"} = rebar_utils:sh("escript do_not_miss_messages", []),
  146. AnyMessageRemained =
  147. receive
  148. What -> What
  149. after 100 ->
  150. false
  151. end,
  152. AnyMessageRemained = false.