diff --git a/frontends/rioterm/src/context/mod.rs b/frontends/rioterm/src/context/mod.rs index 74639624fb..1487765426 100644 --- a/frontends/rioterm/src/context/mod.rs +++ b/frontends/rioterm/src/context/mod.rs @@ -1255,6 +1255,194 @@ pub mod test { assert_eq!(context_manager.current_index, 1); } + #[test] + fn test_switch_to_next_split_or_tab() { + let window_id: WindowId = WindowId::from(0); + + let mut context_manager = + ContextManager::start_with_capacity(5, VoidListener {}, window_id).unwrap(); + let should_redirect = true; + let split_down = false; + + context_manager.add_context(should_redirect, 0); + context_manager.split(0, split_down); + context_manager.split(0, split_down); + context_manager.add_context(should_redirect, 0); + context_manager.add_context(should_redirect, 0); + context_manager.split(0, split_down); + context_manager.add_context(should_redirect, 0); + context_manager.set_current(0); + assert_eq!(context_manager.len(), 5); + assert_eq!(context_manager.current_index, 0); + + let mut current_index; + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 2); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 2); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 3); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 3); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 4); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 0); + assert_eq!(context_manager.contexts[current_index].current, 0); + } + + #[test] + fn test_switch_to_prev_split_or_tab() { + let window_id: WindowId = WindowId::from(0); + + let mut context_manager = + ContextManager::start_with_capacity(5, VoidListener {}, window_id).unwrap(); + let should_redirect = true; + let split_down = false; + + context_manager.add_context(should_redirect, 0); + context_manager.split(0, split_down); + context_manager.split(0, split_down); + context_manager.add_context(should_redirect, 0); + context_manager.add_context(should_redirect, 0); + context_manager.split(0, split_down); + context_manager.add_context(should_redirect, 0); + context_manager.set_current(0); + assert_eq!(context_manager.len(), 5); + assert_eq!(context_manager.current_index, 0); + + let mut current_index; + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 4); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 3); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 3); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 2); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 2); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 0); + assert_eq!(context_manager.contexts[current_index].current, 0); + } + + #[test] + fn test_switch_to_next_and_prev_split_or_tab() { + let window_id: WindowId = WindowId::from(0); + + let mut context_manager = + ContextManager::start_with_capacity(5, VoidListener {}, window_id).unwrap(); + let should_redirect = true; + let split_down = false; + + context_manager.add_context(should_redirect, 0); + context_manager.split(0, split_down); + context_manager.split(0, split_down); + context_manager.add_context(should_redirect, 0); + context_manager.set_current(0); + assert_eq!(context_manager.len(), 3); + assert_eq!(context_manager.current_index, 0); + + let mut current_index; + + // Next + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 2); + + context_manager.switch_to_next_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 2); + assert_eq!(context_manager.contexts[current_index].current, 0); + + // Prev + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 2); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 1); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 1); + assert_eq!(context_manager.contexts[current_index].current, 0); + + context_manager.switch_to_prev_split_or_tab(); + current_index = context_manager.current_index; + assert_eq!(current_index, 0); + assert_eq!(context_manager.contexts[current_index].current, 0); + } + #[test] fn test_move_current_to_next() { let window_id = WindowId::from(0);