|
@@ -1,17 +1,15 @@
|
|
|
package net.ranides.assira.ui.primitives;
|
|
package net.ranides.assira.ui.primitives;
|
|
|
|
|
|
|
|
-import net.ranides.assira.grammar.G4ErrorHandler;
|
|
|
|
|
import net.ranides.assira.grammar.G4Node;
|
|
import net.ranides.assira.grammar.G4Node;
|
|
|
import net.ranides.assira.grammar.G4Parser;
|
|
import net.ranides.assira.grammar.G4Parser;
|
|
|
import net.ranides.assira.grammar.G4ParserCoverage;
|
|
import net.ranides.assira.grammar.G4ParserCoverage;
|
|
|
import net.ranides.assira.grammar.G4Selector;
|
|
import net.ranides.assira.grammar.G4Selector;
|
|
|
import net.ranides.assira.grammar.G4SelectorBuilder;
|
|
import net.ranides.assira.grammar.G4SelectorBuilder;
|
|
|
import net.ranides.assira.grammar.G4Support;
|
|
import net.ranides.assira.grammar.G4Support;
|
|
|
-import net.ranides.assira.grammar.impl.G4ParserInterpreter;
|
|
|
|
|
-import net.ranides.assira.io.IOStreams;
|
|
|
|
|
import net.ranides.assira.io.ResourceUtils;
|
|
import net.ranides.assira.io.ResourceUtils;
|
|
|
import net.ranides.assira.junit.NewAssert;
|
|
import net.ranides.assira.junit.NewAssert;
|
|
|
-import net.ranides.assira.text.IOStrings;
|
|
|
|
|
|
|
+import net.ranides.assira.system.HostSystem;
|
|
|
|
|
+import net.ranides.assira.text.StrAppender;
|
|
|
import net.ranides.assira.ui.helpers.ColorUtils;
|
|
import net.ranides.assira.ui.helpers.ColorUtils;
|
|
|
import net.ranides.grammars.generated.CssGrammarLexer;
|
|
import net.ranides.grammars.generated.CssGrammarLexer;
|
|
|
import net.ranides.grammars.generated.CssGrammarParser;
|
|
import net.ranides.grammars.generated.CssGrammarParser;
|
|
@@ -19,10 +17,8 @@ import org.junit.Ignore;
|
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
|
|
|
|
|
|
import java.awt.*;
|
|
import java.awt.*;
|
|
|
-import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
-import java.io.PrintStream;
|
|
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
|
+import java.io.StringWriter;
|
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
import static net.ranides.assira.junit.NewAssert.assertThrows;
|
|
import static net.ranides.assira.junit.NewAssert.assertThrows;
|
|
@@ -38,14 +34,8 @@ public class CssParserTest {
|
|
|
|
|
|
|
|
G4Selector<Boolean> IGNORE = new G4SelectorBuilder<Boolean>()
|
|
G4Selector<Boolean> IGNORE = new G4SelectorBuilder<Boolean>()
|
|
|
.withParser(CSS_PARSER)
|
|
.withParser(CSS_PARSER)
|
|
|
- .valueForToken("CHAR_HEX", true)
|
|
|
|
|
- .valueForToken("CHAR_WS", true)
|
|
|
|
|
.valueForToken("WS", true)
|
|
.valueForToken("WS", true)
|
|
|
.valueForToken("CS", true)
|
|
.valueForToken("CS", true)
|
|
|
- .valueForToken("DIGIT", true)
|
|
|
|
|
- .valueForToken("DIGIT_HEX", true)
|
|
|
|
|
- .valueForToken("DIGIT_NZ", true)
|
|
|
|
|
- .valueForToken("DIGIT_Z", true)
|
|
|
|
|
.valueForToken("DOT", true)
|
|
.valueForToken("DOT", true)
|
|
|
.valueForToken("LB", true)
|
|
.valueForToken("LB", true)
|
|
|
.valueForToken("RB", true)
|
|
.valueForToken("RB", true)
|
|
@@ -85,7 +75,6 @@ public class CssParserTest {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Ignore("manual")
|
|
|
|
|
@Test
|
|
@Test
|
|
|
public void grammarInterpretedCoverage() throws IOException {
|
|
public void grammarInterpretedCoverage() throws IOException {
|
|
|
G4ParserCoverage info = G4Parser.builder()
|
|
G4ParserCoverage info = G4Parser.builder()
|
|
@@ -105,12 +94,17 @@ public class CssParserTest {
|
|
|
info.use(CssParser.BORDER_SIZE_COMPONENT);
|
|
info.use(CssParser.BORDER_SIZE_COMPONENT);
|
|
|
info.use(CssParser.BORDER);
|
|
info.use(CssParser.BORDER);
|
|
|
|
|
|
|
|
- printCoverage(info);
|
|
|
|
|
|
|
+ StringWriter sw = new StringWriter();
|
|
|
|
|
+ printCoverage(info, new StrAppender(sw));
|
|
|
|
|
+ if(HostSystem.JUNIT.detected()) {
|
|
|
|
|
+ printCoverage(info);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(ResourceUtils.text("grammars/CssCoverage.txt"), sw.toString());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Ignore("manual")
|
|
|
|
|
@Test
|
|
@Test
|
|
|
- public void grammarGeneratedCoverage() {
|
|
|
|
|
|
|
+ public void grammarGeneratedCoverage() throws IOException {
|
|
|
G4ParserCoverage info = G4Parser.builder()
|
|
G4ParserCoverage info = G4Parser.builder()
|
|
|
.lexer(CssGrammarLexer.class)
|
|
.lexer(CssGrammarLexer.class)
|
|
|
.parser(CssGrammarParser.class)
|
|
.parser(CssGrammarParser.class)
|
|
@@ -127,24 +121,46 @@ public class CssParserTest {
|
|
|
info.use(CssParser.BORDER_SIZE_COMPONENT);
|
|
info.use(CssParser.BORDER_SIZE_COMPONENT);
|
|
|
info.use(CssParser.BORDER);
|
|
info.use(CssParser.BORDER);
|
|
|
|
|
|
|
|
- printCoverage(info);
|
|
|
|
|
|
|
+ StringWriter sw = new StringWriter();
|
|
|
|
|
+ printCoverage(info, new StrAppender(sw));
|
|
|
|
|
+ if(HostSystem.JUNIT.detected()) {
|
|
|
|
|
+ printCoverage(info);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ assertEquals(ResourceUtils.text("grammars/CssCoverage.txt"), sw.toString());
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ private void printCoverage(G4ParserCoverage info, StrAppender output) {
|
|
|
|
|
+ info.rules().forEach(rule -> {
|
|
|
|
|
+ if(rule.inner().isPresent()) {
|
|
|
|
|
+ output.printf("%d: %s <= %s%n", rule.used(), rule.name(), rule.inner().get());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ output.printf("%d: %s%n", rule.used(), rule.name());
|
|
|
|
|
+ }
|
|
|
|
|
+ for(G4ParserCoverage.BranchCoverage branch : rule.branches()) {
|
|
|
|
|
+ if(branch.inner().isPresent()) {
|
|
|
|
|
+ output.printf(" %d: %s%s <= %s%n", branch.used(), branch.rule(), branch.qualifier(), branch.inner().get());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ output.printf(" %d: %s%s%n", branch.used(), branch.rule(), branch.qualifier());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void printCoverage(G4ParserCoverage info) {
|
|
private void printCoverage(G4ParserCoverage info) {
|
|
|
info.rules().forEach(rule -> {
|
|
info.rules().forEach(rule -> {
|
|
|
int c = rule.used()>0 ? 32 : 33;
|
|
int c = rule.used()>0 ? 32 : 33;
|
|
|
if(rule.inner().isPresent()) {
|
|
if(rule.inner().isPresent()) {
|
|
|
- System.out.println("\033["+c+"m" + rule.used() +": " + rule.name() + " <= " + rule.inner().get());
|
|
|
|
|
|
|
+ System.out.printf("\u001B[%dm%d: %s <= %s%n", c, rule.used(), rule.name(), rule.inner().get());
|
|
|
} else {
|
|
} else {
|
|
|
- System.out.println("\033["+c+"m" + rule.used() +": " + rule.name());
|
|
|
|
|
|
|
+ System.out.printf("\u001B[%dm%d: %s%n", c, rule.used(), rule.name());
|
|
|
}
|
|
}
|
|
|
for(G4ParserCoverage.BranchCoverage branch : rule.branches()) {
|
|
for(G4ParserCoverage.BranchCoverage branch : rule.branches()) {
|
|
|
int g = rule.used()>0 ? 32 : 33;
|
|
int g = rule.used()>0 ? 32 : 33;
|
|
|
if(branch.inner().isPresent()) {
|
|
if(branch.inner().isPresent()) {
|
|
|
- System.out.println("\033["+g+"m" + " " + branch.used() +": " + branch.rule() + branch.qualifier() + " <= " + branch.inner().get());
|
|
|
|
|
|
|
+ System.out.printf("\u001B[%dm %d: %s%s <= %s%n", g, branch.used(), branch.rule(), branch.qualifier(), branch.inner().get());
|
|
|
} else {
|
|
} else {
|
|
|
- System.out.println("\033["+g+"m" + " " + branch.used() +": " + branch.rule() + branch.qualifier());
|
|
|
|
|
|
|
+ System.out.printf("\u001B[%dm %d: %s%s%n", g, branch.used(), branch.rule(), branch.qualifier());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|