Java tutorial
/* * The MIT License * * Copyright 2013 Przemyslaw Walkowiak <przemyslaw.walkowiak@put.poznan.pl>. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package net.przemkovv.sphinx.executor; import java.io.File; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import net.przemkovv.sphinx.compiler.CompilationResult; import net.przemkovv.sphinx.compiler.GXXCompiler; import net.przemkovv.sphinx.compiler.ICompiler; import org.apache.commons.lang.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Parameters; import org.testng.annotations.Test; /** * * @author Przemyslaw Walkowiak <przemyslaw.walkowiak@put.poznan.pl> */ public class SimpleExecutorEchoNGTest { private static final Logger logger = LoggerFactory.getLogger(SimpleExecutorEchoNGTest.class); private static File executable; private static File prepare_env; public SimpleExecutorEchoNGTest() { } public static String EchoSource() { String source = "#include <iostream>\n" + "#include <string>\n" + "\n" + "int main()\n" + "{\n" + " std::string input;\n" + " std::cin >> input;\n" + " std::cout << input << std::endl;\n" + " return 0;\n" + "}"; return source; } @BeforeClass @Parameters({ "compiler_class_name" }) public static void setUpClass(String compiler_class_name) throws Exception { ICompiler compiler = (ICompiler) Class.forName(compiler_class_name).newInstance(); CompilationResult result = compiler.compile(EchoSource()); executable = result.executable_file; prepare_env = result.prepare_env; } @AfterClass public static void tearDownClass() throws Exception { executable.delete(); } @BeforeMethod public void setUpMethod(Method method) throws Exception { String testName = method.getName(); logger.info("Executing {} method..", testName); } @AfterMethod public void tearDownMethod() throws Exception { } @Test() public void testExecuteEcho() throws Exception { SimpleExecutor instance; instance = new SimpleExecutor(executable, prepare_env); List<String> input = new ArrayList<>(); input.add(RandomStringUtils.randomAlphanumeric(16)); ExecutionResult result = instance.execute(input); assertEquals(result.exit_value, 0); assertTrue(result.output_error.isEmpty(), "Invalid output error."); assertEquals(result.output, input, "Invalid output."); } }