use super::build_reference_expression;
use crate::ast::node_utils::AstNodeAndId;
use crate::syntax::_node_builders::languages::rust::tests_utils::{find_node, rust_ast_graph};
use crate::syntax::core_nodes::{
CoreSyntaxNode, CoreSyntaxNodeWithId, ReferenceExpression, StringLiteral,
};
use crate::NodeId;
fn mock_node(kind: &str) -> CoreSyntaxNode {
CoreSyntaxNode::StringLiteral(StringLiteral {
value: format!("mock: {kind}"),
})
}
fn mock_build((node, n_id): AstNodeAndId) -> CoreSyntaxNodeWithId {
(mock_node(&node.kind), n_id)
}
fn build(source: &str) -> ReferenceExpression {
let graph = rust_ast_graph(source);
let node = find_node(&graph, "reference_expression");
build_reference_expression(&graph, node, |p| Ok(mock_build(p))).unwrap()
}
const SOURCE: &str = include_str!("case_1.test.rs");
#[test]
fn builds_reference_1() {
let expected = ReferenceExpression {
value: (mock_node("integer_literal"), NodeId(16)),
is_mutable: false,
is_raw: false,
};
assert_eq!(build(SOURCE), expected);
}
const SOURCE_2: &str = include_str!("case_2.test.rs");
#[test]
fn builds_reference_2() {
let expected = ReferenceExpression {
value: (mock_node("identifier"), NodeId(23)),
is_mutable: true,
is_raw: false,
};
assert_eq!(build(SOURCE_2), expected);
}
const SOURCE_3: &str = include_str!("case_3.test.rs");
#[test]
fn builds_reference_3() {
let expected = ReferenceExpression {
value: (mock_node("call_expression"), NodeId(18)),
is_mutable: false,
is_raw: true,
};
assert_eq!(build(SOURCE_3), expected);
}
const SOURCE_4: &str = include_str!("case_4.test.rs");
#[test]
fn builds_reference_4() {
let expected = ReferenceExpression {
value: (mock_node("identifier"), NodeId(24)),
is_mutable: true,
is_raw: true,
};
assert_eq!(build(SOURCE_4), expected);
}