Commits

Jason R. Coombs committed fcf8db4

Adding test that captures the new requirement.

Comments (0)

Files changed (1)

tests/test_pkg_resources.py

+import sys
+import tempfile
+import os
+import zipfile
+
+import pkg_resources
+
+class EggRemover(unicode):
+	def __call__(self):
+		if self in sys.path:
+			sys.path.remove(self)
+		if os.path.exists(self):
+			os.remove(self)
+
+class TestZipProvider(object):
+	finalizers = []
+
+	@classmethod
+	def setup_class(cls):
+		"create a zip egg and add it to sys.path"
+		egg = tempfile.NamedTemporaryFile(suffix='.egg', delete=False)
+		zip_egg = zipfile.ZipFile(egg, 'w')
+		zip_info = zipfile.ZipInfo()
+		zip_info.filename = 'mod.py'
+		zip_info.date_time = 2013, 5, 12, 13, 25, 0
+		zip_egg.writestr(zip_info, 'x = 3\n')
+		zip_info = zipfile.ZipInfo()
+		zip_info.filename = 'data.dat'
+		zip_info.date_time = 2013, 5, 12, 13, 25, 0
+		zip_egg.writestr(zip_info, 'hello, world!')
+		zip_egg.close()
+		egg.close()
+
+		sys.path.append(egg.name)
+		cls.finalizers.append(EggRemover(egg.name))
+
+	@classmethod
+	def teardown_class(cls):
+		for finalizer in cls.finalizers:
+			finalizer()
+
+	def test_resource_filename_rewrites_on_change(self):
+		"""
+		If a previous call to get_resource_filename has saved the file, but
+		the file has been subsequently mutated with different file of the
+		same size and modification time, it should not be overwritten on a
+		subsequent call to get_resource_filename.
+		"""
+		import mod
+		manager = pkg_resources.ResourceManager()
+		zp = pkg_resources.ZipProvider(mod)
+		filename = zp.get_resource_filename(manager, 'data.dat')
+		assert os.stat(filename).st_mtime == 1368379500
+		f = open(filename, 'wb')
+		f.write('hello, world?')
+		f.close()
+		os.utime(filename, (1368379500, 1368379500))
+		filename = zp.get_resource_filename(manager, 'data.dat')
+		f = open(filename)
+		assert f.read() == 'hello, world!'
+		manager.cleanup_resources()