java-ebpf
58 строк · 2.3 Кб
1package me.bechberger.cast;
2
3import org.junit.jupiter.params.ParameterizedTest;
4import org.junit.jupiter.params.provider.Arguments;
5import org.junit.jupiter.params.provider.MethodSource;
6
7import java.util.List;
8import java.util.stream.Stream;
9
10import static me.bechberger.cast.CAST.Declarator.*;
11import static me.bechberger.cast.CAST.Expression.constant;
12import static me.bechberger.cast.CAST.Expression.variable;
13import static me.bechberger.cast.CAST.OperatorExpression.binary;
14import static me.bechberger.cast.CAST.PrimaryExpression.CAnnotation.sec;
15import static me.bechberger.cast.CAST.Statement.*;
16import static org.junit.jupiter.api.Assertions.assertEquals;
17
18/**
19* Basic AST tests
20*/
21public class ASTTest {
22
23static Stream<Arguments> exprAstAndExpectedCode() {
24return Stream.of(Arguments.of(expression(binary("+", constant(1), constant(2))), "1 + 2;"));
25}
26
27@ParameterizedTest
28@MethodSource("exprAstAndExpectedCode")
29void testExpr(CAST.Statement statement, String expectedCode) {
30assertEquals(expectedCode, statement.toPrettyString());
31}
32
33static Stream<Arguments> declAstAndExpectedCode() {
34return Stream.of(Arguments.of(variableDefinition(struct(variable("myStruct"),
35List.of(structMember(CAST.Declarator.identifier("int"), variable("b")))), variable("myVar", sec("a")))
36, "struct myStruct {\n int b;\n} myVar SEC(\"a\");"),
37Arguments.of(variableDefinition(struct(variable("myStruct"),
38List.of(structMember(CAST.Declarator.identifier("int"), variable("b"), constant(1)))),
39variable(
40"myVar", sec("a")))
41, "struct myStruct {\n int (b, 1);\n} myVar SEC(\"a\");"),
42Arguments.of(
43struct(variable("x"),
44List.of(structMember(array(identifier("a"),
45constant(10)),
46variable("x")))).toStatement(),
47"""
48struct x {
49a x[10];
50};"""));
51}
52
53@ParameterizedTest
54@MethodSource("declAstAndExpectedCode")
55void testDecl(Statement ast, String expectedCode) {
56assertEquals(expectedCode, ast.toPrettyString());
57}
58}