5201: Add function to test completion edit r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2020-07-03 11:24:28 +00:00 committed by GitHub
commit ef6a6d75d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View file

@ -176,7 +176,10 @@ fn complete_return(
mod tests {
use expect::{expect, Expect};
use crate::completion::{test_utils::completion_list, CompletionKind};
use crate::completion::{
test_utils::{check_edit, completion_list},
CompletionKind,
};
fn check(ra_fixture: &str, expect: Expect) {
let actual = completion_list(ra_fixture, CompletionKind::Keyword);
@ -312,6 +315,11 @@ mod tests {
kw while
"#]],
);
check_edit(
"else",
r#"fn quux() { if true { () } <|> }"#,
r#"fn quux() { if true { () } else {$0} }"#,
);
}
#[test]

View file

@ -1,8 +1,10 @@
//! Runs completion for testing purposes.
use hir::Semantics;
use itertools::Itertools;
use ra_syntax::{AstNode, NodeOrToken, SyntaxElement};
use stdx::format_to;
use test_utils::assert_eq_text;
use crate::{
completion::{completion_item::CompletionKind, CompletionConfig},
@ -54,6 +56,17 @@ pub(crate) fn completion_list_with_options(
.collect()
}
pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
let (analysis, position) = analysis_and_position(ra_fixture_before);
let completions: Vec<CompletionItem> =
analysis.completions(&CompletionConfig::default(), position).unwrap().unwrap().into();
let (completion,) =
completions.into_iter().filter(|it| it.label() == what).collect_tuple().unwrap();
let mut actual = analysis.file_text(position.file_id).unwrap().to_string();
completion.text_edit().apply(&mut actual);
assert_eq_text!(ra_fixture_after, &actual)
}
pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -> bool) {
let (analysis, pos) = analysis_and_position(code);
analysis