diff --git a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java index 8b29f6013..35241e40c 100644 --- a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java +++ b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java @@ -771,15 +771,15 @@ public class PdeParseTreeListener extends ProcessingBaseListener { protected void writeHeaderContents(PrintWriterWithEditGen decoratedWriter, RewriteResultBuilder resultBuilder) { - if (!isTesting) { - writePreprocessorComment(decoratedWriter, resultBuilder); - } - if (destinationPackageName.isPresent()) { decoratedWriter.addCodeLine("package " + destinationPackageName.get() + ";"); decoratedWriter.addEmptyLine(); } + if (!isTesting) { + writePreprocessorComment(decoratedWriter, resultBuilder); + } + writeImports(decoratedWriter, resultBuilder); boolean requiresClassHeader = mode == PdePreprocessor.Mode.STATIC; diff --git a/java/src/processing/mode/java/preproc/PdePreprocessor.java b/java/src/processing/mode/java/preproc/PdePreprocessor.java index d3962484f..6b2b4c526 100644 --- a/java/src/processing/mode/java/preproc/PdePreprocessor.java +++ b/java/src/processing/mode/java/preproc/PdePreprocessor.java @@ -191,7 +191,7 @@ public class PdePreprocessor { tokens, sketchName, tabSize, - Optional.empty() + destinationPackage ); listener.setTesting(isTesting); listener.setCoreImports(coreImports); diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index 9b55a1f3e..f4057e4ba 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -88,8 +88,12 @@ public class ParserTests { } static void expectGood(final String id, boolean ignoreWhitespace) { + expectGood(id, ignoreWhitespace, Optional.empty()); + } + + static void expectGood(final String id, boolean ignoreWhitespace, Optional packageName) { try { - final String program = preprocess(id, res(id + ".pde")); + final String program = preprocess(id, res(id + ".pde"), packageName); boolean successful = compile(id, program); if (successful) { System.err.println("----------------------------"); @@ -368,6 +372,11 @@ public class ParserTests { expectGood("typeinference"); } + @Test + public void testPackage() { + expectGood("packageTest", true, Optional.of("test.subtest")); + } + private static boolean compile(String id, String program) { // Create compilable AST to get syntax problems CompilationUnit compilableCU = JdtCompilerUtil.makeAST( diff --git a/java/test/processing/mode/java/ProcessingTestUtil.java b/java/test/processing/mode/java/ProcessingTestUtil.java index 723329c5b..97deb4147 100644 --- a/java/test/processing/mode/java/ProcessingTestUtil.java +++ b/java/test/processing/mode/java/ProcessingTestUtil.java @@ -5,6 +5,8 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; +import java.util.Optional; + import processing.app.Preferences; import processing.app.SketchException; import processing.mode.java.preproc.PdePreprocessor; @@ -37,13 +39,23 @@ public class ProcessingTestUtil { static String preprocess(final String name, final File resource) throws SketchException { + return preprocess(name, resource, Optional.empty()); + } + static String preprocess(final String name, final File resource, Optional optionalPackage) + throws SketchException { + final String program = read(resource); final StringWriter out = new StringWriter(); - - PdePreprocessor preprocessor = PdePreprocessor.builderFor(name) - .setTabSize(4) - .setIsTesting(true) - .build(); + + PdePreprocessor.PdePreprocessorBuilder builder = PdePreprocessor.builderFor(name); + builder.setTabSize(4); + builder.setIsTesting(true); + + if (optionalPackage.isPresent()) { + builder.setDestinationPackage(optionalPackage.get()); + } + + PdePreprocessor preprocessor = builder.build(); PreprocessorResult result = preprocessor.write(out, program); diff --git a/java/test/resources/packageTest.expected b/java/test/resources/packageTest.expected new file mode 100644 index 000000000..7bf7cb07e --- /dev/null +++ b/java/test/resources/packageTest.expected @@ -0,0 +1,33 @@ +package test.subtest; + +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +import java.util.*; +import java.util.HashMap; +import java.util.ArrayList; +import java.io.File; +import java.io.BufferedReader; +import java.io.PrintWriter; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +public class packageTest extends PApplet { + + public void setup() { +List test = new ArrayList<>(); + noLoop(); + } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "packageTest" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +}