diff --git a/platformio/commands/init.py b/platformio/commands/init.py index 1ccc590a..2f6482b2 100644 --- a/platformio/commands/init.py +++ b/platformio/commands/init.py @@ -312,6 +312,7 @@ def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals used_platforms.append(manifest['platform']) if id_ in used_boards: continue + used_boards.append(id_) content.append("") content.append("[env:%s%s]" % (env_prefix, id_)) diff --git a/tests/commands/test_init.py b/tests/commands/test_init.py index 9c8c1189..6a9984b9 100644 --- a/tests/commands/test_init.py +++ b/tests/commands/test_init.py @@ -16,9 +16,9 @@ import json from os import getcwd, makedirs from os.path import getsize, isdir, isfile, join -from platformio import util +from platformio import util, exception from platformio.commands.boards import cli as cmd_boards -from platformio.commands.init import cli +from platformio.commands.init import cli as cmd_init def validate_pioproject(pioproject_dir): @@ -28,33 +28,74 @@ def validate_pioproject(pioproject_dir): join(pioproject_dir, "lib")) -def test_init_default(platformio_setup, clirunner, validate_cliresult): +def test_init_default(clirunner, validate_cliresult): with clirunner.isolated_filesystem(): - result = clirunner.invoke(cli) + result = clirunner.invoke(cmd_init) validate_cliresult(result) validate_pioproject(getcwd()) -def test_init_ext_folder(platformio_setup, clirunner, validate_cliresult): +def test_init_ext_folder(clirunner, validate_cliresult): with clirunner.isolated_filesystem(): ext_folder_name = "ext_folder" makedirs(ext_folder_name) - result = clirunner.invoke(cli, ["-d", ext_folder_name]) + result = clirunner.invoke(cmd_init, ["-d", ext_folder_name]) validate_cliresult(result) validate_pioproject(join(getcwd(), ext_folder_name)) -def test_init_ide_eclipse(platformio_setup, clirunner, validate_cliresult): +def test_init_duplicated_boards(clirunner, validate_cliresult, tmpdir): + with tmpdir.as_cwd(): + for _ in range(2): + result = clirunner.invoke(cmd_init, ["-b", "uno", "-b", "uno"]) + validate_cliresult(result) + validate_pioproject(str(tmpdir)) + config = util.load_project_config() + assert set(config.sections()) == set(["env:uno"]) + + +def test_init_ide_without_board(clirunner, validate_cliresult, tmpdir): + with tmpdir.as_cwd(): + result = clirunner.invoke(cmd_init, ["--ide", "atom"]) + assert result.exit_code == -1 + assert isinstance(result.exception, exception.BoardNotDefined) + + +def test_init_ide_atom(clirunner, validate_cliresult, tmpdir): + with tmpdir.as_cwd(): + result = clirunner.invoke( + cmd_init, ["--ide", "atom", "-b", "uno", "-b", "teensy31"]) + validate_cliresult(result) + validate_pioproject(str(tmpdir)) + assert all([tmpdir.join(f).check() + for f in (".clang_complete", ".gcc-flags.json")]) + assert "arduinoavr" in tmpdir.join(".clang_complete").read() + + # switch to NodeMCU + result = clirunner.invoke( + cmd_init, ["--ide", "atom", "-b", "nodemcuv2", "-b", "uno"]) + validate_cliresult(result) + validate_pioproject(str(tmpdir)) + assert "arduinoespressif" in tmpdir.join(".clang_complete").read() + + # switch to the first board + result = clirunner.invoke(cmd_init, ["--ide", "atom"]) + validate_cliresult(result) + validate_pioproject(str(tmpdir)) + assert "arduinoavr" in tmpdir.join(".clang_complete").read() + + +def test_init_ide_eclipse(clirunner, validate_cliresult): with clirunner.isolated_filesystem(): - result = clirunner.invoke(cli, ["-b", "uno", "--ide", "eclipse"]) + result = clirunner.invoke(cmd_init, ["-b", "uno", "--ide", "eclipse"]) validate_cliresult(result) validate_pioproject(getcwd()) assert all([isfile(f) for f in (".cproject", ".project")]) -def test_init_special_board(platformio_setup, clirunner, validate_cliresult): +def test_init_special_board(clirunner, validate_cliresult): with clirunner.isolated_filesystem(): - result = clirunner.invoke(cli, ["-b", "uno"]) + result = clirunner.invoke(cmd_init, ["-b", "uno"]) validate_cliresult(result) validate_pioproject(getcwd()) @@ -65,36 +106,34 @@ def test_init_special_board(platformio_setup, clirunner, validate_cliresult): config = util.load_project_config() expected_result = [ ("platform", str(boards[0]['platform'])), - ("framework", str(boards[0]['frameworks'][0])), - ("board", "uno") + ("framework", str(boards[0]['frameworks'][0])), ("board", "uno") ] assert config.has_section("env:uno") - assert len(set(expected_result).symmetric_difference( - set(config.items("env:uno")))) == 0 + assert len( + set(expected_result).symmetric_difference( + set(config.items("env:uno")))) == 0 -def test_init_enable_auto_uploading(platformio_setup, clirunner, - validate_cliresult): +def test_init_enable_auto_uploading(clirunner, validate_cliresult): with clirunner.isolated_filesystem(): - result = clirunner.invoke(cli, + result = clirunner.invoke(cmd_init, ["-b", "uno", "--enable-auto-uploading"]) validate_cliresult(result) validate_pioproject(getcwd()) config = util.load_project_config() expected_result = [ - ("platform", "atmelavr"), - ("framework", "arduino"), - ("board", "uno"), - ("targets", "upload") + ("platform", "atmelavr"), ("framework", "arduino"), + ("board", "uno"), ("targets", "upload") ] assert config.has_section("env:uno") - assert len(set(expected_result).symmetric_difference( - set(config.items("env:uno")))) == 0 + assert len( + set(expected_result).symmetric_difference( + set(config.items("env:uno")))) == 0 def test_init_incorrect_board(clirunner): - result = clirunner.invoke(cli, ["-b", "missed_board"]) + result = clirunner.invoke(cmd_init, ["-b", "missed_board"]) assert result.exit_code == 2 assert 'Error: Invalid value for "-b" / "--board' in result.output assert isinstance(result.exception, SystemExit) diff --git a/tests/commands/test_lib.py b/tests/commands/test_lib.py index 08063b7d..9bd5b8ec 100644 --- a/tests/commands/test_lib.py +++ b/tests/commands/test_lib.py @@ -107,7 +107,7 @@ def test_global_lib_uninstall(clirunner, validate_cliresult, def test_project_lib_complex(clirunner, validate_cliresult, tmpdir): - with util.cd(str(tmpdir)): + with tmpdir.as_cwd(): # init result = clirunner.invoke(cmd_init) validate_cliresult(result)