[dev-dependencies]
bufstream = "0.1"
-cargotest = { path = "tests/testsuite/cargotest", version = "0.1" }
filetime = "0.1"
hamcrest = "=0.1.1"
-extern crate cargotest;
extern crate hamcrest;
use cargotest::support::{basic_bin_manifest, execs, project, Project};
+++ /dev/null
-[package]
-name = "cargotest"
-version = "0.1.0"
-authors = ["Alex Crichton <alex@alexcrichton.com>"]
-
-[lib]
-path = "lib.rs"
-
-[dependencies]
-cargo = { path = "../../.." }
-filetime = "0.1"
-flate2 = "1.0"
-git2 = { version = "0.7", default-features = false }
-hamcrest = "=0.1.1"
-hex = "0.3"
-log = "0.4"
-serde_json = "1.0"
-tar = { version = "0.4", default-features = false }
-url = "1.1"
use std::path::{PathBuf, Path};
use hamcrest::{Matcher, MatchResult, existing_file};
-use support::paths;
+
+use cargotest::support::paths;
pub use self::InstalledExe as has_installed_exe;
+++ /dev/null
-#![deny(warnings)]
-
-extern crate cargo;
-extern crate filetime;
-extern crate flate2;
-extern crate git2;
-extern crate hamcrest;
-extern crate hex;
-#[macro_use]
-extern crate serde_json;
-extern crate tar;
-extern crate url;
-
-use std::ffi::OsStr;
-use std::time::Duration;
-
-use cargo::util::Rustc;
-use std::path::PathBuf;
-
-pub mod support;
-pub mod install;
-
-thread_local!(pub static RUSTC: Rustc = Rustc::new(PathBuf::from("rustc"), None).unwrap());
-
-pub fn rustc_host() -> String {
- RUSTC.with(|r| r.host.clone())
-}
-
-pub fn is_nightly() -> bool {
- RUSTC.with(|r| {
- r.verbose_version.contains("-nightly") ||
- r.verbose_version.contains("-dev")
- })
-}
-
-pub fn process<T: AsRef<OsStr>>(t: T) -> cargo::util::ProcessBuilder {
- _process(t.as_ref())
-}
-
-fn _process(t: &OsStr) -> cargo::util::ProcessBuilder {
- let mut p = cargo::util::process(t);
- p.cwd(&support::paths::root())
- .env_remove("CARGO_HOME")
- .env("HOME", support::paths::home())
- .env("CARGO_HOME", support::paths::home().join(".cargo"))
- .env("__CARGO_TEST_ROOT", support::paths::root())
-
- // Force cargo to think it's on the stable channel for all tests, this
- // should hopefully not surprise us as we add cargo features over time and
- // cargo rides the trains.
- .env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "stable")
-
- // For now disable incremental by default as support hasn't ridden to the
- // stable channel yet. Once incremental support hits the stable compiler we
- // can switch this to one and then fix the tests.
- .env("CARGO_INCREMENTAL", "0")
-
- // This env var can switch the git backend from libgit2 to git2-curl, which
- // can tweak error messages and cause some tests to fail, so let's forcibly
- // remove it.
- .env_remove("CARGO_HTTP_CHECK_REVOKE")
-
- .env_remove("__CARGO_DEFAULT_LIB_METADATA")
- .env_remove("RUSTC")
- .env_remove("RUSTDOC")
- .env_remove("RUSTC_WRAPPER")
- .env_remove("RUSTFLAGS")
- .env_remove("XDG_CONFIG_HOME") // see #2345
- .env("GIT_CONFIG_NOSYSTEM", "1") // keep trying to sandbox ourselves
- .env_remove("EMAIL")
- .env_remove("MFLAGS")
- .env_remove("MAKEFLAGS")
- .env_remove("CARGO_MAKEFLAGS")
- .env_remove("GIT_AUTHOR_NAME")
- .env_remove("GIT_AUTHOR_EMAIL")
- .env_remove("GIT_COMMITTER_NAME")
- .env_remove("GIT_COMMITTER_EMAIL")
- .env_remove("CARGO_TARGET_DIR") // we assume 'target'
- .env_remove("MSYSTEM"); // assume cmd.exe everywhere on windows
- return p
-}
-
-pub trait ChannelChanger: Sized {
- fn masquerade_as_nightly_cargo(&mut self) -> &mut Self;
-}
-
-impl ChannelChanger for cargo::util::ProcessBuilder {
- fn masquerade_as_nightly_cargo(&mut self) -> &mut Self {
- self.env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly")
- }
-}
-
-pub fn cargo_process() -> cargo::util::ProcessBuilder {
- process(&support::cargo_exe())
-}
-
-pub fn sleep_ms(ms: u64) {
- std::thread::sleep(Duration::from_millis(ms));
-}
--- /dev/null
+use std::ffi::OsStr;
+use std::time::Duration;
+
+use cargo::util::Rustc;
+use cargo;
+use std::path::PathBuf;
+
+#[macro_use]
+pub mod support;
+
+pub mod install;
+
+thread_local!(pub static RUSTC: Rustc = Rustc::new(PathBuf::from("rustc"), None).unwrap());
+
+pub fn rustc_host() -> String {
+ RUSTC.with(|r| r.host.clone())
+}
+
+pub fn is_nightly() -> bool {
+ RUSTC.with(|r| {
+ r.verbose_version.contains("-nightly") ||
+ r.verbose_version.contains("-dev")
+ })
+}
+
+pub fn process<T: AsRef<OsStr>>(t: T) -> cargo::util::ProcessBuilder {
+ _process(t.as_ref())
+}
+
+fn _process(t: &OsStr) -> cargo::util::ProcessBuilder {
+ let mut p = cargo::util::process(t);
+ p.cwd(&support::paths::root())
+ .env_remove("CARGO_HOME")
+ .env("HOME", support::paths::home())
+ .env("CARGO_HOME", support::paths::home().join(".cargo"))
+ .env("__CARGO_TEST_ROOT", support::paths::root())
+
+ // Force cargo to think it's on the stable channel for all tests, this
+ // should hopefully not surprise us as we add cargo features over time and
+ // cargo rides the trains.
+ .env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "stable")
+
+ // For now disable incremental by default as support hasn't ridden to the
+ // stable channel yet. Once incremental support hits the stable compiler we
+ // can switch this to one and then fix the tests.
+ .env("CARGO_INCREMENTAL", "0")
+
+ // This env var can switch the git backend from libgit2 to git2-curl, which
+ // can tweak error messages and cause some tests to fail, so let's forcibly
+ // remove it.
+ .env_remove("CARGO_HTTP_CHECK_REVOKE")
+
+ .env_remove("__CARGO_DEFAULT_LIB_METADATA")
+ .env_remove("RUSTC")
+ .env_remove("RUSTDOC")
+ .env_remove("RUSTC_WRAPPER")
+ .env_remove("RUSTFLAGS")
+ .env_remove("XDG_CONFIG_HOME") // see #2345
+ .env("GIT_CONFIG_NOSYSTEM", "1") // keep trying to sandbox ourselves
+ .env_remove("EMAIL")
+ .env_remove("MFLAGS")
+ .env_remove("MAKEFLAGS")
+ .env_remove("CARGO_MAKEFLAGS")
+ .env_remove("GIT_AUTHOR_NAME")
+ .env_remove("GIT_AUTHOR_EMAIL")
+ .env_remove("GIT_COMMITTER_NAME")
+ .env_remove("GIT_COMMITTER_EMAIL")
+ .env_remove("CARGO_TARGET_DIR") // we assume 'target'
+ .env_remove("MSYSTEM"); // assume cmd.exe everywhere on windows
+ return p
+}
+
+pub trait ChannelChanger: Sized {
+ fn masquerade_as_nightly_cargo(&mut self) -> &mut Self;
+}
+
+impl ChannelChanger for cargo::util::ProcessBuilder {
+ fn masquerade_as_nightly_cargo(&mut self) -> &mut Self {
+ self.env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly")
+ }
+}
+
+pub fn cargo_process() -> cargo::util::ProcessBuilder {
+ process(&support::cargo_exe())
+}
+
+pub fn sleep_ms(ms: u64) {
+ ::std::thread::sleep(Duration::from_millis(ms));
+}
use std::sync::{Once, ONCE_INIT};
use std::sync::atomic::{AtomicBool, ATOMIC_BOOL_INIT, Ordering};
-use support::{project, main_file, basic_bin_manifest};
+use cargotest::support::{project, main_file, basic_bin_manifest};
pub fn disabled() -> bool {
// First, disable if ./configure requested so
use std::io::prelude::*;
use std::path::{Path, PathBuf};
-use url::Url;
+use cargo::util::ProcessError;
use git2;
+use url::Url;
-use cargo::util::ProcessError;
-use support::{ProjectBuilder, Project, project, path2url};
+use cargotest::support::{ProjectBuilder, Project, project, path2url};
#[must_use]
pub struct RepoBuilder {
use cargo::util::ProcessBuilder;
use cargo::util::{ProcessError};
-use support::paths::CargoPathExt;
+use cargotest::support::paths::CargoPathExt;
-#[macro_export]
macro_rules! t {
($e:expr) => (match $e {
Ok(e) => e,
self.root.root()
}
- pub fn build_dir(&self) -> PathBuf {
- self.root.build_dir()
- }
-
pub fn target_debug_dir(&self) -> PathBuf {
self.root.target_debug_dir()
}
}
pub fn process<T: AsRef<OsStr>>(&self, program: T) -> ProcessBuilder {
- let mut p = ::process(program);
+ let mut p = ::cargotest::process(program);
p.cwd(self.root());
return p
}
self
}
- pub fn with_neither_contains<S: ToString>(mut self, expected: S) -> Execs {
- self.expect_neither_contains.push(expected.to_string());
- self
- }
-
pub fn with_json(mut self, expected: &str) -> Execs {
self.expect_json = Some(expected.split("\n\n").map(|obj| {
obj.parse().unwrap()
}
}
-#[derive(Clone)]
-pub struct ShellWrites {
- expected: String
-}
-
-impl fmt::Display for ShellWrites {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "`{}` written to the shell", self.expected)
- }
-}
-
-impl<'a> ham::Matcher<&'a [u8]> for ShellWrites {
- fn matches(&self, actual: &[u8])
- -> ham::MatchResult
- {
- let actual = String::from_utf8_lossy(actual);
- let actual = actual.to_string();
- ham::expect(actual == self.expected, actual)
- }
-}
-
-pub fn shell_writes<T: fmt::Display>(string: T) -> ShellWrites {
- ShellWrites { expected: string.to_string() }
-}
-
pub trait Tap {
fn tap<F: FnOnce(&mut Self)>(self, callback: F) -> Self;
}
use std::io::prelude::*;
use std::fs::{self, File};
-use support::paths;
-use support::git::{repo, Repository};
+use cargotest::support::paths;
+use cargotest::support::git::{repo, Repository};
use url::Url;
use std::io::prelude::*;
use std::path::{PathBuf, Path};
+use cargo::util::Sha256;
use flate2::Compression;
use flate2::write::GzEncoder;
use git2;
use tar::{Builder, Header};
use url::Url;
-use support::paths;
-use support::git::repo;
-use cargo::util::Sha256;
+use cargotest::support::paths;
+use cargotest::support::git::repo;
pub fn registry_path() -> PathBuf { paths::root().join("registry") }
pub fn registry() -> Url { Url::from_file_path(&*registry_path()).ok().unwrap() }
-extern crate cargo;
-#[macro_use]
-extern crate cargotest;
-extern crate hamcrest;
-extern crate tempdir;
extern crate bufstream;
+extern crate cargo;
+extern crate filetime;
+extern crate flate2;
extern crate git2;
extern crate glob;
-extern crate flate2;
-extern crate tar;
+extern crate hamcrest;
+extern crate hex;
extern crate libc;
-#[cfg(windows)]
-extern crate winapi;
#[macro_use]
extern crate serde_derive;
+#[macro_use]
extern crate serde_json;
+extern crate tar;
+extern crate tempdir;
extern crate toml;
extern crate url;
+#[cfg(windows)]
+extern crate winapi;
+#[macro_use]
+mod cargotest;
mod alt_registry;
mod bad_config;
-extern crate cargo;
-extern crate cargotest;
extern crate hamcrest;
use cargotest::support::{project, execs};