From 66be735aa98c32fb062d1c756fa9303ff2d13002 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 12 Aug 2018 18:50:16 +0300 Subject: flip comma --- crates/libeditor/tests/test.rs | 52 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 7 deletions(-) (limited to 'crates/libeditor/tests') diff --git a/crates/libeditor/tests/test.rs b/crates/libeditor/tests/test.rs index dedca49a4..369854fed 100644 --- a/crates/libeditor/tests/test.rs +++ b/crates/libeditor/tests/test.rs @@ -1,9 +1,16 @@ extern crate libeditor; +extern crate libsyntax2; extern crate itertools; +#[macro_use] +extern crate assert_eq_text; use std::fmt; use itertools::Itertools; -use libeditor::{File, highlight, runnables, extend_selection, TextRange, file_symbols}; +use libsyntax2::AstNode; +use libeditor::{ + File, TextUnit, TextRange, + highlight, runnables, extend_selection, file_symbols, flip_comma, +}; #[test] fn test_extend_selection() { @@ -27,13 +34,13 @@ fn main() {} "#); let hls = highlight(&file); dbg_eq( - &hls, r#"[HighlightedRange { range: [1; 11), tag: "comment" }, HighlightedRange { range: [12; 14), tag: "keyword" }, HighlightedRange { range: [15; 19), tag: "function" }, HighlightedRange { range: [29; 36), tag: "text" }, HighlightedRange { range: [38; 50), tag: "string" }, - HighlightedRange { range: [52; 54), tag: "literal" }]"# + HighlightedRange { range: [52; 54), tag: "literal" }]"#, + &hls, ); } @@ -51,10 +58,10 @@ fn test_foo() {} "#); let runnables = runnables(&file); dbg_eq( - &runnables, r#"[Runnable { range: [1; 13), kind: Bin }, Runnable { range: [15; 39), kind: Test { name: "test_foo" } }, Runnable { range: [41; 75), kind: Test { name: "test_foo" } }]"#, + &runnables, ) } @@ -76,7 +83,6 @@ const C: i32 = 92; "#); let symbols = file_symbols(&file); dbg_eq( - &symbols, r#"[FileSymbol { parent: None, name: "Foo", name_range: [8; 11), node_range: [1; 26), kind: STRUCT }, FileSymbol { parent: None, name: "m", name_range: [32; 33), node_range: [28; 53), kind: MODULE }, FileSymbol { parent: Some(1), name: "bar", name_range: [43; 46), node_range: [40; 51), kind: FUNCTION }, @@ -84,6 +90,19 @@ const C: i32 = 92; FileSymbol { parent: None, name: "T", name_range: [81; 82), node_range: [76; 88), kind: TYPE_ITEM }, FileSymbol { parent: None, name: "S", name_range: [96; 97), node_range: [89; 108), kind: STATIC_ITEM }, FileSymbol { parent: None, name: "C", name_range: [115; 116), node_range: [109; 127), kind: CONST_ITEM }]"#, + &symbols, + ) +} + +#[test] +fn test_swap_comma() { + check_modification( + "fn foo(x: i32,<|> y: Result<(), ()>) {}", + "fn foo(y: Result<(), ()>, x: i32) {}", + &|file, offset| { + let edit = flip_comma(file, offset).unwrap()(); + edit.apply(&file.syntax().text()) + }, ) } @@ -91,8 +110,27 @@ fn file(text: &str) -> File { File::parse(text) } -fn dbg_eq(actual: &impl fmt::Debug, expected: &str) { +fn dbg_eq(expected: &str, actual: &impl fmt::Debug) { let actual = format!("{:?}", actual); let expected = expected.lines().map(|l| l.trim()).join(" "); - assert_eq!(actual, expected); + assert_eq!(expected, actual); +} + +fn check_modification( + before: &str, + after: &str, + f: &impl Fn(&File, TextUnit) -> String, +) { + let cursor = "<|>"; + let cursor_pos = match before.find(cursor) { + None => panic!("before text should contain cursor marker"), + Some(pos) => pos, + }; + let mut text = String::with_capacity(before.len() - cursor.len()); + text.push_str(&before[..cursor_pos]); + text.push_str(&before[cursor_pos + cursor.len()..]); + let cursor_pos = TextUnit::from(cursor_pos as u32); + let file = file(&text); + let actual = f(&file, cursor_pos); + assert_eq_text!(after, &actual); } -- cgit v1.2.3