net.przemkovv.sphinx.executor.SimpleExecutorEchoNGTest.java Source code

Java tutorial

Introduction

Here is the source code for net.przemkovv.sphinx.executor.SimpleExecutorEchoNGTest.java

Source

/*
 * 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.");

    }

}