use racer_testutils::*; #[test] fn follows_struct_field_in_constructor() { let src = " pub struct UserData { name: String, id: usize, } fn main() { UserData { na~ } }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn follows_struct_field_for_typedef() { let src = " pub struct UserData { name: String, id: usize, } type U = UserData; fn main() { U { na~ } }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn follows_struct_field_for_use_as() { let src = " mod m { pub struct UserData { name: String, id: usize, } } fn main() { use m::UserData as U; U { na~ } }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn follows_enum_variant_field_in_constructor() { let src = " enum UserData { Type1 { name: String, id: usize }, Type2, } fn main() { UserData::Type1 { nam~ } }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn follows_struct_field_in_let() { let src = " struct UserData { name: String, id: usize, } fn main() { let UserData { id, nam~ } = f(); }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn follows_struct_field_in_if_let() { let src = " struct UserData { name: String, id: usize, } fn main() { if let UserData { id, nam~ } = f() { } }"; assert_eq!(get_only_completion(src, None).matchstr, "name"); } #[test] fn finds_struct_field_in_constructor() { let src = r#" struct UserData { name: String, id: usize, } fn main() { UserData { name: "abc".to_owned(), i~d: } }"#; assert_eq!(get_definition(src, None).matchstr, "id"); } #[test] fn dont_find_struct_field_in_unsafe() { let src = r#" fn main() { unsafe { println~ } }"#; assert_eq!(get_definition(src, None).matchstr, "println!"); } #[test] fn struct_field_scalar_primitive_types() { let src = " struct Foo<'a> { reference: &'a u8, array: [u8; 5], slice: &'a [u8], } fn foo(x: Foo) { x.~ } "; let completions = get_all_completions(src, None); assert_eq!(completions.len(), 3); for completion in completions { let expected = match completion.matchstr.as_ref() { "reference" => "reference: &'a u8", "array" => "array: [u8; 5]", "slice" => "slice: &'a [u8]", _ => panic!("unexpected match from Foo struct ({})", completion.matchstr), }; assert_eq!(completion.contextstr, expected); } }