Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 0 additions & 34 deletions .ruff-excludes.toml
Original file line number Diff line number Diff line change
Expand Up @@ -721,119 +721,85 @@
"UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
"UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
]
"./scripts/tests/twister/conftest.py" = [
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
]
"./scripts/tests/twister/pytest_integration/test_harness_pytest.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
]
"./scripts/tests/twister/test_cmakecache.py" = [
"F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_config_parser.py" = [
"B017", # https://docs.astral.sh/ruff/rules/assert-raises-exception
"B033", # https://docs.astral.sh/ruff/rules/duplicate-value
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_data/mixins/test_to_ignore.py" = [
"B011", # https://docs.astral.sh/ruff/rules/assert-false
]
"./scripts/tests/twister/test_environment.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_errors.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
]
"./scripts/tests/twister/test_handlers.py" = [
"B011", # https://docs.astral.sh/ruff/rules/assert-false
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP012", # https://docs.astral.sh/ruff/rules/unnecessary-encode-utf8
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_hardwaremap.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
"UP031", # https://docs.astral.sh/ruff/rules/printf-string-formatting
]
"./scripts/tests/twister/test_harness.py" = [
"B017", # https://docs.astral.sh/ruff/rules/assert-raises-exception
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"E713", # https://docs.astral.sh/ruff/rules/not-in-test
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_jobserver.py" = [
"F541", # https://docs.astral.sh/ruff/rules/f-string-missing-placeholders
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_log_helper.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_platform.py" = [
"B011", # https://docs.astral.sh/ruff/rules/assert-false
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_quarantine.py" = [
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_runner.py" = [
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP006", # https://docs.astral.sh/ruff/rules/non-pep585-annotation
"UP015", # https://docs.astral.sh/ruff/rules/redundant-open-modes
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
"UP035", # https://docs.astral.sh/ruff/rules/deprecated-import
]
"./scripts/tests/twister/test_scl.py" = [
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"SIM117", # https://docs.astral.sh/ruff/rules/multiple-with-statements
"UP025", # https://docs.astral.sh/ruff/rules/unicode-kind-prefix
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_testinstance.py" = [
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_testplan.py" = [
"B905", # https://docs.astral.sh/ruff/rules/zip-without-explicit-strict
"E101", # https://docs.astral.sh/ruff/rules/mixed-spaces-and-tabs
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"SIM118", # https://docs.astral.sh/ruff/rules/in-dict-keys
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
"W191", # https://docs.astral.sh/ruff/rules/tab-indentation
]
"./scripts/tests/twister/test_testsuite.py" = [
"B011", # https://docs.astral.sh/ruff/rules/assert-false
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister/test_twister.py" = [
"E402", # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file
"E501", # https://docs.astral.sh/ruff/rules/line-too-long
"I001", # https://docs.astral.sh/ruff/rules/unsorted-imports
"UP026", # https://docs.astral.sh/ruff/rules/deprecated-mock-import
]
"./scripts/tests/twister_blackbox/conftest.py" = [
Expand Down
14 changes: 14 additions & 0 deletions .ruff.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,20 @@ ignore = [
# zephyr-keep-sorted-stop
]

[lint.isort]
known-first-party = [
# zephyr-keep-sorted-start
"camera_shield",
"domains",
"list_boards",
"scl",
"twister",
"twister_harness",
"twisterlib",
"zephyr_module" ,
# zephyr-keep-sorted-stop
]

[format]
quote-style = "preserve"
line-ending = "lf"
12 changes: 12 additions & 0 deletions scripts/tests/twister/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copyright (c) 2025 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: Apache-2.0

import os
import sys
from pathlib import Path

ZEPHYR_BASE = os.getenv("ZEPHYR_BASE", str(Path(__file__).parents[3]))

sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister"))
sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts"))
22 changes: 15 additions & 7 deletions scripts/tests/twister/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,44 @@
'''Common fixtures for use in testing the twister tool.'''
import logging
import os
import sys

import pytest

from twisterlib.environment import TwisterEnv, add_parse_arguments, parse_arguments
from twisterlib.testinstance import TestInstance
from twisterlib.testplan import TestConfiguration, TestPlan

from . import ZEPHYR_BASE

pytest_plugins = ["pytester"]

logging.getLogger("twister").setLevel(logging.DEBUG) # requires for testing twister

ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/pylib/twister"))
sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts"))
from twisterlib.testplan import TestPlan, TestConfiguration
from twisterlib.testinstance import TestInstance
from twisterlib.environment import TwisterEnv, add_parse_arguments, parse_arguments

def new_get_toolchain(*args, **kwargs):
return 'zephyr'

TestPlan.get_toolchain = new_get_toolchain


@pytest.fixture(name='test_data')
def _test_data():
""" Pytest fixture to load the test data directory"""
data = ZEPHYR_BASE + "/scripts/tests/twister/test_data/"
return data


@pytest.fixture(name='zephyr_base')
def zephyr_base_directory():
return ZEPHYR_BASE


@pytest.fixture(name='testsuites_dir')
def testsuites_directory():
""" Pytest fixture to load the test data directory"""
return ZEPHYR_BASE + "/scripts/tests/twister/test_data/testsuites"


@pytest.fixture(name='class_env')
def tesenv_obj(test_data, testsuites_dir, tmpdir_factory):
""" Pytest fixture to initialize and return the class TestPlan object"""
Expand All @@ -63,6 +68,7 @@ def testplan_obj(class_env):
plan.options.outdir = env.outdir
return plan


@pytest.fixture(name='all_testsuites_dict')
def testsuites_dict(class_testplan):
""" Pytest fixture to call add_testcase function of
Expand All @@ -72,6 +78,7 @@ def testsuites_dict(class_testplan):
class_testplan.add_testsuites()
return class_testplan.testsuites


@pytest.fixture(name='platforms_list')
def all_platforms_list(test_data, class_testplan):
""" Pytest fixture to call add_configurations function of
Expand All @@ -82,6 +89,7 @@ def all_platforms_list(test_data, class_testplan):
plan.add_configurations()
return plan.platforms


@pytest.fixture
def instances_fixture(class_testplan, platforms_list, all_testsuites_dict):
""" Pytest fixture to call add_instances function of Testsuite class
Expand Down
10 changes: 5 additions & 5 deletions scripts/tests/twister/pytest_integration/test_harness_pytest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations

import pytest
import textwrap

from unittest import mock
from pathlib import Path
from unittest import mock

import pytest

from twisterlib.harness import Pytest
from twisterlib.testsuite import TestSuite
from twisterlib.testinstance import TestInstance
from twisterlib.platform import Platform
from twisterlib.testinstance import TestInstance
from twisterlib.testsuite import TestSuite


@pytest.fixture
Expand Down
7 changes: 3 additions & 4 deletions scripts/tests/twister/test_cmakecache.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@
Tests for cmakecache.py classes' methods
"""

from unittest import mock
import pytest

from contextlib import nullcontext
from unittest import mock

from twisterlib.cmakecache import CMakeCacheEntry, CMakeCache
import pytest

from twisterlib.cmakecache import CMakeCache, CMakeCacheEntry

TESTDATA_1 = [
('ON', True),
Expand Down
12 changes: 9 additions & 3 deletions scripts/tests/twister/test_config_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,18 @@
"""

import os
import pytest
from contextlib import nullcontext
from unittest import mock

import pytest

import scl
from twisterlib.config_parser import (
ConfigurationError,
TwisterConfigParser,
extract_fields_from_arg_list,
)

from twisterlib.config_parser import TwisterConfigParser, extract_fields_from_arg_list, ConfigurationError
from contextlib import nullcontext

def test_extract_single_field_from_string_argument():
target_fields = {"FIELD1"}
Expand Down
6 changes: 3 additions & 3 deletions scripts/tests/twister/test_errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
"""

import os
from pathlib import Path

import pytest

from pathlib import Path
from twisterlib.error import StatusAttributeError
from twisterlib.error import ConfigurationError
from twisterlib.error import ConfigurationError, StatusAttributeError
from twisterlib.harness import Test


Expand Down
24 changes: 11 additions & 13 deletions scripts/tests/twister/test_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,33 @@
"""

import itertools
from unittest import mock
import os
import pytest
import signal
import subprocess
import sys

from contextlib import nullcontext
from importlib import reload
from serial import SerialException
from subprocess import CalledProcessError, TimeoutExpired
from types import SimpleNamespace
from unittest import mock

import twisterlib.harness

ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
import pytest
from serial import SerialException

import twisterlib.harness
from twisterlib.error import TwisterException
from twisterlib.statuses import TwisterStatus
from twisterlib.handlers import (
Handler,
BinaryHandler,
DeviceHandler,
Handler,
QEMUHandler,
SimulationHandler
)
from twisterlib.hardwaremap import (
DUT
SimulationHandler,
)
from twisterlib.hardwaremap import DUT
from twisterlib.statuses import TwisterStatus

from . import ZEPHYR_BASE


@pytest.fixture
def mocked_instance(tmp_path):
Expand Down
11 changes: 4 additions & 7 deletions scripts/tests/twister/test_hardwaremap.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,13 @@
Tests for hardwaremap.py classes' methods
"""

from unittest import mock
import pytest
import sys

from pathlib import Path
from unittest import mock

from twisterlib.hardwaremap import(
DUT,
HardwareMap
)
import pytest

from twisterlib.hardwaremap import DUT, HardwareMap


@pytest.fixture
Expand Down
Loading
Loading