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,
|
executor::Deterministic,
|
||||||
geometry::{rect::RectF, vector::vec2f},
|
geometry::{rect::RectF, vector::vec2f},
|
||||||
platform::{WindowBounds, WindowOptions},
|
platform::{WindowBounds, WindowOptions},
|
||||||
|
serde_json,
|
||||||
};
|
};
|
||||||
use language::{BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageRegistry, Point};
|
use language::{BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageRegistry, Point};
|
||||||
use project::FakeFs;
|
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]
|
#[gpui::test]
|
||||||
async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) {
|
async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) {
|
||||||
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
cx.update(|cx| cx.set_global(Settings::test(cx)));
|
||||||
|
|
|
@ -258,7 +258,7 @@ pub struct LanguageQueries {
|
||||||
pub overrides: Option<Cow<'static, str>>,
|
pub overrides: Option<Cow<'static, str>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct LanguageScope {
|
pub struct LanguageScope {
|
||||||
language: Arc<Language>,
|
language: Arc<Language>,
|
||||||
override_id: Option<u32>,
|
override_id: Option<u32>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue