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`.
23//!
34//! `#![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}`.
5+ //! items. All tests and benchmarks must be written externally in
6+ //! `{coretests,alloctests}/{tests,benches}`.
57//!
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.
911
1012use std:: path:: Path ;
1113
@@ -14,40 +16,53 @@ use crate::walk::{filter_dirs, walk};
1416pub fn check ( root_path : & Path , bad : & mut bool ) {
1517 let core = root_path. join ( "core" ) ;
1618 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) ;
2323
2424 let skip = move |path : & Path , is_dir| {
2525 let file_name = path. file_name ( ) . unwrap_or_default ( ) ;
2626 if is_dir {
2727 filter_dirs ( path)
2828 || 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)
3032 } else {
3133 let extension = path. extension ( ) . unwrap_or_default ( ) ;
3234 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" )
3748 }
3849 } ;
3950
4051 walk ( root_path, skip, & mut |entry, contents| {
4152 let path = entry. path ( ) ;
4253 let is_core = path. starts_with ( & core_copy) ;
54+ let is_alloc = path. starts_with ( & alloc_copy) ;
4355 for ( i, line) in contents. lines ( ) . enumerate ( ) {
4456 let line = line. trim ( ) ;
4557 let is_test = || line. contains ( "#[test]" ) && !line. contains ( "`#[test]" ) ;
4658 let is_bench = || line. contains ( "#[bench]" ) && !line. contains ( "`#[bench]" ) ;
4759 if !line. starts_with ( "//" ) && ( is_test ( ) || is_bench ( ) ) {
4860 let explanation = if is_core {
4961 "core unit tests and benchmarks must be placed into \
50- `core/tests` or `core/benches`"
62+ `coretests/tests` or `coretests/benches`"
63+ } else if is_alloc {
64+ "alloc unit tests and benchmarks must be placed into \
65+ `alloctests/tests` or `alloctests/benches`"
5166 } else {
5267 "unit tests and benchmarks must be placed into \
5368 separate files or directories named \
0 commit comments