frostwalker 0.1.2

A TOML-like configuration language parser with zero dependencies outside of std.
Documentation
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);
}