cargo/tests/testsuite/cross_publish.rs
Zach Lute 89f43938fe Print file paths instead of file:// URLs.
This change ensures cargo will output file paths in the expected format
(C:\foo\... on Windows, /foo/... elsewhere). Previously it would output
file:// URLs instead.

To support this change, additional changes were made to the test suite
string processing such that [ROOT] is now replaced with the appropriate
file path root for the platform.

The CWD template was also updated to use [CWD] like other replacement
templates and to do the replacement on the expected value rather than
the actual value to avoid replacing things we don't expect with CWD.
2018-09-07 19:42:59 -07:00

117 lines
3.0 KiB
Rust

use std::fs::File;
use std::io::prelude::*;
use std::path::PathBuf;
use flate2::read::GzDecoder;
use support::{cross_compile, project, publish};
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();
p.cargo("package --target")
.arg(&target)
.with_stderr(
" Packaging foo v0.0.0 ([CWD])
Verifying foo v0.0.0 ([CWD])
Compiling foo v0.0.0 ([CWD]/target/package/foo-0.0.0)
Finished dev [unoptimized + debuginfo] target(s) in [..]
",
).run();
// 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!(entry_paths.contains(&PathBuf::from("foo-0.0.0/Cargo.toml")));
assert!(entry_paths.contains(&PathBuf::from("foo-0.0.0/Cargo.toml.orig")));
assert!(entry_paths.contains(&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();
p.cargo("publish --index")
.arg(publish::registry().to_string())
.arg("--target")
.arg(&target)
.with_stderr(&format!(
" Updating registry `{registry}`
Packaging foo v0.0.0 ([CWD])
Verifying foo v0.0.0 ([CWD])
Compiling foo v0.0.0 ([CWD]/target/package/foo-0.0.0)
Finished dev [unoptimized + debuginfo] target(s) in [..]
Uploading foo v0.0.0 ([CWD])
",
registry = publish::registry()
)).run();
}