# HG changeset patch # User Jaroslav Tulach # Date 1425030100 -3600 # Node ID df885b256382bfbff2b19f07ba70751b15e9e817 # Parent 64fa3f15cb499e25248c9ea18e04eba1e4e50675 First StackMapper test diff -r 64fa3f15cb49 -r df885b256382 rt/vm/src/test/java/org/apidesign/vm4brwsr/StackMapperTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StackMapperTest.java Fri Feb 27 10:41:40 2015 +0100 @@ -0,0 +1,72 @@ +/** + * Back 2 Browser Bytecode Translator + * Copyright (C) 2012-2015 Jaroslav Tulach + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. Look for COPYING file in the top folder. + * If not, see http://opensource.org/licenses/GPL-2.0. + */ +package org.apidesign.vm4brwsr; + +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import static org.testng.Assert.*; +import org.testng.annotations.Test; + +/** + * + * @author Jaroslav Tulach + */ +public class StackMapperTest { + + public StackMapperTest() { + } + + @Test public void replaceValueThatAnotherReplaceDependsOn() + throws Exception { + StringBuilder sb = new StringBuilder(); + + StackMapper smapper = new StackMapper(); + + smapper.assign(sb, VarType.INTEGER, "0"); + + smapper.assign(sb, VarType.REFERENCE, "arr"); + smapper.assign(sb, VarType.INTEGER, "33"); + smapper.replace(sb, VarType.INTEGER, "@2[@1]", + smapper.popI(), smapper.getA(0) + ); + + smapper.replace(sb, VarType.INTEGER, "(@1) + (@2)", + smapper.getI(1), smapper.popI() + ); + + smapper.assign(sb, VarType.REFERENCE, "arr"); + smapper.assign(sb, VarType.INTEGER, "22"); + smapper.replace(sb, VarType.INTEGER, "@2[@1]", + smapper.popI(), smapper.getA(0) + ); + + smapper.replace(sb, VarType.INTEGER, "(@1) + (@2)", + smapper.getI(1), smapper.popI() + ); + + smapper.flush(sb); + + ScriptEngineManager sem = new ScriptEngineManager(); + ScriptEngine em = sem.getEngineByMimeType("text/javascript"); + Object ret = em.eval("var arr= []; arr[33] = 40; arr[22] = 2; " + sb + "; stI0;"); + + assertTrue(ret instanceof Number, "Result is number: " + ret); + assertEquals(((Number)ret).intValue(), 42, "Right value"); + } + +}