#252987: Turn singleton into array when requested.
authorJaroslav Tulach <jtulach@netbeans.org>
Sun, 14 Jun 2015 22:11:56 +0200
changeset 943aca916b876cf
parent 942 c76ea8b1af46
child 944 24f14f83f244
#252987: Turn singleton into array when requested.
json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java
json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
src/main/javadoc/overview.html
     1.1 --- a/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java	Sun Jun 14 21:45:02 2015 +0200
     1.2 +++ b/json-tck/src/main/java/net/java/html/json/tests/ConvertTypesTest.java	Sun Jun 14 22:11:56 2015 +0200
     1.3 @@ -270,8 +270,16 @@
     1.4  
     1.5      @KOTest
     1.6      public void parseFiveElementsAsAnArray() throws Exception {
     1.7 +        doParseInnerArray(5, 5);
     1.8 +    }
     1.9 +
    1.10 +    @KOTest
    1.11 +    public void parseInnerElementAsAnArray() throws Exception {
    1.12 +        doParseInnerArray(-1, 1);
    1.13 +    }
    1.14 +    private void doParseInnerArray(int array, int expect) throws Exception {
    1.15          final BrwsrCtx c = newContext();
    1.16 -        final InputStream o = createIS(false, false, 5);
    1.17 +        final InputStream o = createIS(false, false, array);
    1.18          SequenceInputStream is = new SequenceInputStream(
    1.19              new ByteArrayInputStream("{ \"info\" : ".getBytes("UTF-8")),
    1.20              new SequenceInputStream(
    1.21 @@ -293,7 +301,7 @@
    1.22              cnt++;
    1.23          }
    1.24  
    1.25 -        assertEquals(cnt, 5, "Fives people found in info");
    1.26 +        assertEquals(cnt, expect, "Person found in info");
    1.27      }
    1.28      
    1.29      @KOTest
     2.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Sun Jun 14 21:45:02 2015 +0200
     2.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Sun Jun 14 22:11:56 2015 +0200
     2.3 @@ -443,10 +443,9 @@
     2.4                      boolean isPrimitive[] = { false };
     2.5                      String type = checkType(props[prop++], isModel, isEnum, isPrimitive);
     2.6                      if (p.array()) {
     2.7 -                        w.append("    if (ret[" + cnt + "] instanceof Object[]) {\n");
     2.8 -                        w.append("      for (Object e : ((Object[])ret[" + cnt + "])) {\n");
     2.9 +                        w.append("    for (Object e : useAsArray(ret[" + cnt + "])) {\n");
    2.10                          if (isModel[0]) {
    2.11 -                            w.append("        this.prop_").append(pn).append(".add(proto.read");
    2.12 +                            w.append("      this.prop_").append(pn).append(".add(proto.read");
    2.13                              w.append("(" + type + ".class, e));\n");
    2.14                          } else if (isEnum[0]) {
    2.15                              w.append("        this.prop_").append(pn);
    2.16 @@ -461,7 +460,6 @@
    2.17                                  w.append(type).append(")e);\n");
    2.18                              }
    2.19                          }
    2.20 -                        w.append("      }\n");
    2.21                          w.append("    }\n");
    2.22                      } else {
    2.23                          if (isEnum[0]) {
    2.24 @@ -497,6 +495,9 @@
    2.25                      cnt++;
    2.26                  }
    2.27                  w.append("  }\n");
    2.28 +                w.append("  private static Object[] useAsArray(Object o) {\n");
    2.29 +                w.append("    return o instanceof Object[] ? ((Object[])o) : o == null ? new Object[0] : new Object[] { o };\n");
    2.30 +                w.append("  }\n");
    2.31                  writeToString(props, w);
    2.32                  writeClone(className, props, w);
    2.33                  String targetId = findTargetId(e);
     3.1 --- a/src/main/javadoc/overview.html	Sun Jun 14 21:45:02 2015 +0200
     3.2 +++ b/src/main/javadoc/overview.html	Sun Jun 14 22:11:56 2015 +0200
     3.3 @@ -80,7 +80,8 @@
     3.4          One can control {@link net.java.html.json.OnReceive#headers() HTTP request headers}
     3.5          when connecting to server using the {@link net.java.html.json.OnReceive}
     3.6          annotation.
     3.7 -        Bugfix of issue <a target="_blank" href='https://netbeans.org/bugzilla/show_bug.cgi?id=250503'>250503</a>.
     3.8 +        Bugfix of issues <a target="_blank" href='https://netbeans.org/bugzilla/show_bug.cgi?id=250503'>250503</a>,
     3.9 +        <a target="_blank" href='https://netbeans.org/bugzilla/show_bug.cgi?id=252987'>252987</a>.
    3.10  
    3.11          <h3>What's New in Version 1.1?</h3>
    3.12