Skip to content

Commit 23da6ee

Browse files
author
Waleri Enns
committed
Fixed setup for another test. Add a more elaborated test for the parse error recovery feature
1 parent 17e532d commit 23da6ee

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

cxx-squid/src/test/java/org/sonar/cxx/CxxAstScannerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public class CxxAstScannerTest {
8989

9090
@Test
9191
public void error_recovery_declaration() {
92-
SourceFile file = CxxAstScanner.scanSingleFile(new File("src/test/resources/parser/own/error_recovery_declaration.cc"));
92+
SourceFile file = CxxAstScanner.scanSingleFile(new File("src/test/resources/parser/bad/error_recovery_declaration.cc"));
9393
assertThat(file.getInt(CxxMetric.FUNCTIONS)).isEqualTo(2);
9494
}
9595
}

cxx-squid/src/test/java/org/sonar/cxx/parser/CxxParserTest.java

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,72 @@
1919
*/
2020
package org.sonar.cxx.parser;
2121

22+
import org.sonar.cxx.CxxConfiguration;
23+
2224
import com.sonar.sslr.impl.Parser;
2325
import com.sonar.sslr.squid.SquidAstVisitorContext;
2426
import org.apache.commons.io.FileUtils;
2527
import org.junit.Test;
2628
import com.sonar.sslr.api.Grammar;
29+
import java.net.URISyntaxException;
2730

2831
import java.io.File;
2932
import java.util.Collection;
33+
import java.util.ArrayList;
34+
import java.util.List;
3035

3136
import static org.mockito.Mockito.mock;
37+
import static org.junit.Assert.fail;
38+
3239

33-
public class CxxParserTest {
40+
public class CxxParserTest extends ParserBaseTest {
41+
String errSources = "/parser/bad/error_recovery_declaration.cc";
42+
String[] goodFiles = {"own", "examples"};
43+
String rootDir = "src/test/resources/parser";
44+
File erroneousSources = null;
3445

35-
private Parser<Grammar> parser = CxxParser.create(mock(SquidAstVisitorContext.class));
46+
public CxxParserTest(){
47+
super();
48+
try{
49+
erroneousSources = new File(CxxParserTest.class.getResource(errSources).toURI());
50+
} catch (java.net.URISyntaxException e) {}
51+
}
3652

3753
@Test
38-
public void test() {
54+
public void testParsingOnDiverseSourceFiles() {
3955
Collection<File> files = listFiles();
4056
for (File file : files) {
41-
parser.parse(file);
57+
p.parse(file);
4258
CxxParser.finishedParsing(file);
4359
}
4460
}
4561

46-
private static Collection<File> listFiles() {
47-
File dir = new File("src/test/resources/parser/");
48-
return FileUtils.listFiles(dir, new String[] {"cc", "cpp", "hpp"}, true);
62+
@Test
63+
public void testParseErrorRecovery() {
64+
// The error recovery works, if:
65+
// - a syntacticly incorrect file causes a parse error when recovery is disabled
66+
// - but doesnt cause such an error if we run with default settings
67+
68+
try{
69+
p.parse(erroneousSources);
70+
fail("Parser could not recognize the syntax error");
71+
}
72+
catch(com.sonar.sslr.api.RecognitionException re){
73+
}
74+
75+
conf.setErrorRecoveryEnabled(true);
76+
p = CxxParser.create(mock(SquidAstVisitorContext.class), conf);
77+
p.parse(erroneousSources); //<-- this shouldnt throw now
78+
}
79+
80+
81+
private Collection<File> listFiles() {
82+
List<File> files = new ArrayList<File>();
83+
for(String dir: goodFiles){
84+
files.addAll(FileUtils.listFiles(new File(rootDir, dir),
85+
new String[] {"cc", "cpp", "hpp"}, true));
86+
}
87+
return files;
4988
}
5089

5190
}

cxx-squid/src/test/resources/parser/own/error_recovery_declaration.cc renamed to cxx-squid/src/test/resources/parser/bad/error_recovery_declaration.cc

File renamed without changes.

0 commit comments

Comments
 (0)