package org.jnario.jnario.tests.unit.report; import java.util.ArrayList; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.util.StringInputStream; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Functions.Function0; import org.jnario.jnario.test.util.Strings; import org.jnario.report.Failed; import org.jnario.report.Passed; import org.jnario.report.Pending; import org.jnario.report.SpecExecutionAcceptor; import org.jnario.report.SpecFailure; import org.jnario.report.SpecResultParser; import org.jnario.runner.ExampleGroupRunner; import org.jnario.runner.Named; import org.jnario.runner.Order; import org.jnario.runner.Subject; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; @Named("SpecResultParser") @RunWith(ExampleGroupRunner.class) @SuppressWarnings("all") public class SpecResultParserSpec { @Subject public SpecResultParser subject; final static String CLASSNAME = "demo.CalculatorSpec"; final static String NAME = "adding values"; final static double EXECUTION_TIME = 0.01; final static String FAILURE_MESSAGE = new Function0<String>() { public String apply() { StringConcatenation _builder = new StringConcatenation(); _builder.append("a message"); _builder.newLine(); _builder.append("withnewline"); String _platformIndependent = Strings.platformIndependent(_builder); return _platformIndependent; } }.apply(); final static String FAILURE_TYPE = "java.lang.AssertionError"; final static String STACKTRACE = new Function0<String>() { public String apply() { StringConcatenation _builder = new StringConcatenation(); _builder.append("\t"); _builder.append("at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)"); _builder.newLine(); _builder.append("\t"); _builder.append("at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)"); _builder.newLine(); _builder.append("\t"); _builder.append("at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)"); _builder.newLine(); _builder.append("\t"); _builder.append("at java.lang.reflect.Constructor.newInstance(Constructor.java:513)"); _builder.newLine(); String _platformIndependent = Strings.platformIndependent(_builder); return _platformIndependent; } }.apply(); final static String XML_STACKTRACE = ((SpecResultParserSpec.FAILURE_MESSAGE + "\n") + SpecResultParserSpec.STACKTRACE); final SpecExecutionAcceptor acceptor = Mockito.<SpecExecutionAcceptor>mock(SpecExecutionAcceptor.class); @Test @Named("parses successfull specs from xml") @Order(1) public void _parsesSuccessfullSpecsFromXml() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\"/>"); _builder.newLineIfNotEmpty(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passingSpec = this.passingSpec(); _verify.accept(_passingSpec); } @Test @Named("parses specs with failure from xml") @Order(2) public void _parsesSpecsWithFailureFromXml() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append("<failure message=\""); _builder.append(SpecResultParserSpec.FAILURE_MESSAGE, ""); _builder.append("\" type=\""); _builder.append(SpecResultParserSpec.FAILURE_TYPE, ""); _builder.append("\">"); _builder.append(SpecResultParserSpec.XML_STACKTRACE, ""); _builder.append("</failure>"); _builder.newLineIfNotEmpty(); _builder.append("</testcase>"); _builder.newLine(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Failed _failingSpec = this.failingSpec(); _verify.accept(_failingSpec); } @Test @Named("parses specs with error from xml") @Order(3) public void _parsesSpecsWithErrorFromXml() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append("<error message=\""); _builder.append(SpecResultParserSpec.FAILURE_MESSAGE, ""); _builder.append("\" type=\""); _builder.append(SpecResultParserSpec.FAILURE_TYPE, ""); _builder.append("\">"); _builder.append(SpecResultParserSpec.XML_STACKTRACE, ""); _builder.append("</error>"); _builder.newLineIfNotEmpty(); _builder.append("</testcase>"); _builder.newLine(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Failed _failingSpec = this.failingSpec(); _verify.accept(_failingSpec); } @Test @Named("parses multiple spec results") @Order(4) public void _parsesMultipleSpecResults() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\"/>"); _builder.newLineIfNotEmpty(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append("<error message=\""); _builder.append(SpecResultParserSpec.FAILURE_MESSAGE, ""); _builder.append("\" type=\""); _builder.append(SpecResultParserSpec.FAILURE_TYPE, ""); _builder.append("\">"); _builder.append(SpecResultParserSpec.XML_STACKTRACE, ""); _builder.append("</error>"); _builder.newLineIfNotEmpty(); _builder.append("</testcase>"); _builder.newLine(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passingSpec = this.passingSpec(); _verify.accept(_passingSpec); SpecExecutionAcceptor _verify_1 = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Failed _failingSpec = this.failingSpec(); _verify_1.accept(_failingSpec); } @Test @Named("created pending results") @Order(5) public void _createdPendingResults() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\""); _builder.append(SpecResultParserSpec.NAME, ""); _builder.append("\">"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("<skipped/>"); _builder.newLine(); _builder.append("</testcase>"); _builder.newLine(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Pending _pendingSpec = this.pendingSpec(); _verify.accept(_pendingSpec); } @Test @Named("decodes escaped strings") @Order(6) public void _decodesEscapedStrings() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\"When I entered \\"50\\" and \\"70\\"\"/>"); _builder.newLineIfNotEmpty(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passed = new Passed(SpecResultParserSpec.CLASSNAME, "When I entered \"50\" and \"70\"", SpecResultParserSpec.EXECUTION_TIME); _verify.accept(_passed); } @Test @Named("removes \\\',\\\' from escaped strings") @Order(7) public void _removesFromEscapedStrings() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\"cell[-1\\u002C 1].plus[cell[3\\u002C4]] => cell[2\\u002C5]\"/>"); _builder.newLineIfNotEmpty(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passed = new Passed(SpecResultParserSpec.CLASSNAME, "cell[-1, 1].plus[cell[3,4]] => cell[2,5]", SpecResultParserSpec.EXECUTION_TIME); _verify.accept(_passed); } @Test @Named("supports encoding") @Order(8) public void _supportsEncoding() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\"L\\u00D6sung\"/>"); _builder.newLineIfNotEmpty(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passed = new Passed(SpecResultParserSpec.CLASSNAME, "LĂ–sung", SpecResultParserSpec.EXECUTION_TIME); _verify.accept(_passed); } @Test @Named("supports escaped chars") @Order(9) public void _supportsEscapedChars() throws Exception { StringConcatenation _builder = new StringConcatenation(); _builder.append("<testcase time=\""); _builder.append(SpecResultParserSpec.EXECUTION_TIME, ""); _builder.append("\" classname=\""); _builder.append(SpecResultParserSpec.CLASSNAME, ""); _builder.append("\" name=\"\\"http:\\/\\/www.google.de\\"\"/>"); _builder.newLineIfNotEmpty(); CharSequence _xml = this.toXml(_builder); this.parse(_xml); SpecExecutionAcceptor _verify = Mockito.<SpecExecutionAcceptor>verify(this.acceptor); Passed _passed = new Passed(SpecResultParserSpec.CLASSNAME, "\"http://www.google.de\"", SpecResultParserSpec.EXECUTION_TIME); _verify.accept(_passed); } public Passed passingSpec() { return new Passed(SpecResultParserSpec.CLASSNAME, SpecResultParserSpec.NAME, SpecResultParserSpec.EXECUTION_TIME); } public Pending pendingSpec() { return new Pending(SpecResultParserSpec.CLASSNAME, SpecResultParserSpec.NAME, SpecResultParserSpec.EXECUTION_TIME); } public Failed failingSpec() { SpecFailure _specFailure = new SpecFailure(SpecResultParserSpec.FAILURE_MESSAGE, "java.lang.AssertionError", SpecResultParserSpec.STACKTRACE); ArrayList<SpecFailure> _newArrayList = CollectionLiterals.<SpecFailure>newArrayList(_specFailure); return new Failed(SpecResultParserSpec.CLASSNAME, SpecResultParserSpec.NAME, SpecResultParserSpec.EXECUTION_TIME, _newArrayList); } public CharSequence toXml(final CharSequence content) { StringConcatenation _builder = new StringConcatenation(); _builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); _builder.newLine(); _builder.append("<testsuite failures=\"1\" time=\"0.017\" errors=\"0\" skipped=\"0\" tests=\"1\" name=\"example.AddingValuesSpec\">"); _builder.newLine(); _builder.append("\t"); _builder.append(content, "\t"); _builder.newLineIfNotEmpty(); _builder.append("</testsuite>\t"); _builder.newLine(); return _builder; } public void parse(final CharSequence content) { String _string = content.toString(); StringInputStream _stringInputStream = new StringInputStream(_string); this.subject.parse(_stringInputStream, this.acceptor); } }