Coverage for tests / unit / tools / taplo / test_error_handling.py: 100%
37 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"""Tests for TaploPlugin error handling, timeouts, and edge cases."""
3from __future__ import annotations
5import subprocess
6from pathlib import Path
7from unittest.mock import patch
9from assertpy import assert_that
11from lintro.tools.definitions.taplo import TaploPlugin
13# Tests for timeout handling in check method
16def test_check_with_timeout(
17 taplo_plugin: TaploPlugin,
18 tmp_path: Path,
19) -> None:
20 """Check handles timeout correctly.
22 Args:
23 taplo_plugin: The TaploPlugin instance to test.
24 tmp_path: Temporary directory path for test files.
25 """
26 test_file = tmp_path / "test.toml"
27 test_file.write_text('[project]\nname = "test"\n')
29 with patch.object(
30 taplo_plugin,
31 "_run_subprocess",
32 side_effect=subprocess.TimeoutExpired(cmd=["taplo"], timeout=30),
33 ):
34 result = taplo_plugin.check([str(test_file)], {})
36 assert_that(result.success).is_false()
37 assert_that(result.issues_count).is_greater_than(0)
38 assert_that(result.output).contains("timed out")
41def test_check_with_timeout_on_format_check(
42 taplo_plugin: TaploPlugin,
43 tmp_path: Path,
44) -> None:
45 """Check handles timeout during format check correctly.
47 Args:
48 taplo_plugin: The TaploPlugin instance to test.
49 tmp_path: Temporary directory path for test files.
50 """
51 test_file = tmp_path / "test.toml"
52 test_file.write_text('[project]\nname = "test"\n')
54 with patch.object(
55 taplo_plugin,
56 "_run_subprocess",
57 side_effect=[
58 (True, ""), # lint succeeds
59 subprocess.TimeoutExpired(cmd=["taplo"], timeout=30), # fmt times out
60 ],
61 ):
62 result = taplo_plugin.check([str(test_file)], {})
64 assert_that(result.success).is_false()
65 assert_that(result.output).contains("timed out")
68# Tests for timeout handling in fix method
71def test_fix_with_timeout(
72 taplo_plugin: TaploPlugin,
73 tmp_path: Path,
74) -> None:
75 """Fix handles timeout correctly.
77 Args:
78 taplo_plugin: The TaploPlugin instance to test.
79 tmp_path: Temporary directory path for test files.
80 """
81 test_file = tmp_path / "test.toml"
82 test_file.write_text('[project]\nname = "test"\n')
84 with patch.object(
85 taplo_plugin,
86 "_run_subprocess",
87 side_effect=subprocess.TimeoutExpired(cmd=["taplo"], timeout=30),
88 ):
89 result = taplo_plugin.fix([str(test_file)], {})
91 assert_that(result.success).is_false()
92 assert_that(result.output).contains("timed out")
95def test_fix_with_timeout_during_fix_command(
96 taplo_plugin: TaploPlugin,
97 tmp_path: Path,
98) -> None:
99 """Fix handles timeout during fix command correctly.
101 Args:
102 taplo_plugin: The TaploPlugin instance to test.
103 tmp_path: Temporary directory path for test files.
104 """
105 test_file = tmp_path / "test.toml"
106 test_file.write_text('[project]\nname="test"\n')
108 format_issue = """error[formatting]: the file is not properly formatted
109 --> test.toml:2:1
110 |
111 2 | name="test"
112 | ^ formatting issue
113"""
115 with patch.object(
116 taplo_plugin,
117 "_run_subprocess",
118 side_effect=[
119 (False, format_issue), # initial format check
120 (True, ""), # initial lint check
121 subprocess.TimeoutExpired(cmd=["taplo"], timeout=30), # fix times out
122 ],
123 ):
124 result = taplo_plugin.fix([str(test_file)], {})
126 assert_that(result.success).is_false()
127 assert_that(result.output).contains("timed out")
128 assert_that(result.initial_issues_count).is_equal_to(1)