1
1
from __future__ import annotations
2
2
3
3
import os .path
4
+ import sys
4
5
from typing import Any
5
6
6
7
import pytest
9
10
from sphinx .cmd .build import get_parser
10
11
from sphinx .cmd .make_mode import run_make_mode
11
12
13
+ broken_argparse = (
14
+ sys .version_info [:3 ] <= (3 , 12 , 6 )
15
+ or sys .version_info [:3 ] == (3 , 13 , 0 )
16
+ ) # fmt: skip
17
+
12
18
DEFAULTS = {
13
19
'filenames' : [],
14
20
'jobs' : 1 ,
79
85
'--isolated' ,
80
86
]
81
87
OPTS = EARLY_OPTS + LATE_OPTS
82
- OPTS_BUILD_MAIN = BUILDER_BUILD_MAIN + OPTS
83
88
84
89
85
90
def parse_arguments (args : list [str ]) -> dict [str , Any ]:
@@ -116,7 +121,10 @@ def test_build_main_parse_arguments_pos_middle() -> None:
116
121
assert parse_arguments (args ) == EXPECTED_BUILD_MAIN
117
122
118
123
119
- @pytest .mark .xfail (reason = 'sphinx-build does not yet support filenames after options' )
124
+ @pytest .mark .xfail (
125
+ broken_argparse ,
126
+ reason = 'sphinx-build does not yet support filenames after options' ,
127
+ )
120
128
def test_build_main_parse_arguments_filenames_last () -> None :
121
129
args = [
122
130
* POSITIONAL_DIRS ,
@@ -136,10 +144,13 @@ def test_build_main_parse_arguments_pos_intermixed(
136
144
* LATE_OPTS ,
137
145
* POSITIONAL_FILENAMES ,
138
146
]
139
- with pytest .raises (SystemExit ):
140
- parse_arguments (args )
141
- stderr = capsys .readouterr ().err .splitlines ()
142
- assert stderr [- 1 ].endswith ('error: unrecognized arguments: filename1 filename2' )
147
+ if broken_argparse :
148
+ with pytest .raises (SystemExit ):
149
+ parse_arguments (args )
150
+ stderr = capsys .readouterr ().err .splitlines ()
151
+ assert stderr [- 1 ].endswith ('error: unrecognized arguments: filename1 filename2' )
152
+ else :
153
+ assert parse_arguments (args ) == EXPECTED_BUILD_MAIN
143
154
144
155
145
156
def test_make_mode_parse_arguments_pos_first (monkeypatch : pytest .MonkeyPatch ) -> None :
@@ -185,10 +196,14 @@ def test_make_mode_parse_arguments_pos_middle(
185
196
assert stderr [- 1 ].endswith ('error: argument --builder/-b: expected one argument' )
186
197
187
198
188
- @pytest .mark .xfail (reason = 'sphinx-build does not yet support filenames after options' )
199
+ @pytest .mark .xfail (
200
+ broken_argparse ,
201
+ reason = 'sphinx-build does not yet support filenames after options' ,
202
+ )
189
203
def test_make_mode_parse_arguments_filenames_last (
190
204
monkeypatch : pytest .MonkeyPatch ,
191
205
) -> None :
206
+ # -M <positional...> <opts> <filenames...>
192
207
monkeypatch .setattr (make_mode , 'build_main' , parse_arguments )
193
208
args = [
194
209
* BUILDER_MAKE_MODE ,
@@ -203,6 +218,7 @@ def test_make_mode_parse_arguments_pos_intermixed(
203
218
monkeypatch : pytest .MonkeyPatch ,
204
219
capsys : pytest .CaptureFixture [str ],
205
220
) -> None :
221
+ # -M <opts> <positional...> <opts> <filenames...>
206
222
monkeypatch .setattr (make_mode , 'build_main' , parse_arguments )
207
223
args = [
208
224
* EARLY_OPTS ,
0 commit comments