diff options
Diffstat (limited to 'javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrinterTest.java')
-rw-r--r-- | javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrinterTest.java | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrinterTest.java b/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrinterTest.java new file mode 100644 index 000000000..fef360925 --- /dev/null +++ b/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrinterTest.java @@ -0,0 +1,206 @@ +/* + * 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()); + } +} |