From 92ae6815173be7c98ed872dc516530b8dfd54e47 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Mon, 20 Aug 2018 08:48:43 +0300 Subject: [PATCH] Add gtk tests Currently we only test the GtkBuilder files. Also I can't find a way to get gtk to uninitialize and reinitialize in a different thread. Close #56 --- .gitlab-ci.yml | 2 +- podcasts-gtk/src/main.rs | 42 +++++++++++++++++++++++++++ podcasts-gtk/src/widgets/home_view.rs | 2 +- podcasts-gtk/src/widgets/mod.rs | 3 ++ scripts/test.sh | 2 +- 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1110d22..f511ee5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,7 +32,7 @@ flatpak: --env=CARGO_HOME="target/cargo-home" \ --env=CARGO_TARGET_DIR="target_test/" \ app ${MANIFEST_PATH} \ - cargo test -- --test-threads=1 + cargo test -j 1 -- --test-threads=1 # Create a flatpak bundle - flatpak-builder --finish-only app ${MANIFEST_PATH} diff --git a/podcasts-gtk/src/main.rs b/podcasts-gtk/src/main.rs index 5f4b34e..6184fd0 100644 --- a/podcasts-gtk/src/main.rs +++ b/podcasts-gtk/src/main.rs @@ -114,6 +114,21 @@ mod i18n; use app::App; +#[cfg(test)] +fn init_gtk_tests() -> Result<(), failure::Error> { + // if gtk::is_initialized() { + // assert!(gtk::is_initialized_main_thread()) + // } else { + // gtk::init()?; + // static_resource::init()?; + // } + + gtk::init()?; + static_resource::init()?; + gst::init()?; + Ok(()) +} + fn main() { // TODO: make the the logger a cli -vv option loggerv::init_with_level(Level::Info).expect("Error initializing loggerv."); @@ -132,3 +147,30 @@ fn main() { App::run(); } + +#[test] +// Even while running the tests with -j 1 and --test-threads=1, +// cargo seems to create new threads and gtk refuses to initialize again. +// So we run every gtk related test here. +fn test_stuff() -> Result<(), failure::Error> { + use headerbar::Header; + use widgets::*; + + init_gtk_tests()?; + + // If a widget does not exist in the `GtkBuilder`(.ui) file this should panic and fail. + Header::default(); + ShowsView::default(); + ShowWidget::default(); + HomeView::default(); + HomeEpisode::default(); + EpisodeWidget::default(); + EmptyView::default(); + EmptyShow::default(); + + appnotif::InAppNotification::default(); + show_menu::ShowMenu::default(); + player::PlayerWidget::default(); + + Ok(()) +} diff --git a/podcasts-gtk/src/widgets/home_view.rs b/podcasts-gtk/src/widgets/home_view.rs index 9d6c71e..5c51dd0 100644 --- a/podcasts-gtk/src/widgets/home_view.rs +++ b/podcasts-gtk/src/widgets/home_view.rs @@ -156,7 +156,7 @@ fn split(now: &DateTime, epoch: i64) -> ListSplit { } #[derive(Debug, Clone)] -struct HomeEpisode { +pub(crate) struct HomeEpisode { container: gtk::Box, image: gtk::Image, episode: gtk::Box, diff --git a/podcasts-gtk/src/widgets/mod.rs b/podcasts-gtk/src/widgets/mod.rs index 50b3f83..c3ef75d 100644 --- a/podcasts-gtk/src/widgets/mod.rs +++ b/podcasts-gtk/src/widgets/mod.rs @@ -17,3 +17,6 @@ pub(crate) use self::home_view::HomeView; pub(crate) use self::show::ShowWidget; pub(crate) use self::show_menu::ShowMenu; pub(crate) use self::shows_view::ShowsView; + +#[cfg(test)] +pub(crate) use self::home_view::HomeEpisode; diff --git a/scripts/test.sh b/scripts/test.sh index d337fdf..b7e5b81 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -26,7 +26,7 @@ xvfb-run -a -s "-screen 0 1024x768x24" \ --env=CARGO_HOME="target/cargo-home" \ --env=CARGO_TARGET_DIR="target_test/" \ app ${MANIFEST_PATH} \ - cargo test -- --test-threads=1 + cargo test -j 1 -- --test-threads=1 # Create a flatpak bundle # flatpak-builder --finish-only app ${MANIFEST_PATH}