Add ui_test_harness binary implementation

Adds ability to run UI components isolated from main app.

`cargo run --bin ui_test_harness -- AccountLoginView`

Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
kernelkind
2024-04-01 11:04:51 -04:00
committed by William Casarin
parent 242053c6e0
commit 4bd01682da
5 changed files with 82 additions and 3 deletions

View File

@@ -3,6 +3,7 @@ name = "notedeck"
version = "0.1.0"
authors = ["William Casarin <jb55@jb55.com>"]
edition = "2021"
default-run = "notedeck"
#rust-version = "1.60"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -93,3 +94,11 @@ name = "android.permission.INTERNET"
[package.metadata.android.application]
label = "Damus"
[[bin]]
name = "notedeck"
path = "src/bin/notedeck.rs"
[[bin]]
name = "ui_test_harness"
path = "src/tests_ui/main.rs"

View File

@@ -19,9 +19,9 @@ mod timeline;
mod colors;
mod profile;
mod key_parsing;
mod login_manager;
mod account_login_view;
mod app_creation;
pub mod login_manager;
pub mod account_login_view;
pub mod app_creation;
#[cfg(test)]
#[macro_use]

View File

@@ -0,0 +1,21 @@
use crate::egui_test_setup::{EguiTestCase, EguiTestSetup};
use notedeck::account_login_view::AccountLoginView;
use notedeck::login_manager::LoginManager;
pub struct AccountLoginTest {
manager: LoginManager,
}
impl EguiTestCase for AccountLoginTest {
fn new(supr: EguiTestSetup) -> Self {
AccountLoginTest {
manager: LoginManager::new(),
}
}
}
impl eframe::App for AccountLoginTest {
fn update(&mut self, ctx: &egui::Context, _: &mut eframe::Frame) {
AccountLoginView::new(ctx, &mut self.manager).panel()
}
}

View File

@@ -0,0 +1,15 @@
use notedeck::app_creation::setup_cc;
pub struct EguiTestSetup {}
pub trait EguiTestCase: eframe::App {
fn new(supr: EguiTestSetup) -> Self;
}
impl EguiTestSetup {
pub fn new(cc: &eframe::CreationContext<'_>) -> Self {
setup_cc(cc);
EguiTestSetup {}
}
}

34
src/tests_ui/main.rs Normal file
View File

@@ -0,0 +1,34 @@
mod account_login_view_test;
mod egui_test_setup;
use account_login_view_test::AccountLoginTest;
use egui_test_setup::{EguiTestCase, EguiTestSetup};
use notedeck::app_creation::generate_native_options;
use std::env;
fn run_test_app<F, T, O>(create_supr: F, create_child: O)
where
F: 'static + FnOnce(&eframe::CreationContext<'_>) -> EguiTestSetup,
T: 'static + EguiTestCase,
O: 'static + FnOnce(EguiTestSetup) -> T,
{
tracing_subscriber::fmt::init();
let _ = eframe::run_native(
"UI Test Harness",
generate_native_options(),
Box::new(|cc| Box::new(create_child(create_supr(cc)))),
);
}
fn main() {
let args: Vec<String> = env::args().collect();
if args.len() > 1 {
match args[1].as_str() {
"AccountLoginView" => run_test_app(EguiTestSetup::new, AccountLoginTest::new),
_ => println!("Component not found."),
}
} else {
println!("Please specify a component to test.");
}
}