Skip to content

Commit

Permalink
Refactor tests with Py.Test's fixtures // Resolve #2
Browse files Browse the repository at this point in the history
  • Loading branch information
ivankravets committed Feb 21, 2015
1 parent a4926f3 commit e17ce83
Show file tree
Hide file tree
Showing 10 changed files with 93 additions and 139 deletions.
1 change: 1 addition & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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>`_,
Expand Down
41 changes: 15 additions & 26 deletions tests/commands/test_boards.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,35 @@
# See LICENSE for details.

import json

from os.path import isfile, join

from click.testing import CliRunner

from platformio import util
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()


def validate_output(result):
assert result.exit_code == 0
assert not result.exception
assert "error" not in result.output.lower()
from platformio.commands.search import cli as search_cli


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)
Expand All @@ -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"):
Expand Down
49 changes: 20 additions & 29 deletions tests/commands/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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")
Expand All @@ -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 = [
Expand All @@ -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)
54 changes: 22 additions & 32 deletions tests/commands/test_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,9 @@

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()
Expand All @@ -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)
23 changes: 6 additions & 17 deletions tests/commands/test_list.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,20 @@

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)
platforms = [item['name'] for item in list_result]
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
23 changes: 6 additions & 17 deletions tests/commands/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,20 @@

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)
platforms = [item['name'] for item in search_result]
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
17 changes: 3 additions & 14 deletions tests/commands/test_settings.py
Original file line number Diff line number Diff line change
@@ -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
19 changes: 17 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -24,3 +25,17 @@ def platformio_teardown():
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
Loading

0 comments on commit e17ce83

Please sign in to comment.