frostwalker 0.1.2

A TOML-like configuration language parser with zero dependencies outside of std.
Documentation
use super::{Token, Class};
use super::formatter;

#[test]
fn single_key() {

	let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
	let op = Token { class: Class::EQUALS, value: None };
	let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
	let manual_tree = vec![id, op, strn];
	let tree = formatter::format(manual_tree);
	assert_eq!(format!("{:?}", tree), "{\"key\": \"value\"}");
}

#[test]
fn single_key_escaped_double_quote() {

	let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
	let op = Token { class: Class::EQUALS, value: None };
	let strn = Token { class: Class::LITERAL, value: Some("\"value".to_string()) };
	let manual_tree = vec![id, op, strn];
	let tree = formatter::format(manual_tree);
	assert_eq!(format!("{:?}", tree), "{\"key\": \"\\\"value\"}");
}

#[test]
fn double_key() {

	let id = Token { class: Class::IDENTIFIER, value: Some("key".to_string()) };
	let op = Token { class: Class::EQUALS, value: None };
	let strn = Token { class: Class::LITERAL, value: Some("value".to_string()) };
	let nl = Token { class: Class::NEWLINE, value: None };
	let id2 = Token { class: Class::IDENTIFIER, value: Some("key2".to_string()) };
	let op2 = Token { class: Class::EQUALS, value: None };
	let strn2 = Token { class: Class::LITERAL, value: Some("value2".to_string()) };
	let manual_tree = vec![id, op, strn, nl, id2, op2, strn2];
	let tree = formatter::format(manual_tree);
	if !(tree.get("key").unwrap() == "value") || !(tree.get("key2").unwrap() == "value2") {
		println!("{:?}", tree);
		panic!();
	}
}

#[test]
fn 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 manual_tree = vec![id, op, t1, strn, t2, strn2, t3];
	let tree = formatter::format(manual_tree);
	if !(tree.get("key[0]").unwrap() == "value") || !(tree.get("key[1]").unwrap() == "6") || !(tree.get("key").unwrap() == "2") {
		println!("{:?}", tree);
		panic!();
	}
}

#[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 tree = formatter::format(vec![t1, t4, t3]);

	tree.get("key").unwrap();
}