2016-10-06 04:59:24 -05:00
|
|
|
"""
|
|
|
|
test_build_linkcheck
|
|
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Test the build process with manpage builder with the test root.
|
|
|
|
|
2019-12-31 23:27:43 -06:00
|
|
|
:copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS.
|
2016-10-06 04:59:24 -05:00
|
|
|
:license: BSD, see LICENSE for details.
|
|
|
|
"""
|
|
|
|
|
2019-11-13 08:39:47 -06:00
|
|
|
from unittest import mock
|
2017-01-05 10:14:47 -06:00
|
|
|
import pytest
|
2016-10-06 04:59:24 -05:00
|
|
|
|
|
|
|
|
2017-01-05 10:14:47 -06:00
|
|
|
@pytest.mark.sphinx('linkcheck', testroot='linkcheck', freshenv=True)
|
2016-03-23 11:38:46 -05:00
|
|
|
def test_defaults(app, status, warning):
|
2016-10-06 04:59:24 -05:00
|
|
|
app.builder.build_all()
|
|
|
|
|
|
|
|
assert (app.outdir / 'output.txt').exists()
|
2020-01-31 20:58:51 -06:00
|
|
|
content = (app.outdir / 'output.txt').read_text()
|
2016-10-06 04:59:24 -05:00
|
|
|
|
2016-03-23 11:38:46 -05:00
|
|
|
print(content)
|
2018-07-16 16:17:44 -05:00
|
|
|
# looking for '#top' and 'does-not-exist' not found should fail
|
2016-03-23 11:38:46 -05:00
|
|
|
assert "Anchor 'top' not found" in content
|
2018-07-16 16:17:44 -05:00
|
|
|
assert "Anchor 'does-not-exist' not found" in content
|
|
|
|
# looking for non-existent URL should fail
|
|
|
|
assert " Max retries exceeded with url: /doesnotexist" in content
|
2019-02-05 09:21:52 -06:00
|
|
|
# images should fail
|
2019-06-05 09:42:24 -05:00
|
|
|
assert "Not Found for url: https://www.google.com/image.png" in content
|
|
|
|
assert "Not Found for url: https://www.google.com/image2.png" in content
|
2019-02-05 09:21:52 -06:00
|
|
|
assert len(content.splitlines()) == 5
|
2016-03-23 11:38:46 -05:00
|
|
|
|
|
|
|
|
2017-01-05 10:14:47 -06:00
|
|
|
@pytest.mark.sphinx(
|
|
|
|
'linkcheck', testroot='linkcheck', freshenv=True,
|
2018-07-16 16:17:44 -05:00
|
|
|
confoverrides={'linkcheck_anchors_ignore': ["^!", "^top$"],
|
|
|
|
'linkcheck_ignore': [
|
|
|
|
'https://localhost:7777/doesnotexist',
|
2019-02-05 09:21:52 -06:00
|
|
|
'http://www.sphinx-doc.org/en/1.7/intro.html#',
|
2019-06-05 09:42:24 -05:00
|
|
|
'https://www.google.com/image.png',
|
|
|
|
'https://www.google.com/image2.png']
|
2018-07-16 16:17:44 -05:00
|
|
|
})
|
2016-03-23 11:38:46 -05:00
|
|
|
def test_anchors_ignored(app, status, warning):
|
|
|
|
app.builder.build_all()
|
2016-10-06 04:59:24 -05:00
|
|
|
|
2016-03-23 11:38:46 -05:00
|
|
|
assert (app.outdir / 'output.txt').exists()
|
2020-01-31 20:58:51 -06:00
|
|
|
content = (app.outdir / 'output.txt').read_text()
|
2016-03-23 11:38:46 -05:00
|
|
|
|
|
|
|
# expect all ok when excluding #top
|
|
|
|
assert not content
|
2019-11-13 08:39:47 -06:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.sphinx(
|
|
|
|
'linkcheck', testroot='linkcheck', freshenv=True,
|
|
|
|
confoverrides={'linkcheck_auth': [
|
|
|
|
(r'.+google\.com/image.+', 'authinfo1'),
|
|
|
|
(r'.+google\.com.+', 'authinfo2'),
|
|
|
|
]
|
|
|
|
})
|
|
|
|
def test_auth(app, status, warning):
|
|
|
|
mock_req = mock.MagicMock()
|
|
|
|
mock_req.return_value = 'fake-response'
|
|
|
|
|
|
|
|
with mock.patch.multiple('requests', get=mock_req, head=mock_req):
|
|
|
|
app.builder.build_all()
|
|
|
|
for c_args, c_kwargs in mock_req.call_args_list:
|
|
|
|
if 'google.com/image' in c_args[0]:
|
|
|
|
assert c_kwargs['auth'] == 'authinfo1'
|
|
|
|
elif 'google.com' in c_args[0]:
|
|
|
|
assert c_kwargs['auth'] == 'authinfo2'
|
|
|
|
else:
|
|
|
|
assert not c_kwargs['auth']
|