/Lib/test/test_filecmp.py

http://unladen-swallow.googlecode.com/ · Python · 134 lines · 109 code · 20 blank · 5 comment · 8 complexity · f48850e39bd71ba98f902d1316bec04e MD5 · raw file

  1. import os, filecmp, shutil, tempfile, shutil
  2. import unittest
  3. from test import test_support
  4. class FileCompareTestCase(unittest.TestCase):
  5. def setUp(self):
  6. self.name = test_support.TESTFN
  7. self.name_same = test_support.TESTFN + '-same'
  8. self.name_diff = test_support.TESTFN + '-diff'
  9. data = 'Contents of file go here.\n'
  10. for name in [self.name, self.name_same, self.name_diff]:
  11. output = open(name, 'w')
  12. output.write(data)
  13. output.close()
  14. output = open(self.name_diff, 'a+')
  15. output.write('An extra line.\n')
  16. output.close()
  17. self.dir = tempfile.gettempdir()
  18. def tearDown(self):
  19. os.unlink(self.name)
  20. os.unlink(self.name_same)
  21. os.unlink(self.name_diff)
  22. def test_matching(self):
  23. self.failUnless(filecmp.cmp(self.name, self.name_same),
  24. "Comparing file to itself fails")
  25. self.failUnless(filecmp.cmp(self.name, self.name_same, shallow=False),
  26. "Comparing file to itself fails")
  27. self.failUnless(filecmp.cmp(self.name, self.name, shallow=False),
  28. "Comparing file to identical file fails")
  29. self.failUnless(filecmp.cmp(self.name, self.name),
  30. "Comparing file to identical file fails")
  31. def test_different(self):
  32. self.failIf(filecmp.cmp(self.name, self.name_diff),
  33. "Mismatched files compare as equal")
  34. self.failIf(filecmp.cmp(self.name, self.dir),
  35. "File and directory compare as equal")
  36. class DirCompareTestCase(unittest.TestCase):
  37. def setUp(self):
  38. tmpdir = tempfile.gettempdir()
  39. self.dir = os.path.join(tmpdir, 'dir')
  40. self.dir_same = os.path.join(tmpdir, 'dir-same')
  41. self.dir_diff = os.path.join(tmpdir, 'dir-diff')
  42. self.caseinsensitive = os.path.normcase('A') == os.path.normcase('a')
  43. data = 'Contents of file go here.\n'
  44. for dir in [self.dir, self.dir_same, self.dir_diff]:
  45. shutil.rmtree(dir, True)
  46. os.mkdir(dir)
  47. if self.caseinsensitive and dir is self.dir_same:
  48. fn = 'FiLe' # Verify case-insensitive comparison
  49. else:
  50. fn = 'file'
  51. output = open(os.path.join(dir, fn), 'w')
  52. output.write(data)
  53. output.close()
  54. output = open(os.path.join(self.dir_diff, 'file2'), 'w')
  55. output.write('An extra file.\n')
  56. output.close()
  57. def tearDown(self):
  58. shutil.rmtree(self.dir)
  59. shutil.rmtree(self.dir_same)
  60. shutil.rmtree(self.dir_diff)
  61. def test_cmpfiles(self):
  62. self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file']) ==
  63. (['file'], [], []),
  64. "Comparing directory to itself fails")
  65. self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file']) ==
  66. (['file'], [], []),
  67. "Comparing directory to same fails")
  68. # Try it with shallow=False
  69. self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file'],
  70. shallow=False) ==
  71. (['file'], [], []),
  72. "Comparing directory to itself fails")
  73. self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file'],
  74. shallow=False),
  75. "Comparing directory to same fails")
  76. # Add different file2
  77. output = open(os.path.join(self.dir, 'file2'), 'w')
  78. output.write('Different contents.\n')
  79. output.close()
  80. self.failIf(filecmp.cmpfiles(self.dir, self.dir_same,
  81. ['file', 'file2']) ==
  82. (['file'], ['file2'], []),
  83. "Comparing mismatched directories fails")
  84. def test_dircmp(self):
  85. # Check attributes for comparison of two identical directories
  86. d = filecmp.dircmp(self.dir, self.dir_same)
  87. if self.caseinsensitive:
  88. self.assertEqual([d.left_list, d.right_list],[['file'], ['FiLe']])
  89. else:
  90. self.assertEqual([d.left_list, d.right_list],[['file'], ['file']])
  91. self.failUnless(d.common == ['file'])
  92. self.failUnless(d.left_only == d.right_only == [])
  93. self.failUnless(d.same_files == ['file'])
  94. self.failUnless(d.diff_files == [])
  95. # Check attributes for comparison of two different directories
  96. d = filecmp.dircmp(self.dir, self.dir_diff)
  97. self.failUnless(d.left_list == ['file'])
  98. self.failUnless(d.right_list == ['file', 'file2'])
  99. self.failUnless(d.common == ['file'])
  100. self.failUnless(d.left_only == [])
  101. self.failUnless(d.right_only == ['file2'])
  102. self.failUnless(d.same_files == ['file'])
  103. self.failUnless(d.diff_files == [])
  104. # Add different file2
  105. output = open(os.path.join(self.dir, 'file2'), 'w')
  106. output.write('Different contents.\n')
  107. output.close()
  108. d = filecmp.dircmp(self.dir, self.dir_diff)
  109. self.failUnless(d.same_files == ['file'])
  110. self.failUnless(d.diff_files == ['file2'])
  111. def test_main():
  112. test_support.run_unittest(FileCompareTestCase, DirCompareTestCase)
  113. if __name__ == "__main__":
  114. test_main()