1
- //! Tidy check to ensure `#[test]` and `#[bench]` are not used directly inside `core`.
1
+ //! Tidy check to ensure `#[test]` and `#[bench]` are not used directly inside
2
+ //! `core` or `alloc`.
2
3
//!
3
- //! `#![no_core]` libraries cannot be tested directly due to duplicating lang
4
- //! items. All tests and benchmarks must be written externally in `core/{tests,benches}`.
4
+ //! `core` and `alloc` cannot be tested directly due to duplicating lang items.
5
+ //! All tests and benchmarks must be written externally in
6
+ //! `{coretests,alloctests}/{tests,benches}`.
5
7
//!
6
- //! Outside of core tests and benchmarks should be outlined into separate files
7
- //! named `tests.rs` or `benches.rs`, or directories named `tests` or `benches` unconfigured
8
- //! during normal build.
8
+ //! Outside of ` core` and `alloc`, tests and benchmarks should be outlined into
9
+ //! separate files named `tests.rs` or `benches.rs`, or directories named
10
+ //! `tests` or `benches` unconfigured during normal build.
9
11
10
12
use std::path::Path;
11
13
@@ -14,40 +16,51 @@ use crate::walk::{filter_dirs, walk};
14
16
pub fn check(root_path: &Path, bad: &mut bool) {
15
17
let core = root_path.join("core");
16
18
let core_copy = core.clone();
17
- let core_tests = core.join("tests");
18
- let core_benches = core.join("benches");
19
- let is_core = move |path: &Path| {
20
- path.starts_with(&core)
21
- && !(path.starts_with(&core_tests) || path.starts_with(&core_benches))
22
- };
19
+ let is_core = move |path: &Path| path.starts_with(&core);
20
+ let alloc = root_path.join("alloc");
21
+ let alloc_copy = alloc.clone();
22
+ let is_alloc = move |path: &Path| path.starts_with(&alloc);
23
23
24
24
let skip = move |path: &Path, is_dir| {
25
25
let file_name = path.file_name().unwrap_or_default();
26
26
if is_dir {
27
27
filter_dirs(path)
28
28
|| path.ends_with("src/doc")
29
- || (file_name == "tests" || file_name == "benches") && !is_core(path)
29
+ || (file_name == "tests" || file_name == "benches")
30
+ && !is_core(path)
31
+ && !is_alloc(path)
30
32
} else {
31
33
let extension = path.extension().unwrap_or_default();
32
34
extension != "rs"
33
- || (file_name == "tests.rs" || file_name == "benches.rs") && !is_core(path)
34
- // UI tests with different names
35
- || path.ends_with("src/thread/local/dynamic_tests.rs")
36
- || path.ends_with("src/sync/mpsc/sync_tests.rs")
35
+ || (file_name == "tests.rs" || file_name == "benches.rs")
36
+ && !is_core(path)
37
+ && !is_alloc(path)
38
+ // Tests which use non-public internals and, as such, need to
39
+ // have the types in the same crate as the tests themselves. See
40
+ // the comment in alloctests/lib.rs.
41
+ || path.ends_with("library/alloc/src/collections/btree/borrow/tests.rs")
42
+ || path.ends_with("library/alloc/src/collections/btree/map/tests.rs")
43
+ || path.ends_with("library/alloc/src/collections/btree/node/tests.rs")
44
+ || path.ends_with("library/alloc/src/collections/btree/set/tests.rs")
45
+ || path.ends_with("library/alloc/src/collections/linked_list/tests.rs")
46
+ || path.ends_with("library/alloc/src/collections/vec_deque/tests.rs")
47
+ || path.ends_with("library/alloc/src/raw_vec/tests.rs")
37
48
}
38
49
};
39
50
40
51
walk(root_path, skip, &mut |entry, contents| {
41
52
let path = entry.path();
42
53
let is_core = path.starts_with(&core_copy);
54
+ let is_alloc = path.starts_with(&alloc_copy);
43
55
for (i, line) in contents.lines().enumerate() {
44
56
let line = line.trim();
45
57
let is_test = || line.contains("#[test]") && !line.contains("`#[test]");
46
58
let is_bench = || line.contains("#[bench]") && !line.contains("`#[bench]");
47
59
if !line.starts_with("//") && (is_test() || is_bench()) {
48
60
let explanation = if is_core {
49
- "core unit tests and benchmarks must be placed into \
50
- `core/tests` or `core/benches`"
61
+ "`core` unit tests and benchmarks must be placed into `coretests`"
62
+ } else if is_alloc {
63
+ "`alloc` unit tests and benchmarks must be placed into `alloctests`"
51
64
} else {
52
65
"unit tests and benchmarks must be placed into \
53
66
separate files or directories named \
0 commit comments