json/src/test/java/net/java/html/json/OperationTest.java
author Jaroslav Tulach <jtulach@netbeans.org>
Tue, 26 Aug 2014 18:13:30 +0200
changeset 838 bdc3d696dd4a
parent 790 30f20d9c0986
permissions -rw-r--r--
During the API review process (bug 246133) the reviewers decided that in order to include html4j to NetBeans Platform, we need to stop using org.apidesign namespace and switch to NetBeans one. Repackaging all SPI packages into org.netbeans.html.smthng.spi.
jaroslav@240
     1
/**
jaroslav@358
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jaroslav@240
     3
 *
jaroslav@551
     4
 * Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
jaroslav@240
     5
 *
jaroslav@358
     6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
jaroslav@358
     7
 * Other names may be trademarks of their respective owners.
jaroslav@240
     8
 *
jaroslav@358
     9
 * The contents of this file are subject to the terms of either the GNU
jaroslav@358
    10
 * General Public License Version 2 only ("GPL") or the Common
jaroslav@358
    11
 * Development and Distribution License("CDDL") (collectively, the
jaroslav@358
    12
 * "License"). You may not use this file except in compliance with the
jaroslav@358
    13
 * License. You can obtain a copy of the License at
jaroslav@358
    14
 * http://www.netbeans.org/cddl-gplv2.html
jaroslav@358
    15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
jaroslav@358
    16
 * specific language governing permissions and limitations under the
jaroslav@358
    17
 * License.  When distributing the software, include this License Header
jaroslav@358
    18
 * Notice in each file and include the License file at
jaroslav@358
    19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
jaroslav@358
    20
 * particular file as subject to the "Classpath" exception as provided
jaroslav@358
    21
 * by Oracle in the GPL Version 2 section of the License file that
jaroslav@358
    22
 * accompanied this code. If applicable, add the following below the
jaroslav@358
    23
 * License Header, with the fields enclosed by brackets [] replaced by
jaroslav@358
    24
 * your own identifying information:
jaroslav@358
    25
 * "Portions Copyrighted [year] [name of copyright owner]"
jaroslav@358
    26
 *
jaroslav@358
    27
 * Contributor(s):
jaroslav@358
    28
 *
jaroslav@358
    29
 * The Original Software is NetBeans. The Initial Developer of the Original
jaroslav@551
    30
 * Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
jaroslav@358
    31
 *
jaroslav@358
    32
 * If you wish your version of this file to be governed by only the CDDL
jaroslav@358
    33
 * or only the GPL Version 2, indicate your decision by adding
jaroslav@358
    34
 * "[Contributor] elects to include this software in this distribution
jaroslav@358
    35
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
jaroslav@358
    36
 * single choice of license, a recipient has the option to distribute
jaroslav@358
    37
 * your version of this file under either the CDDL, the GPL Version 2 or
jaroslav@358
    38
 * to extend the choice of license to its licensees as provided above.
jaroslav@358
    39
 * However, if you add GPL Version 2 code and therefore, elected the GPL
jaroslav@358
    40
 * Version 2 license, then the option applies only if the new code is
jaroslav@358
    41
 * made subject to such option by the copyright holder.
jaroslav@240
    42
 */
jaroslav@240
    43
package net.java.html.json;
jaroslav@240
    44
jaroslav@599
    45
import java.io.IOException;
jaroslav@598
    46
import java.util.Arrays;
jtulach@569
    47
import net.java.html.BrwsrCtx;
jtulach@838
    48
import org.netbeans.html.context.spi.Contexts;
jaroslav@598
    49
import static org.testng.Assert.*;
jaroslav@240
    50
import org.testng.annotations.Test;
jaroslav@240
    51
jaroslav@240
    52
/**
jaroslav@240
    53
 *
jtulach@790
    54
 * @author Jaroslav Tulach
jaroslav@240
    55
 */
jaroslav@240
    56
@Model(className = "OpModel", properties = {
jaroslav@240
    57
    @Property(name = "names", type = String.class, array = true)
jaroslav@240
    58
})
jaroslav@240
    59
