blob: a78dccf32e290236767fe09d29f4da2092986c1a [file] [log] [blame]
use racer_testutils::*;
#[test]
fn completes_pub_fn_from_local_package() {
let src = "
extern crate fixtures;
use fixtures::foo;
fn main() {
let x = foo::~
}
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_one_completion(src, Some(srcdir));
assert_eq!("test", got.matchstr);
})
}
#[test]
fn completes_pub_fn_from_local_submodule_package() {
let src = "
extern crate fixtures;
use fixtures::bar;
fn main() {
let x = bar::~
}
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_one_completion(src, Some(srcdir));
assert_eq!("bartest", got.matchstr);
})
}
#[test]
fn follows_use_local_package() {
let src = "
extern crate fixtures;
use fixtures::~
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_all_completions(src, Some(srcdir));
assert!(got.into_iter().any(|ma| ma.matchstr == "foo"));
})
}
#[test]
fn follows_use_local_package_2018() {
let src = "
use test_crat~
";
with_test_project(|dir| {
let cratedir = dir.nested_dir("test-crate4");
let testdir = cratedir.nested_dir("tests");
let got = get_all_completions(src, Some(testdir));
assert!(got.into_iter().any(|ma| ma.matchstr == "test_crate4"));
})
}
#[test]
fn finds_extern_crate() {
let src = "
extern crate fixtures;
f~ixtures
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_definition(src, Some(srcdir));
assert_eq!(got.matchstr, "fixtures");
})
}
// regression test for #800
#[test]
fn completes_typedef_in_external_crate() {
let src = "
extern crate fixtures;
use fixtures::Usize~
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_only_completion(src, Some(srcdir));
assert_eq!(got.matchstr, "UsizeVec");
assert_eq!(got.contextstr, "pub type UsizeVec = Vec<usize>;");
})
}
#[test]
fn follows_external_re_export() {
let src = "
extern crate rayon;
fn main() {
rayon::sco~
}
";
with_test_project(|dir| {
let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
let got = get_only_completion(src, Some(src_dir));
assert_eq!(got.matchstr, "scope");
});
}
#[test]
fn follows_rand_crate() {
let src = "
extern crate rand;
use rand::{Rng, thread_rng};
fn main() {
let mut rng: Box<Rng> = Box::new(thread_rng());
rng.gen_rang~
}
";
with_test_project(|dir| {
let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
let got = get_only_completion(src, Some(src_dir));
assert_eq!(got.matchstr, "gen_range");
});
}
// For issue 826
#[test]
fn find_crate_doc() {
let src = "
extern crate fixtures;
use fixtur~
";
let doc_str = r#"This is a test project for racer.
# Example:
Basic Usage.
```
extern crate fixtures;
use fixtures::foo;
fn main {
println!("Racer")
}
```
## Notes:
- We should check racer can parse rust doc style comments
- and some comments..."#;
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_one_completion(src, Some(srcdir));
assert_eq!(doc_str, got.docs);
})
}
// test for re-export
#[test]
fn follows_use_for_reexport() {
let src = "
extern crate fixtures;
use fixtures::use~;
";
with_test_project(|dir| {
let srcdir = dir.nested_dir("src");
let got = get_only_completion(src, Some(srcdir));
assert_eq!(got.matchstr, "useless_func");
})
}
#[test]
fn completes_cratename_without_extern() {
let src = "
fn main() {
rayon::sco~
}
";
with_test_project(|dir| {
let src_dir = dir.nested_dir("test-crate4").nested_dir("src");
let got = get_only_completion(src, Some(src_dir));
assert_eq!(got.matchstr, "scope");
});
}
#[test]
fn doesnt_complete_cratename_without_extern_in_2015() {
let src = "
fn main() {
rayon::sco~
}
";
with_test_project(|dir| {
let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
let got = get_all_completions(src, Some(src_dir));
assert!(got.is_empty());
});
}
#[test]
fn complete_extern_crate() {
let src = "
extern crate ray~
";
with_test_project(|dir| {
let src_dir = dir.nested_dir("test-crate3").nested_dir("src");
let got = get_only_completion(src, Some(src_dir));
assert_eq!(got.matchstr, "rayon");
});
}