Skip to content

Commit c6f5fbf

Browse files
authored
Merge pull request #54 from cadenmyers13/tmpdir-build
test: temp dir fixture
2 parents 53318eb + 5ac0487 commit c6f5fbf

File tree

2 files changed

+93
-0
lines changed

2 files changed

+93
-0
lines changed

news/tmpdir-build.rst

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
**Added:**
2+
3+
* Add temp dir fixture for testing.
4+
5+
**Changed:**
6+
7+
* <news item>
8+
9+
**Deprecated:**
10+
11+
* <news item>
12+
13+
**Removed:**
14+
15+
* <news item>
16+
17+
**Fixed:**
18+
19+
* <news item>
20+
21+
**Security:**
22+
23+
* <news item>

tests/conftest.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
2696
def use_headless_matplotlib():
2797
"""Force matplotlib to use a headless backend during tests."""

0 commit comments

Comments
 (0)