ru.histone.optimizer.SafeASTEvaluationOptimizerTest.java Source code

Java tutorial

Introduction

Here is the source code for ru.histone.optimizer.SafeASTEvaluationOptimizerTest.java

Source

/**
 *    Copyright 2013 MegaFon
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package ru.histone.optimizer;

import com.fasterxml.jackson.databind.node.ArrayNode;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import ru.histone.Histone;
import ru.histone.HistoneBuilder;
import ru.histone.HistoneException;
import ru.histone.deparser.Deparser;
import ru.histone.utils.IOUtils;

import java.io.*;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

@Ignore
@Deprecated
public class SafeASTEvaluationOptimizerTest {
    private Histone histone;

    @Before
    public void init() throws HistoneException {
        HistoneBuilder histoneBuilder = new HistoneBuilder();
        histone = histoneBuilder.build();
    }

    //
    //  Templates from 'constant folding' folder
    //

    @Test
    public void constant_folding_simplest() throws IOException, HistoneException {
        String input = input("constant_folding/simplest.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        assertTrue(finalAst.get(0).asInt() == 7);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_advanced_expr1() throws IOException, HistoneException {
        String input = input("constant_folding/advanced_expr1.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);
        assertTrue(finalAst.get(0).asText().equals("1.43"));

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_advanced_expr2() throws IOException, HistoneException {
        String input = input("constant_folding/advanced_expr2.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);
        assertTrue(finalAst.get(0).asBoolean() == false);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_advanced_expr3() throws IOException, HistoneException {
        String input = input("constant_folding/advanced_expr3.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);
        assertTrue(finalAst.get(0).asBoolean() == true);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_template1() throws IOException, HistoneException {
        String input = input("constant_folding/template1.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_template2() throws IOException, HistoneException {
        String input = input("constant_folding/template2.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_folding_template3() throws IOException, HistoneException {
        String input = input("constant_folding/template3.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    //
    // Templates from 'constant propagation' folder
    //

    @Test
    public void constant_propagation_call() throws IOException, HistoneException {
        String input = input("constant_propagation/call.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_propagation_for() throws IOException, HistoneException {
        String input = input("constant_propagation/for.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        String astS = histone.evaluateAST(ast);

        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_propagation_if() throws IOException, HistoneException {
        String input = input("constant_propagation/if.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_propagation_macro() throws IOException, HistoneException {
        String input = input("constant_propagation/macro.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_propagation_map() throws IOException, HistoneException {
        String input = input("constant_propagation/map.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void constant_propagation_var() throws IOException, HistoneException {
        String input = input("constant_propagation/var.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test1_positive() throws IOException, HistoneException {
        String input = input("test1.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test2_positive() throws IOException, HistoneException {
        String input = input("test2.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test3_positive() throws IOException, HistoneException {
        String input = input("test3.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test4_negative() throws IOException, HistoneException {
        String input = input("test4.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test5() throws IOException, HistoneException {
        String input = input("test5.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test6() throws IOException, HistoneException {
        String input = input("test6.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test7() throws IOException, HistoneException {
        String input = input("test7.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test8() throws IOException, HistoneException {
        String input = input("test8.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        Deparser deparser = new Deparser();
        String s = deparser.deparse(finalAst);
        //        FileUtils.writeStringToFile(new File("/Users/ksazonov/Temp/1.js"), s);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test9() throws IOException, HistoneException {
        String input = input("test9.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        Deparser deparser = new Deparser();
        String s = deparser.deparse(finalAst);
        //        FileUtils.writeStringToFile(new File("/Users/ksazonov/Temp/1.js"), s);

        // Assert that evaluation results are equal
        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    @Test
    public void test10() throws IOException, HistoneException {
        String input = input("test10.tpl");

        ArrayNode ast = histone.parseTemplateToAST(new StringReader(input));
        ArrayNode finalAst = histone.optimizeAST(ast);

        String astS = histone.evaluateAST(ast);
        String finalAstS = histone.evaluateAST(finalAst);
        assertEquals(astS, finalAstS);
    }

    private String input(String filename) throws IOException {
        StringWriter sw = new StringWriter();
        InputStream is = getClass().getClassLoader().getResourceAsStream("optimizer/" + filename);
        IOUtils.copy(is, sw);
        return sw.toString();
    }
}