Coverage for tests / unit / tools / rustfmt / test_options.py: 100%
30 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Unit tests for rustfmt plugin options and definition."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7import pytest
8from assertpy import assert_that
10from lintro.enums.tool_type import ToolType
11from lintro.tools.definitions.rustfmt import (
12 RUSTFMT_DEFAULT_PRIORITY,
13 RUSTFMT_DEFAULT_TIMEOUT,
14 RustfmtPlugin,
15)
17if TYPE_CHECKING:
18 pass
21# =============================================================================
22# Tests for ToolDefinition attributes
23# =============================================================================
26@pytest.mark.parametrize(
27 ("attr", "expected"),
28 [
29 ("name", "rustfmt"),
30 ("description", "Rust's official code formatter"),
31 ("can_fix", True),
32 ("tool_type", ToolType.FORMATTER),
33 ("priority", RUSTFMT_DEFAULT_PRIORITY),
34 ("default_timeout", RUSTFMT_DEFAULT_TIMEOUT),
35 ("min_version", "1.8.0"),
36 ],
37 ids=[
38 "name_equals_rustfmt",
39 "description_is_set",
40 "can_fix_is_true",
41 "tool_type_is_formatter",
42 "priority_equals_80",
43 "default_timeout_equals_60",
44 "min_version_is_1.8.0",
45 ],
46)
47def test_definition_attributes(
48 rustfmt_plugin: RustfmtPlugin,
49 attr: str,
50 expected: object,
51) -> None:
52 """Definition attributes have correct values.
54 Args:
55 rustfmt_plugin: The RustfmtPlugin instance to test.
56 attr: The attribute name to check.
57 expected: The expected value for the attribute.
58 """
59 assert_that(getattr(rustfmt_plugin.definition, attr)).is_equal_to(expected)
62def test_definition_file_patterns(rustfmt_plugin: RustfmtPlugin) -> None:
63 """Definition includes Rust file patterns.
65 Args:
66 rustfmt_plugin: The RustfmtPlugin instance to test.
67 """
68 patterns = rustfmt_plugin.definition.file_patterns
69 assert_that(patterns).contains("*.rs")
72def test_definition_native_configs(rustfmt_plugin: RustfmtPlugin) -> None:
73 """Definition includes native config files.
75 Args:
76 rustfmt_plugin: The RustfmtPlugin instance to test.
77 """
78 configs = rustfmt_plugin.definition.native_configs
79 assert_that(configs).contains("rustfmt.toml")
80 assert_that(configs).contains(".rustfmt.toml")
83def test_definition_version_command(rustfmt_plugin: RustfmtPlugin) -> None:
84 """Definition has a version command.
86 Args:
87 rustfmt_plugin: The RustfmtPlugin instance to test.
88 """
89 assert_that(rustfmt_plugin.definition.version_command).is_not_none()
90 assert_that(rustfmt_plugin.definition.version_command).contains("rustfmt")
91 assert_that(rustfmt_plugin.definition.version_command).contains("--version")
94# =============================================================================
95# Tests for default options
96# =============================================================================
99def test_default_options_timeout(rustfmt_plugin: RustfmtPlugin) -> None:
100 """Default timeout option has correct value.
102 Args:
103 rustfmt_plugin: The RustfmtPlugin instance to test.
104 """
105 assert_that(
106 rustfmt_plugin.definition.default_options["timeout"],
107 ).is_equal_to(RUSTFMT_DEFAULT_TIMEOUT)
110# =============================================================================
111# Tests for RustfmtPlugin.set_options method - valid options
112# =============================================================================
115@pytest.mark.parametrize(
116 ("timeout_value",),
117 [
118 (30,),
119 (60,),
120 (120,),
121 (300,),
122 ],
123 ids=[
124 "timeout_30",
125 "timeout_60",
126 "timeout_120",
127 "timeout_300",
128 ],
129)
130def test_set_options_valid_timeout(
131 rustfmt_plugin: RustfmtPlugin,
132 timeout_value: int,
133) -> None:
134 """Set valid timeout options correctly.
136 Args:
137 rustfmt_plugin: The RustfmtPlugin instance to test.
138 timeout_value: The timeout value to set.
139 """
140 rustfmt_plugin.set_options(timeout=timeout_value)
141 assert_that(rustfmt_plugin.options.get("timeout")).is_equal_to(timeout_value)
144# =============================================================================
145# Tests for RustfmtPlugin.set_options method - invalid options
146# =============================================================================
149@pytest.mark.parametrize(
150 ("timeout_value", "error_match"),
151 [
152 (-1, "must be positive"),
153 (0, "must be positive"),
154 (-100, "must be positive"),
155 ],
156 ids=[
157 "negative_timeout",
158 "zero_timeout",
159 "large_negative_timeout",
160 ],
161)
162def test_set_options_invalid_timeout(
163 rustfmt_plugin: RustfmtPlugin,
164 timeout_value: int,
165 error_match: str,
166) -> None:
167 """Raise ValueError for invalid timeout values.
169 Args:
170 rustfmt_plugin: The RustfmtPlugin instance to test.
171 timeout_value: The invalid timeout value to test.
172 error_match: Pattern expected in the error message.
173 """
174 with pytest.raises(ValueError, match=error_match):
175 rustfmt_plugin.set_options(timeout=timeout_value)