From 18e1d567b647676c80f76df2e65a6b3347fc8ecf Mon Sep 17 00:00:00 2001 From: A Pottinger Date: Thu, 10 Feb 2022 08:43:24 -0800 Subject: [PATCH 1/4] Fix greedy multi-line string rule. Single character fix which adds test for and closes #398 by making the rule non-greedy. --- .../test/resources/multimultilinestr.expected | 35 +++++++++++++++++++ java/test/resources/multimultilinestr.pde | 14 ++++++++ 2 files changed, 49 insertions(+) create mode 100644 java/test/resources/multimultilinestr.expected create mode 100644 java/test/resources/multimultilinestr.pde diff --git a/java/test/resources/multimultilinestr.expected b/java/test/resources/multimultilinestr.expected new file mode 100644 index 000000000..1d339a9da --- /dev/null +++ b/java/test/resources/multimultilinestr.expected @@ -0,0 +1,35 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +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 multimultilinestr extends PApplet { + + public void setup() { +String testMultiline1 = "\nline1 \"\nline 2 \"\"\nline 3\nline 4"; +String testMultiline2 = "\nline5 \"\nline 6 \"\"\nline 7\nline 8"; + +println(testMultiline1); +println(testMultiline2); + + noLoop(); + } + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "multimultilinestr" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/multimultilinestr.pde b/java/test/resources/multimultilinestr.pde new file mode 100644 index 000000000..22e5bcfef --- /dev/null +++ b/java/test/resources/multimultilinestr.pde @@ -0,0 +1,14 @@ +String testMultiline1 = """ +line1 " +line 2 "" +line 3 +line 4"""; + +String testMultiline2 = """ +line5 " +line 6 "" +line 7 +line 8"""; + +println(testMultiline1); +println(testMultiline2); From 3c59e3694cc91a916afbc7b8c7fb2c89241451eb Mon Sep 17 00:00:00 2001 From: A Pottinger Date: Thu, 10 Feb 2022 08:46:53 -0800 Subject: [PATCH 2/4] Fix for new test. --- java/src/processing/mode/java/preproc/JavaLexer.g4 | 2 +- java/test/processing/mode/java/ParserTests.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/java/src/processing/mode/java/preproc/JavaLexer.g4 b/java/src/processing/mode/java/preproc/JavaLexer.g4 index 13adc7dc9..a4f65f892 100644 --- a/java/src/processing/mode/java/preproc/JavaLexer.g4 +++ b/java/src/processing/mode/java/preproc/JavaLexer.g4 @@ -116,7 +116,7 @@ BOOL_LITERAL: 'true' CHAR_LITERAL: '\'' (~['\\\r\n] | EscapeSequence) '\''; STRING_LITERAL: '"' (~["\\\r\n] | EscapeSequence)* '"'; -MULTI_STRING_LIT: '"""' (~[\\] | EscapeSequence)* '"""'; +MULTI_STRING_LIT: '"""' (~[\\] | EscapeSequence)*? '"""'; NULL_LITERAL: 'null'; // Separators diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index 11a7eee38..3b43a29b9 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -421,8 +421,13 @@ public class ParserTests { } @Test - public void testMultlineString() { + public void testMultilineString() { expectGood("multilinestr"); } + @Test + public void testMultiMultilineString() { + expectGood("multimultilinestr"); + } + } From 4ffd2e5898add1f184d78d70d0ade9c279825af8 Mon Sep 17 00:00:00 2001 From: A Pottinger Date: Thu, 10 Feb 2022 08:52:08 -0800 Subject: [PATCH 3/4] Add variable modifier to multi-multiline string test. --- java/test/resources/multimultilinestr.expected | 2 +- java/test/resources/multimultilinestr.pde | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/test/resources/multimultilinestr.expected b/java/test/resources/multimultilinestr.expected index 1d339a9da..df0d8e41f 100644 --- a/java/test/resources/multimultilinestr.expected +++ b/java/test/resources/multimultilinestr.expected @@ -16,7 +16,7 @@ public class multimultilinestr extends PApplet { public void setup() { String testMultiline1 = "\nline1 \"\nline 2 \"\"\nline 3\nline 4"; -String testMultiline2 = "\nline5 \"\nline 6 \"\"\nline 7\nline 8"; +final String testMultiline2 = "\nline5 \"\nline 6 \"\"\nline 7\nline 8"; println(testMultiline1); println(testMultiline2); diff --git a/java/test/resources/multimultilinestr.pde b/java/test/resources/multimultilinestr.pde index 22e5bcfef..3e4274663 100644 --- a/java/test/resources/multimultilinestr.pde +++ b/java/test/resources/multimultilinestr.pde @@ -4,7 +4,7 @@ line 2 "" line 3 line 4"""; -String testMultiline2 = """ +final String testMultiline2 = """ line5 " line 6 "" line 7 From 0a848442d557e436cf74b8de510516eb617a63f2 Mon Sep 17 00:00:00 2001 From: A Pottinger Date: Thu, 10 Feb 2022 08:56:05 -0800 Subject: [PATCH 4/4] Add test for multiline strings in classes just to be safe. Though the test isn't broken, just adding a multiline string within a class test case just out of an abundance of caution. --- .../processing/mode/java/ParserTests.java | 5 +++ .../test/resources/multilinestrclass.expected | 43 +++++++++++++++++++ java/test/resources/multilinestrclass.pde | 20 +++++++++ 3 files changed, 68 insertions(+) create mode 100644 java/test/resources/multilinestrclass.expected create mode 100644 java/test/resources/multilinestrclass.pde diff --git a/java/test/processing/mode/java/ParserTests.java b/java/test/processing/mode/java/ParserTests.java index 3b43a29b9..7a17a3d81 100644 --- a/java/test/processing/mode/java/ParserTests.java +++ b/java/test/processing/mode/java/ParserTests.java @@ -425,6 +425,11 @@ public class ParserTests { expectGood("multilinestr"); } + @Test + public void testMultilineStringClass() { + expectGood("multilinestrclass"); + } + @Test public void testMultiMultilineString() { expectGood("multimultilinestr"); diff --git a/java/test/resources/multilinestrclass.expected b/java/test/resources/multilinestrclass.expected new file mode 100644 index 000000000..5a5a8093d --- /dev/null +++ b/java/test/resources/multilinestrclass.expected @@ -0,0 +1,43 @@ +import processing.core.*; +import processing.data.*; +import processing.event.*; +import processing.opengl.*; + +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 multilinestrclass extends PApplet { + +class TestClass { + final String testMultiline1 = "\nline1 \"\nline 2 \"\"\nline 3\nline 4"; + + public String getStr() { + return testMultiline1; + } +} + + + public void setup() { + TestClass test = new TestClass(); + println(test.getStr()); +} + + public void draw() { +} + + + static public void main(String[] passedArgs) { + String[] appletArgs = new String[] { "multilinestrclass" }; + if (passedArgs != null) { + PApplet.main(concat(appletArgs, passedArgs)); + } else { + PApplet.main(appletArgs); + } + } +} diff --git a/java/test/resources/multilinestrclass.pde b/java/test/resources/multilinestrclass.pde new file mode 100644 index 000000000..a8e83e840 --- /dev/null +++ b/java/test/resources/multilinestrclass.pde @@ -0,0 +1,20 @@ +class TestClass { + final String testMultiline1 = """ +line1 " +line 2 "" +line 3 +line 4"""; + + String getStr() { + return testMultiline1; + } +} + + +void setup() { + TestClass test = new TestClass(); + println(test.getStr()); +} + +void draw() { +}