Refactor tests with Py.Test's fixtures // Resolve #2

This commit is contained in:
Ivan Kravets
2015-02-21 15:15:00 +02:00
parent a4926f3c28
commit e17ce83499
10 changed files with 94 additions and 140 deletions

View File

@ -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>`_,

View File

@ -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"):

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"))

View File

@ -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'])