comparison tests/test_release.py @ 39:a6bc019ac0b2 upstream

ADD: PyMuPDF v1.26.5: the original sdist.
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 11 Oct 2025 11:19:58 +0200
parents
children
comparison
equal deleted inserted replaced
2:b50eed0cc0ef 39:a6bc019ac0b2
1 import pymupdf
2
3 import os
4 import re
5 import sys
6
7
8 g_root_abs = os.path.normpath(f'{__file__}/../../')
9
10 sys.path.insert(0, g_root_abs)
11 try:
12 import pipcl
13 import setup
14 finally:
15 del sys.path[0]
16
17 g_root = pipcl.relpath(g_root_abs)
18
19
20 def _file_line(path, text, re_match, offset=+2):
21 '''
22 Returns <file>:<line> for location of regex match.
23
24 path:
25 filename.
26 text:
27 Contents of <filename>.
28 re_match:
29 A re.Match.
30 offset:
31 Added to line number of start of <re_match>. Default offset=2 is
32 because callers usually grep for leading newline, and line numbers are
33 generally 1-based.
34 '''
35 text_before = text[:re_match.start()]
36 line = text_before.count('\n') + offset
37 return f'{path}:{line}'
38
39
40 def test_release_versions():
41 '''
42 PyMuPDF and default MuPDF must have same major.minor version.
43 '''
44 version_p_tuple = [int(i) for i in setup.version_p.split('.')]
45 version_mupdf_tuple = [int(i) for i in setup.version_mupdf.split('.')]
46 assert version_p_tuple[:2] == version_mupdf_tuple[:2], \
47 f'PyMuPDF and MuPDF major.minor versions do not match. {setup.version_p=} {setup.version_mupdf=}.'
48
49
50 def test_release_bug_template():
51 '''
52 Bug report template must list current PyMuPDF version.
53 '''
54 p = f'{g_root}/.github/ISSUE_TEMPLATE/bug_report.yml'
55 expected = f'\n - {setup.version_p}\n'
56 with open(p) as f:
57 text = f.read()
58 assert expected in text, f'{p}:1: Failed to find line for {setup.version_p=}, {expected!r}.'
59
60
61 def test_release_changelog_version():
62 '''
63 In changes.txt, first item must match setup.version_p.
64 '''
65 p = f'{g_root}/changes.txt'
66 with open(p) as f:
67 text = f.read()
68 m = re.search(f'\n[*][*]Changes in version ([0-9.]+)[*][*]\n', text)
69 assert m, f'Cannot parse {p}.'
70 assert m[1] == setup.version_p, \
71 f'{_file_line(p, text, m)}: Cannot find {setup.version_p=} in first changelog item: {m[0].strip()!r}.'
72
73
74 def test_release_changelog_mupdf_version():
75 '''
76 In changes.txt, first mentioned of MuPDF must match setup.version_mupdf.
77 '''
78 p = f'{g_root}/changes.txt'
79 with open(p) as f:
80 text = f.read()
81 m = re.search(f'\n[*] Use MuPDF-([0-9.]+)[.]\n', text)
82 assert m, f'Cannot parse {p}.'
83 assert m[1] == setup.version_mupdf, \
84 f'{_file_line(p, text, m)}: First mentioned MuPDF version does not match {setup.version_mupdf=}: {m[0].strip()!r}.'