Rename unit testing module to "test"

This commit is contained in:
Ivan Kravets
2022-04-26 15:09:51 +03:00
parent 5895fb9faf
commit 4151f53e14
25 changed files with 78 additions and 80 deletions

2
docs

Submodule docs updated: 4bc27be71c...10fd0d1edb

View File

@ -16,8 +16,8 @@ from __future__ import absolute_import
import os import os
from platformio.unittest.result import TestSuite from platformio.test.result import TestSuite
from platformio.unittest.runners.factory import TestRunnerFactory from platformio.test.runners.factory import TestRunnerFactory
def ConfigureTestTarget(env): def ConfigureTestTarget(env):

View File

@ -29,7 +29,7 @@ from platformio.commands.device.command import device_monitor as cmd_device_moni
from platformio.commands.run.command import cli as cmd_run from platformio.commands.run.command import cli as cmd_run
from platformio.package.manager.core import inject_contrib_pysite from platformio.package.manager.core import inject_contrib_pysite
from platformio.project.exception import NotPlatformIOProjectError from platformio.project.exception import NotPlatformIOProjectError
from platformio.unittest.command import unittest_cmd from platformio.test.command import test_cmd
@click.group("remote", short_help="Remote Development") @click.group("remote", short_help="Remote Development")
@ -217,7 +217,7 @@ def remote_test(
click.secho("Building project locally", bold=True) click.secho("Building project locally", bold=True)
ctx.invoke( ctx.invoke(
unittest_cmd, test_cmd,
environment=environment, environment=environment,
ignore=ignore, ignore=ignore,
project_dir=project_dir, project_dir=project_dir,

View File

@ -27,7 +27,7 @@ from platformio.commands.run.helpers import clean_build_dir, handle_legacy_libde
from platformio.commands.run.processor import EnvironmentProcessor from platformio.commands.run.processor import EnvironmentProcessor
from platformio.project.config import ProjectConfig from platformio.project.config import ProjectConfig
from platformio.project.helpers import find_project_dir_above, load_project_ide_data from platformio.project.helpers import find_project_dir_above, load_project_ide_data
from platformio.unittest.runners.base import CTX_META_TEST_IS_RUNNING from platformio.test.runners.base import CTX_META_TEST_IS_RUNNING
# pylint: disable=too-many-arguments,too-many-locals,too-many-branches # pylint: disable=too-many-arguments,too-many-locals,too-many-branches

View File

@ -15,7 +15,7 @@
from platformio.package.commands.install import install_project_env_dependencies from platformio.package.commands.install import install_project_env_dependencies
from platformio.platform.factory import PlatformFactory from platformio.platform.factory import PlatformFactory
from platformio.project.exception import UndefinedEnvPlatformError from platformio.project.exception import UndefinedEnvPlatformError
from platformio.unittest.runners.base import CTX_META_TEST_RUNNING_NAME from platformio.test.runners.base import CTX_META_TEST_RUNNING_NAME
# pylint: disable=too-many-instance-attributes # pylint: disable=too-many-instance-attributes

View File

@ -14,4 +14,4 @@
# pylint: disable=unused-import # pylint: disable=unused-import
from platformio.unittest.command import unittest_cmd as cli from platformio.test.command import test_cmd as cli

View File

@ -26,10 +26,10 @@ from platformio.commands.run.command import cli as cmd_run
from platformio.commands.run.command import print_processing_header from platformio.commands.run.command import print_processing_header
from platformio.compat import IS_WINDOWS, is_bytes from platformio.compat import IS_WINDOWS, is_bytes
from platformio.debug.exception import DebugInvalidOptionsError from platformio.debug.exception import DebugInvalidOptionsError
from platformio.unittest.command import get_test_names from platformio.test.command import get_test_names
from platformio.unittest.result import TestSuite from platformio.test.result import TestSuite
from platformio.unittest.runners.base import TestRunnerOptions from platformio.test.runners.base import TestRunnerOptions
from platformio.unittest.runners.factory import TestRunnerFactory from platformio.test.runners.factory import TestRunnerFactory
class GDBMIConsoleStream(BytesIO): # pylint: disable=too-few-public-methods class GDBMIConsoleStream(BytesIO): # pylint: disable=too-few-public-methods

View File

@ -26,8 +26,8 @@ from platformio.package.manager.tool import ToolPackageManager
from platformio.package.meta import PackageSpec from platformio.package.meta import PackageSpec
from platformio.project.config import ProjectConfig from platformio.project.config import ProjectConfig
from platformio.project.savedeps import pkg_to_save_spec, save_project_dependencies from platformio.project.savedeps import pkg_to_save_spec, save_project_dependencies
from platformio.unittest.result import TestSuite from platformio.test.result import TestSuite
from platformio.unittest.runners.factory import TestRunnerFactory from platformio.test.runners.factory import TestRunnerFactory
@click.command( @click.command(

View File

@ -20,11 +20,11 @@ import click
from platformio import app, exception, fs, util from platformio import app, exception, fs, util
from platformio.project.config import ProjectConfig from platformio.project.config import ProjectConfig
from platformio.unittest.exception import TestDirNotExistsError from platformio.test.exception import TestDirNotExistsError
from platformio.unittest.reports.base import TestReportFactory from platformio.test.reports.base import TestReportFactory
from platformio.unittest.result import TestStatus, TestSuite, TestSummary from platformio.test.result import TestResult, TestStatus, TestSuite
from platformio.unittest.runners.base import TestRunnerOptions from platformio.test.runners.base import TestRunnerOptions
from platformio.unittest.runners.factory import TestRunnerFactory from platformio.test.runners.factory import TestRunnerFactory
@click.command("test", short_help="Unit Testing") @click.command("test", short_help="Unit Testing")
@ -84,7 +84,7 @@ from platformio.unittest.runners.factory import TestRunnerFactory
) )
@click.option("--verbose", "-v", is_flag=True) @click.option("--verbose", "-v", is_flag=True)
@click.pass_context @click.pass_context
def unittest_cmd( # pylint: disable=too-many-arguments,too-many-locals,redefined-builtin def test_cmd( # pylint: disable=too-many-arguments,too-many-locals,redefined-builtin
ctx, ctx,
environment, environment,
ignore, ignore,
@ -116,12 +116,12 @@ def unittest_cmd( # pylint: disable=too-many-arguments,too-many-locals,redefine
if verbose: if verbose:
click.echo(" (%s)" % ", ".join(test_names)) click.echo(" (%s)" % ", ".join(test_names))
test_summary = TestSummary(os.path.basename(project_dir)) test_result = TestResult(os.path.basename(project_dir))
default_envs = config.default_envs() default_envs = config.default_envs()
for env_name in config.envs(): for env_name in config.envs():
for test_name in test_names: for test_name in test_names:
test_suite = TestSuite(env_name, test_name) test_suite = TestSuite(env_name, test_name)
test_summary.add_suite(test_suite) test_result.add_suite(test_suite)
# filter and ignore patterns # filter and ignore patterns
patterns = dict(filter=list(filter), ignore=list(ignore)) patterns = dict(filter=list(filter), ignore=list(ignore))
@ -167,7 +167,7 @@ def unittest_cmd( # pylint: disable=too-many-arguments,too-many-locals,redefine
print_suite_footer(test_suite) print_suite_footer(test_suite)
# automatically generate JSON report for PIO IDE # automatically generate JSON report for PIO IDE
TestReportFactory.new("json", test_summary).generate( TestReportFactory.new("json", test_result).generate(
os.path.join( os.path.join(
config.get("platformio", "build_dir"), "pio-test-report-latest.json" config.get("platformio", "build_dir"), "pio-test-report-latest.json"
) )
@ -176,14 +176,14 @@ def unittest_cmd( # pylint: disable=too-many-arguments,too-many-locals,redefine
# Reset custom project config # Reset custom project config
app.set_session_var("custom_project_conf", None) app.set_session_var("custom_project_conf", None)
stdout_report = TestReportFactory.new("stdout", test_summary) stdout_report = TestReportFactory.new("stdout", test_result)
stdout_report.generate(verbose=verbose) stdout_report.generate(verbose=verbose)
if output_format: if output_format:
custom_report = TestReportFactory.new(output_format, test_summary) custom_report = TestReportFactory.new(output_format, test_result)
custom_report.generate(output_path=output_path, verbose=True) custom_report.generate(output_path=output_path, verbose=True)
if test_summary.is_errored or test_summary.get_status_nums(TestStatus.FAILED): if test_result.is_errored or test_result.get_status_nums(TestStatus.FAILED):
raise exception.ReturnErrorCode(1) raise exception.ReturnErrorCode(1)

View File

@ -14,12 +14,12 @@
import importlib import importlib
from platformio.unittest.result import TestSummary from platformio.test.result import TestResult
class TestReportBase: class TestReportBase:
def __init__(self, test_summary): def __init__(self, test_result):
self.test_summary = test_summary self.test_result = test_result
def generate(self, output_path, verbose): def generate(self, output_path, verbose):
raise NotImplementedError() raise NotImplementedError()
@ -27,10 +27,8 @@ class TestReportBase:
class TestReportFactory: class TestReportFactory:
@staticmethod @staticmethod
def new( # pylint: disable=redefined-builtin def new(format, test_result) -> TestReportBase: # pylint: disable=redefined-builtin
format, test_summary assert isinstance(test_result, TestResult)
) -> TestReportBase: mod = importlib.import_module(f"platformio.test.reports.{format}")
assert isinstance(test_summary, TestSummary)
mod = importlib.import_module(f"platformio.unittest.reports.{format}")
report_cls = getattr(mod, "%sTestReport" % format.lower().capitalize()) report_cls = getattr(mod, "%sTestReport" % format.lower().capitalize())
return report_cls(test_summary) return report_cls(test_result)

View File

@ -18,8 +18,8 @@ import os
import click import click
from platformio.unittest.reports.base import TestReportBase from platformio.test.reports.base import TestReportBase
from platformio.unittest.result import TestStatus from platformio.test.result import TestStatus
class JsonTestReport(TestReportBase): class JsonTestReport(TestReportBase):
@ -29,7 +29,7 @@ class JsonTestReport(TestReportBase):
output_path, output_path,
"pio-test-report-%s-%s.json" "pio-test-report-%s-%s.json"
% ( % (
self.test_summary.name, self.test_result.name,
datetime.datetime.now().strftime("%Y%m%d%H%M%S"), datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
), ),
) )
@ -43,15 +43,15 @@ class JsonTestReport(TestReportBase):
def to_json(self): def to_json(self):
result = dict( result = dict(
version="1.0", version="1.0",
name=self.test_summary.name, name=self.test_result.name,
duration=self.test_summary.duration, duration=self.test_result.duration,
testcase_nums=self.test_summary.case_nums, testcase_nums=self.test_result.case_nums,
error_nums=self.test_summary.get_status_nums(TestStatus.ERRORED), error_nums=self.test_result.get_status_nums(TestStatus.ERRORED),
failure_nums=self.test_summary.get_status_nums(TestStatus.FAILED), failure_nums=self.test_result.get_status_nums(TestStatus.FAILED),
skipped_nums=self.test_summary.get_status_nums(TestStatus.SKIPPED), skipped_nums=self.test_result.get_status_nums(TestStatus.SKIPPED),
test_suites=[], test_suites=[],
) )
for test_suite in self.test_summary.suites: for test_suite in self.test_result.suites:
result["test_suites"].append(self.test_suite_to_json(test_suite)) result["test_suites"].append(self.test_suite_to_json(test_suite))
return result return result

View File

@ -18,8 +18,8 @@ import xml.etree.ElementTree as ET
import click import click
from platformio.unittest.reports.base import TestReportBase from platformio.test.reports.base import TestReportBase
from platformio.unittest.result import TestStatus from platformio.test.result import TestStatus
class JunitTestReport(TestReportBase): class JunitTestReport(TestReportBase):
@ -29,7 +29,7 @@ class JunitTestReport(TestReportBase):
output_path, output_path,
"pio-test-report-%s-%s-junit.xml" "pio-test-report-%s-%s-junit.xml"
% ( % (
self.test_summary.name, self.test_result.name,
datetime.datetime.now().strftime("%Y%m%d%H%M%S"), datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
), ),
) )
@ -42,12 +42,12 @@ class JunitTestReport(TestReportBase):
def build_xml_tree(self): def build_xml_tree(self):
root = ET.Element("testsuites") root = ET.Element("testsuites")
root.set("name", self.test_summary.name) root.set("name", self.test_result.name)
root.set("tests", str(self.test_summary.case_nums)) root.set("tests", str(self.test_result.case_nums))
root.set("errors", str(self.test_summary.get_status_nums(TestStatus.ERRORED))) root.set("errors", str(self.test_result.get_status_nums(TestStatus.ERRORED)))
root.set("failures", str(self.test_summary.get_status_nums(TestStatus.FAILED))) root.set("failures", str(self.test_result.get_status_nums(TestStatus.FAILED)))
root.set("time", str(self.test_summary.duration)) root.set("time", str(self.test_result.duration))
for suite in self.test_summary.suites: for suite in self.test_result.suites:
root.append(self.build_testsuite_node(suite)) root.append(self.build_testsuite_node(suite))
return ET.ElementTree(root) return ET.ElementTree(root)

View File

@ -16,8 +16,8 @@ import click
from tabulate import tabulate from tabulate import tabulate
from platformio import util from platformio import util
from platformio.unittest.reports.base import TestReportBase from platformio.test.reports.base import TestReportBase
from platformio.unittest.result import TestStatus from platformio.test.result import TestStatus
class StdoutTestReport(TestReportBase): class StdoutTestReport(TestReportBase):
@ -25,11 +25,11 @@ class StdoutTestReport(TestReportBase):
click.echo() click.echo()
tabular_data = [] tabular_data = []
failed_nums = self.test_summary.get_status_nums(TestStatus.FAILED) failed_nums = self.test_result.get_status_nums(TestStatus.FAILED)
skipped_nums = self.test_summary.get_status_nums(TestStatus.SKIPPED) skipped_nums = self.test_result.get_status_nums(TestStatus.SKIPPED)
is_error = failed_nums > 0 or self.test_summary.is_errored is_error = failed_nums > 0 or self.test_result.is_errored
for test_suite in self.test_summary.suites: for test_suite in self.test_result.suites:
if not verbose and test_suite.status == TestStatus.SKIPPED: if not verbose and test_suite.status == TestStatus.SKIPPED:
continue continue
status_str = test_suite.status.name status_str = test_suite.status.name
@ -62,11 +62,11 @@ class StdoutTestReport(TestReportBase):
util.print_labeled_bar( util.print_labeled_bar(
"%d test cases: %s%s%d succeeded in %s" "%d test cases: %s%s%d succeeded in %s"
% ( % (
self.test_summary.case_nums, self.test_result.case_nums,
("%d failed, " % failed_nums) if failed_nums else "", ("%d failed, " % failed_nums) if failed_nums else "",
("%d skipped, " % skipped_nums) if skipped_nums else "", ("%d skipped, " % skipped_nums) if skipped_nums else "",
self.test_summary.get_status_nums(TestStatus.PASSED), self.test_result.get_status_nums(TestStatus.PASSED),
util.humanize_duration_time(self.test_summary.duration), util.humanize_duration_time(self.test_result.duration),
), ),
is_error=is_error, is_error=is_error,
fg="red" if is_error else "green", fg="red" if is_error else "green",

View File

@ -107,7 +107,7 @@ class TestSuite:
self.duration = time.time() - self.timestamp self.duration = time.time() - self.timestamp
class TestSummary: class TestResult:
def __init__(self, name): def __init__(self, name):
self.name = name self.name = name
self._suites = [] self._suites = []

View File

@ -16,10 +16,10 @@ import click
from platformio.exception import ReturnErrorCode from platformio.exception import ReturnErrorCode
from platformio.platform.factory import PlatformFactory from platformio.platform.factory import PlatformFactory
from platformio.unittest.exception import UnitTestSuiteError from platformio.test.exception import UnitTestSuiteError
from platformio.unittest.result import TestCase, TestCaseSource, TestStatus from platformio.test.result import TestCase, TestCaseSource, TestStatus
from platformio.unittest.runners.mixins.embedded import TestRunnerEmbeddedMixin from platformio.test.runners.mixins.embedded import TestRunnerEmbeddedMixin
from platformio.unittest.runners.mixins.native import TestRunnerNativeMixin from platformio.test.runners.mixins.native import TestRunnerNativeMixin
CTX_META_TEST_IS_RUNNING = __name__ + ".test_running" CTX_META_TEST_IS_RUNNING = __name__ + ".test_running"
CTX_META_TEST_RUNNING_NAME = __name__ + ".test_running_name" CTX_META_TEST_RUNNING_NAME = __name__ + ".test_running_name"

View File

@ -19,8 +19,8 @@ import re
from platformio.compat import load_python_module from platformio.compat import load_python_module
from platformio.exception import UserSideException from platformio.exception import UserSideException
from platformio.project.config import ProjectConfig from platformio.project.config import ProjectConfig
from platformio.unittest.result import TestSuite from platformio.test.result import TestSuite
from platformio.unittest.runners.base import TestRunnerBase, TestRunnerOptions from platformio.test.runners.base import TestRunnerBase, TestRunnerOptions
class TestRunnerFactory(object): class TestRunnerFactory(object):
@ -38,7 +38,7 @@ class TestRunnerFactory(object):
test_framework = project_config.get( test_framework = project_config.get(
f"env:{test_suite.env_name}", "test_framework" f"env:{test_suite.env_name}", "test_framework"
) )
module_name = f"platformio.unittest.runners.{test_framework}" module_name = f"platformio.test.runners.{test_framework}"
runner_cls = None runner_cls = None
if test_framework == "custom": if test_framework == "custom":
custom_runner_path = os.path.join( custom_runner_path = os.path.join(

View File

@ -16,7 +16,7 @@ import os
import signal import signal
from platformio import proc from platformio import proc
from platformio.unittest.exception import UnitTestError from platformio.test.exception import UnitTestError
class TestRunnerNativeMixin: class TestRunnerNativeMixin:

View File

@ -19,8 +19,8 @@ from pathlib import Path
import click import click
from platformio.unittest.exception import UnitTestSuiteError from platformio.test.exception import UnitTestSuiteError
from platformio.unittest.runners.base import TestRunnerBase from platformio.test.runners.base import TestRunnerBase
class UnityTestRunner(TestRunnerBase): class UnityTestRunner(TestRunnerBase):

View File

@ -17,7 +17,7 @@ import xml.etree.ElementTree as ET
from pathlib import Path from pathlib import Path
from platformio import proc from platformio import proc
from platformio.unittest.command import unittest_cmd from platformio.test.command import test_cmd as pio_test_cmd
def test_calculator_example(tmp_path: Path): def test_calculator_example(tmp_path: Path):
@ -143,7 +143,7 @@ int main() {
""" """
) )
result = clirunner.invoke( result = clirunner.invoke(
unittest_cmd, pio_test_cmd,
["-d", str(project_dir), "-e", "native"], ["-d", str(project_dir), "-e", "native"],
) )
validate_cliresult(result) validate_cliresult(result)
@ -186,7 +186,7 @@ int main(int argc, char *argv[]) {
""" """
) )
result = clirunner.invoke( result = clirunner.invoke(
unittest_cmd, pio_test_cmd,
["-d", str(project_dir), "-e", "native"], ["-d", str(project_dir), "-e", "native"],
) )
assert result.exit_code != 0 assert result.exit_code != 0
@ -228,7 +228,7 @@ int main() {
""" """
) )
result = clirunner.invoke( result = clirunner.invoke(
unittest_cmd, pio_test_cmd,
["-d", str(project_dir), "-e", "native"], ["-d", str(project_dir), "-e", "native"],
) )
validate_cliresult(result) validate_cliresult(result)
@ -279,7 +279,7 @@ int main() {
""" """
) )
result = clirunner.invoke( result = clirunner.invoke(
unittest_cmd, pio_test_cmd,
["-d", str(project_dir), "-e", "native"], ["-d", str(project_dir), "-e", "native"],
) )
validate_cliresult(result) validate_cliresult(result)
@ -339,7 +339,7 @@ void unittest_uart_end(){}
""" """
) )
result = clirunner.invoke( result = clirunner.invoke(
unittest_cmd, pio_test_cmd,
[ [
"-d", "-d",
str(project_dir), str(project_dir),