From 77b9ab08855f24fa53a2d0345dd4cbfabd8848e7 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 9 Jun 2022 09:05:07 -0700 Subject: [PATCH] Add buffer test for autoindent with hard tabs --- crates/language/src/tests.rs | 51 +++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/crates/language/src/tests.rs b/crates/language/src/tests.rs index 7cd830d581..1cee723d12 100644 --- a/crates/language/src/tests.rs +++ b/crates/language/src/tests.rs @@ -571,7 +571,7 @@ fn test_range_for_syntax_ancestor(cx: &mut MutableAppContext) { } #[gpui::test] -fn test_edit_with_autoindent(cx: &mut MutableAppContext) { +fn test_autoindent_with_soft_tabs(cx: &mut MutableAppContext) { cx.add_model(|cx| { let text = "fn a() {}"; let mut buffer = Buffer::new(0, text, cx).with_language(Arc::new(rust_lang()), cx); @@ -586,6 +586,8 @@ fn test_edit_with_autoindent(cx: &mut MutableAppContext) { ); assert_eq!(buffer.text(), "fn a() {\n b()\n \n}"); + // Create a field expression on a new line, causing that line + // to be indented. buffer.edit_with_autoindent( [(Point::new(2, 4)..Point::new(2, 4), ".c")], IndentSize::spaces(4), @@ -593,6 +595,53 @@ fn test_edit_with_autoindent(cx: &mut MutableAppContext) { ); assert_eq!(buffer.text(), "fn a() {\n b()\n .c\n}"); + // Remove the dot so that the line is no longer a field expression, + // causing the line to be outdented. + buffer.edit_with_autoindent( + [(Point::new(2, 8)..Point::new(2, 9), "")], + IndentSize::spaces(4), + cx, + ); + assert_eq!(buffer.text(), "fn a() {\n b()\n c\n}"); + + buffer + }); +} + +#[gpui::test] +fn test_autoindent_with_hard_tabs(cx: &mut MutableAppContext) { + cx.add_model(|cx| { + let text = "fn a() {}"; + let mut buffer = Buffer::new(0, text, cx).with_language(Arc::new(rust_lang()), cx); + + buffer.edit_with_autoindent([(8..8, "\n\n")], IndentSize::tab(), cx); + assert_eq!(buffer.text(), "fn a() {\n\t\n}"); + + buffer.edit_with_autoindent( + [(Point::new(1, 1)..Point::new(1, 1), "b()\n")], + IndentSize::tab(), + cx, + ); + assert_eq!(buffer.text(), "fn a() {\n\tb()\n\t\n}"); + + // Create a field expression on a new line, causing that line + // to be indented. + buffer.edit_with_autoindent( + [(Point::new(2, 1)..Point::new(2, 1), ".c")], + IndentSize::tab(), + cx, + ); + assert_eq!(buffer.text(), "fn a() {\n\tb()\n\t\t.c\n}"); + + // Remove the dot so that the line is no longer a field expression, + // causing the line to be outdented. + buffer.edit_with_autoindent( + [(Point::new(2, 2)..Point::new(2, 3), "")], + IndentSize::tab(), + cx, + ); + assert_eq!(buffer.text(), "fn a() {\n\tb()\n\tc\n}"); + buffer }); }