Added tests for urlretrieve. Also made sure urlopen tests cleaned up properly after themselves.
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 7d557a1..bc87b34 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -35,6 +35,7 @@
def tearDown(self):
"""Shut down the open object"""
self.returned_obj.close()
+ os.remove(test_support.TESTFN)
def test_interface(self):
# Make sure object returned by urlopen() has the specified methods
@@ -87,16 +88,54 @@
for line in self.returned_obj.__iter__():
self.assertEqual(line, self.text)
-class urlretrieve_Tests(unittest.TestCase):
+class urlretrieve_FileTests(unittest.TestCase):
"""Test urllib.urlretrieve() on local files"""
- pass
-class _urlopener_Tests(unittest.TestCase):
- """Make sure urlopen() and urlretrieve() use the class assigned to
- _urlopener"""
- #XXX: Maybe create a custom class here that takes in a list and modifies
- # it to signal that it was called?
- pass
+ def setUp(self):
+ # Create a temporary file.
+ self.text = 'testing urllib.urlretrieve'
+ FILE = file(test_support.TESTFN, 'wb')
+ FILE.write(self.text)
+ FILE.close()
+
+ def tearDown(self):
+ # Delete the temporary file.
+ os.remove(test_support.TESTFN)
+
+ def test_basic(self):
+ # Make sure that a local file just gets its own location returned and
+ # a headers value is returned.
+ result = urllib.urlretrieve("file:%s" % test_support.TESTFN)
+ self.assertEqual(result[0], test_support.TESTFN)
+ self.assert_(isinstance(result[1], mimetools.Message),
+ "did not get a mimetools.Message instance as second "
+ "returned value")
+
+ def test_copy(self):
+ # Test that setting the filename argument works.
+ second_temp = "%s.2" % test_support.TESTFN
+ result = urllib.urlretrieve("file:%s" % test_support.TESTFN, second_temp)
+ self.assertEqual(second_temp, result[0])
+ self.assert_(os.path.exists(second_temp), "copy of the file was not "
+ "made")
+ FILE = file(second_temp, 'rb')
+ try:
+ text = FILE.read()
+ finally:
+ FILE.close()
+ self.assertEqual(self.text, text)
+
+ def test_reporthook(self):
+ # Make sure that the reporthook works.
+ def hooktester(count, block_size, total_size, count_holder=[0]):
+ self.assert_(isinstance(count, int))
+ self.assert_(isinstance(block_size, int))
+ self.assert_(isinstance(total_size, int))
+ self.assertEqual(count, count_holder[0])
+ count_holder[0] = count_holder[0] + 1
+ second_temp = "%s.2" % test_support.TESTFN
+ urllib.urlretrieve(test_support.TESTFN, second_temp, hooktester)
+ os.remove(second_temp)
class QuotingTests(unittest.TestCase):
"""Tests for urllib.quote() and urllib.quote_plus()
@@ -371,6 +410,7 @@
def test_main():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(urlopen_FileTests))
+ test_suite.addTest(unittest.makeSuite(urlretrieve_FileTests))
test_suite.addTest(unittest.makeSuite(QuotingTests))
test_suite.addTest(unittest.makeSuite(UnquotingTests))
test_suite.addTest(unittest.makeSuite(urlencode_Tests))