(self)
| 630 | @os_helper.skip_unless_symlink |
| 631 | @skip_if_ABSTFN_contains_backslash |
| 632 | def test_realpath_symlink_loops(self): |
| 633 | # Bug #930024, return the path unchanged if we get into an infinite |
| 634 | # symlink loop in non-strict mode (default). |
| 635 | try: |
| 636 | os.symlink(ABSTFN, ABSTFN) |
| 637 | self.assertEqual(realpath(ABSTFN), ABSTFN) |
| 638 | |
| 639 | os.symlink(ABSTFN+"1", ABSTFN+"2") |
| 640 | os.symlink(ABSTFN+"2", ABSTFN+"1") |
| 641 | self.assertEqual(realpath(ABSTFN+"1"), ABSTFN+"1") |
| 642 | self.assertEqual(realpath(ABSTFN+"2"), ABSTFN+"2") |
| 643 | |
| 644 | self.assertEqual(realpath(ABSTFN+"1/x"), ABSTFN+"1/x") |
| 645 | self.assertEqual(realpath(ABSTFN+"1/.."), dirname(ABSTFN)) |
| 646 | self.assertEqual(realpath(ABSTFN+"1/../x"), dirname(ABSTFN) + "/x") |
| 647 | os.symlink(ABSTFN+"x", ABSTFN+"y") |
| 648 | self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "y"), |
| 649 | ABSTFN + "x") |
| 650 | self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "1"), |
| 651 | ABSTFN + "1") |
| 652 | |
| 653 | os.symlink(basename(ABSTFN) + "a/b", ABSTFN+"a") |
| 654 | self.assertEqual(realpath(ABSTFN+"a"), ABSTFN+"a/b") |
| 655 | |
| 656 | os.symlink("../" + basename(dirname(ABSTFN)) + "/" + |
| 657 | basename(ABSTFN) + "c", ABSTFN+"c") |
| 658 | self.assertEqual(realpath(ABSTFN+"c"), ABSTFN+"c") |
| 659 | |
| 660 | # Test using relative path as well. |
| 661 | with os_helper.change_cwd(dirname(ABSTFN)): |
| 662 | self.assertEqual(realpath(basename(ABSTFN)), ABSTFN) |
| 663 | finally: |
| 664 | os_helper.unlink(ABSTFN) |
| 665 | os_helper.unlink(ABSTFN+"1") |
| 666 | os_helper.unlink(ABSTFN+"2") |
| 667 | os_helper.unlink(ABSTFN+"y") |
| 668 | os_helper.unlink(ABSTFN+"c") |
| 669 | os_helper.unlink(ABSTFN+"a") |
| 670 | |
| 671 | @os_helper.skip_unless_symlink |
| 672 | @skip_if_ABSTFN_contains_backslash |
nothing calls this directly
no test coverage detected