changeset 272:b4137ebd8e79

Unittests for WalkDirEntry: is_dir, is_symlink and basic stat
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 18 Feb 2025 19:30:40 +0100
parents 6fe88de236cb
children c02a57df2a29
files tests/test_walk.py
diffstat 1 files changed, 57 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test_walk.py	Tue Feb 18 18:24:16 2025 +0100
+++ b/tests/test_walk.py	Tue Feb 18 19:30:40 2025 +0100
@@ -5,10 +5,11 @@
 
 from __future__ import absolute_import, print_function
 
+import os
 import sys
 import unittest
 
-import _test_setup    # noqa: F401 imported but unused
+from _test_setup import DATADIR
 
 from cutils.util import walk
 
@@ -196,5 +197,60 @@
         self.assertEqual(b"tests\\xc5/test", entry.alt_u8path)
 
 
+# https://stackoverflow.com/questions/1854/how-to-identify-which-os-python-is-running-on/58071295#58071295
+@unittest.skipIf(
+    os.name != "posix", "Only supported on POSIX (needs real symlinks)")
+class SymlinkTests(unittest.TestCase):
+
+    def test_symlink_to_directory(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            DATADIR, "tree-1-s")
+        self.assertTrue(entry.is_symlink)
+        self.assertTrue(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_broken_symlink_to_directory(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            DATADIR, "tree-nn-s")
+        self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNone(entry.stat)
+
+    def test_real_directory(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            DATADIR, "tree-1")
+        self.assertFalse(entry.is_symlink)
+        self.assertTrue(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_symlink_to_file(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            os.path.join(DATADIR, "tree-1"), "file-1-1-s.txt")
+        self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_broken_symlink_to_file(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            os.path.join(DATADIR, "tree-1"), "file-1-nn-s.txt")
+        self.assertTrue(entry.is_symlink)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNone(entry.stat)
+
+    def test_real_file(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            os.path.join(DATADIR, "tree-1"), "file-1-1.txt")
+        self.assertFalse(entry.is_symlink)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+    def test_real_file_via_dir_symlink(self):
+        entry = walk.WalkDirEntry.from_path_name(
+            os.path.join(DATADIR, "tree-1-s"), "file-1-1.txt")
+        self.assertFalse(entry.is_symlink)
+        self.assertFalse(entry.is_dir)
+        self.assertIsNotNone(entry.stat)
+
+
 if __name__ == "__main__":
     sys.exit(unittest.main())