#![allow(missing_docs)]
#[cfg(test)]
mod tests {
use cmn::*;
#[test]
fn new_returns_instance_with_null_fields() {
let common = Common::new();
let constants = common.constants();
assert_eq!(constants.constants().len(), 121);
}
#[test]
fn default_delegates_to_new() {
let a = Common::new();
let b = Common::default();
assert_eq!(
a.constants().constants().len(),
b.constants().constants().len()
);
}
#[test]
fn constants_returns_default_constants_instance() {
let common = Common::default();
let constants = common.constants();
assert_eq!(constants.constants().len(), 121);
assert_eq!(
constants.constants(),
Constants::default().constants()
);
}
#[test]
fn words_null_fields_returns_empty_words() {
let common = Common::new();
let words = common.words();
assert!(words.words_list().is_empty());
}
#[test]
fn words_no_words_key_returns_empty_words() {
let common = Common::parse(r#"{"other": "value"}"#).unwrap();
let words = common.words();
assert!(words.words_list().is_empty());
}
#[test]
fn words_with_populated_array_returns_words() {
let json =
r#"{"words": ["delta", "alpha", "charlie", "bravo"]}"#;
let common = Common::parse(json).unwrap();
let words = common.words();
let list = words.words_list();
assert_eq!(list.len(), 4);
assert_eq!(list, vec!["alpha", "bravo", "charlie", "delta"]);
}
#[test]
fn words_with_empty_array_returns_empty_words() {
let json = r#"{"words": []}"#;
let common = Common::parse(json).unwrap();
let words = common.words();
assert!(words.words_list().is_empty());
}
#[test]
fn words_non_array_returns_empty() {
let json = r#"{"words": "not_array"}"#;
let common = Common::parse(json).unwrap();
assert!(common.words().words_list().is_empty());
}
#[test]
fn words_mixed_types_skips_non_strings() {
let json = r#"{"words": ["good", 42, null, "ok"]}"#;
let common = Common::parse(json).unwrap();
let list = common.words().words_list();
assert_eq!(list, vec!["good", "ok"]);
}
#[test]
fn parse_valid_json_with_fields_returns_ok() {
let input = r#"{"field1": "value1", "field2": "value2"}"#;
let result = Common::parse(input);
assert!(result.is_ok());
}
#[test]
fn parse_empty_object_returns_default() {
let result = Common::parse("{}").unwrap();
let words = result.words();
assert!(words.words_list().is_empty());
}
#[test]
fn parse_null_literal_returns_data_error() {
let result = Common::parse("null");
assert!(result.is_err());
}
#[test]
fn parse_syntax_error_returns_err() {
let result = Common::parse("{invalid json}");
assert!(result.is_err());
}
#[test]
fn parse_eof_error_returns_err() {
let result = Common::parse("{\"key\":");
assert!(result.is_err());
}
#[test]
fn parse_completely_invalid_returns_err() {
let result = Common::parse("not json at all");
assert!(result.is_err());
}
#[test]
fn parse_empty_string_returns_err() {
let result = Common::parse("");
assert!(result.is_err());
}
#[test]
fn common_clone_produces_equivalent_instance() {
let original = Common::parse(r#"{"words": ["test"]}"#).unwrap();
let cloned = original.clone();
let orig_words = original.words().words_list();
let cloned_words = cloned.words().words_list();
assert_eq!(orig_words, cloned_words);
}
#[test]
fn common_debug_is_not_empty() {
let common = Common::new();
let debug = format!("{:?}", common);
assert!(!debug.is_empty());
assert!(debug.contains("Common"));
}
#[test]
fn common_serialize_roundtrip() {
let original = Common::parse(r#"{"key": "value"}"#).unwrap();
let json = serde_json::to_string(&original).unwrap();
let deserialized: Common = serde_json::from_str(&json).unwrap();
let re_json = serde_json::to_string(&deserialized).unwrap();
assert_eq!(json, re_json);
}
#[test]
fn run_success_returns_ok() {
std::env::remove_var("CMN_TEST_MODE");
let result = run();
assert!(result.is_ok());
}
#[test]
fn run_test_mode_returns_err() {
std::env::set_var("CMN_TEST_MODE", "1");
let result = run();
assert!(result.is_err());
let err_msg = result.unwrap_err().to_string();
assert_eq!(err_msg, "Simulated error");
std::env::remove_var("CMN_TEST_MODE");
}
#[test]
fn run_test_mode_unset_returns_ok() {
std::env::remove_var("CMN_TEST_MODE");
let result = run();
assert!(result.is_ok());
}
#[test]
fn run_test_mode_zero_returns_ok() {
std::env::set_var("CMN_TEST_MODE", "0");
let result = run();
assert!(result.is_ok());
std::env::remove_var("CMN_TEST_MODE");
}
}