use crate::frontend::parser::Parser;
#[test]
fn test_parse_empty_list() {
let mut parser = Parser::new("[]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse empty list");
}
#[test]
fn test_parse_simple_list() {
let mut parser = Parser::new("[1, 2, 3]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse simple list");
}
#[test]
fn test_parse_nested_list() {
let mut parser = Parser::new("[[1, 2], [3, 4]]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse nested list");
}
#[test]
fn test_parse_list_with_mixed_types() {
let mut parser = Parser::new("[1, \"hello\", true, 3.15]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse list with mixed types");
}
#[test]
fn test_parse_empty_block() {
let mut parser = Parser::new("{}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse empty block");
}
#[test]
fn test_parse_block_with_statements() {
let mut parser = Parser::new("{ let x = 5; x + 1 }");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse block with statements");
}
#[test]
fn test_parse_nested_blocks() {
let mut parser = Parser::new("{ { 42 } }");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse nested blocks");
}
#[test]
fn test_parse_object_literal_empty() {
let mut parser = Parser::new("{}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse empty object literal");
}
#[test]
fn test_parse_object_literal_with_fields() {
let mut parser = Parser::new("{name: \"Alice\", age: 30}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse object literal with fields");
}
#[test]
fn test_parse_object_literal_quoted_keys() {
let mut parser = Parser::new("{\"key\": \"value\"}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse object with quoted keys");
}
#[test]
fn test_parse_list_comprehension_simple() {
let mut parser = Parser::new("[x * 2 for x in range(10)]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse simple list comprehension");
}
#[test]
fn test_parse_list_comprehension_with_filter() {
let mut parser = Parser::new("[x for x in range(10) if x % 2 == 0]");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse list comprehension with filter"
);
}
#[test]
#[ignore = "DataFrame macro not yet implemented"]
fn test_parse_dataframe_empty() {
let mut parser = Parser::new("df![]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse empty dataframe");
}
#[test]
#[ignore = "DataFrame macro not yet implemented"]
fn test_parse_dataframe_with_columns() {
let mut parser = Parser::new("df![[1, 4], [2, 5], [3, 6]]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse dataframe with columns");
}
#[test]
#[ignore = "DataFrame macro not yet implemented"]
fn test_parse_dataframe_with_rows() {
let mut parser = Parser::new("df![[1, 2, 3], [4, 5, 6]]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse dataframe with rows");
}
#[test]
#[ignore = "DataFrame macro not yet implemented"]
fn test_parse_dataframe_macro() {
let mut parser = Parser::new("df![[1, 2, 3], [4, 5, 6]]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse dataframe macro");
}
#[test]
fn test_parse_block_with_multiple_expressions() {
let mut parser = Parser::new("{ 1; 2; 3 }");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse block with multiple expressions"
);
}
#[test]
fn test_parse_block_with_let_binding() {
let mut parser = Parser::new("{ let x = 10; x }");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse block with let binding");
}
#[test]
fn test_parse_let_expression() {
let mut parser = Parser::new("let x = 5 in x + 1");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse let expression");
}
#[test]
fn test_parse_object_with_nested_objects() {
let mut parser = Parser::new("{outer: {inner: 42}}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse nested objects");
}
#[test]
fn test_parse_list_with_trailing_comma() {
let mut parser = Parser::new("[1, 2, 3,]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse list with trailing comma");
}
#[test]
fn test_parse_object_with_trailing_comma() {
let mut parser = Parser::new("{a: 1, b: 2,}");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse object with trailing comma");
}
#[test]
fn test_parse_complex_nested_structure() {
let mut parser = Parser::new("[{a: [1, 2]}, {b: [3, 4]}]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse complex nested structure");
}
#[test]
fn test_parse_block_returns_last_expression() {
let mut parser = Parser::new("{ 1; 2; 3 }");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse block that returns last expression"
);
}
#[test]
fn test_parse_list_with_expressions() {
let mut parser = Parser::new("[1 + 2, 3 * 4, 5 - 6]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse list with expressions");
}
#[test]
fn test_parse_object_with_computed_values() {
let mut parser = Parser::new("{sum: 1 + 2, product: 3 * 4}");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse object with computed values"
);
}
#[test]
#[ignore = "DataFrame macro not yet implemented"]
fn test_parse_dataframe_semicolon_rows() {
let mut parser = Parser::new("df![[1, 2], [3, 4], [5, 6]]");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse dataframe with semicolon-separated rows"
);
}
#[test]
fn test_parse_empty_list_comprehension() {
let mut parser = Parser::new("[x for x in []]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse empty list comprehension");
}
#[test]
fn test_parse_nested_list_comprehension() {
let mut parser = Parser::new("[[x * y for x in range(3)] for y in range(3)]");
let result = parser.parse();
assert!(result.is_ok(), "Failed to parse nested list comprehension");
}
#[test]
fn test_parse_object_shorthand_properties() {
let mut parser = Parser::new("{x: x, y: y, z: z}");
let result = parser.parse();
assert!(
result.is_ok(),
"Failed to parse object with shorthand properties"
);
}
#[test]
fn test_looks_like_comprehension_with_for() {
let mut parser = Parser::new("[x for x in range(10)]");
let result = parser.parse();
assert!(result.is_ok(), "List comprehension with 'for' should parse");
}
#[test]
fn test_parse_constructor_pattern_returns_actual_string() {
let mut parser = Parser::new("match x { Point(a, b) => a + b }");
let result = parser.parse();
assert!(
result.is_ok(),
"Constructor pattern should parse with actual data"
);
}
#[test]
fn test_declaration_token_var_match_arm() {
let mut parser = Parser::new("var x = 42");
let result = parser.parse();
assert!(result.is_ok(), "Should parse 'var' declaration token");
}
#[test]
fn test_declaration_token_pub_match_arm() {
let mut parser = Parser::new("pub fn foo() {}");
let result = parser.parse();
assert!(result.is_ok(), "Should parse 'pub' declaration token");
}
#[test]
fn test_add_non_empty_row_negation() {
let mut parser = Parser::new("[1, 2, 3]");
let result = parser.parse();
assert!(
result.is_ok(),
"Non-empty row array should parse (validates ! operator logic)"
);
}
#[test]
fn test_try_parse_set_literal_right_brace_match_arm() {
let mut parser = Parser::new("{1, 2, 3}");
let result = parser.parse();
assert!(result.is_ok(), "Expression with RightBrace should parse");
}
#[test]
fn test_try_parse_set_literal_semicolon_detection() {
let mut parser = Parser::new("{let x = 1; x}");
let result = parser.parse();
assert!(result.is_ok(), "Block with semicolon should parse");
}
#[test]
fn test_is_dataframe_legacy_syntax_token_returns_bool() {
let mut parser = Parser::new("{column: [1, 2, 3]}");
let result = parser.parse();
assert!(
result.is_ok(),
"Object with array values should parse (validates boolean logic)"
);
}
#[test]
fn test_parse_all_dataframe_rows_returns_actual_data() {
let mut parser = Parser::new("[[1, 2], [3, 4]]");
let result = parser.parse();
assert!(
result.is_ok(),
"Nested arrays should parse (validates row data logic)"
);
}
#[test]
fn test_parser_082_atom_map_key_simple() {
let mut parser = Parser::new("{ :host => \"localhost\" }");
let result = parser.parse();
assert!(result.is_ok(), "Atom as map key should parse");
}
#[test]
fn test_parser_082_atom_map_key_multiple() {
let mut parser = Parser::new("{ :host => \"localhost\", :port => 8080 }");
let result = parser.parse();
assert!(result.is_ok(), "Multiple atom keys should parse");
}
#[test]
fn test_parser_082_atom_map_key_with_colon() {
let mut parser = Parser::new("{ :status: :ok }");
let result = parser.parse();
assert!(result.is_ok(), "Atom key with colon separator should parse");
}
#[test]
fn test_parser_082_atom_map_key_mixed() {
let mut parser = Parser::new("{ :name => \"test\", count: 42 }");
let result = parser.parse();
assert!(
result.is_ok(),
"Mixed atom and identifier keys should parse"
);
}
#[test]
fn test_comprehension_tuple_pattern_two_vars() {
let mut parser = Parser::new("[a for (a, b) in pairs]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with tuple pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_tuple_pattern_three_vars() {
let mut parser = Parser::new("[a for (a, b, c) in triples]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with 3-element tuple pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_some_pattern() {
let mut parser = Parser::new("[x for Some(x) in options]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with Some pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_constructor_pattern() {
let mut parser = Parser::new("[v for Point(v) in points]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with constructor pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_none_pattern() {
let mut parser = Parser::new("[0 for None in options]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with None pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_ok_pattern() {
let mut parser = Parser::new("[v for Ok(v) in results]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with Ok pattern should parse: {:?}",
result.err()
);
}
#[test]
fn test_comprehension_err_pattern() {
let mut parser = Parser::new("[e for Err(e) in results]");
let result = parser.parse();
assert!(
result.is_ok(),
"Comprehension with Err pattern should parse: {:?}",
result.err()
);
}