public class OperationTest {
jtulach@569
    60
    @ModelOperation static void add(OpModel m, String name, BrwsrCtx exp) {
jtulach@569
    61
        assertSame(BrwsrCtx.findDefault(OpModel.class), exp, "Context is passed in");
jaroslav@240
    62
        m.getNames().add(name);
jaroslav@240
    63
    }
jaroslav@240
    64
jaroslav@601
    65
    @ModelOperation static void add(OpModel m, int times, String name) throws IOException {
jaroslav@601
    66
        while (times-- > 0) {
jaroslav@601
    67
            m.getNames().add(name.toUpperCase());
jaroslav@601
    68
        }
jaroslav@598
    69
    }
jtulach@643
    70
    
jtulach@643
    71
    @ModelOperation static void copy(OpModel m, OpModel orig) {
jtulach@643
    72
        m.getNames().clear();
jtulach@643
    73
        m.getNames().addAll(orig.getNames());
jtulach@643
    74
    }
jaroslav@598
    75
jaroslav@240
    76
    @Test public void addOneToTheModel() {
jtulach@569
    77
        BrwsrCtx ctx = Contexts.newBuilder().build();
jtulach@569
    78
        OpModel m = Models.bind(new OpModel("One"), ctx);
jtulach@569
    79
        m.add("Second", ctx);
jaroslav@240
    80
        assertEquals(m.getNames().size(), 2, "Both are there: " + m.getNames());
jaroslav@240
    81
    }
jaroslav@598
    82
jaroslav@601
    83
    @Test public void addTwoUpperCasesToTheModel() {
jaroslav@598
    84
        BrwsrCtx ctx = Contexts.newBuilder().build();
jaroslav@598
    85
        OpModel m = Models.bind(new OpModel("One"), ctx);
jaroslav@601
    86
        m.add(2, "Second");
jaroslav@601
    87
        assertEquals(m.getNames().size(), 3, "Both are there: " + m.getNames());
jaroslav@598
    88
        assertEquals(m.getNames().get(1), "SECOND", "Converted to upper case");
jaroslav@601
    89
        assertEquals(m.getNames().get(2), "SECOND", "Also converted to upper case");
jaroslav@598
    90
    }
jaroslav@598
    91
    
jaroslav@598
    92
    @Test public void noAnnonymousInnerClass() {
jaroslav@598
    93
        int cnt = 0;
jaroslav@598
    94
        for (Class<?> c : OpModel.class.getDeclaredClasses()) {
jaroslav@598
    95
            cnt++;
jaroslav@598
    96
            int dolar = c.getName().lastIndexOf('$');
jaroslav@598
    97
            assertNotEquals(dolar, -1, "There is dolar in : " + c.getName());
jaroslav@598
    98
            String res = c.getName().substring(dolar + 1);
jaroslav@598
    99
            try {
jaroslav@598
   100
                int number = Integer.parseInt(res);
jaroslav@598
   101
                if (number == 1) {
jaroslav@598
   102
                    // one is OK, #2 was a problem
jaroslav@598
   103
                    continue;
jaroslav@598
   104
                }
jaroslav@598
   105
                fail("There seems to annonymous innerclass! " + c.getName() + "\nImplements: " 
jaroslav@598
   106
                    + Arrays.toString(c.getInterfaces()) + " extends: " + c.getSuperclass()
jaroslav@598
   107
                );
jaroslav@598
   108
            } catch (NumberFormatException ex) {
jaroslav@598
   109
                // OK, go on
jaroslav@598
   110
            }
jaroslav@598
   111
        }
jaroslav@598
   112
        if (cnt == 0) {
jaroslav@598
   113
            fail("There should be at least one inner class: " + cnt);
jaroslav@598
   114
        }
jaroslav@598
   115
    }
jtulach@643
   116
    
jtulach@643
   117
    @Test public void copyOperation() {
jtulach@643
   118
        OpModel orig = new OpModel("Ahoj", "Jardo");
jtulach@643
   119
        OpModel n = new OpModel();
jtulach@643
   120
        n.copy(orig);
jtulach@643
   121
        assertEquals(n.getNames().size(), 2, "Two elems");
jtulach@643
   122
        assertEquals(n.getNames().get(0), "Ahoj", "1st");
jtulach@643
   123
        assertEquals(n.getNames().get(1), "Jardo", "2nd");
jtulach@643
   124
    }
jaroslav@240
   125
}