From 8cb1073f4dc33bf2dc62e0cd2d4ce2cadd0e5118 Mon Sep 17 00:00:00 2001 From: Fernanda Madeiral Date: Thu, 11 Jun 2020 00:05:22 +0200 Subject: [PATCH] test(SniperPrettyPrinter): modification on first statement of a block should not remove new line (#3401) (#3402) --- .../test/prettyprinter/TestSniperPrinter.java | 20 +++++++++++++++++++ .../test/prettyprinter/testclasses/Throw.java | 7 +++++++ 2 files changed, 27 insertions(+) create mode 100644 src/test/java/spoon/test/prettyprinter/testclasses/Throw.java diff --git a/src/test/java/spoon/test/prettyprinter/TestSniperPrinter.java b/src/test/java/spoon/test/prettyprinter/TestSniperPrinter.java index ef756f1890a..22207817ee9 100644 --- a/src/test/java/spoon/test/prettyprinter/TestSniperPrinter.java +++ b/src/test/java/spoon/test/prettyprinter/TestSniperPrinter.java @@ -21,11 +21,13 @@ import spoon.SpoonException; import spoon.processing.Processor; import spoon.reflect.CtModel; +import spoon.reflect.code.CtConstructorCall; import spoon.reflect.code.CtCodeSnippetExpression; import spoon.reflect.code.CtExpression; import spoon.reflect.code.CtInvocation; import spoon.reflect.code.CtLocalVariable; import spoon.reflect.code.CtStatement; +import spoon.reflect.code.CtThrow; import spoon.reflect.declaration.CtClass; import spoon.reflect.declaration.CtElement; import spoon.reflect.declaration.CtField; @@ -44,6 +46,7 @@ import spoon.support.modelobs.SourceFragmentCreator; import spoon.support.sniper.SniperJavaPrettyPrinter; import spoon.test.prettyprinter.testclasses.OneLineMultipleVariableDeclaration; +import spoon.test.prettyprinter.testclasses.Throw; import spoon.test.prettyprinter.testclasses.InvocationReplacement; import spoon.test.prettyprinter.testclasses.ToBeChanged; @@ -71,6 +74,23 @@ public class TestSniperPrinter { @Test + public void testPrintInsertedThrow() { + testSniper(Throw.class.getName(), type -> { + CtConstructorCall ctConstructorCall = (CtConstructorCall) type.getMethodsByName("foo").get(0).getBody().getStatements().get(0); + CtThrow ctThrow = type.getFactory().createCtThrow(ctConstructorCall.toString()); + ctConstructorCall.replace(ctThrow); + }, (type, printed) -> { + assertIsPrintedWithExpectedChanges(type, printed, + "\\Qvoid foo(int x) {\n" + + "\t\tnew IllegalArgumentException(\"x must be nonnegative\");\n" + + "\t}", + "void foo(int x) {\n" + + "\t\tthrow new java.lang.IllegalArgumentException(\"x must be nonnegative\");\n" + + "\t}"); + }); + } + + @Test public void testPrintReplacementOfInvocation() { testSniper(InvocationReplacement.class.getName(), type -> { CtLocalVariable localVariable = (CtLocalVariable) type.getMethodsByName("main").get(0).getBody().getStatements().get(0); diff --git a/src/test/java/spoon/test/prettyprinter/testclasses/Throw.java b/src/test/java/spoon/test/prettyprinter/testclasses/Throw.java new file mode 100644 index 00000000000..db0adb29a7f --- /dev/null +++ b/src/test/java/spoon/test/prettyprinter/testclasses/Throw.java @@ -0,0 +1,7 @@ +package spoon.test.prettyprinter.testclasses; + +public class Throw { + void foo(int x) { + new IllegalArgumentException("x must be nonnegative"); + } +} \ No newline at end of file