summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiří Klimeš2022-05-02 19:59:11 +0200
committerJiří Klimeš2022-05-03 11:37:09 +0200
commitd030f1dec5333d855dbff844eafb5c77b55f5752 (patch)
tree3d78879f6d7af2099468137c1a4983aa65a63642
parent9c0cab1e44c334e26c5f6317257078e3e61b6f3e (diff)
downloadaur-d030f1dec5333d855dbff844eafb5c77b55f5752.tar.gz
Migrate tests to Python 3
and use python-nose (instead of removed python2-nose) The patch may not be ideal. It converts bytes to str so that most code can be still used. And in some necessary cases it converts back to bytes. Using bytes everywhere would probably be better, but it would require much more changes (and I am not a Python person).
-rw-r--r--.SRCINFO6
-rw-r--r--PKGBUILD12
-rw-r--r--pdf2djvu-tests-python-3.patch183
3 files changed, 196 insertions, 5 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 0a40753d3943..5751065d5048 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,11 +1,11 @@
pkgbase = pdf2djvu
pkgdesc = Creates DjVu files from PDF files
pkgver = 0.9.18.2
- pkgrel = 2
+ pkgrel = 3
url = https://jwilk.net/software/pdf2djvu
arch = x86_64
license = GPL
- makedepends = python2-nose
+ makedepends = python-nose
makedepends = ttf-liberation
makedepends = boost
depends = poppler
@@ -15,7 +15,9 @@ pkgbase = pdf2djvu
depends = exiv2
source = https://github.com/jwilk/pdf2djvu/releases/download/0.9.18.2/pdf2djvu-0.9.18.2.tar.xz
source = pdf2djvu-poppler-fix.patch
+ source = pdf2djvu-tests-python-3.patch
sha256sums = 9ea03f21d841a336808d89d65015713c0785e7295a6559d77771dc795333a9fa
sha256sums = 0507a1c71e940873213e45762bab96094249b2d15a756541c687e0e79c3b4f1d
+ sha256sums = 41bdb0b588a7d0afff5ed4d32f2c7b9667e00b7ea349db8ed147d1c9e4f20de2
pkgname = pdf2djvu
diff --git a/PKGBUILD b/PKGBUILD
index 214b74f71a92..e019767e4a90 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,26 +4,32 @@
pkgname=pdf2djvu
pkgver=0.9.18.2
-pkgrel=2
+pkgrel=3
pkgdesc="Creates DjVu files from PDF files"
arch=('x86_64')
url="https://jwilk.net/software/pdf2djvu"
license=('GPL')
depends=('poppler' 'djvulibre' 'gcc-libs' 'graphicsmagick' 'exiv2')
-makedepends=('python2-nose' 'ttf-liberation' 'boost')
+makedepends=('python-nose' 'ttf-liberation' 'boost')
source=(
"https://github.com/jwilk/pdf2djvu/releases/download/${pkgver}/pdf2djvu-${pkgver}.tar.xz"
"pdf2djvu-poppler-fix.patch"
+ "pdf2djvu-tests-python-3.patch"
)
sha256sums=(
'9ea03f21d841a336808d89d65015713c0785e7295a6559d77771dc795333a9fa'
'0507a1c71e940873213e45762bab96094249b2d15a756541c687e0e79c3b4f1d'
+ '41bdb0b588a7d0afff5ed4d32f2c7b9667e00b7ea349db8ed147d1c9e4f20de2'
)
prepare() {
# Fix build for poppler >= 22.03.0
# remove the patch when this is fixed upstream
patch -p1 < "$srcdir"/pdf2djvu-poppler-fix.patch
+
+ # Migrate tests to Python 3
+ # (It may not be ideal, but it works.)
+ patch -p1 < "$srcdir"/pdf2djvu-tests-python-3.patch
}
build() {
@@ -36,7 +42,7 @@ build() {
check() {
cd ${pkgname}-${pkgver}
- make PYTHON=python2 test
+ make PYTHON=python test
}
package() {
diff --git a/pdf2djvu-tests-python-3.patch b/pdf2djvu-tests-python-3.patch
new file mode 100644
index 000000000000..507958bb0245
--- /dev/null
+++ b/pdf2djvu-tests-python-3.patch
@@ -0,0 +1,183 @@
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-fg-colors-gm.py src/pdf2djvu-0.9.18.2/tests/test-fg-colors-gm.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-fg-colors-gm.py 2022-05-02 19:33:28.196701841 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-fg-colors-gm.py 2022-05-02 19:33:44.393368987 +0200
+@@ -37,7 +37,7 @@
+ r.assert_(stdout=None)
+ r = self.decode(mode='foreground')
+ r.assert_(stdout=None)
+- colors = count_ppm_colors(r.stdout)
++ colors = count_ppm_colors(r.stdout.encode('utf-8', 'surrogateescape'))
+ if isinstance(n, tuple):
+ assert_in(len(colors), n)
+ else:
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-fg-colors.py src/pdf2djvu-0.9.18.2/tests/test-fg-colors.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-fg-colors.py 2022-05-02 19:33:28.196701841 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-fg-colors.py 2022-05-02 19:33:44.386702321 +0200
+@@ -37,7 +37,7 @@
+ r.assert_(stdout=None)
+ r = self.decode(mode='foreground')
+ r.assert_(stdout=None)
+- colors = count_ppm_colors(r.stdout)
++ colors = count_ppm_colors(r.stdout.encode('utf-8','surrogateescape'))
+ assert_equal(len(colors), n)
+
+ # vim:ts=4 sts=4 sw=4 et
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-labels-null.py src/pdf2djvu-0.9.18.2/tests/test-labels-null.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-labels-null.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-labels-null.py 2022-05-02 19:33:44.393368987 +0200
+@@ -25,9 +25,9 @@
+ self.pdf2djvu().assert_()
+ r = self.ls()
+ r.assert_(stdout=re.compile(
+- ur'\n'
+- ur'\s*1\s+P\s+\d+\s+[\w.]+\s+T=\uFFFDnul\uFFFDl\uFFFD\n'
+- ur'\s*2\s+P\s+\d+\s+[\w.]+\s+T=1\n'.encode('UTF-8')
++ r'\n'
++ r'\s*1\s+P\s+\d+\s+[\w.]+\s+T=\uFFFDnul\uFFFDl\uFFFD\n'
++ r'\s*2\s+P\s+\d+\s+[\w.]+\s+T=1\n'
+ ))
+
+ # vim:ts=4 sts=4 sw=4 et
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-nfkc-apf.py src/pdf2djvu-0.9.18.2/tests/test-nfkc-apf.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-nfkc-apf.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-nfkc-apf.py 2022-05-02 19:33:44.390035653 +0200
+@@ -25,8 +25,10 @@
+ # + fixed in 0.8
+
+ text = u'\N{LATIN SMALL LIGATURE FL}uorogra\N{LATIN SMALL LIGATURE FI}a'
+- text_nfkc = unicodedata.normalize('NFKC', text).encode('UTF-8')
+- text_no_nfkc = text.encode('UTF-8')
++ #text_nfkc = unicodedata.normalize('NFKC', text).encode('UTF-8')
++ #text_no_nfkc = text.encode('UTF-8').decode('UTF-8')
++ text_nfkc = unicodedata.normalize('NFKC', text)
++ text_no_nfkc = text
+
+ def test_nfkc(self):
+ self.pdf2djvu().assert_()
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-nfkc.py src/pdf2djvu-0.9.18.2/tests/test-nfkc.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-nfkc.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-nfkc.py 2022-05-02 19:33:44.386702321 +0200
+@@ -25,7 +25,7 @@
+
+ text = u'¾'
+ text_nfkc = '3⁄4'
+- text_no_nfkc = text.encode('UTF-8')
++ text_no_nfkc = text
+
+ def test_nfkc(self):
+ self.pdf2djvu().assert_()
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-nonascii.py src/pdf2djvu-0.9.18.2/tests/test-nonascii.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-nonascii.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-nonascii.py 2022-05-02 19:33:44.380035654 +0200
+@@ -29,7 +29,7 @@
+ def test_nonascii(self):
+ locale_encoding = locale.getpreferredencoding()
+ try:
+- curr_sign = u'\xA4'.encode(locale_encoding)
++ curr_sign = u'\xA4'.encode(locale_encoding).decode(locale_encoding)
+ except UnicodeError:
+ raise SkipTest('locale that can encode U+00A4 CURRENCY SIGN is required')
+ tmpdir = tempfile.mkdtemp(prefix='pdf2djvu.test.')
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-title.py src/pdf2djvu-0.9.18.2/tests/test-title.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-title.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-title.py 2022-05-02 19:33:44.393368987 +0200
+@@ -56,7 +56,7 @@
+
+ def test_bad_encoding(self):
+ self.require_feature('POSIX')
+- template = '{page}\xBA'
++ template = b'{page}\xBA'
+ r = self.pdf2djvu('--page-title-template', template, encoding='UTF-8')
+ r.assert_(stderr=re.compile('^Unable to convert page title to UTF-8:'), rc=1)
+
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/test-vector-fg.py src/pdf2djvu-0.9.18.2/tests/test-vector-fg.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/test-vector-fg.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/test-vector-fg.py 2022-05-02 19:33:44.393368987 +0200
+@@ -31,7 +31,7 @@
+ r.assert_(stdout=None)
+ r = self.decode(mode='foreground')
+ r.assert_(stdout=None)
+- colors = count_ppm_colors(r.stdout)
+- assert_greater(colors.get('\xFF\0\0', 0), 5000)
++ colors = count_ppm_colors(r.stdout.encode('utf-8', 'surrogateescape'))
++ assert_greater(colors.get('(255, 0, 0)', 0), 5000)
+
+ # vim:ts=4 sts=4 sw=4 et
+diff -aur src/pdf2djvu-0.9.18.2/tests.orig/tools.py src/pdf2djvu-0.9.18.2/tests/tools.py
+--- src/pdf2djvu-0.9.18.2/tests.orig/tools.py 2022-05-02 19:33:28.200035175 +0200
++++ src/pdf2djvu-0.9.18.2/tests/tools.py 2022-05-02 19:33:44.393368987 +0200
+@@ -14,12 +14,12 @@
+ # General Public License for more details.
+
+ from __future__ import print_function
++from builtins import bytes
+
+ import ast
+ import codecs
+ import collections
+ import inspect
+-import itertools
+ import locale
+ import os
+ import pipes
+@@ -43,9 +43,6 @@
+ assert_true,
+ )
+
+-if {0} and not isinstance(b'', str): # Python 2.7 is required
+- raise RuntimeError('Python 2.7 is required')
+-
+ re_type = type(re.compile(''))
+
+ def assert_fail(msg):
+@@ -70,7 +67,7 @@
+ del data['SIGCLD']
+ except KeyError:
+ pass
+- return dict((no, name) for name, no in data.iteritems())
++ return dict((no, name) for name, no in data.items())
+
+ class _ipc_rc(int):
+
+@@ -165,7 +162,8 @@
+ continue
+ raise TypeError('{key!r} is an invalid keyword argument for this function'.format(key=key))
+ env['LANGUAGE'] = 'en'
+- print('$', ' '.join(map(pipes.quote, commandline)))
++ cmd_arr = [ele if isinstance(ele, str) else ele.decode('utf-8','surrogateescape') for ele in commandline]
++ print('$', ' '.join(map(pipes.quote, cmd_arr)))
+ try:
+ child = ipc.Popen(list(commandline),
+ stdout=ipc.PIPE,
+@@ -176,7 +174,7 @@
+ exc.filename = commandline[0]
+ raise
+ stdout, stderr = child.communicate()
+- return ipc_result(stdout, stderr, child.returncode)
++ return ipc_result(stdout.decode('utf-8','surrogateescape'), stderr.decode('utf-8'), child.returncode)
+
+ def _pdf2djvu(self, *args, **kwargs):
+ quiet = ('-q',) if kwargs.pop('quiet', True) else ()
+@@ -296,18 +294,18 @@
+ pixels[x, y] = color
+ return image
+
+-_ppm_re = re.compile(r'P6\s+\d+\s+\d+\s+255\s(.*)\Z', re.DOTALL)
++_ppm_re = re.compile(br'P6\s+\d+\s+\d+\s+255\s(.*)\Z', re.DOTALL)
+ def count_ppm_colors(b):
+ match = _ppm_re.match(b)
+ assert_is_not_none(match)
+ pixels = match.group(1)
+ ipixels = iter(pixels)
+ result = collections.defaultdict(int)
+- for pixel in itertools.izip(ipixels, ipixels, ipixels):
++ for pixel in zip(ipixels, ipixels, ipixels):
+ result[pixel] += 1
+ return dict(
+- (''.join(key), value)
+- for key, value in result.iteritems()
++ (''.join(str(key)), value)
++ for key, value in result.items()
+ )
+
+ xml_ns = dict(