mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07:14 +02:00
Refactor tests with Py.Test's fixtures // Resolve #2
This commit is contained in:
@ -9,6 +9,7 @@ Release History
|
|||||||
* Added new boards to `atmelavr <http://docs.platformio.org/en/latest/platforms/atmelavr.html#boards>`__
|
* Added new boards to `atmelavr <http://docs.platformio.org/en/latest/platforms/atmelavr.html#boards>`__
|
||||||
platform: *Arduino NG, Arduino BT, Arduino Esplora, Arduino Ethernet,
|
platform: *Arduino NG, Arduino BT, Arduino Esplora, Arduino Ethernet,
|
||||||
Arduino Robot Control, Arduino Robot Motor and Arduino Yun*
|
Arduino Robot Control, Arduino Robot Motor and Arduino Yun*
|
||||||
|
* Covered code with tests (`issue #2 <https://github.com/ivankravets/platformio/issues/2>`_)
|
||||||
* Refactored *Library Dependency Finder* (issues
|
* Refactored *Library Dependency Finder* (issues
|
||||||
`#48 <https://github.com/ivankravets/platformio/issues/48>`_,
|
`#48 <https://github.com/ivankravets/platformio/issues/48>`_,
|
||||||
`#50 <https://github.com/ivankravets/platformio/issues/50>`_,
|
`#50 <https://github.com/ivankravets/platformio/issues/50>`_,
|
||||||
|
@ -2,46 +2,35 @@
|
|||||||
# See LICENSE for details.
|
# See LICENSE for details.
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from os.path import isfile, join
|
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
|
from platformio import util
|
||||||
|
from platformio.commands.boards import cli as boards_cli
|
||||||
runner = CliRunner()
|
from platformio.commands.install import cli as install_cli
|
||||||
|
from platformio.commands.search import cli as search_cli
|
||||||
|
|
||||||
|
|
||||||
def validate_output(result):
|
def test_board_json_output(platformio_setup, clirunner, validate_cliresult):
|
||||||
assert result.exit_code == 0
|
result = clirunner.invoke(boards_cli, ["cortex", "--json-output"])
|
||||||
assert not result.exception
|
validate_cliresult(result)
|
||||||
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)
|
boards = json.loads(result.output)
|
||||||
assert isinstance(boards, dict)
|
assert isinstance(boards, dict)
|
||||||
assert "teensy30" in boards
|
assert "teensy30" in boards
|
||||||
|
|
||||||
|
|
||||||
def test_board_raw_output(platformio_setup):
|
def test_board_raw_output(platformio_setup, clirunner, validate_cliresult):
|
||||||
result = runner.invoke(boards_cli, ["energia"])
|
result = clirunner.invoke(boards_cli, ["energia"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "titiva" in result.output
|
assert "titiva" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_board_options(platformio_setup):
|
def test_board_options(platformio_setup, clirunner, validate_cliresult):
|
||||||
required_opts = set(
|
required_opts = set(
|
||||||
["build", "platform", "upload", "name"])
|
["build", "platform", "upload", "name"])
|
||||||
|
|
||||||
# fetch avaialble platforms
|
# fetch available platforms
|
||||||
result = runner.invoke(search_cli, ["--json-output"])
|
result = clirunner.invoke(search_cli, ["--json-output"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
search_result = json.loads(result.output)
|
search_result = json.loads(result.output)
|
||||||
assert isinstance(search_result, list)
|
assert isinstance(search_result, list)
|
||||||
assert len(search_result)
|
assert len(search_result)
|
||||||
@ -52,14 +41,14 @@ def test_board_options(platformio_setup):
|
|||||||
assert opts['platform'] in platforms
|
assert opts['platform'] in platforms
|
||||||
|
|
||||||
|
|
||||||
def test_board_ldscripts(platformio_setup):
|
def test_board_ldscripts(platformio_setup, clirunner, validate_cliresult):
|
||||||
result = runner.invoke(
|
result = clirunner.invoke(
|
||||||
install_cli, [
|
install_cli, [
|
||||||
"stm32",
|
"stm32",
|
||||||
"--skip-default-package",
|
"--skip-default-package",
|
||||||
"--with-package=ldscripts"
|
"--with-package=ldscripts"
|
||||||
])
|
])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
ldscripts_path = join(util.get_home_dir(), "packages", "ldscripts")
|
ldscripts_path = join(util.get_home_dir(), "packages", "ldscripts")
|
||||||
for _, opts in util.get_boards().iteritems():
|
for _, opts in util.get_boards().iteritems():
|
||||||
if opts['build'].get("ldscript"):
|
if opts['build'].get("ldscript"):
|
||||||
|
@ -4,13 +4,9 @@
|
|||||||
from os import makedirs, getcwd
|
from os import makedirs, getcwd
|
||||||
from os.path import getsize, isdir, isfile, join
|
from os.path import getsize, isdir, isfile, join
|
||||||
|
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
from platformio.commands.init import cli
|
from platformio.commands.init import cli
|
||||||
from platformio import exception, util
|
from platformio import exception, util
|
||||||
|
|
||||||
runner = CliRunner()
|
|
||||||
|
|
||||||
|
|
||||||
def validate_pioproject(pioproject_dir):
|
def validate_pioproject(pioproject_dir):
|
||||||
pioconf_path = join(pioproject_dir, "platformio.ini")
|
pioconf_path = join(pioproject_dir, "platformio.ini")
|
||||||
@ -19,33 +15,26 @@ def validate_pioproject(pioproject_dir):
|
|||||||
join(pioproject_dir, "lib"))
|
join(pioproject_dir, "lib"))
|
||||||
|
|
||||||
|
|
||||||
def validate_output(result):
|
def test_init_default(platformio_setup, clirunner, validate_cliresult):
|
||||||
assert result.exit_code == 0
|
with clirunner.isolated_filesystem():
|
||||||
assert not result.exception
|
result = clirunner.invoke(cli)
|
||||||
assert "error" not in result.output.lower()
|
validate_cliresult(result)
|
||||||
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())
|
validate_pioproject(getcwd())
|
||||||
|
|
||||||
|
|
||||||
def test_init_ext_folder(platformio_setup):
|
def test_init_ext_folder(platformio_setup, clirunner, validate_cliresult):
|
||||||
with runner.isolated_filesystem():
|
with clirunner.isolated_filesystem():
|
||||||
ext_folder_name = "ext_folder"
|
ext_folder_name = "ext_folder"
|
||||||
makedirs(ext_folder_name)
|
makedirs(ext_folder_name)
|
||||||
result = runner.invoke(cli, ["-d", ext_folder_name])
|
result = clirunner.invoke(cli, ["-d", ext_folder_name])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
validate_pioproject(join(getcwd(), ext_folder_name))
|
validate_pioproject(join(getcwd(), ext_folder_name))
|
||||||
|
|
||||||
|
|
||||||
def test_init_special_board(platformio_setup):
|
def test_init_special_board(platformio_setup, clirunner, validate_cliresult):
|
||||||
with runner.isolated_filesystem():
|
with clirunner.isolated_filesystem():
|
||||||
result = runner.invoke(cli, ["-b", "uno"])
|
result = clirunner.invoke(cli, ["-b", "uno"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
validate_pioproject(getcwd())
|
validate_pioproject(getcwd())
|
||||||
|
|
||||||
uno = util.get_boards("uno")
|
uno = util.get_boards("uno")
|
||||||
@ -60,10 +49,12 @@ def test_init_special_board(platformio_setup):
|
|||||||
assert config.items("env:autogen_uno") == expected_result
|
assert config.items("env:autogen_uno") == expected_result
|
||||||
|
|
||||||
|
|
||||||
def test_init_disable_auto_uploading(platformio_setup):
|
def test_init_disable_auto_uploading(platformio_setup, clirunner,
|
||||||
with runner.isolated_filesystem():
|
validate_cliresult):
|
||||||
result = runner.invoke(cli, ["-b", "uno", "--disable-auto-uploading"])
|
with clirunner.isolated_filesystem():
|
||||||
validate_output(result)
|
result = clirunner.invoke(cli,
|
||||||
|
["-b", "uno", "--disable-auto-uploading"])
|
||||||
|
validate_cliresult(result)
|
||||||
validate_pioproject(getcwd())
|
validate_pioproject(getcwd())
|
||||||
config = util.get_project_config()
|
config = util.get_project_config()
|
||||||
expected_result = [
|
expected_result = [
|
||||||
@ -75,6 +66,6 @@ def test_init_disable_auto_uploading(platformio_setup):
|
|||||||
assert config.items("env:autogen_uno") == expected_result
|
assert config.items("env:autogen_uno") == expected_result
|
||||||
|
|
||||||
|
|
||||||
def test_init_incorrect_board():
|
def test_init_incorrect_board(clirunner):
|
||||||
result = runner.invoke(cli, ["-b", "missed_board"])
|
result = clirunner.invoke(cli, ["-b", "missed_board"])
|
||||||
assert isinstance(result.exception, exception.UnknownBoard)
|
assert isinstance(result.exception, exception.UnknownBoard)
|
||||||
|
@ -6,19 +6,9 @@ from os.path import isdir, isfile, join
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
from platformio.commands.lib import cli
|
from platformio.commands.lib import cli
|
||||||
from platformio import util
|
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 validate_libfolder():
|
def validate_libfolder():
|
||||||
libs_path = util.get_lib_dir()
|
libs_path = util.get_lib_dir()
|
||||||
@ -29,46 +19,46 @@ def validate_libfolder():
|
|||||||
join(libs_path, lib, "library.json"))
|
join(libs_path, lib, "library.json"))
|
||||||
|
|
||||||
|
|
||||||
def test_lib_search():
|
def test_lib_search(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["search", "DHT22"])
|
result = clirunner.invoke(cli, ["search", "DHT22"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
match = re.search(r"Found\s+(\d+)\slibraries:", result.output)
|
match = re.search(r"Found\s+(\d+)\slibraries:", result.output)
|
||||||
assert int(match.group(1)) > 2
|
assert int(match.group(1)) > 2
|
||||||
|
|
||||||
result = runner.invoke(cli, ["search", "DHT22", "--platform=timsp430"])
|
result = clirunner.invoke(cli, ["search", "DHT22", "--platform=timsp430"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
match = re.search(r"Found\s+(\d+)\slibraries:", result.output)
|
match = re.search(r"Found\s+(\d+)\slibraries:", result.output)
|
||||||
assert int(match.group(1)) == 1
|
assert int(match.group(1)) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_lib_install():
|
def test_lib_install(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["install", "58", "115"])
|
result = clirunner.invoke(cli, ["install", "58", "115"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
validate_libfolder()
|
validate_libfolder()
|
||||||
|
|
||||||
|
|
||||||
def test_lib_list():
|
def test_lib_list(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["list"])
|
result = clirunner.invoke(cli, ["list"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "58" in result.output and "115" in result.output
|
assert "58" in result.output and "115" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_lib_show():
|
def test_lib_show(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["show", "115"])
|
result = clirunner.invoke(cli, ["show", "115"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "arduino" in result.output and "atmelavr" in result.output
|
assert "arduino" in result.output and "atmelavr" in result.output
|
||||||
|
|
||||||
result = runner.invoke(cli, ["show", "58"])
|
result = clirunner.invoke(cli, ["show", "58"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "energia" in result.output and "timsp430" in result.output
|
assert "energia" in result.output and "timsp430" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_lib_update():
|
def test_lib_update(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["update"])
|
result = clirunner.invoke(cli, ["update"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "58" in result.output and "115" in result.output
|
assert "58" in result.output and "115" in result.output
|
||||||
|
|
||||||
|
|
||||||
def test_lib_uninstall():
|
def test_lib_uninstall(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["uninstall", "58", "115"])
|
result = clirunner.invoke(cli, ["uninstall", "58", "115"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
|
@ -3,23 +3,12 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
from platformio.commands.list import cli
|
from platformio.commands.list import cli
|
||||||
|
|
||||||
runner = CliRunner()
|
|
||||||
|
|
||||||
|
def test_list_json_output(clirunner, validate_cliresult):
|
||||||
def validate_output(result):
|
result = clirunner.invoke(cli, ["--json-output"])
|
||||||
assert result.exit_code == 0
|
validate_cliresult(result)
|
||||||
assert not result.exception
|
|
||||||
assert "error" not in result.output.lower()
|
|
||||||
|
|
||||||
|
|
||||||
def test_list_json_output():
|
|
||||||
result = runner.invoke(cli, ["--json-output"])
|
|
||||||
validate_output(result)
|
|
||||||
list_result = json.loads(result.output)
|
list_result = json.loads(result.output)
|
||||||
assert isinstance(list_result, list)
|
assert isinstance(list_result, list)
|
||||||
assert len(list_result)
|
assert len(list_result)
|
||||||
@ -27,7 +16,7 @@ def test_list_json_output():
|
|||||||
assert "titiva" in platforms
|
assert "titiva" in platforms
|
||||||
|
|
||||||
|
|
||||||
def test_list_raw_output():
|
def test_list_raw_output(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli)
|
result = clirunner.invoke(cli)
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "teensy" in result.output
|
assert "teensy" in result.output
|
||||||
|
@ -3,23 +3,12 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
from platformio.commands.search import cli
|
from platformio.commands.search import cli
|
||||||
|
|
||||||
runner = CliRunner()
|
|
||||||
|
|
||||||
|
def test_search_json_output(clirunner, validate_cliresult):
|
||||||
def validate_output(result):
|
result = clirunner.invoke(cli, ["arduino", "--json-output"])
|
||||||
assert result.exit_code == 0
|
validate_cliresult(result)
|
||||||
assert not result.exception
|
|
||||||
assert "error" not in result.output.lower()
|
|
||||||
|
|
||||||
|
|
||||||
def test_search_json_output():
|
|
||||||
result = runner.invoke(cli, ["arduino", "--json-output"])
|
|
||||||
validate_output(result)
|
|
||||||
search_result = json.loads(result.output)
|
search_result = json.loads(result.output)
|
||||||
assert isinstance(search_result, list)
|
assert isinstance(search_result, list)
|
||||||
assert len(search_result)
|
assert len(search_result)
|
||||||
@ -27,7 +16,7 @@ def test_search_json_output():
|
|||||||
assert "atmelsam" in platforms
|
assert "atmelsam" in platforms
|
||||||
|
|
||||||
|
|
||||||
def test_search_raw_output():
|
def test_search_raw_output(clirunner, validate_cliresult):
|
||||||
result = runner.invoke(cli, ["arduino"])
|
result = clirunner.invoke(cli, ["arduino"])
|
||||||
validate_output(result)
|
validate_cliresult(result)
|
||||||
assert "digistump" in result.output
|
assert "digistump" in result.output
|
||||||
|
@ -1,24 +1,13 @@
|
|||||||
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
||||||
# See LICENSE for details.
|
# See LICENSE for details.
|
||||||
|
|
||||||
|
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
from platformio.commands.settings import cli
|
from platformio.commands.settings import cli
|
||||||
from platformio import app
|
from platformio import app
|
||||||
|
|
||||||
runner = CliRunner()
|
|
||||||
|
|
||||||
|
def test_settings_check(clirunner, validate_cliresult):
|
||||||
def validate_output(result):
|
result = clirunner.invoke(cli, ["get"])
|
||||||
assert result.exit_code == 0
|
validate_cliresult(result)
|
||||||
assert not result.exception
|
|
||||||
assert "error" not in result.output.lower()
|
|
||||||
|
|
||||||
|
|
||||||
def test_settings_check():
|
|
||||||
result = runner.invoke(cli, ["get"])
|
|
||||||
validate_output(result)
|
|
||||||
assert len(result.output)
|
assert len(result.output)
|
||||||
for item in app.DEFAULT_SETTINGS.items():
|
for item in app.DEFAULT_SETTINGS.items():
|
||||||
assert item[0] in result.output
|
assert item[0] in result.output
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
||||||
# See LICENSE for details.
|
# See LICENSE for details.
|
||||||
|
|
||||||
import pytest
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
import pytest
|
||||||
from platformio import app
|
from platformio import app
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="session")
|
||||||
def platformio_setup(request):
|
def platformio_setup(request):
|
||||||
prev_settings = dict(
|
prev_settings = dict(
|
||||||
enable_telemetry=None,
|
enable_telemetry=None,
|
||||||
@ -24,3 +25,17 @@ def platformio_setup(request):
|
|||||||
app.set_setting(key, value)
|
app.set_setting(key, value)
|
||||||
|
|
||||||
request.addfinalizer(platformio_teardown)
|
request.addfinalizer(platformio_teardown)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def clirunner():
|
||||||
|
return CliRunner()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session")
|
||||||
|
def validate_cliresult():
|
||||||
|
def decorator(result):
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert not result.exception
|
||||||
|
assert "error" not in result.output.lower()
|
||||||
|
return decorator
|
||||||
|
@ -19,9 +19,11 @@ def pytest_generate_tests(metafunc):
|
|||||||
if "platformio.ini" not in files:
|
if "platformio.ini" not in files:
|
||||||
continue
|
continue
|
||||||
project_dirs.append(root)
|
project_dirs.append(root)
|
||||||
|
project_dirs.sort()
|
||||||
metafunc.parametrize("pioproject_dir", project_dirs)
|
metafunc.parametrize("pioproject_dir", project_dirs)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.examples
|
||||||
def test_run(platformio_setup, pioproject_dir):
|
def test_run(platformio_setup, pioproject_dir):
|
||||||
if isdir(join(pioproject_dir, ".pioenvs")):
|
if isdir(join(pioproject_dir, ".pioenvs")):
|
||||||
rmtree(join(pioproject_dir, ".pioenvs"))
|
rmtree(join(pioproject_dir, ".pioenvs"))
|
||||||
|
@ -29,6 +29,5 @@ def validate_package(url):
|
|||||||
|
|
||||||
|
|
||||||
def test_package(package_data):
|
def test_package(package_data):
|
||||||
assert str(
|
assert package_data['url'].endswith("%d.tar.gz" % package_data['version'])
|
||||||
package_data['version']) + ".tar.gz" in package_data['url']
|
|
||||||
validate_package(package_data['url'])
|
validate_package(package_data['url'])
|
||||||
|
Reference in New Issue
Block a user