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>`__ * 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>`_,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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