target/tests/test-unit
test-integration: target/tests/test-integration
- CARGO_BIN_PATH=$(PWD)/target/ $<
+ RUST_TEST_TASKS=1 CARGO_BIN_PATH=$(PWD)/target/ $<
test: test-unit test-integration
}
}
+#[deriving(Eq,Clone,Show)]
pub struct PackageSet {
packages: ~[Package]
}
names.iter().map(|name| self.get(*name) ).collect()
}
+ pub fn get_packages<'a>(&'a self) -> &'a [Package] {
+ self.packages.as_slice()
+ }
+
// For now, assume that the package set contains only one package with a
// given name
pub fn sort(&self) -> Option<PackageSet> {
// compile
for target in pkg.get_targets().iter() {
- try!(rustc(pkg.get_root(), target, &target_dir, deps(pkg, pkgs)));
+ try!(rustc(pkg.get_root(), target, &target_dir, pkgs.get_packages()))
}
Ok(())
dst.push(dir.as_str().unwrap().to_owned());
}
}
-
-// Collect all dependencies for a given package
-fn deps(pkg: &core::Package, pkgs: &core::PackageSet) -> ~[core::Package] {
- let names: ~[&str] = pkg.get_dependencies().iter().map(|d| d.get_name()).collect();
- pkgs.get_all(names).iter().map(|p| (*p).clone()).collect()
-}
use std::path::{Path,BytesContainer};
use std::str;
use std::vec::Vec;
+use std::fmt::Show;
use ham = hamcrest;
use cargo::util::{process,ProcessBuilder};
try!(file.mk());
}
- println!("{}", self.root.display());
- println!("{:?}", self);
Ok(())
}
fn with_err_msg(self, val: ~str) -> Result<T, ~str>;
}
-impl<T, E> ErrMsg<T> for Result<T, E> {
+impl<T, E: Show> ErrMsg<T> for Result<T, E> {
fn with_err_msg(self, val: ~str) -> Result<T, ~str> {
match self {
Ok(val) => Ok(val),
- Err(_) => Err(val)
+ Err(err) => Err(format!("{}; original={}", val, err))
}
}
}
// Path to cargo executables
pub fn cargo_dir() -> Path {
- os::getenv("CARGO_BIN_PATH")
- .map(|s| Path::new(s))
- .unwrap_or_else(|| fail!("CARGO_BIN_PATH wasn't set. Cannot continue running test"))
+ os::getenv("CARGO_BIN_PATH")
+ .map(|s| Path::new(s))
+ .unwrap_or_else(|| fail!("CARGO_BIN_PATH wasn't set. Cannot continue running test"))
}
/*
expect_exit_code: None
}
}
+
+pub trait ResultTest<T,E> {
+ fn assert(self) -> T;
+}
+
+impl<T,E: Show> ResultTest<T,E> for Result<T,E> {
+ fn assert(self) -> T {
+ match self {
+ Ok(val) => val,
+ Err(err) => fail!("Result was error: {}", err)
+ }
+ }
+}
-use support::{project,execs};
+use support::{ResultTest,project,execs};
use hamcrest::{assert_that,existing_file};
use cargo;
fn setup() {
}
-// Currently doesn't pass due to the code being broken
test!(cargo_compile {
let p = project("foo")
.file("Cargo.toml", r#"
p.cargo_process("cargo-compile")
.args([])
- .exec()
- .unwrap();
+ .exec_with_output()
+ .assert();
assert_that(&p.root().join("target/foo"), existing_file());
execs().with_stdout("i am foo\n"));
})
+test!(cargo_compile_with_nested_deps {
+ let mut p = project("foo");
+ let bar = p.root().join("bar");
+ let baz = p.root().join("baz");
+
+ p = p
+ .file(".cargo/config", format!(r#"
+ paths = ["{}", "{}"]
+ "#, bar.display(), baz.display()))
+ .file("Cargo.toml", r#"
+ [project]
+
+ name = "foo"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+
+ [dependencies]
+
+ bar = "0.5.0"
+
+ [[bin]]
+
+ name = "foo"
+ "#)
+ .file("src/foo.rs", r#"
+ extern crate bar;
+
+ fn main() {
+ println!("{}", bar::gimme());
+ }
+ "#)
+ .file("bar/Cargo.toml", r#"
+ [project]
+
+ name = "bar"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+
+ [dependencies]
+
+ baz = "0.5.0"
+
+ [[lib]]
+
+ name = "bar"
+ "#)
+ .file("bar/src/bar.rs", r#"
+ extern crate baz;
+
+ pub fn gimme() -> ~str {
+ baz::gimme()
+ }
+ "#)
+ .file("baz/Cargo.toml", r#"
+ [project]
+
+ name = "baz"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+
+ [[lib]]
+
+ name = "baz"
+ "#)
+ .file("baz/src/baz.rs", r#"
+ pub fn gimme() -> ~str {
+ "test passed".to_owned()
+ }
+ "#)
+ .build();
+
+ p.cargo_process("cargo-compile")
+ .exec_with_output()
+ .assert();
+
+ assert_that(&p.root().join("target/foo"), existing_file());
+
+ assert_that(
+ cargo::util::process("foo").extra_path(p.root().join("target")),
+ execs().with_stdout("test passed\n"));
+})
+
// test!(compiling_project_with_invalid_manifest)