org.finra.datagenerator.engine.scxml.SCXMLGapperTest.java Source code

Java tutorial

Introduction

Here is the source code for org.finra.datagenerator.engine.scxml.SCXMLGapperTest.java

Source

/*
 * Copyright 2014 DataGenerator Contributors
 *
 * 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 org.finra.datagenerator.engine.scxml;

import org.apache.commons.scxml.io.SCXMLParser;
import org.apache.commons.scxml.model.ModelException;
import org.apache.commons.scxml.model.SCXML;
import org.junit.Assert;
import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * Marshall Peters
 * Date: 9/3/14
 */
public class SCXMLGapperTest {
    static String bigTest = "<scxml xmlns=\"http://www.w3.org/2005/07/scxml\"\n"
            + "       xmlns:dg=\"org.finra.datagenerator\"" + "       version=\"1.0\"\n"
            + "       initial=\"start\">\n" + "\n" + "    <state id=\"start\">\n"
            + "        <transition event=\"BULK_ASSIGN\" target=\"BULK_ASSIGN\"/>\n" + "    </state>\n" + "\n"
            + "    <state id=\"BULK_ASSIGN\">\n" + "        <onentry>\n"
            + "            <dg:assign name=\"var_out_RECORD_TYPE\" set=\"a,b,c,d,e,f,g\"/>\n"
            + "            <dg:assign name=\"var_out_RECORD_TYPE_2\" set=\"a,b,c,d,e,f,g\"/>\n"
            + "            <dg:assign name=\"var_out_RECORD_TYPE_3\" set=\"a,b,c,d,e,f,g\"/>\n"
            + "            <assign name=\"var_out_RECORD_TYPE_4\" expr=\"Lorem\"/>\n"
            + "            <assign name=\"var_out_RECORD_TYPE_5\" expr=\"Ipsum\"/>\n"
            + "            <assign name=\"var_out_RECORD_TYPE_6\" expr=\"Doler\"/>\n" + "        </onentry>\n"
            + "        <transition event=\"ASSIGN_WITH_CONDITIONS\" target=\"ASSIGN_WITH_CONDITIONS\"/>\n"
            + "    </state>\n" + "\n" + "    <state id=\"ASSIGN_WITH_CONDITIONS\">\n" + "        <onentry>\n"
            + "            <dg:assign name=\"var_out_RECORD_TYPE_7\" set=\"1,2,3\"/>\n"
            + "            <dg:assign name=\"var_out_RECORD_TYPE_8\" set=\"1,2,3\"/>\n" + "        </onentry>\n"
            + "        <transition event=\"end\" target=\"end\" cond=\"${var_out_RECORD_TYPE_7"
            + " != var_out_RECORD_TYPE_8}\"/>\n" + "    </state>\n" + "    \n" + "<state id=\"end\">\n"
            + "    </state>\n" + "</scxml>";

    /**
     * Test SCXMLGapper's ability to decompose and recompose an SCXMLFrontier with none of the variables set
     */
    @Test
    public void testDecomposeAndReproduceInitial() {
        SCXMLEngine e = new SCXMLEngine();
        e.setModelByText(bigTest);

        try {
            List<PossibleState> bfs = e.bfs(1);
            PossibleState p = bfs.get(0);

            try {
                InputStream is = SCXMLEngineTest.class.getResourceAsStream("/bigtest.xml");
                SCXML model = SCXMLParser.parse(new InputSource(is), null);

                SCXMLFrontier frontier = new SCXMLFrontier(p, model);
                SCXMLGapper gapper = new SCXMLGapper();
                frontier = (SCXMLFrontier) gapper.reproduce(gapper.decompose(frontier, bigTest));

                p = frontier.getRoot();
                Assert.assertEquals(p.nextState.getId(), "start");

                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_2"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_3"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_4"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_5"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_6"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_7"), "");
                Assert.assertEquals(p.variables.get("var_out_RECORD_TYPE_8"), "");
                Assert.assertEquals(p.variables.keySet().size(), 8);
            } catch (IOException | SAXException ex) {
                Assert.fail();
            }
        } catch (ModelException ex) {
            Assert.fail();
        }
    }

    /**
     * Test SCXMLGapper's ability to decompose and recompose an SCXMLFrontier
     */
    @Test
    public void testDecomposeAndRecompose() {
        SCXMLEngine e = new SCXMLEngine();
        e.setModelByText(bigTest);

        try {
            List<PossibleState> bfs = e.bfs(343);
            PossibleState p = bfs.get(0);

            try {
                InputStream is = SCXMLEngineTest.class.getResourceAsStream("/bigtest.xml");
                SCXML model = SCXMLParser.parse(new InputSource(is), null);

                SCXMLFrontier frontier = new SCXMLFrontier(p, model);
                SCXMLGapper gapper = new SCXMLGapper();

                PossibleState before = frontier.getRoot();
                frontier = (SCXMLFrontier) gapper.reproduce(gapper.decompose(frontier, bigTest));
                PossibleState after = frontier.getRoot();

                Assert.assertEquals(after.nextState.getId(), before.nextState.getId());

                for (String key : before.variables.keySet()) {
                    Assert.assertEquals(before.variables.get(key), after.variables.get(key));
                }

                for (String key : after.variables.keySet()) {
                    Assert.assertEquals(before.variables.get(key), after.variables.get(key));
                }
            } catch (IOException | SAXException ex) {
                Assert.fail();
            }
        } catch (ModelException ex) {
            Assert.fail();
        }
    }

}