pub mod base;
pub use self::base::get_base;
use gong::analysis::Analysis;
use gong::options::*;
pub const ABBR_SUP_DEFAULT: bool = true;
pub const MODE_DEFAULT: OptionsMode = OptionsMode::Standard;
#[derive(Debug)] pub struct Actual<'a>(pub Analysis<'a>);
#[derive(Debug)] pub struct Expected<'a>(pub Analysis<'a>);
#[macro_export]
macro_rules! arg_list {
( $($e:expr),+ ) => { [ $($e),+ ] };
( $($e:expr,)+ ) => { [ $($e),+ ] };
}
macro_rules! expected {
( error: $e:expr, warn: $w:expr, $items:expr ) => {{
let mut temp_vec = Vec::new();
temp_vec.extend_from_slice(&$items);
Expected(Analysis { error: $e, warn: $w, items: temp_vec, })
}};
}
macro_rules! expected_item {
( $i:expr, NonOption, $s:expr ) => { ItemClass::Ok(Item::NonOption($i, $s)) };
( $i:expr, EarlyTerminator ) => { ItemClass::Ok(Item::EarlyTerminator($i)) };
( $i:expr, Long, $n:expr ) => { ItemClass::Ok(Item::Long($i, $n)) };
( $i:expr, Short, $c:expr ) => { ItemClass::Ok(Item::Short($i, $c)) };
( $i:expr, LongWithData, $n:expr, $d:expr, $l:expr ) => {
ItemClass::Ok(Item::LongWithData { i: $i, n: $n, d: $d, l: $l })
};
( $i:expr, ShortWithData, $c:expr, $d:expr, $l:expr ) => {
ItemClass::Ok(Item::ShortWithData { i: $i, c: $c, d: $d, l: $l })
};
( $i:expr, UnknownLong, $n:expr ) => { ItemClass::Warn(ItemW::UnknownLong($i, $n)) };
( $i:expr, UnknownShort, $c:expr ) => { ItemClass::Warn(ItemW::UnknownShort($i, $c)) };
( $i:expr, LongWithNoName ) => { ItemClass::Warn(ItemW::LongWithNoName($i)) };
( $i:expr, LongWithUnexpectedData, $n:expr, $d:expr ) => {
ItemClass::Warn(ItemW::LongWithUnexpectedData { i: $i, n: $n, d: $d })
};
( $i:expr, LongMissingData, $n:expr ) => { ItemClass::Err(ItemE::LongMissingData($i, $n)) };
( $i:expr, ShortMissingData, $c:expr ) => { ItemClass::Err(ItemE::ShortMissingData($i, $c)) };
( $i:expr, AmbiguousLong, $n:expr ) => { ItemClass::Err(ItemE::AmbiguousLong($i, $n)) };
}
pub fn check_result(actual: &Actual, expected: &Expected) {
if actual.0 != expected.0 {
eprintln!("Actual:");
pretty_print_results(&actual.0);
eprintln!("Expected:");
pretty_print_results(&expected.0);
assert!(false, "analysis does not match what was expected!");
}
}
fn pretty_print_results(analysis: &Analysis) {
let mut items = String::new();
for item in &analysis.items {
items.push_str(&format!("\n {:?},", item));
}
eprintln!("\
Analysis {{
items: [{}
],
error: {},
warn: {},
}}",
items, analysis.error, analysis.warn);
}