cargo/tests/test_cargo_package.rs

158 lines
4.7 KiB
Rust
Raw Normal View History

2014-09-09 02:38:16 +00:00
use std::io::{File, MemReader};
2014-09-09 14:23:09 +00:00
use tar::Archive;
use flate2::reader::GzDecoder;
2014-09-09 02:38:16 +00:00
use support::{project, execs, cargo_dir, ResultTest};
2014-11-22 10:04:40 +00:00
use support::{PACKAGING, VERIFYING, COMPILING};
use hamcrest::{assert_that, existing_file};
fn setup() {
}
test!(simple {
let p = project("foo")
.file("Cargo.toml", r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
2014-09-09 02:38:16 +00:00
exclude = ["*.txt"]
license = "MIT"
description = "foo"
"#)
.file("src/main.rs", r#"
fn main() { println!("hello"); }
2014-09-09 02:38:16 +00:00
"#)
.file("src/bar.txt", ""); // should be ignored when packaging
assert_that(p.cargo_process("package"),
execs().with_status(0).with_stdout(format!("\
{packaging} foo v0.0.1 ({dir})
{verifying} foo v0.0.1 ({dir})
{compiling} foo v0.0.1 ({dir}[..])
",
packaging = PACKAGING,
verifying = VERIFYING,
compiling = COMPILING,
dir = p.url()).as_slice()));
assert_that(&p.root().join("target/package/foo-0.0.1.crate"), existing_file());
assert_that(p.process(cargo_dir().join("cargo")).arg("package").arg("-l"),
execs().with_status(0).with_stdout("\
Cargo.toml
src[..]main.rs
"));
2014-09-09 02:38:16 +00:00
assert_that(p.process(cargo_dir().join("cargo")).arg("package"),
execs().with_status(0).with_stdout(""));
let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).assert();
2014-09-09 14:23:09 +00:00
let mut rdr = GzDecoder::new(f);
2014-09-09 02:38:16 +00:00
let contents = rdr.read_to_end().assert();
2014-09-09 14:23:09 +00:00
let ar = Archive::new(MemReader::new(contents));
2014-09-09 02:38:16 +00:00
for f in ar.files().assert() {
let f = f.assert();
2014-09-09 19:35:31 +00:00
let fname = f.filename_bytes();
2014-11-19 06:29:19 +00:00
assert!(fname == b"foo-0.0.1/Cargo.toml" ||
fname == b"foo-0.0.1/src/main.rs",
2014-09-09 19:35:31 +00:00
"unexpected filename: {}", f.filename())
2014-09-09 02:38:16 +00:00
}
})
test!(metadata_warning {
let p = project("all")
.file("Cargo.toml", r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
"#)
.file("src/main.rs", r#"
fn main() {}
"#);
assert_that(p.cargo_process("package"),
execs().with_status(0).with_stdout(format!("\
{packaging} foo v0.0.1 ({dir})
{verifying} foo v0.0.1 ({dir})
{compiling} foo v0.0.1 ({dir}[..])
",
packaging = PACKAGING,
verifying = VERIFYING,
compiling = COMPILING,
dir = p.url()).as_slice())
.with_stderr("Warning: manifest has no description or license. See \
http://doc.crates.io/manifest.html#package-metadata for more info."));
let p = project("one")
.file("Cargo.toml", r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
license = "MIT"
"#)
.file("src/main.rs", r#"
fn main() {}
"#);
assert_that(p.cargo_process("package"),
execs().with_status(0).with_stdout(format!("\
{packaging} foo v0.0.1 ({dir})
{verifying} foo v0.0.1 ({dir})
{compiling} foo v0.0.1 ({dir}[..])
",
packaging = PACKAGING,
verifying = VERIFYING,
compiling = COMPILING,
dir = p.url()).as_slice())
.with_stderr("Warning: manifest has no description. See \
http://doc.crates.io/manifest.html#package-metadata for more info."));
let p = project("both")
.file("Cargo.toml", format!(r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
license = "MIT"
description = "foo"
"#))
.file("src/main.rs", r#"
fn main() {}
"#);
assert_that(p.cargo_process("package"),
execs().with_status(0).with_stdout(format!("\
{packaging} foo v0.0.1 ({dir})
{verifying} foo v0.0.1 ({dir})
{compiling} foo v0.0.1 ({dir}[..])
",
packaging = PACKAGING,
verifying = VERIFYING,
compiling = COMPILING,
dir = p.url()).as_slice()));
})
test!(package_verification {
let p = project("all")
.file("Cargo.toml", r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
"#)
.file("src/main.rs", r#"
fn main() {}
"#);
assert_that(p.cargo_process("build"),
execs().with_status(0));
assert_that(p.process(cargo_dir().join("cargo")).arg("package"),
execs().with_status(0).with_stdout(format!("\
{packaging} foo v0.0.1 ({dir})
{verifying} foo v0.0.1 ({dir})
{compiling} foo v0.0.1 ({dir}[..])
",
packaging = PACKAGING,
verifying = VERIFYING,
compiling = COMPILING,
dir = p.url()).as_slice()));
})