summaryrefslogtreecommitdiffstats
path: root/src/tools/cargo/tests/testsuite/cargo_remove
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/cargo/tests/testsuite/cargo_remove')
l---------src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/build/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/build/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/build/out/Cargo.toml21
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/build/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/build/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/dev/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dev/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dev/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dev/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dev/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/dry_run/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dry_run/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/mod.rs72
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/Cargo.toml9
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/src/lib.rs0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stderr.log3
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/Cargo.toml36
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/out/Cargo.toml32
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/Cargo.toml26
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/Cargo.toml2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/Cargo.toml25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stderr.log7
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stderr.log1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/out/Cargo.toml33
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/out/Cargo.toml33
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/mod.rs88
l---------src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/out/Cargo.toml22
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stderr.log3
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/out/Cargo.toml20
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stderr.log3
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/no_arg/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/no_arg/mod.rs24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/no_arg/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stderr.log6
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/offline/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/offline/mod.rs32
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/offline/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/offline/stderr.log1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/offline/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/package/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/out/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/Cargo.toml22
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/package/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/src/lib.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove-target.in/Cargo.toml33
l---------src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/target/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target/out/Cargo.toml30
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/target_build/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_build/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_build/out/Cargo.toml30
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_build/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_build/stdout.log0
l---------src/tools/cargo/tests/testsuite/cargo_remove/target_dev/in1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_dev/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_dev/out/Cargo.toml30
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.lock58
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.lock51
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.toml23
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/Cargo.toml2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/Cargo.toml21
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/Cargo.toml30
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/Cargo.toml6
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/src/main.rs0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/Cargo.toml6
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/src/main.rs0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stdout.log0
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/Cargo.toml22
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/Cargo.toml24
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/mod.rs25
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/Cargo.toml5
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/Cargo.toml22
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/Cargo.toml21
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/src/main.rs1
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stderr.log2
-rw-r--r--src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stdout.log0
197 files changed, 2274 insertions, 0 deletions
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/in b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/mod.rs
new file mode 100644
index 000000000..59a2333d6
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["clippy"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/out/Cargo.toml
new file mode 100644
index 000000000..09a9ee86e
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stderr.log
new file mode 100644
index 000000000..dd71023a8
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stderr.log
@@ -0,0 +1,2 @@
+ Removing clippy from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/avoid_empty_tables/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/build/in b/src/tools/cargo/tests/testsuite/cargo_remove/build/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/build/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/build/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/build/mod.rs
new file mode 100644
index 000000000..f4c9dcb94
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/build/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--build", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/build/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/build/out/Cargo.toml
new file mode 100644
index 000000000..babdc0a99
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/build/out/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/build/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/build/stderr.log
new file mode 100644
index 000000000..f037ebe28
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/build/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from build-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/build/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/build/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/build/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dev/in b/src/tools/cargo/tests/testsuite/cargo_remove/dev/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dev/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dev/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/dev/mod.rs
new file mode 100644
index 000000000..7d61fa954
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dev/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--dev", "regex"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dev/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/dev/out/Cargo.toml
new file mode 100644
index 000000000..40744a566
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dev/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dev/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/dev/stderr.log
new file mode 100644
index 000000000..c629b26b1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dev/stderr.log
@@ -0,0 +1,2 @@
+ Removing regex from dev-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dev/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/dev/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dev/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/in b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/mod.rs
new file mode 100644
index 000000000..dca189315
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["semver", "--dry-run"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/out/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stderr.log
new file mode 100644
index 000000000..8b118911c
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from dependencies
+warning: aborting remove due to dry run
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/dry_run/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/mod.rs
new file mode 100644
index 000000000..2c1d592fb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/mod.rs
@@ -0,0 +1,72 @@
+use cargo_test_support::basic_manifest;
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::git;
+use cargo_test_support::project;
+use cargo_test_support::CargoCommand;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+
+ let git_project1 = git::new("bar1", |project| {
+ project
+ .file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
+ .file("src/lib.rs", "")
+ })
+ .url();
+
+ let git_project2 = git::new("bar2", |project| {
+ project
+ .file("Cargo.toml", &basic_manifest("bar", "0.1.0"))
+ .file("src/lib.rs", "")
+ })
+ .url();
+
+ let in_project = project()
+ .file(
+ "Cargo.toml",
+ &format!(
+ "[workspace]\n\
+ members = [ \"my-member\" ]\n\
+ \n\
+ [package]\n\
+ name = \"my-project\"\n\
+ version = \"0.1.0\"\n\
+ \n\
+ [dependencies]\n\
+ bar = {{ git = \"{git_project1}\" }}\n\
+ \n\
+ [patch.\"{git_project1}\"]\n\
+ bar = {{ git = \"{git_project2}\" }}\n\
+ \n\
+ [patch.crates-io]\n\
+ bar = {{ git = \"{git_project2}\" }}\n",
+ ),
+ )
+ .file("src/lib.rs", "")
+ .file(
+ "my-member/Cargo.toml",
+ "[package]\n\
+ name = \"my-member\"\n\
+ version = \"0.1.0\"\n\
+ \n\
+ [dependencies]\n\
+ bar = \"0.1.0\"\n",
+ )
+ .file("my-member/src/lib.rs", "")
+ .build();
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["bar"])
+ .current_dir(&in_project.root())
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &in_project.root());
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/Cargo.toml
new file mode 100644
index 000000000..2d8c22115
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/Cargo.toml
@@ -0,0 +1,9 @@
+[workspace]
+members = [ "my-member" ]
+
+[package]
+name = "my-project"
+version = "0.1.0"
+
+[patch.crates-io]
+bar = { git = "[ROOTURL]/bar2" }
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/src/lib.rs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/out/src/lib.rs
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stderr.log
new file mode 100644
index 000000000..1dd2e7757
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stderr.log
@@ -0,0 +1,3 @@
+ Removing bar from dependencies
+ Updating git repository `[ROOTURL]/bar2`
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_patch/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/Cargo.toml
new file mode 100644
index 000000000..d781ad5a5
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/Cargo.toml
@@ -0,0 +1,36 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+toml = "0.2.3"
+docopt = "0.6"
+
+[features]
+std = ["serde/std", "semver/std"]
+
+[profile.dev.package.docopt]
+opt-level = 3
+
+[profile.dev.package."toml@0.1.0"]
+opt-level = 3
+
+[profile.release.package.toml]
+opt-level = 1
+overflow-checks = false
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/in/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/mod.rs
new file mode 100644
index 000000000..7047c92e2
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["toml"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/out/Cargo.toml
new file mode 100644
index 000000000..21b43fe68
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/out/Cargo.toml
@@ -0,0 +1,32 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+toml = "0.2.3"
+docopt = "0.6"
+
+[features]
+std = ["serde/std", "semver/std"]
+
+[profile.dev.package.docopt]
+opt-level = 3
+
+[profile.release.package.toml]
+opt-level = 1
+overflow-checks = false
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stderr.log
new file mode 100644
index 000000000..0e2e38f26
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stderr.log
@@ -0,0 +1,2 @@
+ Removing toml from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_profile/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/Cargo.toml
new file mode 100644
index 000000000..48242c2d3
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [ "my-package" ]
+
+[replace]
+"toml:0.1.0" = { path = "../toml" }
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/Cargo.toml
new file mode 100644
index 000000000..bee343a8b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/Cargo.toml
@@ -0,0 +1,26 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+toml = "0.2.3"
+docopt = "0.6"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/in/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/mod.rs
new file mode 100644
index 000000000..717adef3e
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--package", "my-package", "toml"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/Cargo.toml
new file mode 100644
index 000000000..83a6a04d0
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/Cargo.toml
@@ -0,0 +1,2 @@
+[workspace]
+members = [ "my-package" ]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/Cargo.toml
new file mode 100644
index 000000000..36ddf7a04
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/Cargo.toml
@@ -0,0 +1,25 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+toml = "0.2.3"
+docopt = "0.6"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/out/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stderr.log
new file mode 100644
index 000000000..0e2e38f26
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stderr.log
@@ -0,0 +1,2 @@
+ Removing toml from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/gc_replace/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/mod.rs
new file mode 100644
index 000000000..eac3c8b46
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["foo", "--flag"])
+ .current_dir(cwd)
+ .assert()
+ .code(1)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stderr.log
new file mode 100644
index 000000000..ac5f3cfd1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stderr.log
@@ -0,0 +1,7 @@
+error: unexpected argument '--flag' found
+
+ tip: to pass '--flag' as a value, use '-- --flag'
+
+Usage: cargo[EXE] remove <DEP_ID>...
+
+For more information, try '--help'.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_arg/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/mod.rs
new file mode 100644
index 000000000..c4dbeae91
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["invalid_dependency_name"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stderr.log
new file mode 100644
index 000000000..eea124d65
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stderr.log
@@ -0,0 +1,2 @@
+ Removing invalid_dependency_name from dependencies
+error: the dependency `invalid_dependency_name` could not be found in `dependencies`.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_dep/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/in
new file mode 120000
index 000000000..e2165e8cb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/in
@@ -0,0 +1 @@
+../remove-package.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/mod.rs
new file mode 100644
index 000000000..bff09882e
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt", "--package", "dep-c"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/Cargo.toml
new file mode 100644
index 000000000..733857113
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+ "dep-a",
+ "dep-b"
+]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/Cargo.toml
new file mode 100644
index 000000000..7e87ce314
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-a"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-a/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/Cargo.toml
new file mode 100644
index 000000000..37d2d3ddf
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-b"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/out/dep-b/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stderr.log
new file mode 100644
index 000000000..683512ca0
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stderr.log
@@ -0,0 +1 @@
+error: package(s) `dep-c` not found in workspace `[ROOT]/case`
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/in
new file mode 120000
index 000000000..e2165e8cb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/in
@@ -0,0 +1 @@
+../remove-package.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/mod.rs
new file mode 100644
index 000000000..5093d5d2d
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/Cargo.toml
new file mode 100644
index 000000000..733857113
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+ "dep-a",
+ "dep-b"
+]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/Cargo.toml
new file mode 100644
index 000000000..7e87ce314
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-a"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-a/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/Cargo.toml
new file mode 100644
index 000000000..37d2d3ddf
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-b"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/out/dep-b/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stderr.log
new file mode 100644
index 000000000..8a03c9e5b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stderr.log
@@ -0,0 +1,2 @@
+error: `cargo remove` could not determine which package to modify. Use the `--package` option to specify a package.
+available packages: dep-a, dep-b
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_package_multiple/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/mod.rs
new file mode 100644
index 000000000..80d42be1d
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--build", "docopt"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stderr.log
new file mode 100644
index 000000000..fff5ff00a
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stderr.log
@@ -0,0 +1,2 @@
+ Removing docopt from build-dependencies
+error: the dependency `docopt` could not be found in `build-dependencies`.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/mod.rs
new file mode 100644
index 000000000..7be8fd628
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--dev", "semver", "regex"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stderr.log
new file mode 100644
index 000000000..1926f9577
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from dev-dependencies
+error: the dependency `semver` could not be found in `dev-dependencies`.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_section_dep/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/in
new file mode 120000
index 000000000..d5742d038
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/in
@@ -0,0 +1 @@
+../remove-target.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/mod.rs
new file mode 100644
index 000000000..34deb6cb8
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--target", "powerpc-unknown-linux-gnu", "dbus"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/out/Cargo.toml
new file mode 100644
index 000000000..14747c70b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/out/Cargo.toml
@@ -0,0 +1,33 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[target.x86_64-unknown-linux-gnu.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[target.x86_64-unknown-linux-gnu.dependencies]
+dbus = "0.6.2"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[target.x86_64-unknown-linux-gnu.dev-dependencies]
+ncurses = "20.0"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stderr.log
new file mode 100644
index 000000000..5075b80b7
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stderr.log
@@ -0,0 +1,2 @@
+ Removing dbus from dependencies for target `powerpc-unknown-linux-gnu`
+error: the dependency `dbus` could not be found in `target.powerpc-unknown-linux-gnu.dependencies`.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/in b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/in
new file mode 120000
index 000000000..d5742d038
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/in
@@ -0,0 +1 @@
+../remove-target.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/mod.rs
new file mode 100644
index 000000000..e04418fa8
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--target", "x86_64-unknown-linux-gnu", "toml"])
+ .current_dir(cwd)
+ .assert()
+ .code(101)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/out/Cargo.toml
new file mode 100644
index 000000000..14747c70b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/out/Cargo.toml
@@ -0,0 +1,33 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[target.x86_64-unknown-linux-gnu.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[target.x86_64-unknown-linux-gnu.dependencies]
+dbus = "0.6.2"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[target.x86_64-unknown-linux-gnu.dev-dependencies]
+ncurses = "20.0"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stderr.log
new file mode 100644
index 000000000..54bfe085f
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stderr.log
@@ -0,0 +1,2 @@
+ Removing toml from dependencies for target `x86_64-unknown-linux-gnu`
+error: the dependency `toml` could not be found in `target.x86_64-unknown-linux-gnu.dependencies`.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/invalid_target_dep/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/mod.rs
new file mode 100644
index 000000000..fd8b4a233
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/mod.rs
@@ -0,0 +1,88 @@
+mod avoid_empty_tables;
+mod build;
+mod dev;
+mod dry_run;
+mod gc_patch;
+mod gc_profile;
+mod gc_replace;
+mod invalid_arg;
+mod invalid_dep;
+mod invalid_package;
+mod invalid_package_multiple;
+mod invalid_section;
+mod invalid_section_dep;
+mod invalid_target;
+mod invalid_target_dep;
+mod multiple_deps;
+mod multiple_dev;
+mod no_arg;
+mod offline;
+mod optional_dep_feature;
+mod optional_feature;
+mod package;
+mod remove_basic;
+mod target;
+mod target_build;
+mod target_dev;
+mod update_lock_file;
+mod workspace;
+mod workspace_non_virtual;
+mod workspace_preserved;
+
+fn init_registry() {
+ cargo_test_support::registry::init();
+ add_registry_packages(false);
+}
+
+fn add_registry_packages(alt: bool) {
+ for name in [
+ "clippy",
+ "dbus",
+ "docopt",
+ "ncurses",
+ "pad",
+ "regex",
+ "rustc-serialize",
+ "toml",
+ ] {
+ cargo_test_support::registry::Package::new(name, "0.1.1+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.2.0+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.2.3+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.4.1+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.6.2+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.9.9+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "1.0.90+my-package")
+ .alternative(alt)
+ .publish();
+ cargo_test_support::registry::Package::new(name, "20.0.0+my-package")
+ .alternative(alt)
+ .publish();
+ }
+
+ for name in ["semver", "serde"] {
+ cargo_test_support::registry::Package::new(name, "0.1.1")
+ .alternative(alt)
+ .feature("std", &[])
+ .publish();
+ cargo_test_support::registry::Package::new(name, "0.9.0")
+ .alternative(alt)
+ .feature("std", &[])
+ .publish();
+ cargo_test_support::registry::Package::new(name, "1.0.90")
+ .alternative(alt)
+ .feature("std", &[])
+ .publish();
+ }
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/in b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/mod.rs
new file mode 100644
index 000000000..35922b738
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/out/Cargo.toml
new file mode 100644
index 000000000..53cde0829
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/out/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+rustc-serialize = "0.4"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stderr.log
new file mode 100644
index 000000000..1eb59aca1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stderr.log
@@ -0,0 +1,3 @@
+ Removing docopt from dependencies
+ Removing semver from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_deps/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/in b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/mod.rs
new file mode 100644
index 000000000..5eac7e2f8
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--dev", "regex", "serde"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/out/Cargo.toml
new file mode 100644
index 000000000..d961b2bb1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/out/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[features]
+std = ["semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stderr.log
new file mode 100644
index 000000000..a3042dcc3
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stderr.log
@@ -0,0 +1,3 @@
+ Removing regex from dev-dependencies
+ Removing serde from dev-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/multiple_dev/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/in b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/mod.rs
new file mode 100644
index 000000000..d0c66f9b0
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/mod.rs
@@ -0,0 +1,24 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .current_dir(cwd)
+ .assert()
+ .code(1)
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/out/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/out/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stderr.log
new file mode 100644
index 000000000..54fa9f424
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stderr.log
@@ -0,0 +1,6 @@
+error: the following required arguments were not provided:
+ <DEP_ID>...
+
+Usage: cargo[EXE] remove <DEP_ID>...
+
+For more information, try '--help'.
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/no_arg/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/offline/in b/src/tools/cargo/tests/testsuite/cargo_remove/offline/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/offline/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/offline/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/offline/mod.rs
new file mode 100644
index 000000000..d03463927
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/offline/mod.rs
@@ -0,0 +1,32 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ // run the metadata command to populate the cache
+ snapbox::cmd::Command::cargo_ui()
+ .arg("metadata")
+ .current_dir(cwd)
+ .assert()
+ .success();
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt", "--offline"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/offline/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/offline/out/Cargo.toml
new file mode 100644
index 000000000..b8628eed1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/offline/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/offline/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/offline/stderr.log
new file mode 100644
index 000000000..7083976b1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/offline/stderr.log
@@ -0,0 +1 @@
+ Removing docopt from dependencies
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/offline/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/offline/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/offline/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/in b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/mod.rs
new file mode 100644
index 000000000..cae736b34
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--dev", "serde"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/out/Cargo.toml
new file mode 100644
index 000000000..63112d334
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+
+[features]
+std = ["semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stderr.log
new file mode 100644
index 000000000..72c9f9217
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stderr.log
@@ -0,0 +1,2 @@
+ Removing serde from dev-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_dep_feature/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/in b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/mod.rs
new file mode 100644
index 000000000..af54226bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/out/Cargo.toml
new file mode 100644
index 000000000..9ac0b1b32
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stderr.log
new file mode 100644
index 000000000..2dc546fa7
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/optional_feature/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/in b/src/tools/cargo/tests/testsuite/cargo_remove/package/in
new file mode 120000
index 000000000..e2165e8cb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/in
@@ -0,0 +1 @@
+../remove-package.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/package/mod.rs
new file mode 100644
index 000000000..2714f3197
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt", "--package", "dep-a"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/Cargo.toml
new file mode 100644
index 000000000..733857113
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+ "dep-a",
+ "dep-b"
+]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/Cargo.toml
new file mode 100644
index 000000000..5f2bfe6fb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "dep-a"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-a/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/Cargo.toml
new file mode 100644
index 000000000..37d2d3ddf
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-b"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/out/dep-b/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/package/stderr.log
new file mode 100644
index 000000000..231026f2b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/stderr.log
@@ -0,0 +1,2 @@
+ Removing docopt from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/package/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/package/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/package/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-basic.in/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/Cargo.toml
new file mode 100644
index 000000000..733857113
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [
+ "dep-a",
+ "dep-b"
+]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/Cargo.toml
new file mode 100644
index 000000000..7e87ce314
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-a"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-a/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/Cargo.toml
new file mode 100644
index 000000000..37d2d3ddf
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "dep-b"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/src/lib.rs b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/src/lib.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-package.in/dep-b/src/lib.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove-target.in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove-target.in/Cargo.toml
new file mode 100644
index 000000000..14747c70b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove-target.in/Cargo.toml
@@ -0,0 +1,33 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[target.x86_64-unknown-linux-gnu.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[target.x86_64-unknown-linux-gnu.dependencies]
+dbus = "0.6.2"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[target.x86_64-unknown-linux-gnu.dev-dependencies]
+ncurses = "20.0"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/in b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/in
new file mode 120000
index 000000000..7fd0ba5eb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/in
@@ -0,0 +1 @@
+../remove-basic.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/mod.rs
new file mode 100644
index 000000000..53381e6bc
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["docopt"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/out/Cargo.toml
new file mode 100644
index 000000000..b8628eed1
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stderr.log
new file mode 100644
index 000000000..231026f2b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stderr.log
@@ -0,0 +1,2 @@
+ Removing docopt from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/remove_basic/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target/in b/src/tools/cargo/tests/testsuite/cargo_remove/target/in
new file mode 120000
index 000000000..d5742d038
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target/in
@@ -0,0 +1 @@
+../remove-target.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/target/mod.rs
new file mode 100644
index 000000000..1447c753d
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--target", "x86_64-unknown-linux-gnu", "dbus"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/target/out/Cargo.toml
new file mode 100644
index 000000000..e29fbbd00
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target/out/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[target.x86_64-unknown-linux-gnu.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[target.x86_64-unknown-linux-gnu.dev-dependencies]
+ncurses = "20.0"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/target/stderr.log
new file mode 100644
index 000000000..810abd994
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target/stderr.log
@@ -0,0 +1,2 @@
+ Removing dbus from dependencies for target `x86_64-unknown-linux-gnu`
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/target/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_build/in b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/in
new file mode 120000
index 000000000..d5742d038
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/in
@@ -0,0 +1 @@
+../remove-target.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_build/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/mod.rs
new file mode 100644
index 000000000..11afbbf8f
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--build", "--target", "x86_64-unknown-linux-gnu", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_build/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/out/Cargo.toml
new file mode 100644
index 000000000..7353c7a89
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/out/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[target.x86_64-unknown-linux-gnu.dependencies]
+dbus = "0.6.2"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[target.x86_64-unknown-linux-gnu.dev-dependencies]
+ncurses = "20.0"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stderr.log
new file mode 100644
index 000000000..b06f8f319
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from build-dependencies for target `x86_64-unknown-linux-gnu`
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_build/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/in b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/in
new file mode 120000
index 000000000..d5742d038
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/in
@@ -0,0 +1 @@
+../remove-target.in/ \ No newline at end of file
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/mod.rs
new file mode 100644
index 000000000..d303c2b85
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--dev", "--target", "x86_64-unknown-linux-gnu", "ncurses"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/out/Cargo.toml
new file mode 100644
index 000000000..a477b3d55
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/out/Cargo.toml
@@ -0,0 +1,30 @@
+[package]
+name = "cargo-remove-target-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[target.x86_64-unknown-freebsd.build-dependencies]
+semver = "0.1.0"
+
+[target.x86_64-unknown-linux-gnu.build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[target.x86_64-unknown-linux-gnu.dependencies]
+dbus = "0.6.2"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stderr.log
new file mode 100644
index 000000000..68553a3bd
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stderr.log
@@ -0,0 +1,2 @@
+ Removing ncurses from dev-dependencies for target `x86_64-unknown-linux-gnu`
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/target_dev/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.lock b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.lock
new file mode 100644
index 000000000..06c2052d5
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.lock
@@ -0,0 +1,58 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+dependencies = [
+ "clippy",
+ "docopt",
+ "regex",
+ "rustc-serialize",
+ "semver",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "clippy"
+version = "0.4.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47ced0eda54e9ddc6063f0e1d0164493cd16c84c6b6a0329a536967c44e205f7"
+
+[[package]]
+name = "docopt"
+version = "0.6.2+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b600540c4fafb27bf6e6961f0f1e6f547c9d6126ce581ab3a92f878c8e2c9a2c"
+
+[[package]]
+name = "regex"
+version = "0.1.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84949cb53285a6c481d0133065a7b669871acfd9e20f273f4ce1283c309775d5"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.4.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31162e7d23a085553c42dee375787b451a481275473f7779c4a63bcc267a24fd"
+
+[[package]]
+name = "semver"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3031434e07edc922bf1b8262f075fac1522694f17b1ee7ad314c4cabd5d2723f"
+
+[[package]]
+name = "serde"
+version = "1.0.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75d9264696ebbf5315a6b068e9910c4df9274365afac2d88abf66525df660218"
+
+[[package]]
+name = "toml"
+version = "0.1.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0f6c7804525ce0a968ef270e55a516cf4bdcf1fea0b09d130e0aa34a66745b3"
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.toml
new file mode 100644
index 000000000..340f06cda
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/src/main.rs
new file mode 100644
index 000000000..f328e4d9d
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/in/src/main.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/mod.rs
new file mode 100644
index 000000000..be5bc87f5
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["rustc-serialize"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.lock b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.lock
new file mode 100644
index 000000000..bd8c90f46
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.lock
@@ -0,0 +1,51 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+dependencies = [
+ "clippy",
+ "docopt",
+ "regex",
+ "semver",
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "clippy"
+version = "0.4.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47ced0eda54e9ddc6063f0e1d0164493cd16c84c6b6a0329a536967c44e205f7"
+
+[[package]]
+name = "docopt"
+version = "0.6.2+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b600540c4fafb27bf6e6961f0f1e6f547c9d6126ce581ab3a92f878c8e2c9a2c"
+
+[[package]]
+name = "regex"
+version = "0.1.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84949cb53285a6c481d0133065a7b669871acfd9e20f273f4ce1283c309775d5"
+
+[[package]]
+name = "semver"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3031434e07edc922bf1b8262f075fac1522694f17b1ee7ad314c4cabd5d2723f"
+
+[[package]]
+name = "serde"
+version = "1.0.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75d9264696ebbf5315a6b068e9910c4df9274365afac2d88abf66525df660218"
+
+[[package]]
+name = "toml"
+version = "0.1.1+my-package"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0f6c7804525ce0a968ef270e55a516cf4bdcf1fea0b09d130e0aa34a66745b3"
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.toml
new file mode 100644
index 000000000..5e7d7f0a0
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/Cargo.toml
@@ -0,0 +1,23 @@
+[package]
+name = "cargo-remove-test-fixture"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = "0.1.0"
+
+[dependencies]
+docopt = "0.6"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/src/main.rs
new file mode 100644
index 000000000..f328e4d9d
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/out/src/main.rs
@@ -0,0 +1 @@
+fn main() {}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stderr.log
new file mode 100644
index 000000000..164f8f4b9
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stderr.log
@@ -0,0 +1,2 @@
+ Removing rustc-serialize from dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/update_lock_file/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/Cargo.toml
new file mode 100644
index 000000000..fd5e80a8b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [ "my-package" ]
+
+[workspace.dependencies]
+semver = "0.1.0"
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/Cargo.toml
new file mode 100644
index 000000000..6690d593b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = { workspace = true }
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/in/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/mod.rs
new file mode 100644
index 000000000..225fbec00
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--package", "my-package", "--build", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/Cargo.toml
new file mode 100644
index 000000000..83a6a04d0
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/Cargo.toml
@@ -0,0 +1,2 @@
+[workspace]
+members = [ "my-package" ]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/Cargo.toml
new file mode 100644
index 000000000..402780535
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/out/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stderr.log
new file mode 100644
index 000000000..f037ebe28
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from build-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/Cargo.toml
new file mode 100644
index 000000000..dbac8ab44
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/Cargo.toml
@@ -0,0 +1,30 @@
+[workspace]
+members = [ "my-member" ]
+
+[workspace.dependencies]
+semver = "0.1.0"
+
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = { workspace = true }
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/Cargo.toml
new file mode 100644
index 000000000..bb78904ff
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "my-member"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/src/main.rs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/in/my-member/src/main.rs
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/mod.rs
new file mode 100644
index 000000000..225fbec00
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--package", "my-package", "--build", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/Cargo.toml
new file mode 100644
index 000000000..9a3261484
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/Cargo.toml
@@ -0,0 +1,24 @@
+[workspace]
+members = [ "my-member" ]
+
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/Cargo.toml
new file mode 100644
index 000000000..bb78904ff
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "my-member"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/src/main.rs
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/out/my-member/src/main.rs
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stderr.log
new file mode 100644
index 000000000..f037ebe28
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from build-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_non_virtual/stdout.log
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/Cargo.toml
new file mode 100644
index 000000000..f1992ac88
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [ "my-package", "my-other-package" ]
+
+[workspace.dependencies]
+semver = "0.1.0"
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/Cargo.toml
new file mode 100644
index 000000000..d65972868
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "my-other-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+semver = { workspace = true }
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-other-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/Cargo.toml
new file mode 100644
index 000000000..6690d593b
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/Cargo.toml
@@ -0,0 +1,24 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[build-dependencies]
+semver = { workspace = true }
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/in/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/mod.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/mod.rs
new file mode 100644
index 000000000..225fbec00
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/mod.rs
@@ -0,0 +1,25 @@
+use cargo_test_support::compare::assert_ui;
+use cargo_test_support::curr_dir;
+use cargo_test_support::CargoCommand;
+use cargo_test_support::Project;
+
+use crate::cargo_remove::init_registry;
+
+#[cargo_test]
+fn case() {
+ init_registry();
+ let project = Project::from_template(curr_dir!().join("in"));
+ let project_root = project.root();
+ let cwd = &project_root;
+
+ snapbox::cmd::Command::cargo_ui()
+ .arg("remove")
+ .args(["--package", "my-package", "--build", "semver"])
+ .current_dir(cwd)
+ .assert()
+ .success()
+ .stdout_matches_path(curr_dir!().join("stdout.log"))
+ .stderr_matches_path(curr_dir!().join("stderr.log"));
+
+ assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
+}
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/Cargo.toml
new file mode 100644
index 000000000..f1992ac88
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+members = [ "my-package", "my-other-package" ]
+
+[workspace.dependencies]
+semver = "0.1.0"
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/Cargo.toml
new file mode 100644
index 000000000..d65972868
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/Cargo.toml
@@ -0,0 +1,22 @@
+[package]
+name = "my-other-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+semver = { workspace = true }
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-other-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/Cargo.toml b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/Cargo.toml
new file mode 100644
index 000000000..402780535
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "my-package"
+version = "0.1.0"
+
+[[bin]]
+name = "main"
+path = "src/main.rs"
+
+[dependencies]
+docopt = "0.6"
+rustc-serialize = "0.4"
+semver = "0.1"
+toml = "0.1"
+clippy = "0.4"
+
+[dev-dependencies]
+regex = "0.1.1"
+serde = "1.0.90"
+
+[features]
+std = ["serde/std", "semver/std"]
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/src/main.rs b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/src/main.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/out/my-package/src/main.rs
@@ -0,0 +1 @@
+
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stderr.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stderr.log
new file mode 100644
index 000000000..f037ebe28
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stderr.log
@@ -0,0 +1,2 @@
+ Removing semver from build-dependencies
+ Updating `dummy-registry` index
diff --git a/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stdout.log b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stdout.log
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/tools/cargo/tests/testsuite/cargo_remove/workspace_preserved/stdout.log