@@ -85,3 +85,131 @@ async fn cursor_position_newly_opened_file() -> anyhow::Result<()> {
90+async fn select_mode_tree_sitter_next_function_is_union_of_objects() -> anyhow::Result<()> {
93+ files: vec![(PathBuf::from("foo.rs"), Position::default())],
98+ helpers::platform_line(indoc! {"\
100+ fn inc(x: usize) -> usize { x + 1 }
102+ fn dec(x: usize) -> usize { x - 1 }
106+ helpers::platform_line(indoc! {"\
108+ #[fn inc(x: usize) -> usize { x + 1 }
110+ fn dec(x: usize) -> usize { x - 1 }|]#
121+async fn select_mode_tree_sitter_prev_function_unselects_object() -> anyhow::Result<()> {
124+ files: vec![(PathBuf::from("foo.rs"), Position::default())],
125+ ..Default::default()
129+ helpers::platform_line(indoc! {"\
131+ #[fn inc(x: usize) -> usize { x + 1 }
133+ fn dec(x: usize) -> usize { x - 1 }|]#
137+ helpers::platform_line(indoc! {"\
139+ #[fn inc(x: usize) -> usize { x + 1 }|]#
141+ fn dec(x: usize) -> usize { x - 1 }
152+async fn select_mode_tree_sitter_prev_function_goes_backwards_to_object() -> anyhow::Result<()> {
153+ // Note: the anchor stays put and the head moves back.
156+ files: vec![(PathBuf::from("foo.rs"), Position::default())],
157+ ..Default::default()
161+ helpers::platform_line(indoc! {"\
163+ fn inc(x: usize) -> usize { x + 1 }
165+ fn dec(x: usize) -> usize { x - 1 }
167+ #[fn ident(x: usize) -> usize { x }|]#
171+ helpers::platform_line(indoc! {"\
173+ fn inc(x: usize) -> usize { x + 1 }
175+ #[|fn dec(x: usize) -> usize { x - 1 }
177+ ]#fn ident(x: usize) -> usize { x }
186+ files: vec![(PathBuf::from("foo.rs"), Position::default())],
187+ ..Default::default()
191+ helpers::platform_line(indoc! {"\
193+ fn inc(x: usize) -> usize { x + 1 }
195+ fn dec(x: usize) -> usize { x - 1 }
197+ #[fn ident(x: usize) -> usize { x }|]#
201+ helpers::platform_line(indoc! {"\
203+ #[|fn inc(x: usize) -> usize { x + 1 }
205+ fn dec(x: usize) -> usize { x - 1 }
207+ ]#fn ident(x: usize) -> usize { x }