diff -r 000000000000 -r 4fef6b767f61 rt/flow/src/test/java/org/apidesign/bck2brwsr/flow/LoopControlTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rt/flow/src/test/java/org/apidesign/bck2brwsr/flow/LoopControlTest.java Wed Mar 11 18:58:39 2015 +0100 @@ -0,0 +1,77 @@ +/** + * 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.bck2brwsr.flow; + +import org.apidesign.vm4brwsr.Bck2Brwsr.Flow; +import static org.testng.Assert.*; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +/** + * + * @author Jaroslav Tulach + */ +public class LoopControlTest { + private static TestVM vm; + + public LoopControlTest() { + } + + @BeforeClass + public static void setUpClass() throws Exception { + class MyFlow implements Flow.Analyzer { + boolean called; + @Override + public boolean analyze(Flow request) { + called = true; + return GraalFlowAnalyzer.getDefault().analyze(request); + } + } + MyFlow flow = new MyFlow(); + vm = TestVM.compileClass(null, flow, LoopControl.class.getName().replace('.', '/')); + assertTrue(flow.called, "We have been consuted about at least one method"); + } + + @AfterClass + public static void tearDownClass() throws Exception { + vm = null; + } + + @BeforeMethod + public void setUpMethod() throws Exception { + } + + @AfterMethod + public void tearDownMethod() throws Exception { + } + + @Test + public void testExecute() throws Exception { + String code = vm.codeSeq().toString(); + int begin = code.indexOf("simpleLoopTestWithExit__II = function"); + assertNotEquals(begin, -1, "Control loop defined" + code); + int end = code.indexOf("m.access = ", begin); + assertNotEquals(end, -1, "Control loop end defined" + code); + final String body = code.substring(begin, end); + assertFalse(body.contains("gt"), "No gt control flow used: " + body); + } + +}