Skip to content

Commit 275c5c4

Browse files
committed
add test in SyntaxEditor
1 parent 4d5f847 commit 275c5c4

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

crates/syntax/src/syntax_editor.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,62 @@ mod tests {
701701
expect.assert_eq(&edit.new_root.to_string());
702702
}
703703

704+
#[test]
705+
fn test_dependent_change_prefers_nearest_changed_ancestor() {
706+
let root = make::block_expr(
707+
[],
708+
Some(
709+
make::block_expr(
710+
[make::let_stmt(
711+
make::ext::simple_ident_pat(make::name("second")).into(),
712+
None,
713+
Some(make::expr_literal("2").into()),
714+
)
715+
.into()],
716+
None,
717+
)
718+
.into(),
719+
),
720+
);
721+
722+
let (editor, root) = SyntaxEditor::with_ast_node(&root);
723+
let make = editor.make();
724+
725+
let inner_block =
726+
root.syntax().descendants().flat_map(ast::BlockExpr::cast).nth(1).unwrap();
727+
728+
let outer_replacement = make.block_expr([], Some(ast::Expr::BlockExpr(root.clone())));
729+
let inner_replacement =
730+
make.block_expr([], Some(ast::Expr::BlockExpr(inner_block.clone())));
731+
732+
let first_let = make.let_stmt(
733+
make::ext::simple_ident_pat(make::name("first")).into(),
734+
None,
735+
Some(make::expr_literal("1").into()),
736+
);
737+
738+
editor.insert(
739+
Position::first_child_of(inner_block.stmt_list().unwrap().syntax()),
740+
first_let.syntax(),
741+
);
742+
editor.replace(inner_block.syntax(), inner_replacement.syntax());
743+
editor.replace(root.syntax(), outer_replacement.syntax());
744+
745+
let edit = editor.finish();
746+
747+
let expect = expect![[r#"
748+
{
749+
{
750+
{
751+
let first = 1;{
752+
let second = 2;
753+
}
754+
}
755+
}
756+
}"#]];
757+
expect.assert_eq(&edit.new_root.to_string());
758+
}
759+
704760
#[test]
705761
fn test_replace_root_with_dependent() {
706762
let root = make::block_expr(

0 commit comments

Comments
 (0)