diff --git a/src/bong/parser.rs b/src/bong/parser.rs index f4f6924..65ed2cb 100644 --- a/src/bong/parser.rs +++ b/src/bong/parser.rs @@ -367,6 +367,18 @@ fn test_array1() { #[test] fn test_array2() { + let parsed = Parser::new(vec![ + Token::LBracket("[".to_string()), + Token::Int("123".to_string()), + Token::Comma(",".to_string()), + Token::RBracket("]".to_string()), + ]) + .parse_top_level(); + assert_eq!(parsed, Ok(Node::Array(vec![Node::Int(123)]))) +} + +#[test] +fn test_array3() { let parsed = Parser::new(vec![ Token::LBracket("[".to_string()), Token::Int("123".to_string()), @@ -384,6 +396,26 @@ fn test_array2() { ) } +#[test] +fn test_array4() { + let parsed = Parser::new(vec![ + Token::LBracket("[".to_string()), + Token::Int("123".to_string()), + Token::Comma(",".to_string()), + Token::String("\"hello\n\"".to_string()), + Token::Comma(",".to_string()), + Token::RBracket("]".to_string()), + ]) + .parse_top_level(); + assert_eq!( + parsed, + Ok(Node::Array(vec![ + Node::Int(123), + Node::String("hello\n".to_string()), + ])) + ) +} + #[test] fn test_object0() { let parsed = Parser::new(vec![ @@ -398,13 +430,77 @@ fn test_object0() { fn test_object1() { let parsed = Parser::new(vec![ Token::LBrace("{".to_string()), + Token::Name("abc".to_string()), + Token::Colon(":".to_string()), + Token::String("\"hello\"".to_string()), Token::RBrace("}".to_string()), ]) .parse_top_level(); assert_eq!( parsed, Ok(Node::Object({ - let fields = HashMap::new(); + let mut fields = HashMap::new(); + fields.insert( + "abc".to_string(), + Box::new(Node::String("hello".to_string())), + ); + fields + })) + ) +} + +#[test] +fn test_object2() { + let parsed = Parser::new(vec![ + Token::LBrace("{".to_string()), + Token::Name("abc".to_string()), + Token::Colon(":".to_string()), + Token::String("\"hello\"".to_string()), + Token::Comma(",".to_string()), + Token::String("\"foo\"".to_string()), + Token::Colon(":".to_string()), + Token::Int("123".to_string()), + Token::RBrace("}".to_string()), + ]) + .parse_top_level(); + assert_eq!( + parsed, + Ok(Node::Object({ + let mut fields = HashMap::new(); + fields.insert( + "abc".to_string(), + Box::new(Node::String("hello".to_string())), + ); + fields.insert("foo".to_string(), Box::new(Node::Int(123))); + fields + })) + ) +} + +#[test] +fn test_object3() { + let parsed = Parser::new(vec![ + Token::LBrace("{".to_string()), + Token::Name("abc".to_string()), + Token::Colon(":".to_string()), + Token::String("\"hello\"".to_string()), + Token::Comma(",".to_string()), + Token::String("\"foo\"".to_string()), + Token::Colon(":".to_string()), + Token::Int("123".to_string()), + Token::Comma(",".to_string()), + Token::RBrace("}".to_string()), + ]) + .parse_top_level(); + assert_eq!( + parsed, + Ok(Node::Object({ + let mut fields = HashMap::new(); + fields.insert( + "abc".to_string(), + Box::new(Node::String("hello".to_string())), + ); + fields.insert("foo".to_string(), Box::new(Node::Int(123))); fields })) )