return paths[0]
elif paths:
# Join path segments from the initializer.
- path = self.parser.join(*paths)
- # Cache the joined path.
- paths.clear()
- paths.append(path)
- return path
+ return self.parser.join(*paths)
else:
- paths.append('')
return ''
@property
"""
import unittest
+import threading
+from test.support import threading_helper
from .support import is_pypi
from .support.lexical_path import LexicalPath
parts = p.parts
self.assertEqual(parts, (sep, 'a', 'b'))
+ @threading_helper.requires_working_threading()
+ def test_parts_multithreaded(self):
+ P = self.cls
+
+ NUM_THREADS = 10
+ NUM_ITERS = 10
+
+ for _ in range(NUM_ITERS):
+ b = threading.Barrier(NUM_THREADS)
+ path = P('a') / 'b' / 'c' / 'd' / 'e'
+ expected = ('a', 'b', 'c', 'd', 'e')
+
+ def check_parts():
+ b.wait()
+ self.assertEqual(path.parts, expected)
+
+ threads = [threading.Thread(target=check_parts) for _ in range(NUM_THREADS)]
+ with threading_helper.start_threads(threads):
+ pass
+
def test_parent(self):
# Relative
P = self.cls