Skip to content

Commit

Permalink
Rewrite goto tests to insta
Browse files Browse the repository at this point in the history
commit-id:db86574a
  • Loading branch information
mkaput committed Jan 16, 2025
1 parent 6a0e005 commit 470bd26
Show file tree
Hide file tree
Showing 19 changed files with 593 additions and 546 deletions.
97 changes: 0 additions & 97 deletions tests/e2e/goto_definition.rs

This file was deleted.

60 changes: 60 additions & 0 deletions tests/e2e/goto_definition/enums.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
use crate::goto_definition::goto_definition;
use crate::support::insta::test_transform;

#[test]
fn enum_item_in_type() {
test_transform!(goto_definition, r#"
enum Foo { Bar }
fn calc(foo: Fo<caret>o) {}
"#, @r"
<sel>enum Foo { Bar }</sel>
fn calc(foo: Foo) {}
");
}

#[test]
fn enum_item_in_expr() {
test_transform!(goto_definition, r#"
enum Foo { Bar }
fn main() {
let foo = Fo<caret>o::Bar;
}
"#, @r"
<sel>enum Foo { Bar }</sel>
fn main() {
let foo = Foo::Bar;
}
");
}

#[test]
fn enum_variant_in_expr() {
test_transform!(goto_definition, r#"
enum Foo { Bar }
fn main() { let foo = Foo::Ba<caret>r; }
"#, @r"
enum Foo { <sel>Bar</sel> }
fn main() { let foo = Foo::Bar; }
");
}

#[test]
fn enum_variant_in_pattern() {
test_transform!(goto_definition, r#"
enum Foo { Bar }
fn main() {
let foo = Foo::Bar;
match foo {
Foo::Ba<caret>r => {}
}
}
"#, @r"
enum Foo { <sel>Bar</sel> }
fn main() {
let foo = Foo::Bar;
match foo {
Foo::Bar => {}
}
}
");
}
19 changes: 19 additions & 0 deletions tests/e2e/goto_definition/fns.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
use crate::goto_definition::goto_definition;
use crate::support::insta::test_transform;

#[test]
fn fn_call() {
test_transform!(goto_definition, r"
fn main() { fo<caret>o(); }
fn foo() {} // good
mod bar {
fn foo() {} // bad
}
", @r"
fn main() { foo(); }
<sel>fn foo() {}</sel> // good
mod bar {
fn foo() {} // bad
}
")
}
11 changes: 11 additions & 0 deletions tests/e2e/goto_definition/macros.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use crate::goto_definition::goto_definition;
use crate::support::insta::test_transform;

#[test]
fn inline_macro() {
test_transform!(goto_definition, r#"
fn main() {
prin<caret>t!("Hello, world!");
}
"#, @"none response")
}
75 changes: 75 additions & 0 deletions tests/e2e/goto_definition/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
use lsp_types::{
ClientCapabilities, GotoCapability, GotoDefinitionParams, GotoDefinitionResponse,
TextDocumentClientCapabilities, TextDocumentPositionParams, lsp_request,
};

use crate::support::cairo_project_toml::CAIRO_PROJECT_TOML_2024_07;
use crate::support::cursor::render_selections;
use crate::support::{cursors, sandbox};

mod enums;
mod fns;
mod macros;
mod paths;
mod structs;
mod traits;
mod vars;

fn caps(base: ClientCapabilities) -> ClientCapabilities {
ClientCapabilities {
text_document: base.text_document.or_else(Default::default).map(|it| {
TextDocumentClientCapabilities {
definition: Some(GotoCapability {
dynamic_registration: Some(false),
link_support: None,
}),
..it
}
}),
..base
}
}

fn goto_definition(cairo_code: &str) -> String {
let (cairo, cursors) = cursors(cairo_code);

let mut ls = sandbox! {
files {
"cairo_project.toml" => CAIRO_PROJECT_TOML_2024_07,
"src/lib.cairo" => cairo.clone(),
}
client_capabilities = caps;
};

ls.open_all_cairo_files_and_wait_for_project_update();

assert_eq!(cursors.carets().len(), 1);
let position = cursors.carets()[0];

let code_action_params = GotoDefinitionParams {
text_document_position_params: TextDocumentPositionParams {
text_document: ls.doc_id("src/lib.cairo"),
position,
},
work_done_progress_params: Default::default(),
partial_result_params: Default::default(),
};
let response = ls.send_request::<lsp_request!("textDocument/definition")>(code_action_params);

let ranges = match response {
Some(GotoDefinitionResponse::Scalar(location)) => {
vec![location.range]
}
Some(GotoDefinitionResponse::Array(locations)) => {
locations.into_iter().map(|location| location.range).collect()
}
Some(GotoDefinitionResponse::Link(_)) => {
panic!("unexpected GotoDefinitionResponse::Link");
}
None => {
return "none response".into();
}
};

render_selections(&cairo, &ranges)
}
Loading

0 comments on commit 470bd26

Please sign in to comment.