From e8123bb68ac019deab7ff32223ae3214323dd31c Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 7 Jun 2016 07:42:34 +0200 Subject: [PATCH] Fix pdfjs version parsing for never versions --- qutebrowser/utils/version.py | 6 ++++-- tests/unit/utils/test_version.py | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 6081177a9..f02a3c848 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -197,12 +197,14 @@ def _pdfjs_version(): return 'no' else: pdfjs_file = pdfjs_file.decode('utf-8') - version_re = re.compile(r"^PDFJS\.version = '([^']+)';$", re.MULTILINE) + version_re = re.compile( + r"^(PDFJS\.version|var pdfjsVersion) = '([^']+)';$", re.MULTILINE) + match = version_re.search(pdfjs_file) if not match: pdfjs_version = 'unknown' else: - pdfjs_version = match.group(1) + pdfjs_version = match.group(2) if file_path is None: file_path = 'bundled' return '{} ({})'.format(pdfjs_version, file_path) diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 6d08a8727..6a1a1522f 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -543,25 +543,38 @@ class TestPDFJSVersion: lambda path: (b'foobar', None)) assert version._pdfjs_version() == 'unknown (bundled)' - def test_known(self, monkeypatch): + @pytest.mark.parametrize('varname', [ + 'PDFJS.version', # older versions + 'var pdfjsVersion', # newer versions + ]) + def test_known(self, monkeypatch, varname): pdfjs_code = textwrap.dedent(""" // Initializing PDFJS global object (if still undefined) if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } - PDFJS.version = '1.2.109'; + VARNAME = '1.2.109'; PDFJS.build = '875588d'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it 'use strict'; - """).strip().encode('utf-8') + """.replace('VARNAME', varname)).strip().encode('utf-8') monkeypatch.setattr( 'qutebrowser.utils.version.pdfjs.get_pdfjs_res_and_path', lambda path: (pdfjs_code, '/foo/bar/pdf.js')) assert version._pdfjs_version() == '1.2.109 (/foo/bar/pdf.js)' + def test_real_file(self): + """Test against the real file if pdfjs was found.""" + try: + pdfjs.get_pdfjs_res_and_path('build/pdf.js') + except pdfjs.PDFJSNotFound: + pytest.skip("No pdfjs found") + ver = version._pdfjs_version() + assert ver.split()[0] not in ['no', 'unknown'], ver + class FakeQSslSocket: