mirror of
https://github.com/rust-lang/cargo
synced 2024-11-05 18:50:39 +00:00
7fe2fbc8a3
By rewriting the tests, with rerast (https://github.com/google/rerast), to use the newly introduced "at" method. First I added the following temporary function to cargotest::support: pub fn project_foo() -> ProjectBuilder { project("foo") } Then I defined the following rewrite.rs: use cargotest::support::{ project, project_foo }; fn rule1(a: &'static str) { replace!(project("foo") => project_foo()); replace!(project(a) => project_foo().at(a)); } Then I ran rerast: cargo +nightly rerast --rules_file=rewrite.rs --force --targets tests --file tests/testsuite/main.rs Finally I searched and replaced the references to project_foo with argument-less project (a little awkardly on macOS with a git clean). find tests -type f -exec sed -i -e 's/project_foo/project/g' {} + git clean -d tests
136 lines
3.4 KiB
Rust
136 lines
3.4 KiB
Rust
use std::fs::File;
|
|
use std::path::PathBuf;
|
|
use std::io::prelude::*;
|
|
|
|
use cargotest::support::{cross_compile, execs, project, publish};
|
|
use hamcrest::{assert_that, contains};
|
|
use flate2::read::GzDecoder;
|
|
use tar::Archive;
|
|
|
|
#[test]
|
|
fn simple_cross_package() {
|
|
if cross_compile::disabled() {
|
|
return;
|
|
}
|
|
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.0"
|
|
authors = []
|
|
license = "MIT"
|
|
description = "foo"
|
|
repository = "bar"
|
|
"#,
|
|
)
|
|
.file(
|
|
"src/main.rs",
|
|
&format!(
|
|
r#"
|
|
use std::env;
|
|
fn main() {{
|
|
assert_eq!(env::consts::ARCH, "{}");
|
|
}}
|
|
"#,
|
|
cross_compile::alternate_arch()
|
|
),
|
|
)
|
|
.build();
|
|
|
|
let target = cross_compile::alternate();
|
|
|
|
assert_that(
|
|
p.cargo("package").arg("--target").arg(&target),
|
|
execs().with_status(0).with_status(0).with_stderr(&format!(
|
|
" Packaging foo v0.0.0 ({dir})
|
|
Verifying foo v0.0.0 ({dir})
|
|
Compiling foo v0.0.0 ({dir}/target/package/foo-0.0.0)
|
|
Finished dev [unoptimized + debuginfo] target(s) in [..]
|
|
",
|
|
dir = p.url()
|
|
)),
|
|
);
|
|
|
|
// Check that the tarball contains the files
|
|
let f = File::open(&p.root().join("target/package/foo-0.0.0.crate")).unwrap();
|
|
let mut rdr = GzDecoder::new(f);
|
|
let mut contents = Vec::new();
|
|
rdr.read_to_end(&mut contents).unwrap();
|
|
let mut ar = Archive::new(&contents[..]);
|
|
let entries = ar.entries().unwrap();
|
|
let entry_paths = entries
|
|
.map(|entry| entry.unwrap().path().unwrap().into_owned())
|
|
.collect::<Vec<PathBuf>>();
|
|
assert_that(
|
|
&entry_paths,
|
|
contains(vec![PathBuf::from("foo-0.0.0/Cargo.toml")]),
|
|
);
|
|
assert_that(
|
|
&entry_paths,
|
|
contains(vec![PathBuf::from("foo-0.0.0/Cargo.toml.orig")]),
|
|
);
|
|
assert_that(
|
|
&entry_paths,
|
|
contains(vec![PathBuf::from("foo-0.0.0/src/main.rs")]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn publish_with_target() {
|
|
if cross_compile::disabled() {
|
|
return;
|
|
}
|
|
|
|
publish::setup();
|
|
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.0"
|
|
authors = []
|
|
license = "MIT"
|
|
description = "foo"
|
|
repository = "bar"
|
|
"#,
|
|
)
|
|
.file(
|
|
"src/main.rs",
|
|
&format!(
|
|
r#"
|
|
use std::env;
|
|
fn main() {{
|
|
assert_eq!(env::consts::ARCH, "{}");
|
|
}}
|
|
"#,
|
|
cross_compile::alternate_arch()
|
|
),
|
|
)
|
|
.build();
|
|
|
|
let target = cross_compile::alternate();
|
|
|
|
assert_that(
|
|
p.cargo("publish")
|
|
.arg("--index")
|
|
.arg(publish::registry().to_string())
|
|
.arg("--target")
|
|
.arg(&target),
|
|
execs().with_status(0).with_stderr(&format!(
|
|
" Updating registry `{registry}`
|
|
Packaging foo v0.0.0 ({dir})
|
|
Verifying foo v0.0.0 ({dir})
|
|
Compiling foo v0.0.0 ({dir}/target/package/foo-0.0.0)
|
|
Finished dev [unoptimized + debuginfo] target(s) in [..]
|
|
Uploading foo v0.0.0 ({dir})
|
|
",
|
|
dir = p.url(),
|
|
registry = publish::registry()
|
|
)),
|
|
);
|
|
}
|