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

1import inspect 1ab

2 

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

8 

9from markdown_include_variants import IncludeVariantsExtension 1ab

10 

11 

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 ) 

18 

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 ) 

72 

73 

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 ) 

80 

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 ) 

143 

144 

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 ) 

151 

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> 

166 

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 )