use iced::text_input; use iced_focus::Focus; #[derive(Focus)] struct Example { #[focus(enable)] text_input_first: text_input::State, #[focus(enable)] text_inputs: Vec, #[focus(enable)] text_input_last: text_input::State, } fn test_forwards() { let mut example = Example { text_input_first: text_input::State::new(), text_inputs: Vec::new(), text_input_last: text_input::State::new(), }; assert!(!example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_last.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(example.text_input_first.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_last.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(example.text_input_last.has_focus()); let mut example = Example { text_input_first: text_input::State::new(), text_inputs: std::iter::repeat(text_input::State::new()) .take(10) .collect(), text_input_last: text_input::State::new(), }; assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(example.text_input_first.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_last.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_input_last.has_focus()); let range: Vec = (0..example.text_inputs.len()).into_iter().collect(); for window in range.windows(2) { assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_inputs[window[0]].has_focus()); assert!(example.text_inputs[window[1]].has_focus()); } assert!(example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_input_last.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Forwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(example.text_input_last.has_focus()); } fn test_backwards() { let mut example = Example { text_input_first: text_input::State::new(), text_inputs: Vec::new(), text_input_last: text_input::State::new(), }; assert!(!example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_first.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(example.text_input_last.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_first.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(example.text_input_first.has_focus()); let mut example = Example { text_input_first: text_input::State::new(), text_inputs: std::iter::repeat(text_input::State::new()) .take(10) .collect(), text_input_last: text_input::State::new(), }; assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(example.text_input_last.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(!example.text_input_first.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_input_first.has_focus()); let range: Vec = (0..example.text_inputs.len()).into_iter().rev().collect(); for window in range.windows(2) { assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(!example.text_input_first.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_inputs[window[0]].has_focus()); assert!(example.text_inputs[window[1]].has_focus()); } assert!(example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(example.text_inputs.has_focus()); assert!(!example.text_input_first.has_focus()); assert_eq!( example.focus(iced_focus::Direction::Backwards), iced_focus::State::Kept ); assert!(example.has_focus()); assert!(!example.text_input_last.has_focus()); assert!(!example.text_inputs.has_focus()); assert!(example.text_input_first.has_focus()); } fn main() { test_forwards(); test_backwards(); }