@@ -22,6 +22,76 @@ def tmp_examples(tmp_path_factory):
22
22
yield tmp_examples
23
23
24
24
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
+
25
95
@pytest .fixture (scope = "session" , autouse = True )
26
96
def use_headless_matplotlib ():
27
97
"""Force matplotlib to use a headless backend during tests."""
0 commit comments