# 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 dylib(&self, name: &str) -> PathBuf

Path to a dynamic library. ex: `/path/to/cargo/target/cit/t0/foo/target/debug/examples/libex.dylib`

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: impl AsRef<Path>, 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: impl AsRef<Path>) -> 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.

Source

#### pub fn symlink(&self, src: impl AsRef<Path>, dst: impl AsRef<Path>)

## Auto Trait Implementations§

§

### impl Freeze for Project

§

### impl RefUnwindSafe for Project

§

### impl Send for Project

§

### impl Sync for Project

§

### impl Unpin for Project

§

### impl UnwindSafe for Project

## 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.

Source§

### impl<T> IntoEither for T

Source§

#### fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts `self` into a `Left` variant of `Either<Self, Self>` if `into_left` is `true`. Converts `self` into a `Right` variant of `Either<Self, Self>` otherwise. Read more
Source§

#### fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts `self` into a `Left` variant of `Either<Self, Self>` if `into_left(&self)` returns `true`. Converts `self` into a `Right` variant of `Either<Self, Self>` otherwise. Read more
§

### 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
§

### impl<T> ErasedDestructor for T
where T: 'static,

## 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