use super::validator;
use super::{Token, Class};
#[test]
fn single_key() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::LITERAL, value: Some("10".to_string()) };
let result = validator::validate(&vec![t1, t2, t3]);
assert_eq!(result.is_none(), true);
}
#[test]
fn utf_single_key() {
let id = Token { class: Class::IDENTIFIER, value: Some("ʎǝʞ".to_string()) };
let op = Token { class: Class::EQUALS, value: None };
let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
let result = validator::validate(&vec![id, op, strn]);
assert_eq!(result.is_none(), true);
}
#[test]
fn single_key_negative_integer() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::LITERAL, value: Some("-10".to_string()) };
let result = validator::validate(&vec![t1, t2, t3]);
assert_eq!(result.is_none(), true);
}
#[test]
fn single_key_array() {
let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let op = Token { class: Class::EQUALS, value: None };
let t1 = Token { class: Class::SEPARATOR, value: Some("[".to_string()) };
let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
let t2 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let strn2 = Token { class: Class::LITERAL, value: Some("6".to_string()) };
let t3 = Token { class: Class::SEPARATOR, value: Some("]".to_string()) };
let result = validator::validate(&vec![id, op, t1, strn, t2, strn2, t3]);
assert_eq!(result.is_none(), true);
}
#[test]
#[should_panic]
fn double_array() {
let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let op = Token { class: Class::EQUALS, value: None };
let t1 = Token { class: Class::SEPARATOR, value: Some("[".to_string()) };
let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
let t2 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let t4 = Token { class: Class::SEPARATOR, value: Some("[".to_string()) };
let strn2 = Token { class: Class::LITERAL, value: Some("6".to_string()) };
let t3 = Token { class: Class::SEPARATOR, value: Some("]".to_string()) };
let t5 = Token { class: Class::SEPARATOR, value: Some("]".to_string()) };
let result = validator::validate(&vec![id, op, t1, strn, t2, t4, strn2, t3, t5]);
assert_eq!(result.is_none(), true);
}
#[test]
fn long_array() {
let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let op = Token { class: Class::EQUALS, value: None };
let t1 = Token { class: Class::SEPARATOR, value: Some("[".to_string()) };
let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
let t2 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let strn2 = Token { class: Class::LITERAL, value: Some("6".to_string()) };
let t3 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let strn3 = Token { class: Class::LITERAL, value: Some("7".to_string()) };
let t4 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let strn4 = Token { class: Class::LITERAL, value: Some("8".to_string()) };
let t5 = Token { class: Class::SEPARATOR, value: Some(",".to_string()) };
let strn5 = Token { class: Class::BOOLEAN, value: Some("true".to_string()) };
let t6 = Token { class: Class::SEPARATOR, value: Some("]".to_string()) };
let result = validator::validate(&vec![id, op, t1, strn, t2, strn2, t3, strn3, t4, strn4, t5, strn5, t6]);
assert_eq!(result.is_none(), true);
}
#[test]
#[should_panic]
fn stray_element_with_no_value() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let result = validator::validate(&vec![t1, t2]);
assert_eq!(result.is_none(), true);
}
#[test]
#[should_panic]
fn unknown_element() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t4 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::UNKNOWN, value: Some("10".to_string()) };
let result = validator::validate(&vec![t1, t4, t3]);
assert_eq!(result.is_none(), true);
}
#[test]
#[should_panic]
fn stray_element_with_no_value_on_newline() {
let at1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let at2 = Token { class: Class::EQUALS, value: None };
let at3 = Token { class: Class::LITERAL, value: Some("10".to_string()) };
let nl = Token { class: Class::NEWLINE, value: None };
let t1 = Token { class: Class::IDENTIFIER, value: Some("key2".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let t4 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::LITERAL, value: Some("11".to_string()) };
let result = validator::validate(&vec![at1, at2, at3, nl, t1, t2, t4, t3]);
assert_eq!(result.is_none(), true);
}
#[test]
fn triple_key() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::LITERAL, value: Some("10".to_string()) };
let nl = Token { class: Class::NEWLINE, value: None };
let t4 = Token { class: Class::IDENTIFIER, value: Some("key2".to_string()) };
let t5 = Token { class: Class::EQUALS, value: None };
let t6 = Token { class: Class::LITERAL, value: Some("13".to_string()) };
let result = validator::validate(&vec![t1, t2, t3, nl, t4, t5, t6]);
assert_eq!(result.is_none(), true);
}
#[test]
#[should_panic]
fn triple_key_no_newline() {
let t1 = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
let t2 = Token { class: Class::EQUALS, value: None };
let t3 = Token { class: Class::LITERAL, value: Some("10".to_string()) };
let t4 = Token { class: Class::IDENTIFIER, value: Some("key2".to_string()) };
let t5 = Token { class: Class::EQUALS, value: None };
let t6 = Token { class: Class::LITERAL, value: Some("13".to_string()) };
let result = validator::validate(&vec![t1, t2, t3, t4, t5, t6]);
assert_eq!(result.is_none(), true);
}