vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 11 Feb 2013 12:46:43 +0100
branchemul
changeset 708 59d5596a9c6c
parent 639 960ecf7cea5d
permissions -rw-r--r--
Encapsulation. Moving shared code into TestVM instance.
jaroslav@24
     1
/**
jaroslav@106
     2
 * Back 2 Browser Bytecode Translator
jaroslav@106
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@24
     4
 *
jaroslav@24
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@24
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@24
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@24
     8
 *
jaroslav@24
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@24
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@24
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@24
    12
 * GNU General Public License for more details.
jaroslav@24
    13
 *
jaroslav@24
    14
 * You should have received a copy of the GNU General Public License
jaroslav@24
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@24
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@8
    17
 */
jaroslav@22
    18
package org.apidesign.vm4brwsr;
jaroslav@8
    19
jaroslav@8
    20
import org.testng.annotations.Test;
jaroslav@103
    21
import org.testng.annotations.BeforeClass;
jaroslav@8
    22
jaroslav@8
    23
/**
jaroslav@8
    24
 *
jaroslav@8
    25
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@8
    26
 */
jaroslav@8
    27
public class InstanceTest {
jaroslav@10
    28
    @Test public void verifyDefaultDoubleValue() throws Exception {
jaroslav@10
    29
        assertExec(
jaroslav@10
    30
            "Will be zero",
jaroslav@248
    31
            Instance.class, "defaultDblValue__D",
jaroslav@10
    32
            Double.valueOf(0)
jaroslav@10
    33
        );
jaroslav@10
    34
    }
jaroslav@102
    35
    @Test public void verifyStaticMethodCall() throws Exception {
jaroslav@102
    36
        assertExec(
jaroslav@102
    37
            "Will be zero",
jaroslav@248
    38
            InstanceSub.class, "recallDbl__D",
jaroslav@102
    39
            Double.valueOf(0)
jaroslav@102
    40
        );
jaroslav@102
    41
    }
jaroslav@10
    42
    @Test public void verifyAssignedByteValue() throws Exception {
jaroslav@10
    43
        assertExec(
jaroslav@10
    44
            "Will one thirty one",
jaroslav@248
    45
            Instance.class, "assignedByteValue__B",
jaroslav@10
    46
            Double.valueOf(31)
jaroslav@10
    47
        );
jaroslav@10
    48
    }
jaroslav@8
    49
    @Test public void verifyMagicOne() throws Exception {
jaroslav@8
    50
        assertExec(
jaroslav@10
    51
            "Should be three and something",
jaroslav@248
    52
            Instance.class, "magicOne__D",
jaroslav@8
    53
            Double.valueOf(3.3)
jaroslav@8
    54
        );
jaroslav@8
    55
    }
jaroslav@12
    56
    @Test public void verifyInstanceMethods() throws Exception {
jaroslav@12
    57
        assertExec(
jaroslav@14
    58
            "Should be eleven as we invoke overwritten method, plus 44",
jaroslav@248
    59
            Instance.class, "virtualBytes__I",
jaroslav@14
    60
            Double.valueOf(55)
jaroslav@12
    61
        );
jaroslav@12
    62
    }
jaroslav@15
    63
    @Test public void verifyInterfaceMethods() throws Exception {
jaroslav@15
    64
        assertExec(
jaroslav@15
    65
            "Retruns default value",
jaroslav@248
    66
            Instance.class, "interfaceBytes__F",
jaroslav@15
    67
            Double.valueOf(31)
jaroslav@15
    68
        );
jaroslav@15
    69
    }
jaroslav@16
    70
jaroslav@16
    71
    @Test public void isNull() throws Exception {
jaroslav@16
    72
        assertExec(
jaroslav@16
    73
            "Yes, we are instance",
jaroslav@248
    74
            Instance.class, "isNull__Z",
jaroslav@16
    75
            Double.valueOf(0.0)
jaroslav@16
    76
        );
jaroslav@16
    77
    }
jaroslav@17
    78
jaroslav@16
    79
    @Test public void isInstanceOf() throws Exception {
jaroslav@16
    80
        assertExec(
jaroslav@16
    81
            "Yes, we are instance",
jaroslav@639
    82
            Instance.class, "instanceOf__ZI",
jaroslav@639
    83
            Double.valueOf(1.0), 2
jaroslav@16
    84
        );
jaroslav@16
    85
    }
jaroslav@16
    86
jaroslav@16
    87
    @Test public void notInstanceOf() throws Exception {
jaroslav@16
    88
        assertExec(
jaroslav@16
    89
            "No, we are not an instance",
jaroslav@639
    90
            Instance.class, "instanceOf__ZI",
jaroslav@639
    91
            Double.valueOf(0.0), 1
jaroslav@639
    92
        );
jaroslav@639
    93
    }
jaroslav@639
    94
    @Test public void nullInstanceOf() throws Exception {
jaroslav@639
    95
        assertExec(
jaroslav@639
    96
            "No, null is not an instance",
jaroslav@639
    97
            Instance.class, "instanceOf__ZI",
jaroslav@639
    98
            Double.valueOf(0.0), 0
jaroslav@16
    99
        );
jaroslav@16
   100
    }
jaroslav@17
   101
    
jaroslav@30
   102
    @Test public void verifyCastToClass() throws Exception {
jaroslav@30
   103
        assertExec(
jaroslav@30
   104
            "Five signals all is good",
jaroslav@248
   105
            Instance.class, "castsWork__IZ",
jaroslav@30
   106
            Double.valueOf(5.0), false
jaroslav@30
   107
        );
jaroslav@30
   108
    }
jaroslav@30
   109
    @Test public void verifyCastToInterface() throws Exception {
jaroslav@30
   110
        assertExec(
jaroslav@30
   111
            "Five signals all is good",
jaroslav@248
   112
            Instance.class, "castsWork__IZ",
jaroslav@30
   113
            Double.valueOf(5.0), true
jaroslav@30
   114
        );
jaroslav@30
   115
    }
jaroslav@30
   116
    
jaroslav@226
   117
    @Test public void sharedConstructor() throws Exception {
jaroslav@226
   118
        assertExec(
jaroslav@226
   119
            "Constructor of first and 2nd instance should be the same",
jaroslav@248
   120
            Instance.class, "sharedConstructor__Z",
jaroslav@226
   121
            Double.valueOf(1.0)
jaroslav@226
   122
        );
jaroslav@226
   123
    }
jaroslav@226
   124
jaroslav@226
   125
    @Test public void differentConstructor() throws Exception {
jaroslav@226
   126
        assertExec(
jaroslav@226
   127
            "Constructor of X and Y should be the different",
jaroslav@248
   128
            Instance.class, "differentConstructor__Z",
jaroslav@226
   129
            Double.valueOf(0)
jaroslav@226
   130
        );
jaroslav@226
   131
    }
jaroslav@239
   132
jaroslav@239
   133
    @Test public void jsObjectIsLikeJavaObject() throws Exception {
jaroslav@239
   134
        assertExec(
jaroslav@239
   135
            "JavaScript object is instance of Java Object",
jaroslav@248
   136
            Instance.class, "iofObject__Z",
jaroslav@239
   137
            Double.valueOf(1)
jaroslav@239
   138
        );
jaroslav@239
   139
    }
jaroslav@442
   140
jaroslav@442
   141
    @Test public void jsCallingConvention() throws Exception {
jaroslav@442
   142
        assertExec(
jaroslav@442
   143
            "Pointer to 'this' is passed automatically (and not as a first argument)",
jaroslav@442
   144
            Instance.class, "jscall__I",
jaroslav@442
   145
            Double.valueOf(31)
jaroslav@442
   146
        );
jaroslav@442
   147
    }
jaroslav@226
   148
    
jaroslav@98
   149
    protected String startCompilationWith() {
jaroslav@98
   150
        return "org/apidesign/vm4brwsr/Instance";
jaroslav@98
   151
    }
jaroslav@98
   152
    
jaroslav@708
   153
    private static TestVM code;
jaroslav@103
   154
    
jaroslav@113
   155
    @BeforeClass
jaroslav@103
   156
    public void compileTheCode() throws Exception {
jaroslav@708
   157
        code = TestVM.compileClass(startCompilationWith());
jaroslav@103
   158
    }
jaroslav@103
   159
    
jaroslav@98
   160
    private void assertExec(
jaroslav@203
   161
        String msg, Class clazz, String method, Object expRes, Object... args
jaroslav@98
   162
    ) throws Exception {
jaroslav@708
   163
        code.assertExec(msg, clazz, method, expRes, args);
jaroslav@8
   164
    }
jaroslav@8
   165
    
jaroslav@8
   166
}