Skip to content

Commit

Permalink
Merge pull request #12 from mtb0x1/main
Browse files Browse the repository at this point in the history
fix: avoid crash when navigation keys used with an empty console
  • Loading branch information
jfernandez authored Feb 27, 2024
2 parents 11ac6e3 + d1269da commit 352c617
Showing 1 changed file with 50 additions and 25 deletions.
75 changes: 50 additions & 25 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,46 +156,59 @@ impl App {
None => None,
}
}

pub fn next_program(&mut self) {
let items = self.items.lock().unwrap();
let mut state = self.state.lock().unwrap();

let i = match state.selected() {
Some(i) => {
if i >= items.len() - 1 {
0
} else {
i + 1
if items.len() > 0 {
let mut state = self.state.lock().unwrap();
let i = match state.selected() {
Some(i) => {
if i >= items.len() - 1 {
0
} else {
i + 1
}
}
}
None => 0,
};
state.select(Some(i));
None => 0,
};
state.select(Some(i));
}
}

pub fn previous_program(&mut self) {
let items = self.items.lock().unwrap();
let mut state = self.state.lock().unwrap();

let i = match state.selected() {
Some(i) => {
if i == 0 {
items.len() - 1
} else {
i - 1
if items.len() > 0 {
let mut state = self.state.lock().unwrap();
let i = match state.selected() {
Some(i) => {
if i == 0 {
items.len() - 1
} else {
i - 1
}
}
}
None => items.len() - 1,
};
state.select(Some(i));
None => items.len() - 1,
};
state.select(Some(i));
}
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_next_program_with_empty() {
let mut app = App::new();

// Initially no item is selected
assert_eq!(app.selected_program(), None);

// After calling next, no item should be selected
app.next_program();
assert_eq!(app.selected_program(), None);
}

#[test]
fn test_next_program() {
let mut app = App::new();
Expand Down Expand Up @@ -243,6 +256,18 @@ mod tests {
assert_eq!(app.selected_program(), Some(prog_1.clone()));
}

#[test]
fn test_previous_program_with_empty() {
let mut app = App::new();

// Initially no item is selected
assert_eq!(app.selected_program(), None);

// After calling previous, no item should be selected
app.previous_program();
assert_eq!(app.selected_program(), None);
}

#[test]
fn test_previous_program() {
let mut app = App::new();
Expand Down

0 comments on commit 352c617

Please sign in to comment.