Documentation
mod ability;
mod databases;
mod util;

use {multisql::Glue, util::*};

inventory::collect!(Test);
inventory::collect!(TestDatabase);
struct TestDatabase {
	init: fn(&str) -> Glue,
	name: &'static str,
	exceptions: &'static [&'static str],
}

fn main() {
	announce_test_suite!();
	for database in inventory::iter::<TestDatabase> {
		announce!(format!("[Database]\t{}", database.name));
		for test in inventory::iter::<Test> {
			let name = test
				.name
				.strip_prefix(concat!(module_path!(), "::", "ability::"))
				.unwrap();
			if !database
				.exceptions
				.iter()
				.any(|exception| name.starts_with(exception))
			{
				run!(test, database.init);
			}
		}
	}
}