Skip to content

Commit 9371670

Browse files
gpsheadclaude
andcommitted
Fix pathlib parent_mode tests for Android filesystem compatibility
Use st_mode & 0o777 masking instead of stat.S_IMODE() to ignore filesystem-specific bits like setgid, matching the approach used in os.makedirs tests. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 0a8c61e commit 9371670

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

Lib/test/test_pathlib/test_pathlib.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2503,9 +2503,9 @@ def test_mkdir_parents_umask(self):
25032503
p.mkdir(0o755, parents=True)
25042504
self.assertTrue(p.exists())
25052505
# Leaf directory gets the specified mode
2506-
self.assertEqual(stat.S_IMODE(p.stat().st_mode), 0o755)
2506+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
25072507
# Parent directory respects umask (0o777 & ~0o002 = 0o775)
2508-
self.assertEqual(stat.S_IMODE(p.parent.stat().st_mode), 0o775)
2508+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o775)
25092509
finally:
25102510
os.umask(old_mask)
25112511

@@ -2519,9 +2519,9 @@ def test_mkdir_with_parent_mode(self):
25192519
self.assertTrue(p.exists())
25202520
self.assertTrue(p.is_dir())
25212521
# Leaf directory gets the mode parameter
2522-
self.assertEqual(stat.S_IMODE(p.stat().st_mode), 0o755)
2522+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
25232523
# Parent directory gets the parent_mode parameter
2524-
self.assertEqual(stat.S_IMODE(p.parent.stat().st_mode), 0o750)
2524+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750)
25252525

25262526
def test_mkdir_parent_mode_deep_hierarchy(self):
25272527
# Test parent_mode with deep directory hierarchy
@@ -2533,10 +2533,10 @@ def test_mkdir_parent_mode_deep_hierarchy(self):
25332533
# Check that all parent directories have parent_mode
25342534
level1 = self.cls(self.base, 'level1PM')
25352535
level2 = level1 / 'level2PM'
2536-
self.assertEqual(stat.S_IMODE(level1.stat().st_mode), 0o700)
2537-
self.assertEqual(stat.S_IMODE(level2.stat().st_mode), 0o700)
2536+
self.assertEqual(level1.stat().st_mode & 0o777, 0o700)
2537+
self.assertEqual(level2.stat().st_mode & 0o777, 0o700)
25382538
# Leaf directory has the regular mode
2539-
self.assertEqual(stat.S_IMODE(p.stat().st_mode), 0o755)
2539+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
25402540

25412541
@unittest.skipIf(
25422542
is_emscripten or is_wasi,
@@ -2553,9 +2553,9 @@ def test_mkdir_parent_mode_overrides_umask(self):
25532553
p.mkdir(0o755, parents=True, parent_mode=0o700)
25542554
self.assertTrue(p.exists())
25552555
# Leaf directory gets the specified mode
2556-
self.assertEqual(stat.S_IMODE(p.stat().st_mode), 0o755)
2556+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
25572557
# Parent directory gets parent_mode, not affected by umask
2558-
self.assertEqual(stat.S_IMODE(p.parent.stat().st_mode), 0o700)
2558+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o700)
25592559
finally:
25602560
os.umask(old_mask)
25612561

@@ -2567,8 +2567,8 @@ def test_mkdir_parent_mode_same_as_mode(self):
25672567
p.mkdir(0o705, parents=True, parent_mode=0o705)
25682568
self.assertTrue(p.exists())
25692569
# Both directories should have the same mode
2570-
self.assertEqual(stat.S_IMODE(p.stat().st_mode), 0o705)
2571-
self.assertEqual(stat.S_IMODE(p.parent.stat().st_mode), 0o705)
2570+
self.assertEqual(p.stat().st_mode & 0o777, 0o705)
2571+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705)
25722572

25732573
@needs_symlinks
25742574
def test_symlink_to(self):

0 commit comments

Comments
 (0)