Tests

We use unit test suites to verify the correctness of our virtual machine. Here you can access the source code of the tests.

package at.ssw.hotswap.test.body;

import at.ssw.hotswap.HotSwapTool;
import at.ssw.hotswap.test.TestUtil;
import java.io.PrintStream;
import static org.junit.Assert.*;
import org.junit.Test;

/**
 *
 * EMCP (Equivalent modulo Constant Pool) tests.
 *
 * @author Thomas Wuerthinger
 *
 */

public class EMCPTest {

    public static class A {

        public static int EMCPReturn() {
            change();
            PrintStream s = System.out;
            return 1;
        }
    }

    public static class B {

        public static int b() {
            change();
            throw new RuntimeException();
        }
    }

    public static class C {

        public static int c() {
            changeAndThrow();
            return 0;
        }
    }

    public static class D {

        private static int value = 1;

        public static int EMCPReturn() {
            change3();
            return value;
        }
    }

    public static class A___1 {

        public static int EMCPReturn() {
            change();
            PrintStream s = System.out;
            return 1;
        }
    }

    public static class B___1 {

        public static int b() {
            change();
            throw new RuntimeException();
        }
    }

    public static class C___1 {

        public static int c() {
            changeAndThrow();
            return 0;
        }
    }
   
    public static class D___1 {
        private static int value = 1;

        public static int EMCPReturn() {
            change3();
            return value;
        }
    }

    public static class D___2 {
        private static int value = 1;

        public static int EMCPReturn() {
            change3();
            return value;
        }
    }

    public static class D___3 {
        private static int value = 1;

        public static int EMCPReturn() {
            change3();
            return value;
        }
    }

    public static void change() {

        HotSwapTool.toVersion(EMCPTest.class, 1);
    }

    public static void change3() {

        HotSwapTool.toVersion(EMCPTest.class, 1);
        HotSwapTool.toVersion(EMCPTest.class, 2);
        HotSwapTool.toVersion(EMCPTest.class, 3);
    }

    public static void changeAndThrow() {

        HotSwapTool.toVersion(EMCPTest.class, 1);

        throw new RuntimeException();
    }


    @Test
    public void testEMCPReturn() {
        HotSwapTool.toVersion(EMCPTest.class, 0);

        assertEquals(1, A.EMCPReturn());

        HotSwapTool.toVersion(EMCPTest.class, 0);

        assertEquals(1, A.EMCPReturn());
       
        HotSwapTool.toVersion(EMCPTest.class, 0);
    }
   
    @Test
    public void testEMCPMultiChangeReturn() {
        HotSwapTool.toVersion(EMCPTest.class, 0);

        assertEquals(1, D.EMCPReturn());

        HotSwapTool.toVersion(EMCPTest.class, 0);

        assertEquals(1, D.EMCPReturn());

        HotSwapTool.toVersion(EMCPTest.class, 0);
    }

    @Test
    public void testEMCPException() {
        HotSwapTool.toVersion(EMCPTest.class, 0);

        TestUtil.assertException(RuntimeException.class, new Runnable(){
            @Override
            public void run() {
               B.b();
            }
        });

        HotSwapTool.toVersion(EMCPTest.class, 0);

        TestUtil.assertException(RuntimeException.class, new Runnable(){
            @Override
            public void run() {
               B.b();
            }
        });

        HotSwapTool.toVersion(EMCPTest.class, 0);
    }

    @Test
    public void testEMCPExceptionInCallee() {
        HotSwapTool.toVersion(EMCPTest.class, 0);

        TestUtil.assertException(RuntimeException.class, new Runnable(){
            @Override
            public void run() {
               C.c();
            }
        });

        HotSwapTool.toVersion(EMCPTest.class, 0);

        TestUtil.assertException(RuntimeException.class, new Runnable(){
            @Override
            public void run() {
               C.c();
            }
        });

        HotSwapTool.toVersion(EMCPTest.class, 0);
    }
}
 

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>