]> git.proxmox.com Git - rustc.git/blob - src/tools/tidy/src/libcoretest.rs
New upstream version 1.28.0~beta.14+dfsg1
[rustc.git] / src / tools / tidy / src / libcoretest.rs
1 // Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 //! Tidy check to ensure `#[test]` is not used directly inside `libcore`.
12 //!
13 //! `#![no_core]` libraries cannot be tested directly due to duplicating lang
14 //! item. All tests must be written externally in `libcore/tests`.
15
16 use std::path::Path;
17 use std::fs::read_to_string;
18
19 pub fn check(path: &Path, bad: &mut bool) {
20 let libcore_path = path.join("libcore");
21 super::walk(
22 &libcore_path,
23 &mut |subpath| t!(subpath.strip_prefix(&libcore_path)).starts_with("tests"),
24 &mut |subpath| {
25 if let Some("rs") = subpath.extension().and_then(|e| e.to_str()) {
26 match read_to_string(subpath) {
27 Ok(contents) => {
28 if contents.contains("#[test]") {
29 tidy_error!(
30 bad,
31 "{} contains #[test]; libcore tests must be placed inside \
32 `src/libcore/tests/`",
33 subpath.display()
34 );
35 }
36 }
37 Err(err) => {
38 panic!("failed to read file {:?}: {}", subpath, err);
39 }
40 }
41 }
42 },
43 );
44 }