Packages
nerves_bootstrap
1.10.0
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.0
1.13.1
1.13.0
1.12.2
1.12.1
1.12.0
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.1
1.8.0
1.7.1
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.3
1.5.2
1.5.1
1.5.0
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
Nerves mix integration bootstrap and new project generator
Current section
Files
Jump to
Current section
Files
test/nerves_new_test.exs
Code.require_file("mix_helper.exs", __DIR__)
defmodule Nerves.NewTest do
use ExUnit.Case
import MixHelper
@app_name "my_device"
setup do
# The shell asks to install deps.
# We will politely say not to.
send(self(), {:mix_shell_input, :yes?, false})
:ok
end
test "new project default targets", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/README.md")
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ "@app :#{@app_name}"
assert file =~ "{:nerves_system_rpi, \"~> 1.13\", runtime: false, targets: :rpi"
assert file =~ "{:nerves_system_rpi0, \"~> 1.13\", runtime: false, targets: :rpi0"
assert file =~ "{:nerves_system_rpi2, \"~> 1.13\", runtime: false, targets: :rpi2"
assert file =~ "{:nerves_system_rpi3, \"~> 1.13\", runtime: false, targets: :rpi3"
assert file =~ "{:nerves_system_rpi3a, \"~> 1.13\", runtime: false, targets: :rpi3a"
assert file =~ "{:nerves_system_rpi4, \"~> 1.13\", runtime: false, targets: :rpi4"
assert file =~ "{:nerves_system_bbb, \"~> 2.8\", runtime: false, targets: :bbb"
assert file =~ "{:nerves_system_osd32mp1, \"~> 0.4\", runtime: false, targets: :osd32mp1"
assert file =~ "{:nerves_system_x86_64, \"~> 1.13\", runtime: false, targets: :x86_64"
end)
end)
end
test "new project single target", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--target", "rpi"])
assert_file("#{@app_name}/README.md")
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ "@app :#{@app_name}"
assert file =~ "{:nerves_system_rpi, \"~> 1.13\", runtime: false, targets: :rpi"
refute file =~ "{:nerves_system_rpi0, \"~> 1.13\", runtime: false, targets: :rpi0"
end)
end)
end
test "new project multiple target", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--target", "rpi", "--target", "rpi3"])
assert_file("#{@app_name}/README.md")
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ "@app :#{@app_name}"
assert file =~ "{:nerves_system_rpi, \"~> 1.13\", runtime: false, targets: :rpi"
assert file =~ "{:nerves_system_rpi3, \"~> 1.13\", runtime: false, targets: :rpi3"
refute file =~ "{:nerves_system_rpi0, \"~> 1.13\", runtime: false, targets: :rpi0"
end)
end)
end
test "new project cookie set", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--cookie", "foo"])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~s{cookie: "foo"}
end)
end)
end
test "new project provides a default cookie", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ "cookie: \"\#{@app}_cookie\""
end)
end)
end
test "new project enables heart", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/rel/vm.args.eex", fn file ->
assert file =~ "-heart -env HEART_BEAT_TIMEOUT"
end)
end)
end
test "new project enables embedded mode", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/rel/vm.args.eex", fn file ->
assert file =~ "-mode embedded"
end)
end)
end
test "new project adds runtime_tools", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/extra_applications:.*runtime_tools/
end)
end)
end
test "new project includes ring_logger", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/:ring_logger/
end)
assert_file("#{@app_name}/config/config.exs", fn file ->
assert file =~ ~r/RingLogger/
end)
end)
end
test "new project includes toolshed", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/:toolshed/
end)
end)
end
test "new project sets build_embedded", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/build_embedded:/
end)
end)
end
test "new project with nerves_pack", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--nerves-pack"])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/:nerves_pack/
end)
assert_file("#{@app_name}/config/target.exs", fn file ->
assert file =~ ~r"nerves_ssh"
assert file =~ ~r"vintage_net"
assert file =~ ~r"mdns_lite"
end)
end)
end
test "new project with implicit nerves_pack", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/mix.exs", fn file ->
assert file =~ ~r/:nerves_pack/
end)
assert_file("#{@app_name}/config/target.exs", fn file ->
assert file =~ ~r"nerves_ssh"
assert file =~ ~r"vintage_net"
assert file =~ ~r"mdns_lite"
end)
end)
end
test "new project without nerves pack", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--no-nerves-pack"])
assert_file("#{@app_name}/mix.exs", fn file ->
refute file =~ ~r"nerves_pack"
end)
assert_file("#{@app_name}/config/config.exs", fn file ->
refute file =~ ~r"nerves_pack"
refute file =~ ~r"nerves_ssh"
end)
end)
end
test "new projects cannot use reserved names", context do
in_tmp(context.test, fn ->
assert_raise(Mix.Error, "New projects cannot be named 'nerves'", fn ->
Mix.Tasks.Nerves.New.run(["nerves"])
end)
end)
end
test "new project sets source_date_epoch time", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name, "--source-date-epoch", "1234"])
assert_file("#{@app_name}/config/config.exs", fn file ->
assert file =~ ~r/source_date_epoch: "1234"/
end)
end)
end
test "new project generates source_date_epoch time", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/config/config.exs", fn file ->
assert file =~ ~r/source_date_epoch: /
end)
end)
end
test "new project generates sample erlinit config", context do
in_tmp(context.test, fn ->
Mix.Tasks.Nerves.New.run([@app_name])
assert_file("#{@app_name}/config/target.exs", fn file ->
assert file =~ ~r"erlinit"
end)
end)
end
end