use android_log_sys::{__android_log_write, LogPriority};
use jni::{JNIEnv, objects::JObject};
use std::ffi::CString;
use keyring_core::Result;
use crate::{by_store::clear_vault_list, shared_preferences::Context};
mod crypto_tests;
#[cfg(feature = "legacy")]
pub mod legacy_tests;
pub mod store_tests;
#[allow(non_snake_case)]
#[unsafe(no_mangle)]
pub extern "system" fn Java_io_crates_keyring_KeyringTests_00024Companion_runAllTests(
env: JNIEnv,
_class: JObject,
context: JObject,
) {
let context = Context::new(&env, context).unwrap();
#[cfg(feature = "legacy")]
let (ls, lf) = legacy_tests::run_tests();
let (ss, sf) = store_tests::run_tests();
let (cs, cf) = crypto_tests::run_tests(env, context);
#[cfg(feature = "legacy")]
let successes = ls + ss + cs;
#[cfg(not(feature = "legacy"))]
let successes = ss + cs;
#[cfg(feature = "legacy")]
let failures = lf + sf + cf;
#[cfg(not(feature = "legacy"))]
let failures = sf + cf;
let msg = CString::new(format!(
"Overall: {} successes, {} failures",
successes, failures
))
.unwrap();
let tag = c"unit-test";
let level = LogPriority::INFO as i32;
unsafe {
__android_log_write(level, tag.as_ptr(), msg.as_ptr());
}
match cleanup() {
Ok(()) => log::info!("Successfully cleaned up tests"),
Err(e) => {
let msg = CString::new(format!("Failed to clean up tests: {e}")).unwrap();
let tag = c"unit-test";
let level = LogPriority::ERROR as i32;
unsafe {
__android_log_write(level, tag.as_ptr(), msg.as_ptr());
}
}
}
}
pub fn cleanup() -> Result<()> {
#[cfg(feature = "legacy")]
legacy_tests::setup()?;
#[cfg(feature = "legacy")]
legacy_tests::teardown()?;
clear_vault_list();
store_tests::cleanup()?;
crypto_tests::cleanup()?;
Ok(())
}