@@ -22,6 +22,76 @@ def tmp_examples(tmp_path_factory):
2222 yield tmp_examples
2323
2424
25+ @pytest .fixture (scope = "session" )
26+ def example_cases (tmp_path_factory ):
27+ """Copy the entire examples tree into a temp directory once per test
28+ session.
29+
30+ Returns the path to that copy.
31+ """
32+ root_temp_dir = tmp_path_factory .mktemp ("temp" )
33+
34+ # case 1: pack with no examples
35+ case1ex_dir = root_temp_dir / "case1" / "docs" / "examples"
36+ case1 = case1ex_dir / "empty_pack" # empty_pack
37+ case1 .mkdir (parents = True , exist_ok = True )
38+ case1req_dir = root_temp_dir / "case1" / "requirements" / "packs"
39+ case1req_dir .mkdir (parents = True , exist_ok = True )
40+
41+ # Case 2: pack with multiple examples
42+ case2ex_dir = root_temp_dir / "case2" / "docs" / "examples"
43+ case2a = (
44+ case2ex_dir / "full_pack" / "ex1" / "solution" / "diffpy-cmi"
45+ ) # full_pack, ex1
46+ case2a .mkdir (parents = True , exist_ok = True )
47+ (case2a / "script1.py" ).touch ()
48+ case2b = (
49+ case2ex_dir / "full_pack" / "ex2" / "random" / "path"
50+ ) # full_pack, ex2
51+ case2b .mkdir (parents = True , exist_ok = True )
52+ (case2b / "script1.py" ).touch ()
53+ (case2b / "script2.py" ).touch ()
54+ case2req_dir = root_temp_dir / "case2" / "requirements" / "packs"
55+ case2req_dir .mkdir (parents = True , exist_ok = True )
56+
57+ # Case 3: multiple packs with multiple examples
58+ case3ex_dir = root_temp_dir / "case3" / "docs" / "examples"
59+ case3a = case3ex_dir / "packA" / "ex1" # packA, ex1
60+ case3a .mkdir (parents = True , exist_ok = True )
61+ (case3a / "script1.py" ).touch ()
62+ case3b = case3ex_dir / "packA" / "ex2" / "solutions" # packA, ex2
63+ case3b .mkdir (parents = True , exist_ok = True )
64+ (case3b / "script2.py" ).touch ()
65+ case3c = (
66+ case3ex_dir / "packB" / "ex3" / "more" / "random" / "path"
67+ ) # packB, ex3
68+ case3c .mkdir (parents = True , exist_ok = True )
69+ (case3c / "script3.py" ).touch ()
70+ (case3c / "script4.py" ).touch ()
71+ case3req_dir = root_temp_dir / "case3" / "requirements" / "packs"
72+ case3req_dir .mkdir (parents = True , exist_ok = True )
73+
74+ # Case 4: no pack found (empty directory)
75+ case4ex_dir = root_temp_dir / "case4" / "docs" / "examples"
76+ case4 = case4ex_dir
77+ case4 .mkdir (parents = True , exist_ok = True )
78+ case4req_dir = root_temp_dir / "case4" / "requirements" / "packs"
79+ case4req_dir .mkdir (parents = True , exist_ok = True )
80+
81+ # Case 5: multiple packs with the same example names
82+ case5ex_dir = root_temp_dir / "case5" / "docs" / "examples"
83+ case5a = case5ex_dir / "packA" / "ex1" / "path1" # packA, ex1
84+ case5a .mkdir (parents = True , exist_ok = True )
85+ (case5a / "script1.py" ).touch ()
86+ case5b = case5ex_dir / "packB" / "ex1" / "path2" # packB, ex1
87+ case5b .mkdir (parents = True , exist_ok = True )
88+ (case5b / "script2.py" ).touch ()
89+ case5req_dir = root_temp_dir / "case5" / "requirements" / "packs"
90+ case5req_dir .mkdir (parents = True , exist_ok = True )
91+
92+ yield root_temp_dir
93+
94+
2595@pytest .fixture (scope = "session" , autouse = True )
2696def use_headless_matplotlib ():
2797 """Force matplotlib to use a headless backend during tests."""
0 commit comments