|
1 | 1 | use techscript_ast::{ |
2 | | - AssignmentExpr, EnumDecl, EnumVariant, Expression, FieldSpec, Ident, LiteralExpr, LiteralVal, |
3 | | - Pattern, StructDecl, VarDecl, |
| 2 | + AssignmentExpr, Block, BreakStmt, EnumDecl, EnumVariant, Expression, FieldSpec, Ident, |
| 3 | + LiteralExpr, LiteralVal, Pattern, Program, Statement, StructDecl, VarDecl, |
4 | 4 | }; |
5 | 5 | use techscript_common::{NodeId, Span}; |
6 | 6 |
|
@@ -101,5 +101,47 @@ fn test_ast_serialization() { |
101 | 101 | assert_eq!(lit, deserialized); |
102 | 102 | } |
103 | 103 |
|
| 104 | +#[test] |
| 105 | +fn test_ast_program_construction_and_serialization() { |
| 106 | + let span = Span::new(0, 50); |
| 107 | + let id = NodeId(1); |
| 108 | + |
| 109 | + // Create a dummy statement (Break) |
| 110 | + let break_stmt = Statement::Break(BreakStmt::new(NodeId(2), span)); |
| 111 | + |
| 112 | + let program = Program::new(id, vec![break_stmt.clone()], span); |
| 113 | + |
| 114 | + assert_eq!(program.id, id); |
| 115 | + assert_eq!(program.statements.len(), 1); |
| 116 | + assert_eq!(program.span, span); |
| 117 | + |
| 118 | + let serialized = serde_json::to_string(&program).expect("serialize should succeed"); |
| 119 | + let deserialized: Program = |
| 120 | + serde_json::from_str(&serialized).expect("deserialize should succeed"); |
| 121 | + |
| 122 | + assert_eq!(program, deserialized); |
| 123 | +} |
| 124 | + |
| 125 | +#[test] |
| 126 | +fn test_ast_block_construction_and_serialization() { |
| 127 | + let span = Span::new(10, 20); |
| 128 | + let id = NodeId(3); |
| 129 | + |
| 130 | + // Create a dummy statement (Break) |
| 131 | + let break_stmt = Statement::Break(BreakStmt::new(NodeId(4), span)); |
| 132 | + |
| 133 | + let block = Block::new(id, vec![break_stmt.clone()], span); |
| 134 | + |
| 135 | + assert_eq!(block.id, id); |
| 136 | + assert_eq!(block.statements.len(), 1); |
| 137 | + assert_eq!(block.span, span); |
| 138 | + |
| 139 | + let serialized = serde_json::to_string(&block).expect("serialize should succeed"); |
| 140 | + let deserialized: Block = |
| 141 | + serde_json::from_str(&serialized).expect("deserialize should succeed"); |
| 142 | + |
| 143 | + assert_eq!(block, deserialized); |
| 144 | +} |
| 145 | + |
104 | 146 | // Internal helper just to satisfy TypeSpec compilation in test_ast_struct_decl |
105 | 147 | use techscript_ast::TypeSpec; |
0 commit comments