cargo_test_support

Struct Project

source
pub struct Project {
    pub(crate) root: PathBuf,
}
Expand description

A cargo project to run tests against.

See ProjectBuilder or Project::from_template to get started.

Fields§

§root: PathBuf

Implementations§

source§

impl Project

source

pub fn from_template(template_path: impl AsRef<Path>) -> Self

Copy the test project from a fixed state

source

pub fn root(&self) -> PathBuf

Root of the project

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo

source

pub fn build_dir(&self) -> PathBuf

Project’s target dir

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target

source

pub fn target_debug_dir(&self) -> PathBuf

Project’s debug dir

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target/debug

source

pub fn url(&self) -> Url

File url for root

ex: file://$CARGO_TARGET_TMPDIR/cit/t0/foo

source

pub fn example_lib(&self, name: &str, kind: &str) -> PathBuf

Path to an example built as a library.

kind should be one of: “lib”, “rlib”, “staticlib”, “dylib”, “proc-macro”

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target/debug/examples/libex.rlib

source

pub fn bin(&self, b: &str) -> PathBuf

Path to a debug binary.

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target/debug/foo

source

pub fn release_bin(&self, b: &str) -> PathBuf

Path to a release binary.

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target/release/foo

source

pub fn target_bin(&self, target: &str, b: &str) -> PathBuf

Path to a debug binary for a specific target triple.

ex: $CARGO_TARGET_TMPDIR/cit/t0/foo/target/i686-apple-darwin/debug/foo

source

pub fn glob<P: AsRef<Path>>(&self, pattern: P) -> Paths

Returns an iterator of paths within Project::root matching the glob pattern

source

pub fn change_file(&self, path: &str, body: &str)

Overwrite a file with new content

p.change_file("src/lib.rs", "fn new_fn() {}");
source

pub fn process<T: AsRef<OsStr>>(&self, program: T) -> Execs

Creates a ProcessBuilder to run a program in the project and wrap it in an Execs to assert on the execution.

§Example:
p.process(&p.bin("foo"))
    .with_stdout_data(str!["bar\n"])
    .run();
source

pub fn cargo(&self, cmd: &str) -> Execs

Creates a ProcessBuilder to run cargo.

Arguments can be separated by spaces.

For cargo run, see Project::rename_run.

§Example:
p.cargo("build --bin foo").run();
source

pub fn rename_run(&self, src: &str, dst: &str) -> Execs

Safely run a process after cargo build.

Windows has a problem where a process cannot be reliably be replaced, removed, or renamed immediately after executing it. The action may fail (with errors like Access is denied), or it may succeed, but future attempts to use the same filename will fail with “Already Exists”.

If you have a test that needs to do cargo run multiple times, you should instead use cargo build and use this method to run the executable. Each time you call this, use a new name for dst. See rust-lang/cargo#5481.

source

pub fn read_lockfile(&self) -> String

Returns the contents of Cargo.lock.

source

pub fn read_file(&self, path: &str) -> String

Returns the contents of a path in the project root

source

pub fn uncomment_root_manifest(&self)

Modifies Cargo.toml to remove all commented lines.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 24 bytes