[ 
https://issues.apache.org/jira/browse/GROOVY-8800?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16620761#comment-16620761
 ] 

Przemek Wesolek commented on GROOVY-8800:
-----------------------------------------

Not at all. However, then you have platform-specific tests (Java 8+ vs older) 
and you can't escape from proper version checking either. So some unit testing 
for that is necessary, for different version fixtures (e.g. as it is now).

I'd leave the test as is, probably refactor version detection (as you 
mentioned) and added integration tests for JsonSlurper map iteration order 
(restricted to Java 8+, unless you want to test security-related switch to 
TreeMap under Java 7 too).

If that's fine, I can write something for the integration testing.

> Wrong detection of Java 10 version in groovy-json
> -------------------------------------------------
>
>                 Key: GROOVY-8800
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8800
>             Project: Groovy
>          Issue Type: Bug
>          Components: JSON
>    Affects Versions: 3.x, 2.5.2
>         Environment: Oracle Java SE 10, Linux
>            Reporter: Przemek Wesolek
>            Assignee: Paul King
>            Priority: Major
>
> The following code from {{groovy.json.internal.Sys}} incorrectly parses 
> {{java.version}} property on newer Java-s:
> {code:java}
>     static {
>         BigDecimal v = new BigDecimal("-1");
>         String sversion = System.getProperty("java.version");
>         if (sversion.indexOf("_") != -1) {
>             final String[] split = sversion.split("_");
>             try {
>                 String ver = split[0];
>                 if (ver.startsWith("1.7")) {
>                     v = new BigDecimal("1.7");
>                 }
>                 if (ver.startsWith("1.8")) {
>                     v = new BigDecimal("1.8");
>                 }
>                 if (ver.startsWith("1.9")) {
>                     v = new BigDecimal("1.9");
>                 }
>             } catch (Exception ex) {
>                 ex.printStackTrace();
>                 System.err.println("Unable to determine build number or 
> version");
>             }
>         } else if ("1.8.0".equals(sversion)) {
>             v = new BigDecimal("1.8");
>         } else {
>             Pattern p = Pattern.compile("^([1-9]\\.[0-9]+)");
>             Matcher matcher = p.matcher(sversion);
>             if (matcher.find()) {
>                 v = new BigDecimal(matcher.group(0));
>             }
>         }
>         is1_8OrLater = v.compareTo(new BigDecimal("1.8")) >= 0;
>         is1_7 = v.compareTo(new BigDecimal("1.7")) == 0;
>         is1_8 = v.compareTo(new BigDecimal("1.8")) == 0;
>     }
> {code}
> Under Java 10+ ({{java.version=10.0.2}}) all {{is*}} fields are set to 
> {{false}}.
> The outcome of it is e.g. {{LazyMap}} to use {{j.u.TreeMap}} instead of 
> {{j.u.LinkedHashMap}} that would give insertion order for maps returned from 
> {{JsonSlurper}}.
> Just extending the pattern to 
> {code:java}
> "^([1-9]+\\.[0-9]+)"
> {code}
> seems to do the job.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to