more tests plus bug fix relating to arrays in the lexer
This commit is contained in:
parent
ed882263a8
commit
8e191ee11a
6 changed files with 51 additions and 7 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -4,4 +4,4 @@ version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frostwalker"
|
name = "frostwalker"
|
||||||
version = "0.0.6"
|
version = "0.0.7"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "frostwalker"
|
name = "frostwalker"
|
||||||
version = "0.0.6"
|
version = "0.0.7"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
|
@ -4,7 +4,7 @@ use std::collections::HashMap;
|
||||||
pub fn format(tree: Vec<Token>) -> HashMap<String, String> {
|
pub fn format(tree: Vec<Token>) -> HashMap<String, String> {
|
||||||
let mut output = HashMap::new();
|
let mut output = HashMap::new();
|
||||||
let mut current_key = "".to_string();
|
let mut current_key = "".to_string();
|
||||||
let mut current_index = 0;
|
let mut current_index;
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < tree.len() {
|
while i < tree.len() {
|
||||||
if tree[i].class == Class::IDENTIFIER {
|
if tree[i].class == Class::IDENTIFIER {
|
||||||
|
@ -33,6 +33,7 @@ pub fn format(tree: Vec<Token>) -> HashMap<String, String> {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
output.insert(current_key.clone(), (current_index).to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
|
|
|
@ -53,7 +53,7 @@ fn array() {
|
||||||
|
|
||||||
let manual_tree = vec![id, op, t1, strn, t2, strn2, t3];
|
let manual_tree = vec![id, op, t1, strn, t2, strn2, t3];
|
||||||
let tree = formatter::format(manual_tree);
|
let tree = formatter::format(manual_tree);
|
||||||
if !(tree.get("key[0]").unwrap() == "value") || !(tree.get("key[1]").unwrap() == "6") {
|
if !(tree.get("key[0]").unwrap() == "value") || !(tree.get("key[1]").unwrap() == "6") || !(tree.get("key").unwrap() == "2") {
|
||||||
println!("{:?}", tree);
|
println!("{:?}", tree);
|
||||||
panic!();
|
panic!();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ pub fn tokenize(source: &str) -> Vec<Token> {
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
|
|
||||||
while i < words.len() {
|
while i < words.len() {
|
||||||
if words[i].ends_with(",") && words[i-1] == "[" {
|
if words[i].ends_with(",") && (words[i-1] == "[" || words[i-1] == ",") {
|
||||||
words[i] = words[i].chars().next_back().map(|_| &words[i][..words[i].len()-1]).unwrap_or("");
|
words[i] = words[i].chars().next_back().map(|_| &words[i][..words[i].len()-1]).unwrap_or("");
|
||||||
words.insert(i+1, ",");
|
words.insert(i+1, ",");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use frostwalker::lexer;
|
use frostwalker::lexer;
|
||||||
use frostwalker::validator;
|
use frostwalker::validator;
|
||||||
|
use frostwalker::formatter;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lv_single_key() {
|
fn lv_single_key() {
|
||||||
|
@ -16,15 +17,57 @@ fn lv_triple_key() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
fn lv_triple_key_missing_newline() {
|
fn lv_triple_key_missing_newline() {
|
||||||
let tree = lexer::tokenize("key = \"value\"key1 = 128\nkey2 = [ 6, 7 ]");
|
let tree = lexer::tokenize("key = \"value\"key1 = 128\nkey2 = [ 6, 7 ]");
|
||||||
let result = validator::validate(&tree);
|
let result = validator::validate(&tree);
|
||||||
assert_eq!(result.is_some(), true);
|
assert_eq!(result.is_none(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
fn lv_double_equals() {
|
fn lv_double_equals() {
|
||||||
let tree = lexer::tokenize("key = = \"value\"\r\nkey1 = 128\nkey2 = [ 6, 7 ]");
|
let tree = lexer::tokenize("key = = \"value\"\r\nkey1 = 128\nkey2 = [ 6, 7 ]");
|
||||||
let result = validator::validate(&tree);
|
let result = validator::validate(&tree);
|
||||||
assert_eq!(result.is_some(), true);
|
assert_eq!(result.is_none(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn full_stack_single_key() {
|
||||||
|
let tree = lexer::tokenize("key = \"value\"");
|
||||||
|
let result = validator::validate(&tree);
|
||||||
|
if result.is_some() {
|
||||||
|
panic!("{}", result.unwrap());
|
||||||
|
}
|
||||||
|
let hashmap = formatter::format(tree);
|
||||||
|
if !(hashmap.get("key").unwrap() == "value") {
|
||||||
|
panic!("Formatter error.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn full_stack_varied_array() {
|
||||||
|
let tree = lexer::tokenize("key = [ \"value\", 150, -30, \"\\\"value\" ]");
|
||||||
|
let result = validator::validate(&tree);
|
||||||
|
if result.is_some() {
|
||||||
|
panic!("{}", result.unwrap());
|
||||||
|
}
|
||||||
|
let hashmap = formatter::format(tree);
|
||||||
|
if !(hashmap.get("key").unwrap() == "4") || !(hashmap.get("key[0]").unwrap() == "value") || !(hashmap.get("key[1]").unwrap() == "150") || !(hashmap.get("key[2]").unwrap() == "-30") || !(hashmap.get("key[3]").unwrap() == "\"value") {
|
||||||
|
panic!("Formatter error.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn full_stack_single_key_double_equals() {
|
||||||
|
let tree = lexer::tokenize("key = = \"value\"");
|
||||||
|
let result = validator::validate(&tree);
|
||||||
|
if result.is_some() {
|
||||||
|
panic!("{}", result.unwrap());
|
||||||
|
}
|
||||||
|
let hashmap = formatter::format(tree);
|
||||||
|
if !(hashmap.get("key").unwrap() == "value") {
|
||||||
|
panic!("Formatter error.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue