Update all unit tests
This commit is contained in:
parent
f9a9c264cc
commit
9d73a37f1a
484
src/tui/app.rs
484
src/tui/app.rs
@ -1,484 +0,0 @@
|
||||
// #[cfg(test)]
|
||||
// mod tests {
|
||||
// use crate::tests::{MockCollectionManager, COLLECTION};
|
||||
|
||||
// use super::*;
|
||||
|
||||
// #[test]
|
||||
// fn test_track_selection() {
|
||||
// let tracks = &COLLECTION[0].albums[0].tracks;
|
||||
// assert!(tracks.len() > 1);
|
||||
|
||||
// let empty = SelectedTrack::initialise(&vec![]);
|
||||
// assert!(empty.is_none());
|
||||
|
||||
// let sel = SelectedTrack::initialise(tracks);
|
||||
// assert!(sel.is_some());
|
||||
|
||||
// let mut sel = sel.unwrap();
|
||||
// assert_eq!(sel.index, 0);
|
||||
|
||||
// sel.decrement(tracks);
|
||||
// assert_eq!(sel.index, 0);
|
||||
|
||||
// sel.increment(tracks);
|
||||
// assert_eq!(sel.index, 1);
|
||||
|
||||
// sel.decrement(tracks);
|
||||
// assert_eq!(sel.index, 0);
|
||||
|
||||
// for _ in 0..(tracks.len() + 5) {
|
||||
// sel.increment(tracks);
|
||||
// }
|
||||
// assert_eq!(sel.index, tracks.len() - 1);
|
||||
|
||||
// // Artifical test case to verify upper limit.
|
||||
// let mut sel = SelectedTrack {
|
||||
// index: std::usize::MAX,
|
||||
// };
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
|
||||
// sel.increment(&vec![]);
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn test_album_selection() {
|
||||
// let albums = &COLLECTION[0].albums;
|
||||
// assert!(albums.len() > 1);
|
||||
|
||||
// let empty = SelectedAlbum::initialise(&vec![]);
|
||||
// assert!(empty.is_none());
|
||||
|
||||
// let sel = SelectedAlbum::initialise(albums);
|
||||
// assert!(sel.is_some());
|
||||
|
||||
// let mut sel = sel.unwrap();
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.track
|
||||
// .as_mut()
|
||||
// .unwrap()
|
||||
// .increment(&albums[sel.index].tracks);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Verify that decrement that doesn't change index does not reset track.
|
||||
// sel.decrement(albums);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
|
||||
// sel.increment(albums);
|
||||
// assert_eq!(sel.index, 1);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.decrement(albums);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 0);
|
||||
|
||||
// for _ in 0..(albums.len() + 5) {
|
||||
// sel.increment(albums);
|
||||
// }
|
||||
// assert_eq!(sel.index, albums.len() - 1);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.track
|
||||
// .as_mut()
|
||||
// .unwrap()
|
||||
// .increment(&albums[sel.index].tracks);
|
||||
// assert_eq!(sel.index, albums.len() - 1);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Verify that increment that doesn't change index does not reset track.
|
||||
// sel.increment(albums);
|
||||
// assert_eq!(sel.index, albums.len() - 1);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Artifical test case to verify upper limit.
|
||||
// let mut sel = SelectedAlbum {
|
||||
// index: std::usize::MAX,
|
||||
// track: Some(SelectedTrack { index: 1 }),
|
||||
// };
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
|
||||
// sel.increment(&vec![]);
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
// assert!(sel.track.is_some());
|
||||
// assert_eq!(sel.track.as_ref().unwrap().index, 1);
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn test_artist_selection() {
|
||||
// let artists = &COLLECTION;
|
||||
// assert!(artists.len() > 1);
|
||||
|
||||
// let empty = SelectedArtist::initialise(&vec![]);
|
||||
// assert!(empty.is_none());
|
||||
|
||||
// let sel = SelectedArtist::initialise(artists);
|
||||
// assert!(sel.is_some());
|
||||
|
||||
// let mut sel = sel.unwrap();
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.album
|
||||
// .as_mut()
|
||||
// .unwrap()
|
||||
// .increment(&artists[sel.index].albums);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Verify that decrement that doesn't change index does not reset album.
|
||||
// sel.decrement(artists);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
|
||||
// sel.increment(artists);
|
||||
// assert_eq!(sel.index, 1);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.decrement(artists);
|
||||
// assert_eq!(sel.index, 0);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 0);
|
||||
|
||||
// for _ in 0..(artists.len() + 5) {
|
||||
// sel.increment(artists);
|
||||
// }
|
||||
// assert_eq!(sel.index, artists.len() - 1);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 0);
|
||||
|
||||
// sel.album
|
||||
// .as_mut()
|
||||
// .unwrap()
|
||||
// .increment(&artists[sel.index].albums);
|
||||
// assert_eq!(sel.index, artists.len() - 1);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Verify that increment that doesn't change index does not reset album.
|
||||
// sel.increment(artists);
|
||||
// assert_eq!(sel.index, artists.len() - 1);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
|
||||
// // Artifical test case to verify upper limit.
|
||||
// let mut sel = SelectedArtist {
|
||||
// index: std::usize::MAX,
|
||||
// album: Some(SelectedAlbum {
|
||||
// index: 1,
|
||||
// track: None,
|
||||
// }),
|
||||
// };
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
|
||||
// sel.increment(&vec![]);
|
||||
// assert_eq!(sel.index, std::usize::MAX);
|
||||
// assert!(sel.album.is_some());
|
||||
// assert_eq!(sel.album.as_ref().unwrap().index, 1);
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn app_running() {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .times(1)
|
||||
// .return_once(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(COLLECTION.to_owned());
|
||||
|
||||
// let mut app = TuiApp::new(collection_manager).unwrap();
|
||||
// assert!(app.is_running());
|
||||
|
||||
// app.quit();
|
||||
// assert!(!app.is_running());
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn app_modifiers() {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .times(1)
|
||||
// .return_once(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(COLLECTION.to_owned());
|
||||
|
||||
// let mut app = TuiApp::new(collection_manager).unwrap();
|
||||
// assert!(app.is_running());
|
||||
|
||||
// assert!(!app.get_artist_ids().is_empty());
|
||||
// assert!(!app.get_album_ids().is_empty());
|
||||
// assert!(!app.get_track_ids().is_empty());
|
||||
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(1));
|
||||
|
||||
// app.increment_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(1));
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_selection();
|
||||
// app.decrement_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(1));
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_selection();
|
||||
// app.decrement_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(1));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
|
||||
// app.increment_category();
|
||||
// app.increment_selection();
|
||||
// app.decrement_category();
|
||||
// app.decrement_selection();
|
||||
// app.decrement_category();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(1));
|
||||
// assert_eq!(app.selected_track(), Some(0));
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn app_no_tracks() {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
// let mut collection = COLLECTION.to_owned();
|
||||
// collection[0].albums[0].tracks = vec![];
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .times(1)
|
||||
// .return_once(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(collection);
|
||||
|
||||
// let mut app = TuiApp::new(collection_manager).unwrap();
|
||||
// assert!(app.is_running());
|
||||
|
||||
// assert!(!app.get_artist_ids().is_empty());
|
||||
// assert!(!app.get_album_ids().is_empty());
|
||||
// assert!(app.get_track_ids().is_empty());
|
||||
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_category();
|
||||
// app.increment_category();
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), Some(0));
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn app_no_albums() {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
// let mut collection = COLLECTION.to_owned();
|
||||
// collection[0].albums = vec![];
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .times(1)
|
||||
// .return_once(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(collection);
|
||||
|
||||
// let mut app = TuiApp::new(collection_manager).unwrap();
|
||||
// assert!(app.is_running());
|
||||
|
||||
// assert!(!app.get_artist_ids().is_empty());
|
||||
// assert!(app.get_album_ids().is_empty());
|
||||
// assert!(app.get_track_ids().is_empty());
|
||||
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_category();
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_category();
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), Some(0));
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
// }
|
||||
|
||||
// #[test]
|
||||
// fn app_no_artists() {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
// let collection = vec![];
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .times(1)
|
||||
// .return_once(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(collection);
|
||||
|
||||
// let mut app = TuiApp::new(collection_manager).unwrap();
|
||||
// assert!(app.is_running());
|
||||
|
||||
// assert!(app.get_artist_ids().is_empty());
|
||||
// assert!(app.get_album_ids().is_empty());
|
||||
// assert!(app.get_track_ids().is_empty());
|
||||
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Artist);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_category();
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Album);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.increment_category();
|
||||
|
||||
// app.increment_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
|
||||
// app.decrement_selection();
|
||||
// assert_eq!(app.get_active_category(), Category::Track);
|
||||
// assert_eq!(app.selected_artist(), None);
|
||||
// assert_eq!(app.selected_album(), None);
|
||||
// assert_eq!(app.selected_track(), None);
|
||||
// }
|
||||
// }
|
237
src/tui/mod.rs
237
src/tui/mod.rs
@ -156,151 +156,150 @@ impl<B: Backend, UI: Ui> Tui<B, UI> {
|
||||
// GRCOV_EXCL_STOP
|
||||
}
|
||||
|
||||
// #[cfg(test)]
|
||||
// mod tests {
|
||||
// use std::{io, thread};
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::{io, thread};
|
||||
|
||||
// use musichoard::collection::{self, Collection};
|
||||
// use ratatui::{backend::TestBackend, Terminal};
|
||||
use musichoard::collection::{self, Collection};
|
||||
use ratatui::{backend::TestBackend, Terminal};
|
||||
|
||||
// use crate::tests::{MockCollectionManager, COLLECTION};
|
||||
use crate::tests::{MockCollectionManager, COLLECTION};
|
||||
|
||||
// use super::{
|
||||
// app::TuiApp, event::EventError, handler::MockEventHandler, listener::MockEventListener,
|
||||
// ui::Ui, Error, Tui,
|
||||
// };
|
||||
use super::{
|
||||
event::EventError,
|
||||
handler::MockEventHandler,
|
||||
listener::MockEventListener,
|
||||
ui::{MhUi, Ui},
|
||||
Error, Tui,
|
||||
};
|
||||
|
||||
// pub fn terminal() -> Terminal<TestBackend> {
|
||||
// let backend = TestBackend::new(150, 30);
|
||||
// Terminal::new(backend).unwrap()
|
||||
// }
|
||||
pub fn terminal() -> Terminal<TestBackend> {
|
||||
let backend = TestBackend::new(150, 30);
|
||||
Terminal::new(backend).unwrap()
|
||||
}
|
||||
|
||||
// pub fn app(collection: Collection) -> TuiApp<MockCollectionManager> {
|
||||
// let mut collection_manager = MockCollectionManager::new();
|
||||
pub fn app(collection: Collection) -> MhUi<MockCollectionManager> {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
|
||||
// collection_manager
|
||||
// .expect_rescan_library()
|
||||
// .returning(|| Ok(()));
|
||||
// collection_manager
|
||||
// .expect_get_collection()
|
||||
// .return_const(collection);
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.returning(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(collection);
|
||||
|
||||
// TuiApp::new(collection_manager).unwrap()
|
||||
// }
|
||||
MhUi::new(collection_manager).unwrap()
|
||||
}
|
||||
|
||||
// fn listener() -> MockEventListener {
|
||||
// let mut listener = MockEventListener::new();
|
||||
// listener.expect_spawn().return_once(|| {
|
||||
// thread::spawn(|| {
|
||||
// thread::park();
|
||||
// return EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "unparked"));
|
||||
// })
|
||||
// });
|
||||
// listener
|
||||
// }
|
||||
fn listener() -> MockEventListener {
|
||||
let mut listener = MockEventListener::new();
|
||||
listener.expect_spawn().return_once(|| {
|
||||
thread::spawn(|| {
|
||||
thread::park();
|
||||
return EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "unparked"));
|
||||
})
|
||||
});
|
||||
listener
|
||||
}
|
||||
|
||||
// fn handler() -> MockEventHandler<TuiApp<MockCollectionManager>> {
|
||||
// let mut handler = MockEventHandler::new();
|
||||
// handler.expect_handle_next_event().return_once(
|
||||
// |app: &mut TuiApp<MockCollectionManager>| {
|
||||
// app.quit();
|
||||
// Ok(())
|
||||
// },
|
||||
// );
|
||||
// handler
|
||||
// }
|
||||
fn handler() -> MockEventHandler<MhUi<MockCollectionManager>> {
|
||||
let mut handler = MockEventHandler::new();
|
||||
handler
|
||||
.expect_handle_next_event()
|
||||
.return_once(|app: &mut MhUi<MockCollectionManager>| {
|
||||
app.quit();
|
||||
Ok(())
|
||||
});
|
||||
handler
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn run() {
|
||||
// let terminal = terminal();
|
||||
// let app = app(COLLECTION.to_owned());
|
||||
// let ui = Ui::new();
|
||||
#[test]
|
||||
fn run() {
|
||||
let terminal = terminal();
|
||||
let app = app(COLLECTION.to_owned());
|
||||
|
||||
// let listener = listener();
|
||||
// let handler = handler();
|
||||
let listener = listener();
|
||||
let handler = handler();
|
||||
|
||||
// let result = Tui::main(terminal, app, ui, handler, listener);
|
||||
// assert!(result.is_ok());
|
||||
// }
|
||||
let result = Tui::main(terminal, app, handler, listener);
|
||||
assert!(result.is_ok());
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn event_error() {
|
||||
// let terminal = terminal();
|
||||
// let app = app(COLLECTION.to_owned());
|
||||
// let ui = Ui::new();
|
||||
#[test]
|
||||
fn event_error() {
|
||||
let terminal = terminal();
|
||||
let app = app(COLLECTION.to_owned());
|
||||
|
||||
// let listener = listener();
|
||||
let listener = listener();
|
||||
|
||||
// let mut handler = MockEventHandler::new();
|
||||
// handler
|
||||
// .expect_handle_next_event()
|
||||
// .return_once(|_| Err(EventError::Recv));
|
||||
let mut handler = MockEventHandler::new();
|
||||
handler
|
||||
.expect_handle_next_event()
|
||||
.return_once(|_| Err(EventError::Recv));
|
||||
|
||||
// let result = Tui::main(terminal, app, ui, handler, listener);
|
||||
// assert!(result.is_err());
|
||||
// assert_eq!(
|
||||
// result.unwrap_err(),
|
||||
// Error::Event(EventError::Recv.to_string())
|
||||
// );
|
||||
// }
|
||||
let result = Tui::main(terminal, app, handler, listener);
|
||||
assert!(result.is_err());
|
||||
assert_eq!(
|
||||
result.unwrap_err(),
|
||||
Error::Event(EventError::Recv.to_string())
|
||||
);
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn listener_error() {
|
||||
// let terminal = terminal();
|
||||
// let app = app(COLLECTION.to_owned());
|
||||
// let ui = Ui::new();
|
||||
#[test]
|
||||
fn listener_error() {
|
||||
let terminal = terminal();
|
||||
let app = app(COLLECTION.to_owned());
|
||||
|
||||
// let error = EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "error"));
|
||||
// let listener_handle: thread::JoinHandle<EventError> = thread::spawn(|| error);
|
||||
// while !listener_handle.is_finished() {}
|
||||
let error = EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "error"));
|
||||
let listener_handle: thread::JoinHandle<EventError> = thread::spawn(|| error);
|
||||
while !listener_handle.is_finished() {}
|
||||
|
||||
// let mut listener = MockEventListener::new();
|
||||
// listener.expect_spawn().return_once(|| listener_handle);
|
||||
let mut listener = MockEventListener::new();
|
||||
listener.expect_spawn().return_once(|| listener_handle);
|
||||
|
||||
// let mut handler = MockEventHandler::new();
|
||||
// handler
|
||||
// .expect_handle_next_event()
|
||||
// .return_once(|_| Err(EventError::Recv));
|
||||
let mut handler = MockEventHandler::new();
|
||||
handler
|
||||
.expect_handle_next_event()
|
||||
.return_once(|_| Err(EventError::Recv));
|
||||
|
||||
// let result = Tui::main(terminal, app, ui, handler, listener);
|
||||
// assert!(result.is_err());
|
||||
let result = Tui::main(terminal, app, handler, listener);
|
||||
assert!(result.is_err());
|
||||
|
||||
// let error = EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "error"));
|
||||
// assert_eq!(result.unwrap_err(), Error::Event(error.to_string()));
|
||||
// }
|
||||
let error = EventError::Io(io::Error::new(io::ErrorKind::Interrupted, "error"));
|
||||
assert_eq!(result.unwrap_err(), Error::Event(error.to_string()));
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn listener_panic() {
|
||||
// let terminal = terminal();
|
||||
// let app = app(COLLECTION.to_owned());
|
||||
// let ui = Ui::new();
|
||||
#[test]
|
||||
fn listener_panic() {
|
||||
let terminal = terminal();
|
||||
let app = app(COLLECTION.to_owned());
|
||||
|
||||
// let listener_handle: thread::JoinHandle<EventError> = thread::spawn(|| panic!());
|
||||
// while !listener_handle.is_finished() {}
|
||||
let listener_handle: thread::JoinHandle<EventError> = thread::spawn(|| panic!());
|
||||
while !listener_handle.is_finished() {}
|
||||
|
||||
// let mut listener = MockEventListener::new();
|
||||
// listener.expect_spawn().return_once(|| listener_handle);
|
||||
let mut listener = MockEventListener::new();
|
||||
listener.expect_spawn().return_once(|| listener_handle);
|
||||
|
||||
// let mut handler = MockEventHandler::new();
|
||||
// handler
|
||||
// .expect_handle_next_event()
|
||||
// .return_once(|_| Err(EventError::Recv));
|
||||
let mut handler = MockEventHandler::new();
|
||||
handler
|
||||
.expect_handle_next_event()
|
||||
.return_once(|_| Err(EventError::Recv));
|
||||
|
||||
// let result = Tui::main(terminal, app, ui, handler, listener);
|
||||
// assert!(result.is_err());
|
||||
// assert_eq!(result.unwrap_err(), Error::ListenerPanic);
|
||||
// }
|
||||
let result = Tui::main(terminal, app, handler, listener);
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err(), Error::ListenerPanic);
|
||||
}
|
||||
|
||||
// #[test]
|
||||
// fn errors() {
|
||||
// let collection_err: Error = collection::Error::DatabaseError(String::from("")).into();
|
||||
// let io_err: Error = io::Error::new(io::ErrorKind::Interrupted, "error").into();
|
||||
// let event_err: Error = EventError::Recv.into();
|
||||
// let listener_err = Error::ListenerPanic;
|
||||
#[test]
|
||||
fn errors() {
|
||||
let collection_err: Error = collection::Error::DatabaseError(String::from("")).into();
|
||||
let io_err: Error = io::Error::new(io::ErrorKind::Interrupted, "error").into();
|
||||
let event_err: Error = EventError::Recv.into();
|
||||
let listener_err = Error::ListenerPanic;
|
||||
|
||||
// assert!(!format!("{:?}", collection_err).is_empty());
|
||||
// assert!(!format!("{:?}", io_err).is_empty());
|
||||
// assert!(!format!("{:?}", event_err).is_empty());
|
||||
// assert!(!format!("{:?}", listener_err).is_empty());
|
||||
// }
|
||||
// }
|
||||
assert!(!format!("{:?}", collection_err).is_empty());
|
||||
assert!(!format!("{:?}", io_err).is_empty());
|
||||
assert!(!format!("{:?}", event_err).is_empty());
|
||||
assert!(!format!("{:?}", listener_err).is_empty());
|
||||
}
|
||||
}
|
||||
|
476
src/tui/ui.rs
476
src/tui/ui.rs
@ -598,42 +598,456 @@ impl<CM: CollectionManager> Ui for MhUi<CM> {
|
||||
}
|
||||
}
|
||||
|
||||
// #[cfg(test)]
|
||||
// mod tests {
|
||||
// // This is UI so the only sensible unit test is to run the code through various app states.
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::tests::{MockCollectionManager, COLLECTION};
|
||||
use crate::tui::tests::{app, terminal};
|
||||
|
||||
// use crate::{
|
||||
// tests::COLLECTION,
|
||||
// tui::{
|
||||
// app::App,
|
||||
// tests::{app, terminal},
|
||||
// },
|
||||
// };
|
||||
use super::*;
|
||||
|
||||
// use super::Ui;
|
||||
#[test]
|
||||
fn test_track_selection() {
|
||||
let tracks = &COLLECTION[0].albums[0].tracks;
|
||||
assert!(tracks.len() > 1);
|
||||
|
||||
// #[test]
|
||||
// fn empty() {
|
||||
// let mut terminal = terminal();
|
||||
// let app = app(vec![]);
|
||||
// let ui = Ui::new();
|
||||
let empty = TrackSelection::initialise(None);
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
// terminal.draw(|frame| ui.render(&app, frame)).unwrap();
|
||||
// }
|
||||
let empty = TrackSelection::initialise(Some(&vec![]));
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
// #[test]
|
||||
// fn collection() {
|
||||
// let mut terminal = terminal();
|
||||
// let mut app = app(COLLECTION.to_owned());
|
||||
// let ui = Ui::new();
|
||||
let mut sel = TrackSelection::initialise(Some(tracks));
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
|
||||
// terminal.draw(|frame| ui.render(&app, frame)).unwrap();
|
||||
sel.decrement(tracks);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
|
||||
// // Change the track (which has a different track format).
|
||||
// app.increment_category();
|
||||
// app.increment_category();
|
||||
// app.increment_selection();
|
||||
sel.increment(tracks);
|
||||
assert_eq!(sel.state.selected(), Some(1));
|
||||
|
||||
// terminal.draw(|frame| ui.render(&app, frame)).unwrap();
|
||||
// }
|
||||
// }
|
||||
sel.decrement(tracks);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
|
||||
for _ in 0..(tracks.len() + 5) {
|
||||
sel.increment(tracks);
|
||||
}
|
||||
assert_eq!(sel.state.selected(), Some(tracks.len() - 1));
|
||||
|
||||
// Artifical test case to verify upper limit.
|
||||
sel.state.select(Some(std::usize::MAX));
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
|
||||
sel.increment(&vec![]);
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_album_selection() {
|
||||
let albums = &COLLECTION[0].albums;
|
||||
assert!(albums.len() > 1);
|
||||
|
||||
let empty = AlbumSelection::initialise(None);
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
let empty = AlbumSelection::initialise(Some(&vec![]));
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
let mut sel = AlbumSelection::initialise(Some(albums));
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.track.state.selected(), Some(0));
|
||||
|
||||
sel.increment_track(albums);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
|
||||
// Verify that decrement that doesn't change index does not reset track.
|
||||
sel.decrement(albums);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
|
||||
sel.increment(albums);
|
||||
assert_eq!(sel.state.selected(), Some(1));
|
||||
assert_eq!(sel.track.state.selected(), Some(0));
|
||||
|
||||
sel.decrement(albums);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.track.state.selected(), Some(0));
|
||||
|
||||
for _ in 0..(albums.len() + 5) {
|
||||
sel.increment(albums);
|
||||
}
|
||||
assert_eq!(sel.state.selected(), Some(albums.len() - 1));
|
||||
assert_eq!(sel.track.state.selected(), Some(0));
|
||||
|
||||
sel.increment_track(albums);
|
||||
assert_eq!(sel.state.selected(), Some(albums.len() - 1));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
|
||||
// Verify that increment that doesn't change index does not reset track.
|
||||
sel.increment(albums);
|
||||
assert_eq!(sel.state.selected(), Some(albums.len() - 1));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
|
||||
// Artifical test case to verify upper limit.
|
||||
sel.state.select(Some(std::usize::MAX));
|
||||
sel.track.state.select(Some(1));
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
|
||||
sel.increment(&vec![]);
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
assert_eq!(sel.track.state.selected(), Some(1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_artist_selection() {
|
||||
let artists = &COLLECTION;
|
||||
assert!(artists.len() > 1);
|
||||
|
||||
let empty = ArtistSelection::initialise(None);
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
let empty = ArtistSelection::initialise(Some(&vec![]));
|
||||
assert_eq!(empty.state.selected(), None);
|
||||
|
||||
let mut sel = ArtistSelection::initialise(Some(artists));
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.album.state.selected(), Some(0));
|
||||
|
||||
sel.increment_album(artists);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
|
||||
// Verify that decrement that doesn't change index does not reset album.
|
||||
sel.decrement(artists);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
|
||||
sel.increment(artists);
|
||||
assert_eq!(sel.state.selected(), Some(1));
|
||||
assert_eq!(sel.album.state.selected(), Some(0));
|
||||
|
||||
sel.decrement(artists);
|
||||
assert_eq!(sel.state.selected(), Some(0));
|
||||
assert_eq!(sel.album.state.selected(), Some(0));
|
||||
|
||||
for _ in 0..(artists.len() + 5) {
|
||||
sel.increment(artists);
|
||||
}
|
||||
assert_eq!(sel.state.selected(), Some(artists.len() - 1));
|
||||
assert_eq!(sel.album.state.selected(), Some(0));
|
||||
|
||||
sel.increment_album(artists);
|
||||
assert_eq!(sel.state.selected(), Some(artists.len() - 1));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
|
||||
// Verify that increment that doesn't change index does not reset album.
|
||||
sel.increment(artists);
|
||||
assert_eq!(sel.state.selected(), Some(artists.len() - 1));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
|
||||
// Artifical test case to verify upper limit.
|
||||
sel.state.select(Some(std::usize::MAX));
|
||||
sel.album.state.select(Some(1));
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
|
||||
sel.increment(&vec![]);
|
||||
assert_eq!(sel.state.selected(), Some(std::usize::MAX));
|
||||
assert_eq!(sel.album.state.selected(), Some(1));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_running() {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.times(1)
|
||||
.return_once(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(COLLECTION.to_owned());
|
||||
|
||||
let mut app = MhUi::new(collection_manager).unwrap();
|
||||
assert!(app.is_running());
|
||||
|
||||
app.quit();
|
||||
assert!(!app.is_running());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_modifiers() {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.times(1)
|
||||
.return_once(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(COLLECTION.to_owned());
|
||||
|
||||
let mut app = MhUi::new(collection_manager).unwrap();
|
||||
assert!(app.is_running());
|
||||
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_category();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_category();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(1));
|
||||
|
||||
app.increment_category();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(1));
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_selection();
|
||||
app.decrement_category();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(1));
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_selection();
|
||||
app.decrement_category();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
|
||||
app.increment_category();
|
||||
app.increment_selection();
|
||||
app.decrement_category();
|
||||
app.decrement_selection();
|
||||
app.decrement_category();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(1));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), Some(0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_no_tracks() {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
let mut collection = COLLECTION.to_owned();
|
||||
collection[0].albums[0].tracks = vec![];
|
||||
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.times(1)
|
||||
.return_once(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(collection);
|
||||
|
||||
let mut app = MhUi::new(collection_manager).unwrap();
|
||||
assert!(app.is_running());
|
||||
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_category();
|
||||
app.increment_category();
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_no_albums() {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
let mut collection = COLLECTION.to_owned();
|
||||
collection[0].albums = vec![];
|
||||
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.times(1)
|
||||
.return_once(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(collection);
|
||||
|
||||
let mut app = MhUi::new(collection_manager).unwrap();
|
||||
assert!(app.is_running());
|
||||
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_category();
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_category();
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), Some(0));
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_no_artists() {
|
||||
let mut collection_manager = MockCollectionManager::new();
|
||||
let collection = vec![];
|
||||
|
||||
collection_manager
|
||||
.expect_rescan_library()
|
||||
.times(1)
|
||||
.return_once(|| Ok(()));
|
||||
collection_manager
|
||||
.expect_get_collection()
|
||||
.return_const(collection);
|
||||
|
||||
let mut app = MhUi::new(collection_manager).unwrap();
|
||||
assert!(app.is_running());
|
||||
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Artist);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_category();
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Album);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.increment_category();
|
||||
|
||||
app.increment_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
|
||||
app.decrement_selection();
|
||||
assert_eq!(app.selection.active, Category::Track);
|
||||
assert_eq!(app.selection.artist.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.state.selected(), None);
|
||||
assert_eq!(app.selection.artist.album.track.state.selected(), None);
|
||||
}
|
||||
|
||||
// This is UI so the only sensible unit test is to run the code through various app states.
|
||||
|
||||
#[test]
|
||||
fn empty() {
|
||||
let mut terminal = terminal();
|
||||
let mut app = app(vec![]);
|
||||
|
||||
terminal.draw(|frame| app.render(frame)).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn collection() {
|
||||
let mut terminal = terminal();
|
||||
let mut app = app(COLLECTION.to_owned());
|
||||
|
||||
terminal.draw(|frame| app.render(frame)).unwrap();
|
||||
|
||||
// Change the track (which has a different track format).
|
||||
app.increment_category();
|
||||
app.increment_category();
|
||||
app.increment_selection();
|
||||
|
||||
terminal.draw(|frame| app.render(frame)).unwrap();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user