Skip to content

Commit

Permalink
Fixes #434 json reports for test. Fixing messages for wollok exceptio…
Browse files Browse the repository at this point in the history
…ns like message not understood
  • Loading branch information
javierfernandes committed Nov 17, 2015
1 parent b3e2ede commit be53fba
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ class WollokLauncherInterpreterEvaluator extends WollokInterpreterEvaluator {
// Files should are not allowed to have both a main program and tests at the same time.
if (main != null) main.eval else {
wollokTestsReporter.testsToRun(it, tests)
tests.evalAll
try
tests.evalAll
finally
wollokTestsReporter.finished
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,22 @@ class WollokLauncherParameters {
@Accessors
List<String> wollokFiles = new ArrayList();
@Accessors
boolean hasRepl = false;

boolean hasRepl = false
@Accessors
Integer testPort = null;

Integer testPort = null
@Accessors
boolean jsonOutput = false
@Accessors
boolean tests = false;
boolean tests = false

def build(){
def build() {
val sb = new StringBuilder
if (hasRepl)sb.append("-r").append(" ")
if (requestsPort != null) sb.append("-requestsPort " + requestsPort.toString).append(" ")
if (eventsPort != null) sb.append("-eventsPort " + eventsPort.toString).append(" ")
if (testPort != null) sb.append("-testPort " + testPort.toString).append(" ")
if (tests) sb.append("-t ")
if (jsonOutput) sb.append("-jsonOutput ")
wollokFiles.forEach [ sb.append(it).append(" ") ]
sb.toString
}
Expand All @@ -46,6 +47,8 @@ class WollokLauncherParameters {

tests = cmdLine.hasOption("t")
testPort = parseParameter(cmdLine, "testPort")

jsonOutput = cmdLine.hasOption("jsonOutput")

requestsPort = parseParameter(cmdLine, "requestsPort")
eventsPort = parseParameter(cmdLine, "eventsPort")
Expand Down Expand Up @@ -83,6 +86,8 @@ class WollokLauncherParameters {
addOption(new Option("r", "Starts an interactive REPL") => [longOpt = "repl"])
addOption(new Option("t", "Running tests") => [longOpt = "tests"])

addOption(new Option("jsonOutput", "JSON test report output"))

add("testPort", "Server port for tests", "port", 1)
add("requestsPort", "Request ports", "port", 1)
add("eventsPort", "Events ports", "port", 1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.uqbar.project.wollok.launch.tests.WollokConsoleTestsReporter
import org.uqbar.project.wollok.launch.tests.WollokRemoteTestReporter
import org.uqbar.project.wollok.launch.tests.WollokTestsReporter
import org.uqbar.project.wollok.scoping.WollokReplGlobalScopeProvider
import org.uqbar.project.wollok.launch.tests.WollokJSONTestsReporter

/**
* Runtime module for the launcher.
Expand All @@ -34,6 +35,8 @@ class WollokLauncherModule extends WollokDslRuntimeModule {
if (params.tests) {
if (params.testPort != null && params.testPort != 0)
return WollokRemoteTestReporter
else if(params.jsonOutput)
return WollokJSONTestsReporter
else
return WollokConsoleTestsReporter
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,8 @@ class DefaultWollokTestsReporter implements WollokTestsReporter {
throw exception
}

override finished() {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,7 @@ class WollokConsoleTestsReporter implements WollokTestsReporter {
println('''Test: «test.name» : «exception.message» («resource.trimFragment»:«lineNumber»)''')
}

override finished() {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package org.uqbar.project.wollok.launch.tests

import java.util.List
import org.eclipse.emf.common.util.URI
import org.uqbar.project.wollok.launch.Wollok
import org.uqbar.project.wollok.wollokDsl.WFile
import org.uqbar.project.wollok.wollokDsl.WTest
import wollok.lib.AssertionException

import static extension org.uqbar.project.wollok.ui.utils.XTendUtilExtensions.* import org.uqbar.project.wollok.interpreter.core.WollokProgramExceptionWrapper

/**
*
* @author jfernandes
*/
class WollokJSONTestsReporter implements WollokTestsReporter {
var testPassed = 0
var testErrors = 0
var first = true

override testsToRun(WFile file, List<WTest> tests) { println('''
{
"version" : "«Wollok.VERSION»",
"tests" : [''')}

override finished() {println(
''' ]
}''')}

override testStart(WTest test) {}

override reportTestAssertError(WTest test, AssertionException assertionError, int lineNumber, URI resource) {println(
'''
{
"name" : "«test.name»",
"state" : "failed"
"error" : {
"message" : "«assertionError.message»",
"file" : "«resource.trimFragment»",
"lineNumber" : "«lineNumber»",
"stackTrace" : "«assertionError.stackTraceAsString»""
}
}''')}

override reportTestOk(WTest test) { println(
'''
{
"name" : "«test.name»",
"state" : "passed"
}''')}

override reportTestError(WTest test, Exception exception, int lineNumber, URI resource) { println(
'''
{
"name" : "«test.name»",
"state" : "error"
"error" : {
"message" : "«exception.theWollokMessage»",
"stacktrace" : "«exception.wollokStackTraceAsString»"
"file" : "«resource.trimFragment»",
"lineNumber" : "«lineNumber»"
}
}''')}

def dispatch getTheWollokMessage(Exception exception) { exception.message }
def dispatch getTheWollokMessage(WollokProgramExceptionWrapper exception) { exception.wollokMessage }

def dispatch getWollokStackTraceAsString(Exception exception) { exception.stackTraceAsString }
def dispatch getWollokStackTraceAsString(WollokProgramExceptionWrapper exception) { exception.wollokStackTrace }

}
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,8 @@ class WollokRemoteTestReporter implements WollokTestsReporter {
if (e.cause != null)
e.cause.prepareExceptionForTrip
}

override finished() {
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,10 @@ interface WollokTestsReporter {
def void reportTestOk(WTest test)
def void testsToRun(WFile file, List<WTest> tests)
def void testStart(WTest test)

/**
* Tells this reporter that the execution has finished
*/
def void finished()

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,12 @@ class WollokProgramExceptionWrapper extends RuntimeException {
wollokException.call("className").wollokToJava(String) != WollokDSK.MESSAGE_NOT_UNDERSTOOD_EXCEPTION
}

def getWollokStackTrace() {
wollokException.call("getStackTraceAsString").wollokToJava(String)
}

def getWollokMessage() {
wollokException.call("getMessage").wollokToJava(String)
}

}

0 comments on commit be53fba

Please sign in to comment.