diff -r e046cfcb8f00 -r b9386cc3ff7b rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Sat Feb 15 14:36:43 2014 +0100 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Sat Feb 15 20:18:26 2014 +0100 @@ -23,6 +23,8 @@ package org.apidesign.vm4brwsr; +import java.io.IOException; +import java.io.InputStream; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import org.testng.annotations.AfterClass; @@ -34,26 +36,53 @@ * @author Jaroslav Tulach */ public class SizeOfAMethodTest { - private static TestVM code; + private static String code; @Test public void sumXYShouldBeSmall() { - String s = code.codeSeq().toString(); + String s = code; int beg = s.indexOf("c.sum__III"); int end = s.indexOf("c.sum__III.access"); - assertTrue(beg > 0, "Found sum method in " + code.toString()); - assertTrue(beg < end, "Found end of sum method in " + code.toString()); + assertTrue(beg > 0, "Found sum method in " + code); + assertTrue(beg < end, "Found end of sum method in " + code); String method = s.substring(beg, end); + + assertEquals(method.indexOf("st"), -1, "There should be no stack operations:\n" + method); + } + + @Test public void emptyConstructorRequiresNoStack() { + String s = code; + int beg = s.indexOf("CLS.cons__V"); + int end = s.indexOf("CLS.cons__V.access"); + + assertTrue(beg > 0, "Found constructor in " + code); + assertTrue(beg < end, "Found end of constructor in " + code); + + String method = s.substring(beg, end); + method = method.replace("constructor", "CNSTR"); + assertEquals(method.indexOf("st"), -1, "There should be no stack operations:\n" + method); } @BeforeClass public static void compileTheCode() throws Exception { + final String res = "org/apidesign/vm4brwsr/StaticMethod"; StringBuilder sb = new StringBuilder(); - code = TestVM.compileClass(sb, "org/apidesign/vm4brwsr/StaticMethod"); + class JustStaticMethod implements Bck2Brwsr.Resources { + @Override + public InputStream get(String resource) throws IOException { + final String cn = res + ".class"; + if (resource.equals(cn)) { + return getClass().getClassLoader().getResourceAsStream(cn); + } + return null; + } + } + Bck2Brwsr.generate(sb, new JustStaticMethod(), res); + code = sb.toString(); } @AfterClass public static void releaseTheCode() {