cargo/tests/testsuite/rename_deps.rs

466 lines
11 KiB
Rust
Raw Normal View History

use support::git;
use support::paths;
use support::registry::Package;
2018-07-24 22:35:01 +00:00
use support::{basic_manifest, execs, project};
use support::hamcrest::assert_that;
#[test]
fn gated() {
let p = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
bar = { package = "foo", version = "0.1" }
2018-03-14 15:17:44 +00:00
"#,
)
.file("src/lib.rs", "")
.build();
2018-03-14 15:17:44 +00:00
assert_that(
p.cargo("build").masquerade_as_nightly_cargo(),
execs().with_status(101).with_stderr(
"\
error: failed to parse manifest at `[..]`
Caused by:
feature `rename-dependency` is required
consider adding `cargo-features = [\"rename-dependency\"]` to the manifest
2018-03-14 15:17:44 +00:00
",
),
);
let p = project().at("bar")
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
bar = { version = "0.1", package = "baz" }
2018-03-14 15:17:44 +00:00
"#,
)
.file("src/lib.rs", "")
.build();
2018-03-14 15:17:44 +00:00
assert_that(
p.cargo("build").masquerade_as_nightly_cargo(),
execs().with_status(101).with_stderr(
"\
error: failed to parse manifest at `[..]`
Caused by:
feature `rename-dependency` is required
consider adding `cargo-features = [\"rename-dependency\"]` to the manifest
2018-03-14 15:17:44 +00:00
",
),
);
}
#[test]
fn rename_dependency() {
Package::new("bar", "0.1.0").publish();
Package::new("bar", "0.2.0").publish();
let p = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[project]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
bar = { version = "0.1.0" }
baz = { version = "0.2.0", package = "bar" }
2018-03-14 15:17:44 +00:00
"#,
)
.file("src/lib.rs", "extern crate bar; extern crate baz;")
.build();
2018-03-14 15:17:44 +00:00
assert_that(
p.cargo("build").masquerade_as_nightly_cargo(),
execs(),
2018-03-14 15:17:44 +00:00
);
}
#[test]
fn rename_with_different_names() {
let p = project()
2018-03-14 15:17:44 +00:00
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[project]
name = "foo"
version = "0.0.1"
authors = []
[dependencies]
baz = { path = "bar", package = "bar" }
2018-03-14 15:17:44 +00:00
"#,
)
.file("src/lib.rs", "extern crate baz;")
2018-03-14 15:17:44 +00:00
.file(
"bar/Cargo.toml",
r#"
[project]
name = "bar"
version = "0.0.1"
authors = []
[lib]
name = "random_name"
2018-03-14 15:17:44 +00:00
"#,
)
.file("bar/src/lib.rs", "")
.build();
2018-03-14 15:17:44 +00:00
assert_that(
p.cargo("build").masquerade_as_nightly_cargo(),
execs(),
2018-03-14 15:17:44 +00:00
);
}
#[test]
fn lots_of_names() {
Package::new("foo", "0.1.0")
.file("src/lib.rs", "pub fn foo1() {}")
.publish();
Package::new("foo", "0.2.0")
.file("src/lib.rs", "pub fn foo() {}")
.publish();
Package::new("foo", "0.1.0")
.file("src/lib.rs", "pub fn foo2() {}")
.alternative(true)
.publish();
let g = git::repo(&paths::root().join("another"))
2018-07-24 22:35:01 +00:00
.file("Cargo.toml", &basic_manifest("foo", "0.1.0"))
.file("src/lib.rs", "pub fn foo3() {}")
.build();
let p = project()
.file(
"Cargo.toml",
&format!(r#"
cargo-features = ["alternative-registries", "rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
foo = "0.2"
foo1 = {{ version = "0.1", package = "foo" }}
foo2 = {{ version = "0.1", registry = "alternative", package = "foo" }}
foo3 = {{ git = '{}', package = "foo" }}
foo4 = {{ path = "foo", package = "foo" }}
"#,
g.url())
)
.file(
"src/lib.rs",
"
extern crate foo;
extern crate foo1;
extern crate foo2;
extern crate foo3;
extern crate foo4;
pub fn foo() {
foo::foo();
foo1::foo1();
foo2::foo2();
foo3::foo3();
foo4::foo4();
}
",
)
2018-07-24 22:35:01 +00:00
.file("foo/Cargo.toml", &basic_manifest("foo", "0.1.0"))
.file("foo/src/lib.rs", "pub fn foo4() {}")
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs(),
);
}
#[test]
fn rename_and_patch() {
Package::new("foo", "0.1.0").publish();
let p = project()
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
bar = { version = "0.1", package = "foo" }
[patch.crates-io]
foo = { path = "foo" }
"#,
)
.file("src/lib.rs", "extern crate bar; pub fn foo() { bar::foo(); }")
2018-07-24 22:35:01 +00:00
.file("foo/Cargo.toml", &basic_manifest("foo", "0.1.0"))
.file("foo/src/lib.rs", "pub fn foo() {}")
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs(),
);
}
#[test]
fn rename_twice() {
Package::new("foo", "0.1.0").publish();
let p = project()
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
bar = { version = "0.1", package = "foo" }
[build-dependencies]
foo = { version = "0.1" }
"#,
)
.file("src/lib.rs", "",)
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs().with_status(101)
.with_stderr("\
[UPDATING] registry `[..]`
[DOWNLOADING] foo v0.1.0 (registry [..])
error: multiple dependencies listed for the same crate must all have the same \
name, but the dependency on `foo v0.1.0` is listed as having different names
")
);
}
2018-04-28 10:35:49 +00:00
#[test]
fn rename_affects_fingerprint() {
Package::new("foo", "0.1.0").publish();
let p = project()
2018-04-28 10:35:49 +00:00
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
foo = { version = "0.1", package = "foo" }
"#,
)
.file("src/lib.rs", "extern crate foo;")
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs(),
2018-04-28 10:35:49 +00:00
);
p.change_file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
bar = { version = "0.1", package = "foo" }
"#,
);
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs().with_status(101),
);
}
#[test]
fn can_run_doc_tests() {
Package::new("bar", "0.1.0").publish();
Package::new("bar", "0.2.0").publish();
let foo = project()
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[project]
name = "foo"
version = "0.0.1"
[dependencies]
bar = { version = "0.1.0" }
baz = { version = "0.2.0", package = "bar" }
"#,
)
.file(
"src/lib.rs",
"
extern crate bar;
extern crate baz;
",
)
.build();
assert_that(
foo.cargo("test -v").masquerade_as_nightly_cargo(),
execs().with_stderr_contains(format!(
"\
[DOCTEST] foo
2018-08-02 09:18:48 +00:00
[RUNNING] `rustdoc --test {dir}/src/lib.rs \
[..] \
2018-08-02 09:18:48 +00:00
--extern baz={dir}/target/debug/deps/libbar-[..].rlib \
--extern bar={dir}/target/debug/deps/libbar-[..].rlib \
[..]`
",
dir = foo.root().display(),
)),
);
}
#[test]
fn features_still_work() {
Package::new("foo", "0.1.0").publish();
Package::new("bar", "0.1.0").publish();
let p = project()
.file(
"Cargo.toml",
r#"
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
p1 = { path = 'a', features = ['b'] }
p2 = { path = 'b' }
"#,
)
.file("src/lib.rs", "")
.file(
"a/Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "p1"
version = "0.1.0"
authors = []
[dependencies]
b = { version = "0.1", package = "foo", optional = true }
"#,
)
.file("a/src/lib.rs", "extern crate b;")
.file(
"b/Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "p2"
version = "0.1.0"
authors = []
[dependencies]
b = { version = "0.1", package = "bar", optional = true }
[features]
default = ['b']
"#,
)
.file("b/src/lib.rs", "extern crate b;")
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs(),
);
}
#[test]
fn features_not_working() {
Package::new("foo", "0.1.0").publish();
Package::new("bar", "0.1.0").publish();
let p = project()
.file(
"Cargo.toml",
r#"
cargo-features = ["rename-dependency"]
[package]
name = "test"
version = "0.1.0"
authors = []
[dependencies]
a = { path = 'a', package = 'p1', optional = true }
[features]
default = ['p1']
"#,
)
.file("src/lib.rs", "")
.file("a/Cargo.toml", &basic_manifest("p1", "0.1.0"))
.build();
assert_that(
p.cargo("build -v").masquerade_as_nightly_cargo(),
execs()
.with_status(101)
.with_stderr("\
error: failed to parse manifest at `[..]`
Caused by:
Feature `default` includes `p1` which is neither a dependency nor another feature
")
);
}