199
200
UnknownType('ignore-system', 'unknown1', 'ignore-docstring'))
201
202
assert 'unknown1 py:obj -1 unknown1.html -\n' == result
205
def make_SphinxInventory():
207
Return a SphinxInventory.
209
return SphinxInventory(logger=object(), project_name='project_name')
212
def make_SphinxInventoryWithLog():
214
Return a SphinxInventory with patched log.
216
inventory = make_SphinxInventory()
218
inventory.msg = lambda part, msg: log.append((part, msg))
219
return (inventory, log)
222
def test_getPayload_empty():
226
sut = make_SphinxInventory()
227
content = """# Sphinx inventory version 2
230
# The rest of this file is compressed with zlib.
231
x\x9c\x03\x00\x00\x00\x00\x01"""
233
result = sut._getPayload('http://base.ignore', content)
238
def test_getPayload_content():
240
Return content as string.
242
payload = 'first_line\nsecond line'
243
sut = make_SphinxInventory()
244
content = """# Ignored line
248
%s""" % (zlib.compress(payload),)
250
result = sut._getPayload('http://base.ignore', content)
252
assert payload == result
255
def test_getPayload_invalid():
257
Return empty string and log an error when failing to uncompress data.
259
sut, log = make_SphinxInventoryWithLog()
260
base_url = 'http://tm.tld'
261
content = """# Project: some-name
263
not-valid-zlib-content"""
265
result = sut._getPayload(base_url, content)
269
'sphinx', 'Failed to uncompress inventory from http://tm.tld',
273
def test_getLink_not_found():
275
Return None if link does not exists.
277
sut = make_SphinxInventory()
279
assert None is sut.getLink('no.such.name')
282
def test_getLink_found():
284
Return the link from internal state.
286
sut = make_SphinxInventory()
287
sut._links['some.name'] = ('http://base.tld', 'some/url.php')
289
assert 'http://base.tld/some/url.php' == sut.getLink('some.name')
292
def test_getLink_self_anchor():
294
Return the link with anchor as target name when link end with $.
296
sut = make_SphinxInventory()
297
sut._links['some.name'] = ('http://base.tld', 'some/url.php#$')
299
assert 'http://base.tld/some/url.php#some.name' == sut.getLink('some.name')
302
def test_update_functional():
304
Functional test for updating from an empty inventory.
307
'some.module1 py:module -1 module1.html -\n'
308
'other.module2 py:module 0 module2.html Other description\n'
310
sut = make_SphinxInventory()
311
# Patch URL loader to avoid hitting the system.
312
content = """# Sphinx inventory version 2
315
# The rest of this file is compressed with zlib.
316
%s""" % (zlib.compress(payload),)
317
sut._getURL = lambda _: content
319
sut.update('http://some.url/api/objects.inv')
321
assert 'http://some.url/api/module1.html' == sut.getLink('some.module1')
322
assert 'http://some.url/api/module2.html' == sut.getLink('other.module2')
325
def test_update_bad_url():
327
Log an error when failing to get base url from url.
329
sut, log = make_SphinxInventoryWithLog()
331
sut.update('really.bad.url')
333
assert sut._links == {}
335
'sphinx', 'Failed to get remote base url for really.bad.url'
337
assert expected_log == log
340
def test_update_fail():
342
Log an error when failing to get content from url.
344
sut, log = make_SphinxInventoryWithLog()
345
sut._getURL = lambda _: None
347
sut.update('http://some.tld/o.inv')
349
assert sut._links == {}
351
'sphinx', 'Failed to get object inventory from http://some.tld/o.inv'
353
assert expected_log == log
356
def test_parseInventory_empty():
358
Return empty dict for empty input.
360
sut = make_SphinxInventory()
362
result = sut._parseInventory('http://base.tld', '')
367
def test_parseInventory_single_line():
369
Return a dict with a single member.
371
sut = make_SphinxInventory()
373
result = sut._parseInventory(
374
'http://base.tld', 'some.attr py:attr -1 some.html De scription')
376
assert {'some.attr': ('http://base.tld', 'some.html')} == result
379
def test_parseInventory_invalid_lines():
381
Skip line and log an error.
383
sut, log = make_SphinxInventoryWithLog()
384
base_url = 'http://tm.tld'
386
'good.attr py:attribute -1 some.html -\n'
387
'bad.attr bad format\n'
390
'good.again py:module 0 again.html -\n'
393
result = sut._parseInventory(base_url, content)
396
'good.attr': (base_url, 'some.html'),
397
'good.again': (base_url, 'again.html'),
402
'Failed to parse line "bad.attr bad format" for http://tm.tld'
404
('sphinx', 'Failed to parse line "very.bad" for http://tm.tld'),
405
('sphinx', 'Failed to parse line "" for http://tm.tld'),