Coverage for tests/test_all_variants_folder.py: 100%
19 statements
« prev ^ index » next coverage.py v7.6.1, created at 2026-10-15 15:22 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2026-10-15 15:22 +0000
1import inspect 1ab
3import markdown 1ab
4from inline_snapshot import snapshot 1ab
5from mdx_include.mdx_include import IncludeExtension 1ab
6from pymdownx.highlight import HighlightExtension 1ab
7from pymdownx.superfences import SuperFencesCodeExtension 1ab
9from markdown_include_variants import IncludeVariantsExtension 1ab
12def test_all_variants_plain(): 1ab
13 input_md = inspect.cleandoc( 1cd
14 """
15 {* docs_src/all_variants_folder/app_an_py311/tutorial001.py *}
16 """
17 )
19 result = markdown.markdown(input_md, extensions=[IncludeVariantsExtension()]) 1cd
20 assert result == snapshot( 1cd
21 inspect.cleandoc(
22 """
23 <p>//// tab | Python 3.11+
24 <code>python
25 {!docs_src/all_variants_folder/app_an_py311/tutorial001.py!}</code></p>
26 <p>////</p>
27 <p>///// details | 🤓 Other versions and variants</p>
28 <p>//// tab | Python 3.10+</p>
29 <p><code>python
30 {!docs_src/all_variants_folder/app_an_py310/tutorial001.py!}</code>
31 ////
32 //// tab | Python 3.9+</p>
33 <p><code>python
34 {!docs_src/all_variants_folder/app_an_py39/tutorial001.py!}</code>
35 ////
36 //// tab | Python 3.8+</p>
37 <p><code>python
38 {!docs_src/all_variants_folder/app_an/tutorial001.py!}</code>
39 ////
40 //// tab | Python 3.11+ - non-Annotated</p>
41 <p>/// tip</p>
42 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
43 <p>///</p>
44 <p><code>python
45 {!docs_src/all_variants_folder/app_py311/tutorial001.py!}</code>
46 ////
47 //// tab | Python 3.10+ - non-Annotated</p>
48 <p>/// tip</p>
49 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
50 <p>///</p>
51 <p><code>python
52 {!docs_src/all_variants_folder/app_py310/tutorial001.py!}</code>
53 ////
54 //// tab | Python 3.9+ - non-Annotated</p>
55 <p>/// tip</p>
56 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
57 <p>///</p>
58 <p><code>python
59 {!docs_src/all_variants_folder/app_py39/tutorial001.py!}</code>
60 ////
61 //// tab | Python 3.8+ - non-Annotated</p>
62 <p>/// tip</p>
63 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
64 <p>///</p>
65 <p><code>python
66 {!docs_src/all_variants_folder/app/tutorial001.py!}</code>
67 ////</p>
68 <p>/////</p>
69 """
70 )
71 )
74def test_all_variants_ln_hl(): 1ab
75 input_md = inspect.cleandoc( 1ef
76 """
77 {* docs_src/all_variants_folder/app_an_py311/tutorial001.py ln[3:5] hl[4:5] *}
78 """
79 )
81 result = markdown.markdown(input_md, extensions=[IncludeVariantsExtension()]) 1ef
82 assert result == snapshot( 1ef
83 inspect.cleandoc(
84 """
85 <p>//// tab | Python 3.11+
86 ```python hl_lines="4-5"</p>
87 <h1>Code above omitted 👆</h1>
88 <p>{!docs_src/all_variants_folder/app_an_py311/tutorial001.py[ln:3-5]!}</p>
89 <h1>Code below omitted 👇</h1>
90 <p>```</p>
91 <p>////</p>
92 <p>///// details | 👀 Full file preview</p>
93 <p>//// tab | Python 3.11+</p>
94 <p><code>python hl_lines="4-5"
95 {!docs_src/all_variants_folder/app_an_py311/tutorial001.py!}</code></p>
96 <p>////</p>
97 <p>/////</p>
98 <p>///// details | 🤓 Other versions and variants</p>
99 <p>//// tab | Python 3.10+</p>
100 <p><code>python
101 {!docs_src/all_variants_folder/app_an_py310/tutorial001.py!}</code>
102 ////
103 //// tab | Python 3.9+</p>
104 <p><code>python
105 {!docs_src/all_variants_folder/app_an_py39/tutorial001.py!}</code>
106 ////
107 //// tab | Python 3.8+</p>
108 <p><code>python
109 {!docs_src/all_variants_folder/app_an/tutorial001.py!}</code>
110 ////
111 //// tab | Python 3.11+ - non-Annotated</p>
112 <p>/// tip</p>
113 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
114 <p>///</p>
115 <p><code>python
116 {!docs_src/all_variants_folder/app_py311/tutorial001.py!}</code>
117 ////
118 //// tab | Python 3.10+ - non-Annotated</p>
119 <p>/// tip</p>
120 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
121 <p>///</p>
122 <p><code>python
123 {!docs_src/all_variants_folder/app_py310/tutorial001.py!}</code>
124 ////
125 //// tab | Python 3.9+ - non-Annotated</p>
126 <p>/// tip</p>
127 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
128 <p>///</p>
129 <p><code>python
130 {!docs_src/all_variants_folder/app_py39/tutorial001.py!}</code>
131 ////
132 //// tab | Python 3.8+ - non-Annotated</p>
133 <p>/// tip</p>
134 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
135 <p>///</p>
136 <p><code>python
137 {!docs_src/all_variants_folder/app/tutorial001.py!}</code>
138 ////</p>
139 <p>/////</p>
140 """
141 )
142 )
145def test_all_variants_ln_hl_include(): 1ab
146 input_md = inspect.cleandoc( 1gh
147 """
148 {* docs_src/all_variants_folder/app_an_py311/tutorial001.py ln[3:5] hl[4:5] *}
149 """
150 )
152 result = markdown.markdown( 1gh
153 input_md,
154 extensions=[
155 IncludeVariantsExtension(),
156 IncludeExtension(),
157 SuperFencesCodeExtension(),
158 HighlightExtension(),
159 ],
160 )
161 assert result == snapshot( 1gh
162 inspect.cleandoc(
163 """
164 <p>//// tab | Python 3.11+
165 <div class="highlight"><pre><span></span><code><span class="c1"># Code above omitted 👆</span>
167 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span>
168 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span>
169 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span>
170 </span>
171 <span class="c1"># Code below omitted 👇</span>
172 </code></pre></div></p>
173 <p>////</p>
174 <p>///// details | 👀 Full file preview</p>
175 <p>//// tab | Python 3.11+</p>
176 <div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 1"</span><span class="p">)</span>
177 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 2"</span><span class="p">)</span>
178 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 3"</span><span class="p">)</span>
179 <span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 4"</span><span class="p">)</span>
180 </span><span class="hll"><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 5"</span><span class="p">)</span>
181 </span><span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 6"</span><span class="p">)</span>
182 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 7"</span><span class="p">)</span>
183 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 8"</span><span class="p">)</span>
184 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 9"</span><span class="p">)</span>
185 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py311 line 10"</span><span class="p">)</span>
186 </code></pre></div>
187 <p>////</p>
188 <p>/////</p>
189 <p>///// details | 🤓 Other versions and variants</p>
190 <p>//// tab | Python 3.10+</p>
191 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 1"</span><span class="p">)</span>
192 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 2"</span><span class="p">)</span>
193 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 3"</span><span class="p">)</span>
194 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 4"</span><span class="p">)</span>
195 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 5"</span><span class="p">)</span>
196 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 6"</span><span class="p">)</span>
197 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 7"</span><span class="p">)</span>
198 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 8"</span><span class="p">)</span>
199 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 9"</span><span class="p">)</span>
200 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py310 line 10"</span><span class="p">)</span>
201 </code></pre></div>
202 ////
203 //// tab | Python 3.9+</p>
204 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 1"</span><span class="p">)</span>
205 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 2"</span><span class="p">)</span>
206 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 3"</span><span class="p">)</span>
207 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 4"</span><span class="p">)</span>
208 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 5"</span><span class="p">)</span>
209 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 6"</span><span class="p">)</span>
210 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 7"</span><span class="p">)</span>
211 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 8"</span><span class="p">)</span>
212 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 9"</span><span class="p">)</span>
213 <span class="nb">print</span><span class="p">(</span><span class="s2">"an py39 line 10"</span><span class="p">)</span>
214 </code></pre></div>
215 ////
216 //// tab | Python 3.8+</p>
217 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"an line 1"</span><span class="p">)</span>
218 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 2"</span><span class="p">)</span>
219 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 3"</span><span class="p">)</span>
220 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 4"</span><span class="p">)</span>
221 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 5"</span><span class="p">)</span>
222 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 6"</span><span class="p">)</span>
223 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 7"</span><span class="p">)</span>
224 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 8"</span><span class="p">)</span>
225 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 9"</span><span class="p">)</span>
226 <span class="nb">print</span><span class="p">(</span><span class="s2">"an line 10"</span><span class="p">)</span>
227 </code></pre></div>
228 ////
229 //// tab | Python 3.11+ - non-Annotated</p>
230 <p>/// tip</p>
231 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
232 <p>///</p>
233 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 1"</span><span class="p">)</span>
234 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 2"</span><span class="p">)</span>
235 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 3"</span><span class="p">)</span>
236 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 4"</span><span class="p">)</span>
237 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 5"</span><span class="p">)</span>
238 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 6"</span><span class="p">)</span>
239 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 7"</span><span class="p">)</span>
240 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 8"</span><span class="p">)</span>
241 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 9"</span><span class="p">)</span>
242 <span class="nb">print</span><span class="p">(</span><span class="s2">"py311 line 10"</span><span class="p">)</span>
243 </code></pre></div>
244 ////
245 //// tab | Python 3.10+ - non-Annotated</p>
246 <p>/// tip</p>
247 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
248 <p>///</p>
249 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 1"</span><span class="p">)</span>
250 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 2"</span><span class="p">)</span>
251 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 3"</span><span class="p">)</span>
252 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 4"</span><span class="p">)</span>
253 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 5"</span><span class="p">)</span>
254 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 6"</span><span class="p">)</span>
255 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 7"</span><span class="p">)</span>
256 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 8"</span><span class="p">)</span>
257 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 9"</span><span class="p">)</span>
258 <span class="nb">print</span><span class="p">(</span><span class="s2">"py310 line 10"</span><span class="p">)</span>
259 </code></pre></div>
260 ////
261 //// tab | Python 3.9+ - non-Annotated</p>
262 <p>/// tip</p>
263 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
264 <p>///</p>
265 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 1"</span><span class="p">)</span>
266 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 2"</span><span class="p">)</span>
267 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 3"</span><span class="p">)</span>
268 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 4"</span><span class="p">)</span>
269 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 5"</span><span class="p">)</span>
270 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 6"</span><span class="p">)</span>
271 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 7"</span><span class="p">)</span>
272 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 8"</span><span class="p">)</span>
273 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 9"</span><span class="p">)</span>
274 <span class="nb">print</span><span class="p">(</span><span class="s2">"py39 line 10"</span><span class="p">)</span>
275 </code></pre></div>
276 ////
277 //// tab | Python 3.8+ - non-Annotated</p>
278 <p>/// tip</p>
279 <p>Prefer to use the <code>Annotated</code> version if possible.</p>
280 <p>///</p>
281 <p><div class="highlight"><pre><span></span><code><span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 1"</span><span class="p">)</span>
282 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 2"</span><span class="p">)</span>
283 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 3"</span><span class="p">)</span>
284 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 4"</span><span class="p">)</span>
285 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 5"</span><span class="p">)</span>
286 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 6"</span><span class="p">)</span>
287 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 7"</span><span class="p">)</span>
288 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 8"</span><span class="p">)</span>
289 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 9"</span><span class="p">)</span>
290 <span class="nb">print</span><span class="p">(</span><span class="s2">"simple line 10"</span><span class="p">)</span>
291 </code></pre></div>
292 ////</p>
293 <p>/////</p>
294 """
295 )
296 )