1package com.github.javaparser.ast.type;
2
3import com.github.javaparser.JavaParser;
4import com.github.javaparser.ParseProblemException;
5import com.github.javaparser.ParseResult;
6import com.github.javaparser.ParserConfiguration;
7import com.github.javaparser.ast.expr.VariableDeclarationExpr;
8import com.github.javaparser.ast.validator.Java5Validator;
9import org.junit.Test;
10
11import static com.github.javaparser.JavaParser.parseType;
12import static com.github.javaparser.JavaParser.parseVariableDeclarationExpr;
13import static com.github.javaparser.ParseStart.VARIABLE_DECLARATION_EXPR;
14import static com.github.javaparser.ParserConfiguration.LanguageLevel.*;
15import static com.github.javaparser.Providers.provider;
16import static org.junit.Assert.*;
17
18public class TypeTest {
19    @Test
20    public void asString() {
21        assertEquals("int", typeAsString("int x"));
22        assertEquals("List<Long>", typeAsString("List<Long> x"));
23        assertEquals("String", typeAsString("@A String x"));
24        assertEquals("List<? extends Object>", typeAsString("List<? extends Object> x"));
25    }
26
27    @Test(expected = ParseProblemException.class)
28    public void primitiveTypeArgumentDefaultValidator() {
29        typeAsString("List<long> x;");
30    }
31
32    @Test
33    public void primitiveTypeArgumentLenientValidator() {
34        ParserConfiguration config = new ParserConfiguration()
35                .setLanguageLevel(RAW);
36        config.getPostProcessors().add(new Java5Validator() {{
37            remove(noPrimitiveGenericArguments);
38        }}.postProcessor());
39
40        ParseResult<VariableDeclarationExpr> result = new JavaParser(config).parse(
41                VARIABLE_DECLARATION_EXPR, provider("List<long> x"));
42        assertTrue(result.isSuccessful());
43
44        VariableDeclarationExpr decl = result.getResult().get();
45        assertEquals("List<long>", decl.getVariable(0).getType().asString());
46    }
47
48    private String typeAsString(String s) {
49        return parseVariableDeclarationExpr(s).getVariable(0).getType().asString();
50    }
51
52    @Test
53    public void arrayType() {
54        Type type = parseType("int[]");
55        assertTrue(type.isArrayType());
56        ArrayType arrayType = type.asArrayType();
57        final ArrayType[] s = new ArrayType[1];
58        type.ifArrayType(t -> s[0] = t);
59        assertNotNull(s[0]);
60    }
61
62    @Test
63    public void issue1251() {
64        final Type type = parseType("TypeUtilsTest<String>.Tester");
65        assertEquals("TypeUtilsTest<String>.Tester", type.toString());
66    }
67
68}
69