diff --git a/platformio/builder/scripts/frameworks/arduino.py b/platformio/builder/scripts/frameworks/arduino.py index 29d4440d..6d3a8538 100644 --- a/platformio/builder/scripts/frameworks/arduino.py +++ b/platformio/builder/scripts/frameworks/arduino.py @@ -74,7 +74,7 @@ env.Append( if env.subst("${PLATFORMFW_DIR}")[-3:] == "sam": env.VariantDir( join("$BUILD_DIR", "FrameworkCMSISInc"), - join("$PLATFORMFW_DIR", "system", "CMSIS", "CMSIS", "include") + join("$PLATFORMFW_DIR", "system", "CMSIS", "CMSIS", "Include") ) env.VariantDir( join("$BUILD_DIR", "FrameworkDeviceInc"), diff --git a/tests/commands/test_boards.py b/tests/commands/test_boards.py new file mode 100644 index 00000000..7e5d8bc4 --- /dev/null +++ b/tests/commands/test_boards.py @@ -0,0 +1,60 @@ +# Copyright (C) Ivan Kravets +# See LICENSE for details. + +import json + +from os.path import isfile, join + +from click.testing import CliRunner + +from platformio.commands.boards import cli as boards_cli +from platformio.commands.search import cli as search_cli +from platformio.commands.install import cli as install_cli +from platformio import util + +runner = CliRunner() + + +def validate_output(result): + assert result.exit_code == 0 + assert not result.exception + assert "error" not in result.output.lower() + + +def test_board_json_output(platformio_setup): + result = runner.invoke(boards_cli, ["cortex", "--json-output"]) + validate_output(result) + boards = json.loads(result.output) + assert isinstance(boards, dict) + assert "teensy30" in boards + + +def test_board_options(platformio_setup): + required_opts = set( + ["build", "platform", "upload", "name"]) + + # fetch avaialble platforms + result = runner.invoke(search_cli, ["--json-output"]) + validate_output(result) + search_result = json.loads(result.output) + assert isinstance(search_result, list) + assert len(search_result) + platforms = [item['name'] for item in search_result] + + for name, opts in util.get_boards().iteritems(): + assert required_opts.issubset(set(opts)) + assert opts['platform'] in platforms + + +def test_board_ldscripts(platformio_setup): + result = runner.invoke( + install_cli, [ + "stm32", + "--skip-default-package", + "--with-package=ldscripts" + ]) + validate_output(result) + ldscripts_path = join(util.get_home_dir(), "packages", "ldscripts") + for _, opts in util.get_boards().iteritems(): + if opts['build'].get("ldscript"): + assert isfile(join(ldscripts_path, opts['build'].get("ldscript"))) diff --git a/tests/commands/test_init.py b/tests/commands/test_init.py new file mode 100644 index 00000000..6dc46979 --- /dev/null +++ b/tests/commands/test_init.py @@ -0,0 +1,80 @@ +# Copyright (C) Ivan Kravets +# See LICENSE for details. + +from os import makedirs, getcwd +from os.path import getsize, isdir, isfile, join + +from click.testing import CliRunner + +from platformio.commands.init import cli +from platformio import exception, util + +runner = CliRunner() + + +def validate_pioproject(pioproject_dir): + pioconf_path = join(pioproject_dir, "platformio.ini") + assert isfile(pioconf_path) and getsize(pioconf_path) > 0 + assert isdir(join(pioproject_dir, "src")) and isdir( + join(pioproject_dir, "lib")) + + +def validate_output(result): + assert result.exit_code == 0 + assert not result.exception + assert "error" not in result.output.lower() + assert "Project has been successfully initialized!" in result.output + + +def test_init_default(platformio_setup): + with runner.isolated_filesystem(): + result = runner.invoke(cli) + validate_output(result) + validate_pioproject(getcwd()) + + +def test_init_ext_folder(platformio_setup): + with runner.isolated_filesystem(): + ext_folder_name = "ext_folder" + makedirs(ext_folder_name) + result = runner.invoke(cli, ["-d", ext_folder_name]) + validate_output(result) + validate_pioproject(join(getcwd(), ext_folder_name)) + + +def test_init_special_board(platformio_setup): + with runner.isolated_filesystem(): + result = runner.invoke(cli, ["-b", "uno"]) + validate_output(result) + validate_pioproject(getcwd()) + + uno = util.get_boards("uno") + config = util.get_project_config() + expected_result = [ + ('platform', uno['platform']), + ('framework', uno['framework']), + ('board', 'uno'), + ('targets', 'upload') + ] + assert config.has_section("env:autogen_uno") + assert config.items("env:autogen_uno") == expected_result + + +def test_init_disable_auto_uploading(platformio_setup): + with runner.isolated_filesystem(): + result = runner.invoke(cli, ["-b", "uno", "--disable-auto-uploading"]) + validate_output(result) + validate_pioproject(getcwd()) + config = util.get_project_config() + expected_result = [ + ('platform', 'atmelavr'), + ('framework', 'arduino'), + ('board', 'uno') + ] + assert config.has_section("env:autogen_uno") + assert config.items("env:autogen_uno") == expected_result + + +def test_init_incorrect_board(): + result = runner.invoke(cli, ["-b", "missed_board"]) + assert isinstance(result.exception, exception.UnknownBoard)