b537c1f175
This is not a library, so there's no reason for them to be `pub`. Without doing this, compiling the test crates causes private dep lint errors: error: type `PathBuf` from private dependency 'std' in public interface --> library/std/tests/common/mod.rs:26:5 | 26 | pub fn join(&self, path: &str) -> PathBuf { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `-D exported-private-dependencies` implied by `-D warnings` error: type `Path` from private dependency 'std' in public interface --> library/std/tests/common/mod.rs:31:5 | 31 | pub fn path(&self) -> &Path { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: could not compile `std` (test "create_dir_all_bare") due to 2 previous errors This happens because Cargo passes `--extern 'priv:std=...` when compiling the test crate. I'm not sure if these warnings are desirable or not. They seem correct in a very pedantic way (the dependency on `std` is not marked public, since it's implicit), but also pointless (the test crate is not an API, so who cares what it does).
59 lines
1.7 KiB
Rust
59 lines
1.7 KiB
Rust
#![allow(unused)]
|
|
|
|
use std::env;
|
|
use std::fs;
|
|
use std::path::{Path, PathBuf};
|
|
use std::thread;
|
|
use rand::RngCore;
|
|
|
|
/// Copied from `std::test_helpers::test_rng`, since these tests rely on the
|
|
/// seed not being the same for every RNG invocation too.
|
|
#[track_caller]
|
|
pub(crate) fn test_rng() -> rand_xorshift::XorShiftRng {
|
|
use core::hash::{BuildHasher, Hash, Hasher};
|
|
let mut hasher = std::collections::hash_map::RandomState::new().build_hasher();
|
|
core::panic::Location::caller().hash(&mut hasher);
|
|
let hc64 = hasher.finish();
|
|
let seed_vec = hc64.to_le_bytes().into_iter().chain(0u8..8).collect::<Vec<u8>>();
|
|
let seed: [u8; 16] = seed_vec.as_slice().try_into().unwrap();
|
|
rand::SeedableRng::from_seed(seed)
|
|
}
|
|
|
|
// Copied from std::sys_common::io
|
|
pub(crate) struct TempDir(PathBuf);
|
|
|
|
impl TempDir {
|
|
pub(crate) fn join(&self, path: &str) -> PathBuf {
|
|
let TempDir(ref p) = *self;
|
|
p.join(path)
|
|
}
|
|
|
|
pub(crate) fn path(&self) -> &Path {
|
|
let TempDir(ref p) = *self;
|
|
p
|
|
}
|
|
}
|
|
|
|
impl Drop for TempDir {
|
|
fn drop(&mut self) {
|
|
// Gee, seeing how we're testing the fs module I sure hope that we
|
|
// at least implement this correctly!
|
|
let TempDir(ref p) = *self;
|
|
let result = fs::remove_dir_all(p);
|
|
// Avoid panicking while panicking as this causes the process to
|
|
// immediately abort, without displaying test results.
|
|
if !thread::panicking() {
|
|
result.unwrap();
|
|
}
|
|
}
|
|
}
|
|
|
|
#[track_caller] // for `test_rng`
|
|
pub(crate) fn tmpdir() -> TempDir {
|
|
let p = env::temp_dir();
|
|
let mut r = test_rng();
|
|
let ret = p.join(&format!("rust-{}", r.next_u32()));
|
|
fs::create_dir(&ret).unwrap();
|
|
TempDir(ret)
|
|
}
|