def test_store_urldata(): """ Test that hyperlink relationships are modelled correctly. """ import queue, threading f = Fetch(url_queue=queue.Queue(), url_store=dict(), url_lock=threading.Lock()) test_dict = dict() o_urls = ['http://nonexistant/a', 'http://nonexistant/b', 'http://nonexistant/x/c', 'http://nonexistant/d', 'http://othersite/', 'http://othersite/e', 'http://othersite/e#foo', ] f.store_urldata(current_url='http://nonexistant/x/', outgoing_urls=o_urls, store=test_dict) eq_(len(test_dict['http://nonexistant/x/']['outgoing']), len(o_urls)) eq_(len(test_dict['http://nonexistant/x/']['incoming']), 0) eq_(len(test_dict['http://nonexistant/d']['incoming']), 1) eq_(len(test_dict), len(o_urls) + 1) # 'd' points back to 'x', should increment x's "incoming" to 1 f.store_urldata(current_url='http://nonexistant/d', outgoing_urls=['http://nonexistant/x/',], store=test_dict) eq_(len(test_dict['http://nonexistant/x/']['outgoing']), len(o_urls)) eq_(len(test_dict['http://nonexistant/x/']['incoming']), 1) # * eq_(len(test_dict['http://nonexistant/d']['incoming']), 1) eq_(len(test_dict), len(o_urls) + 1) # exact same entry added again; no change f.store_urldata(current_url='http://nonexistant/d', outgoing_urls=['http://nonexistant/x/',], store=test_dict) eq_(len(test_dict['http://nonexistant/x/']['outgoing']), len(o_urls)) eq_(len(test_dict['http://nonexistant/x/']['incoming']), 1) # * eq_(len(test_dict['http://nonexistant/d']['incoming']), 1) eq_(len(test_dict), len(o_urls) + 1)