From e17ce834998cab45866ddebb1952a0b954400e00 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sat, 21 Feb 2015 15:15:00 +0200 Subject: [PATCH] Refactor tests with Py.Test's fixtures // Resolve #2 --- HISTORY.rst | 1 + tests/commands/test_boards.py | 43 ++++++++++---------------- tests/commands/test_init.py | 49 ++++++++++++------------------ tests/commands/test_lib.py | 54 ++++++++++++++------------------- tests/commands/test_list.py | 23 ++++---------- tests/commands/test_search.py | 23 ++++---------- tests/commands/test_settings.py | 17 ++--------- tests/conftest.py | 19 ++++++++++-- tests/test_examples.py | 2 ++ tests/test_pkgmanifest.py | 3 +- 10 files changed, 94 insertions(+), 140 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index c36dcbb1..10cdc7bc 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -9,6 +9,7 @@ Release History * Added new boards to `atmelavr `__ platform: *Arduino NG, Arduino BT, Arduino Esplora, Arduino Ethernet, Arduino Robot Control, Arduino Robot Motor and Arduino Yun* +* Covered code with tests (`issue #2 `_) * Refactored *Library Dependency Finder* (issues `#48 `_, `#50 `_, diff --git a/tests/commands/test_boards.py b/tests/commands/test_boards.py index 94808294..3dfd1a11 100644 --- a/tests/commands/test_boards.py +++ b/tests/commands/test_boards.py @@ -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"): diff --git a/tests/commands/test_init.py b/tests/commands/test_init.py index 6dc46979..4364bfe3 100644 --- a/tests/commands/test_init.py +++ b/tests/commands/test_init.py @@ -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) diff --git a/tests/commands/test_lib.py b/tests/commands/test_lib.py index b6a07618..aa41decd 100644 --- a/tests/commands/test_lib.py +++ b/tests/commands/test_lib.py @@ -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) diff --git a/tests/commands/test_list.py b/tests/commands/test_list.py index 679941a4..e40b5926 100644 --- a/tests/commands/test_list.py +++ b/tests/commands/test_list.py @@ -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 diff --git a/tests/commands/test_search.py b/tests/commands/test_search.py index b007f0c6..1bac8b91 100644 --- a/tests/commands/test_search.py +++ b/tests/commands/test_search.py @@ -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 diff --git a/tests/commands/test_settings.py b/tests/commands/test_settings.py index fa003eba..83bdb54e 100644 --- a/tests/commands/test_settings.py +++ b/tests/commands/test_settings.py @@ -1,24 +1,13 @@ # Copyright (C) Ivan Kravets # 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 diff --git a/tests/conftest.py b/tests/conftest.py index facb9c97..5721f7c3 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,13 @@ # Copyright (C) Ivan Kravets # 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 diff --git a/tests/test_examples.py b/tests/test_examples.py index df29b20c..2677ccfc 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -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")) diff --git a/tests/test_pkgmanifest.py b/tests/test_pkgmanifest.py index aa95df8a..b6f736d9 100644 --- a/tests/test_pkgmanifest.py +++ b/tests/test_pkgmanifest.py @@ -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'])