| # Copyright (C) 2003 Python Software Foundation | 
 |  | 
 | import unittest | 
 | import shutil | 
 | import tempfile | 
 | import os | 
 | import os.path | 
 | from test import test_support | 
 | from test.test_support import TESTFN | 
 |  | 
 | class TestShutil(unittest.TestCase): | 
 |     def test_rmtree_errors(self): | 
 |         # filename is guaranteed not to exist | 
 |         filename = tempfile.mktemp() | 
 |         self.assertRaises(OSError, shutil.rmtree, filename) | 
 |         self.assertEqual(shutil.rmtree(filename, True), None) | 
 |         shutil.rmtree(filename, False, lambda func, arg, exc: None) | 
 |  | 
 |     def test_dont_move_dir_in_itself(self): | 
 |         src_dir = tempfile.mkdtemp() | 
 |         try: | 
 |             dst = os.path.join(src_dir, 'foo') | 
 |             self.assertRaises(shutil.Error, shutil.move, src_dir, dst) | 
 |         finally: | 
 |             try: | 
 |                 os.rmdir(src_dir) | 
 |             except: | 
 |                 pass | 
 |  | 
 |     if hasattr(os, "symlink"): | 
 |         def test_dont_copy_file_onto_link_to_itself(self): | 
 |             # bug 851123. | 
 |             os.mkdir(TESTFN) | 
 |             src = os.path.join(TESTFN, 'cheese') | 
 |             dst = os.path.join(TESTFN, 'shop') | 
 |             try: | 
 |                 f = open(src, 'w') | 
 |                 f.write('cheddar') | 
 |                 f.close() | 
 |  | 
 |                 os.link(src, dst) | 
 |                 self.assertRaises(shutil.Error, shutil.copyfile, src, dst) | 
 |                 self.assertEqual(open(src,'r').read(), 'cheddar') | 
 |                 os.remove(dst) | 
 |  | 
 |                 # Using `src` here would mean we end up with a symlink pointing | 
 |                 # to TESTFN/TESTFN/cheese, while it should point at | 
 |                 # TESTFN/cheese. | 
 |                 os.symlink('cheese', dst) | 
 |                 self.assertRaises(shutil.Error, shutil.copyfile, src, dst) | 
 |                 self.assertEqual(open(src,'r').read(), 'cheddar') | 
 |                 os.remove(dst) | 
 |             finally: | 
 |                 try: | 
 |                     shutil.rmtree(TESTFN) | 
 |                 except OSError: | 
 |                     pass | 
 |  | 
 |  | 
 | def test_main(): | 
 |     test_support.run_unittest(TestShutil) | 
 |  | 
 | if __name__ == '__main__': | 
 |     test_main() |