Export to GitHub

spock - issue #337

Commas in arrays printed as \u002C on console


Posted on Nov 20, 2013 by Massive Dog

What steps will reproduce the problem? If possible, provide source code and stack trace. 1. Create a Spock test and use an array (e.g. args of a main method) as a parameter in @Unroll 2. Run tests from an IDE like IntelliJ IDEA: Everything is fine, the test name shows up correctly including the expanded parameter 3. Run the same tests from a console, e.g. from Maven. All commas separating array elements in the test's name/caption are shown as "\u002C"

What version of Spock and Groovy are you using?

Maven 3 configuration:

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.gmaven.runtime</groupId>
                    <artifactId>gmaven-runtime-2.0</artifactId>
                    <version>1.5</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>

Please provide any additional information below. You can also assign labels.

Sample Maven output:

Failed tests: Calculation -customer\u002C -1111: Unexpected call of System.exit(1).

Tests in error: Calculation -customer\u002C -1111: Tried to exit with status 1.

Actually the expected output is:

Failed tests: Calculation -customer, -1111: Unexpected call of System.exit(1).

Tests in error: Calculation -customer, -1111: Tried to exit with status 1.

Comment #1

Posted on Nov 20, 2013 by Grumpy Cat

Not sure what the problem is, but it doesn't sound like a problem on Spock's side. Maybe your build or terminal has the wrong character encoding set.

Comment #2

Posted on Nov 20, 2013 by Massive Dog

What do you need to be sure? I work on Win7 Pro, German edition. The problem appears with Maven on all four consoles tested: Git Bash, cmd.exe, Cygwin Bash, IntelliJ IDEA internal console output. Actually there should be some way to specify the encoding on Maven, maybe as a config parameter of the spock dependency or the gmaven plugin.

Comment #3

Posted on Nov 20, 2013 by Massive Dog

No, sorry, my mistake. Win7 Pro in English edition, not German. I tested at work, not at home, my mistake.

Comment #4

Posted on Nov 21, 2013 by Grumpy Cat

I am sure because Spock doesn't get to choose any encoding. (It's not even responsible for printing the message to standard out.) I'm not sure it's an encoding problem, because that normally manifests differently. Nevertheless, I'd check the encoding used by the JVM that's running the tests (file.encoding system property), and the encoding used by your terminal.

Comment #5

Posted on Nov 21, 2013 by Massive Dog

So now you are sure? I asked because earlier you wrote:

Not sure what the problem is

Anyway, on all 4 consoles mentioned earlier all other types of output - and Maven as well as the Java program itself produce a lot of them during testing - are perfectly okay, i.e. commas and other special characters are printed exactly the right way. I do not say it is Spock's fault. I am not looking for culprits, just for a root cause and a way to fix it. I figured you know more about your own tool than I do. Are you not interested in helping to fix problems in Maven-driven projects, even though they might just affect you indirectly? The "wasn't me" attitude helps nobody.

Comment #6

Posted on Nov 21, 2013 by Grumpy Cat

I'm not sure what the problem is, but I'm sure that it's not a problem on Spock's side. That's a very important statement, because it allows you to search for a cause in other places. I've already tried to help and provided concrete directions. The nature of the problem isn't at all specific to Spock, and I can't investigate your environment, so it's your job to find the cause for this. Good luck.

PS: If you want someone else to have a closer look at your problem, a minimal self-contained reproducible example helps tremendously. It also allows you to run the example in other environments and check whether the problem exists there too.

Comment #7

Posted on Nov 21, 2013 by Massive Dog

More info: It happens both on Windows with Cp1252 and on Linux with UTF-8 on the console. It is definitely a problem in decoding the output of Spock, probably caused by some Maven plugin. Proof:

LINUX

Failed tests: Calculation -customer\u002C XXXXX: Unexpected call of System.exit(1).

Tests in error: Calculation -customer\u002C XXXXX: Tried to exit with status 1.

Tests run: 65, Failures: 1, Errors: 1, Skipped: 0

[INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ (...)

$ mvn -v Apache Maven 3.0.4 Maven home: /usr/share/maven Java version: 1.7.0_25, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre Default locale: de_DE, platform encoding: UTF-8 OS name: "linux", version: "3.11.0-12-generic", arch: "amd64", family: "unix"

WINDOWS

Failed tests: Calculation ###\u002C *: Unexpected call of System.exit(1).

Tests in error: Calculation ###\u002C *: Tried to exit with status 1.

Tests run: 63, Failures: 1, Errors: 1, Skipped: 0

[INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ (...)

$ mvn -v Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100) Maven home: c:\Program Files\Java\apache-maven-3.0.5 Java version: 1.7.0_45, vendor: Oracle Corporation Java home: c:\Program Files\Java\jdk1.7.0_45\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

Comment #8

Posted on Nov 21, 2013 by Massive Dog

If you want to reproduce it, just clone https://github.com/kriegaex/order-generator.git, then break one of the test cases in order to provoke the test failure output for Spock.

Comment #9

Posted on Nov 21, 2013 by Massive Dog

I think this JUnit add-on produces the erroneous output:

    <dependency>
        <!-- JUnit 4.7+ rule ExpectedSystemExit for handling System.exit() in tests -->
        <groupId>com.github.stefanbirkner</groupId>
        <artifactId>system-rules</artifactId>
        <version>1.3.1</version>
        <scope>test</scope>
    </dependency>

I am going to contact the author. Thanks for your help thus far.

Comment #10

Posted on Nov 21, 2013 by Massive Dog

Just for reference, if anyone else faces the same problem and wants to know how the rest of the story goes: The issue ticket is https://github.com/stefanbirkner/system-rules/issues/12.

Comment #11

Posted on Nov 30, 2013 by Massive Dog

The bug was caused by this bug in Maven Surefire Plugin: http://jira.codehaus.org/browse/SUREFIRE-857

The default in Maven 3.1.1 is Surefire 2.12.4 which is fine. But with Maven 3.0.5 the plugin version is 2.10 as can be seen in the effective POM. So the solution is to explicitly use a Surefire plugin version >= 2.12.3.

Status: WontFix

Labels:
Type-Defect Module-Core