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