vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 25 Sep 2012 12:26:29 +0200
changeset 30 7efb52f76270
parent 24 a82e89aae050
child 98 9fb17a3cbbb6
permissions -rw-r--r--
Support for casts
jaroslav@24
     1
/**
jaroslav@24
     2
 * Java 4 Browser Bytecode Translator
jaroslav@24
     3
 * Copyright (C) 2012-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 javax.script.Invocable;
jaroslav@8
    21
import javax.script.ScriptException;
jaroslav@8
    22
import org.testng.annotations.Test;
jaroslav@8
    23
import static org.testng.Assert.*;
jaroslav@8
    24
jaroslav@8
    25
/**
jaroslav@8
    26
 *
jaroslav@8
    27
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@8
    28
 */
jaroslav@8
    29
public class InstanceTest {
jaroslav@10
    30
    @Test public void verifyDefaultDoubleValue() throws Exception {
jaroslav@10
    31
        assertExec(
jaroslav@10
    32
            "Will be zero",
jaroslav@22
    33
            "org_apidesign_vm4brwsr_Instance_defaultDblValueD",
jaroslav@10
    34
            Double.valueOf(0)
jaroslav@10
    35
        );
jaroslav@10
    36
    }
jaroslav@10
    37
    @Test public void verifyAssignedByteValue() throws Exception {
jaroslav@10
    38
        assertExec(
jaroslav@10
    39
            "Will one thirty one",
jaroslav@22
    40
            "org_apidesign_vm4brwsr_Instance_assignedByteValueB",
jaroslav@10
    41
            Double.valueOf(31)
jaroslav@10
    42
        );
jaroslav@10
    43
    }
jaroslav@8
    44
    @Test public void verifyMagicOne() throws Exception {
jaroslav@8
    45
        assertExec(
jaroslav@10
    46
            "Should be three and something",
jaroslav@22
    47
            "org_apidesign_vm4brwsr_Instance_magicOneD",
jaroslav@8
    48
            Double.valueOf(3.3)
jaroslav@8
    49
        );
jaroslav@8
    50
    }
jaroslav@12
    51
    @Test public void verifyInstanceMethods() throws Exception {
jaroslav@12
    52
        assertExec(
jaroslav@14
    53
            "Should be eleven as we invoke overwritten method, plus 44",
jaroslav@22
    54
            "org_apidesign_vm4brwsr_Instance_virtualBytesI",
jaroslav@14
    55
            Double.valueOf(55)
jaroslav@12
    56
        );
jaroslav@12
    57
    }
jaroslav@15
    58
    @Test public void verifyInterfaceMethods() throws Exception {
jaroslav@15
    59
        assertExec(
jaroslav@15
    60
            "Retruns default value",
jaroslav@22
    61
            "org_apidesign_vm4brwsr_Instance_interfaceBytesF",
jaroslav@15
    62
            Double.valueOf(31)
jaroslav@15
    63
        );
jaroslav@15
    64
    }
jaroslav@16
    65
jaroslav@16
    66
    @Test public void isNull() throws Exception {
jaroslav@16
    67
        assertExec(
jaroslav@16
    68
            "Yes, we are instance",
jaroslav@22
    69
            "org_apidesign_vm4brwsr_Instance_isNullZ",
jaroslav@16
    70
            Double.valueOf(0.0)
jaroslav@16
    71
        );
jaroslav@16
    72
    }
jaroslav@17
    73
jaroslav@16
    74
    @Test public void isInstanceOf() throws Exception {
jaroslav@16
    75
        assertExec(
jaroslav@16
    76
            "Yes, we are instance",
jaroslav@22
    77
            "org_apidesign_vm4brwsr_Instance_instanceOfZZ",
jaroslav@16
    78
            Double.valueOf(1.0), true
jaroslav@16
    79
        );
jaroslav@16
    80
    }
jaroslav@16
    81
jaroslav@16
    82
    @Test public void notInstanceOf() throws Exception {
jaroslav@16
    83
        assertExec(
jaroslav@16
    84
            "No, we are not an instance",
jaroslav@22
    85
            "org_apidesign_vm4brwsr_Instance_instanceOfZZ",
jaroslav@16
    86
            Double.valueOf(0.0), false
jaroslav@16
    87
        );
jaroslav@16
    88
    }
jaroslav@17
    89
    
jaroslav@30
    90
    @Test public void verifyCastToClass() throws Exception {
jaroslav@30
    91
        assertExec(
jaroslav@30
    92
            "Five signals all is good",
jaroslav@30
    93
            "org_apidesign_vm4brwsr_Instance_castsWorkIZ",
jaroslav@30
    94
            Double.valueOf(5.0), false
jaroslav@30
    95
        );
jaroslav@30
    96
    }
jaroslav@30
    97
    @Test public void verifyCastToInterface() throws Exception {
jaroslav@30
    98
        assertExec(
jaroslav@30
    99
            "Five signals all is good",
jaroslav@30
   100
            "org_apidesign_vm4brwsr_Instance_castsWorkIZ",
jaroslav@30
   101
            Double.valueOf(5.0), true
jaroslav@30
   102
        );
jaroslav@30
   103
    }
jaroslav@30
   104
    
jaroslav@8
   105
    private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
jaroslav@8
   106
        StringBuilder sb = new StringBuilder();
jaroslav@18
   107
        Invocable i = StaticMethodTest.compileClass(sb, 
jaroslav@22
   108
            "org/apidesign/vm4brwsr/Instance"
jaroslav@18
   109
        );
jaroslav@8
   110
        
jaroslav@8
   111
        Object ret = null;
jaroslav@8
   112
        try {
jaroslav@8
   113
            ret = i.invokeFunction(methodName, args);
jaroslav@8
   114
        } catch (ScriptException ex) {
jaroslav@8
   115
            fail("Execution failed in " + sb, ex);
jaroslav@8
   116
        } catch (NoSuchMethodException ex) {
jaroslav@8
   117
            fail("Cannot find method in " + sb, ex);
jaroslav@8
   118
        }
jaroslav@8
   119
        if (ret == null && expRes == null) {
jaroslav@8
   120
            return;
jaroslav@8
   121
        }
jaroslav@8
   122
        if (expRes.equals(ret)) {
jaroslav@8
   123
            return;
jaroslav@8
   124
        }
jaroslav@8
   125
        assertEquals(ret, expRes, msg + "was: " + ret + "\n" + sb);
jaroslav@8
   126
        
jaroslav@8
   127
    }
jaroslav@8
   128
    
jaroslav@8
   129
}