Add unit test for auto-closing quotation marks with overrides
This commit is contained in:
parent
ab82e13167
commit
a11165ad0a
2 changed files with 99 additions and 1 deletions
|
@ -13,6 +13,7 @@ use gpui::{
|
|||
executor::Deterministic,
|
||||
geometry::{rect::RectF, vector::vec2f},
|
||||
platform::{WindowBounds, WindowOptions},
|
||||
serde_json,
|
||||
};
|
||||
use language::{BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageRegistry, Point};
|
||||
use project::FakeFs;
|
||||
|
@ -3459,6 +3460,103 @@ async fn test_autoclose_with_embedded_language(cx: &mut gpui::TestAppContext) {
|
|||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_autoclose_with_overrides(cx: &mut gpui::TestAppContext) {
|
||||
let mut cx = EditorTestContext::new(cx);
|
||||
|
||||
let rust_language = Arc::new(
|
||||
Language::new(
|
||||
LanguageConfig {
|
||||
name: "Rust".into(),
|
||||
brackets: serde_json::from_value(json!([
|
||||
{ "start": "{", "end": "}", "close": true, "newline": true },
|
||||
{ "start": "\"", "end": "\"", "close": true, "newline": false, "not_in": ["string"] },
|
||||
]))
|
||||
.unwrap(),
|
||||
autoclose_before: "})]>".into(),
|
||||
..Default::default()
|
||||
},
|
||||
Some(tree_sitter_rust::language()),
|
||||
)
|
||||
.with_override_query("(string_literal) @string")
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
let registry = Arc::new(LanguageRegistry::test());
|
||||
registry.add(rust_language.clone());
|
||||
|
||||
cx.update_buffer(|buffer, cx| {
|
||||
buffer.set_language_registry(registry);
|
||||
buffer.set_language(Some(rust_language), cx);
|
||||
});
|
||||
|
||||
cx.set_state(
|
||||
&r#"
|
||||
let x = ˇ
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
|
||||
// Inserting a quotation mark. A closing quotation mark is automatically inserted.
|
||||
cx.update_editor(|editor, cx| {
|
||||
editor.handle_input("\"", cx);
|
||||
});
|
||||
cx.assert_editor_state(
|
||||
&r#"
|
||||
let x = "ˇ"
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
|
||||
// Inserting another quotation mark. The cursor moves across the existing
|
||||
// automatically-inserted quotation mark.
|
||||
cx.update_editor(|editor, cx| {
|
||||
editor.handle_input("\"", cx);
|
||||
});
|
||||
cx.assert_editor_state(
|
||||
&r#"
|
||||
let x = ""ˇ
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
|
||||
// Reset
|
||||
cx.set_state(
|
||||
&r#"
|
||||
let x = ˇ
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
|
||||
// Inserting a quotation mark inside of a string. A second quotation mark is not inserted.
|
||||
cx.update_editor(|editor, cx| {
|
||||
editor.handle_input("\"", cx);
|
||||
editor.handle_input(" ", cx);
|
||||
editor.move_left(&Default::default(), cx);
|
||||
editor.handle_input("\\", cx);
|
||||
editor.handle_input("\"", cx);
|
||||
});
|
||||
cx.assert_editor_state(
|
||||
&r#"
|
||||
let x = "\"ˇ "
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
|
||||
// Inserting a closing quotation mark at the position of an automatically-inserted quotation
|
||||
// mark. Nothing is inserted.
|
||||
cx.update_editor(|editor, cx| {
|
||||
editor.move_right(&Default::default(), cx);
|
||||
editor.handle_input("\"", cx);
|
||||
});
|
||||
cx.assert_editor_state(
|
||||
&r#"
|
||||
let x = "\" "ˇ
|
||||
"#
|
||||
.unindent(),
|
||||
);
|
||||
}
|
||||
|
||||
#[gpui::test]
|
||||
async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) {
|
||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||
|
|
|
@ -258,7 +258,7 @@ pub struct LanguageQueries {
|
|||
pub overrides: Option<Cow<'static, str>>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct LanguageScope {
|
||||
language: Arc<Language>,
|
||||
override_id: Option<u32>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue