PageRenderTime 56ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/mix/test/mix/tasks/compile.app_test.exs

https://github.com/vanstee/elixir
Elixir | 111 lines | 93 code | 18 blank | 0 comment | 6 complexity | b0d30d9b8ad9867f5e8d47525a3e988a MD5 | raw file
Possible License(s): Apache-2.0
  1. Code.require_file "../../test_helper.exs", __DIR__
  2. defmodule Mix.Tasks.Compile.AppTest do
  3. use MixTest.Case
  4. defmodule CustomProject do
  5. def project do
  6. [app: :custom_project, version: "0.2.0"]
  7. end
  8. def application do
  9. [maxT: :infinity]
  10. end
  11. end
  12. defmodule InvalidProject do
  13. def project do
  14. [app: :invalid_project, version: "0.3.0"]
  15. end
  16. def application do
  17. case Process.get(:error) do
  18. :modules -> [modules: :invalid]
  19. :maxT -> [maxT: :invalid]
  20. :registered -> [registered: ["invalid"]]
  21. :included_applications -> [included_applications: ["invalid"]]
  22. :applications -> [applications: ["invalid"]]
  23. :env -> [env: [:a]]
  24. :mod -> [mod: {Mod}]
  25. :start_phases -> [start_phases: [:invalid]]
  26. end
  27. end
  28. end
  29. test "generates .app file when changes happen" do
  30. Mix.Project.push MixTest.Case.Sample
  31. in_fixture "no_mixfile", fn ->
  32. Mix.Tasks.Compile.Elixir.run([])
  33. assert Mix.Tasks.Compile.App.run([]) == :ok
  34. contents = File.read!("_build/shared/lib/sample/ebin/sample.app")
  35. assert contents =~ "{application,sample"
  36. assert contents =~ "0.1.0"
  37. assert contents =~ "'Elixir.A'"
  38. assert contents =~ "{applications,[kernel,stdlib,elixir]}"
  39. assert Mix.Tasks.Compile.App.run([]) == :noop
  40. end
  41. after
  42. Mix.Project.pop
  43. end
  44. test "use custom application settings" do
  45. Mix.Project.push CustomProject
  46. in_fixture "no_mixfile", fn ->
  47. Mix.Tasks.Compile.Elixir.run([])
  48. Mix.Tasks.Compile.App.run([])
  49. contents = File.read!("_build/shared/lib/custom_project/ebin/custom_project.app")
  50. assert contents =~ "0.2.0"
  51. assert contents =~ "{maxT,infinity}"
  52. end
  53. after
  54. Mix.Project.pop
  55. end
  56. test "application properties validation" do
  57. Mix.Project.push InvalidProject
  58. in_fixture "no_mixfile", fn ->
  59. lc error inlist [:modules, :maxT, :registered, :included_applications,
  60. :applications, :env, :mod, :start_phases] do
  61. Process.put(:error, error)
  62. e = catch_error(Mix.Tasks.Compile.App.run([]))
  63. assert Mix.Error[] = e
  64. assert e.message =~ ":#{error}"
  65. err_token = InvalidProject.application[error]
  66. cond do
  67. is_list(err_token) ->
  68. [tok] = err_token
  69. assert e.message =~ inspect(tok)
  70. true ->
  71. assert e.message =~ inspect(err_token)
  72. end
  73. end
  74. Process.delete(:error)
  75. end
  76. after
  77. Mix.Project.pop
  78. end
  79. test ".app contains description and registered (as required by systools)" do
  80. Mix.Project.push MixTest.Case.Sample
  81. in_fixture "no_mixfile", fn ->
  82. Mix.Tasks.Compile.Elixir.run([])
  83. assert Mix.Tasks.Compile.App.run([]) == :ok
  84. {:ok, [{_app, _, properties}]} = :file.consult("_build/shared/lib/sample/ebin/sample.app")
  85. properties = Keyword.from_enum(properties)
  86. assert properties[:registered] == []
  87. assert properties[:description] == 'sample'
  88. assert Mix.Tasks.Compile.App.run([]) == :noop
  89. end
  90. after
  91. Mix.Project.pop
  92. end
  93. end