| /* |
| * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser. |
| * Copyright (C) 2011, 2013-2016 The JavaParser Team. |
| * |
| * This file is part of JavaParser. |
| * |
| * JavaParser can be used either under the terms of |
| * a) the GNU Lesser General Public License as published by |
| * the Free Software Foundation, either version 3 of the License, or |
| * (at your option) any later version. |
| * b) the terms of the Apache License |
| * |
| * You should have received a copy of both licenses in LICENCE.LGPL and |
| * LICENCE.APACHE. Please refer to those files for details. |
| * |
| * JavaParser is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| */ |
| |
| package com.github.javaparser.printer; |
| |
| import com.github.javaparser.ast.CompilationUnit; |
| import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; |
| import com.github.javaparser.ast.body.FieldDeclaration; |
| import com.github.javaparser.ast.expr.VariableDeclarationExpr; |
| import com.github.javaparser.ast.type.PrimitiveType; |
| import org.junit.Test; |
| |
| import static com.github.javaparser.JavaParser.*; |
| import static com.github.javaparser.utils.TestUtils.assertEqualsNoEol; |
| import static org.junit.Assert.assertEquals; |
| |
| public class PrettyPrinterTest { |
| |
| private String prettyPrintField(String code) { |
| CompilationUnit cu = parse(code); |
| return new PrettyPrinter().print(cu.findFirst(FieldDeclaration.class).get()); |
| } |
| |
| private String prettyPrintVar(String code) { |
| CompilationUnit cu = parse(code); |
| return new PrettyPrinter().print(cu.findAll(VariableDeclarationExpr.class).get(0)); |
| } |
| |
| @Test |
| public void printingArrayFields() { |
| String code; |
| code = "class A { int a, b[]; }"; |
| assertEquals("int a, b[];", prettyPrintField(code)); |
| |
| code = "class A { int[] a[], b[]; }"; |
| assertEquals("int[][] a, b;", prettyPrintField(code)); |
| |
| code = "class A { int[] a[][], b; }"; |
| assertEquals("int[] a[][], b;", prettyPrintField(code)); |
| |
| code = "class A { int[] a, b; }"; |
| assertEquals("int[] a, b;", prettyPrintField(code)); |
| |
| code = "class A { int a[], b[]; }"; |
| assertEquals("int[] a, b;", prettyPrintField(code)); |
| } |
| |
| @Test |
| public void printingArrayVariables() { |
| String code; |
| code = "class A { void foo(){ int a, b[]; }}"; |
| assertEquals("int a, b[]", prettyPrintVar(code)); |
| |
| code = "class A { void foo(){ int[] a[], b[]; }}"; |
| assertEquals("int[][] a, b", prettyPrintVar(code)); |
| |
| code = "class A { void foo(){ int[] a[][], b; }}"; |
| assertEquals("int[] a[][], b", prettyPrintVar(code)); |
| |
| code = "class A { void foo(){ int[] a, b; }}"; |
| assertEquals("int[] a, b", prettyPrintVar(code)); |
| |
| code = "class A { void foo(){ int a[], b[]; }}"; |
| assertEquals("int[] a, b", prettyPrintVar(code)); |
| } |
| |
| private String prettyPrintConfigurable(String code) { |
| CompilationUnit cu = parse(code); |
| PrettyPrinter printer = new PrettyPrinter(new PrettyPrinterConfiguration().setVisitorFactory(TestVisitor::new)); |
| return printer.print(cu.findFirst(ClassOrInterfaceDeclaration.class).get()); |
| } |
| |
| @Test |
| public void printUseTestVisitor() { |
| String code; |
| code = "class A { void foo(){ int a, b[]; }}"; |
| assertEquals("test", prettyPrintConfigurable(code)); |
| } |
| |
| @Test |
| public void prettyColumnAlignParameters_enabled() { |
| PrettyPrinterConfiguration config = new PrettyPrinterConfiguration() |
| .setIndent("\t") |
| .setColumnAlignParameters(true); |
| |
| final String EOL = config.getEndOfLineCharacter(); |
| |
| String code = "class Example { void foo(Object arg0,Object arg1){ myMethod(1, 2, 3, 5, Object.class); } }"; |
| String expected = "class Example {" + EOL + |
| "" + EOL + |
| "\tvoid foo(Object arg0, Object arg1) {" + EOL + |
| "\t\tmyMethod(1," + EOL + |
| "\t\t 2," + EOL + |
| "\t\t 3," + EOL + |
| "\t\t 5," + EOL + |
| "\t\t Object.class);" + EOL + |
| "\t}" + EOL + |
| "}" + EOL + |
| ""; |
| |
| assertEquals(expected, new PrettyPrinter(config).print(parse(code))); |
| } |
| |
| @Test |
| public void prettyColumnAlignParameters_disabled() { |
| PrettyPrinterConfiguration config = new PrettyPrinterConfiguration(); |
| final String EOL = config.getEndOfLineCharacter(); |
| |
| String code = "class Example { void foo(Object arg0,Object arg1){ myMethod(1, 2, 3, 5, Object.class); } }"; |
| String expected = "class Example {" + EOL + |
| "" + EOL + |
| " void foo(Object arg0, Object arg1) {" + EOL + |
| " myMethod(1, 2, 3, 5, Object.class);" + EOL + |
| " }" + EOL + |
| "}" + EOL + |
| ""; |
| |
| assertEquals(expected, new PrettyPrinter(config).print(parse(code))); |
| } |
| |
| @Test |
| public void prettyAlignMethodCallChains_enabled() { |
| PrettyPrinterConfiguration config = new PrettyPrinterConfiguration() |
| .setIndent("\t") |
| .setColumnAlignFirstMethodChain(true); |
| |
| final String EOL = config.getEndOfLineCharacter(); |
| |
| String code = "class Example { void foo() { IntStream.range(0, 10).filter(x -> x % 2 == 0).map(x -> x * IntStream.of(1,3,5,1).sum()).forEach(System.out::println); } }"; |
| String expected = "class Example {" + EOL + |
| "" + EOL + |
| "\tvoid foo() {" + EOL + |
| "\t\tIntStream.range(0, 10)" + EOL + |
| "\t\t .filter(x -> x % 2 == 0)" + EOL + |
| "\t\t .map(x -> x * IntStream.of(1, 3, 5, 1)" + EOL + |
| "\t\t .sum())" + EOL + |
| "\t\t .forEach(System.out::println);" + EOL + |
| "\t}" + EOL + |
| "}" + EOL + |
| ""; |
| |
| assertEquals(expected, new PrettyPrinter(config).print(parse(code))); |
| } |
| |
| @Test |
| public void prettyAlignMethodCallChains_disabled() { |
| PrettyPrinterConfiguration config = new PrettyPrinterConfiguration(); |
| final String EOL = config.getEndOfLineCharacter(); |
| |
| String code = "class Example { void foo() { IntStream.range(0, 10).filter(x -> x % 2 == 0).map(x -> x * IntStream.of(1,3,5,1).sum()).forEach(System.out::println); } }"; |
| String expected = "class Example {" + EOL + |
| "" + EOL + |
| " void foo() {" + EOL + |
| " IntStream.range(0, 10).filter(x -> x % 2 == 0).map(x -> x * IntStream.of(1, 3, 5, 1).sum()).forEach(System.out::println);" + EOL + |
| " }" + EOL + |
| "}" + EOL + |
| ""; |
| |
| assertEquals(expected, new PrettyPrinter(config).print(parse(code))); |
| } |
| |
| @Test |
| public void enumConstantsHorizontally() { |
| CompilationUnit cu = parse("enum X{A, B, C, D, E}"); |
| assertEqualsNoEol("enum X {\n\n A, B, C, D, E\n}\n", new PrettyPrinter().print(cu)); |
| } |
| |
| @Test |
| public void enumConstantsVertically() { |
| CompilationUnit cu = parse("enum X{A, B, C, D, E, F}"); |
| assertEqualsNoEol("enum X {\n\n A,\n B,\n C,\n D,\n E,\n F\n}\n", new PrettyPrinter().print(cu)); |
| } |
| |
| @Test |
| public void printingInconsistentVariables() { |
| FieldDeclaration fieldDeclaration = parseBodyDeclaration("int a, b;").asFieldDeclaration(); |
| |
| assertEquals("int a, b;", fieldDeclaration.toString()); |
| |
| fieldDeclaration.getVariable(0).setType(PrimitiveType.doubleType()); |
| |
| assertEquals("??? a, b;", fieldDeclaration.toString()); |
| |
| fieldDeclaration.getVariable(1).setType(PrimitiveType.doubleType()); |
| |
| assertEquals("double a, b;", fieldDeclaration.toString()); |
| } |
| } |