Package hu.sztaki.ilab.longneck.process.kernel

Source Code of hu.sztaki.ilab.longneck.process.kernel.KernelTest

package hu.sztaki.ilab.longneck.process.kernel;

import hu.sztaki.ilab.longneck.Field;
import hu.sztaki.ilab.longneck.Record;
import hu.sztaki.ilab.longneck.RecordImpl;
import hu.sztaki.ilab.longneck.process.FailException;
import hu.sztaki.ilab.longneck.process.FilterException;
import hu.sztaki.ilab.longneck.process.FrameAddressResolver;
import hu.sztaki.ilab.longneck.process.SourceInfo;
import hu.sztaki.ilab.longneck.process.block.Block;
import hu.sztaki.ilab.longneck.process.block.BlockReference;
import hu.sztaki.ilab.longneck.process.block.Case;
import hu.sztaki.ilab.longneck.process.block.Check;
import hu.sztaki.ilab.longneck.process.block.CloneRecord;
import hu.sztaki.ilab.longneck.process.block.Copy;
import hu.sztaki.ilab.longneck.process.block.Filter;
import hu.sztaki.ilab.longneck.process.block.GenericBlock;
import hu.sztaki.ilab.longneck.process.block.If;
import hu.sztaki.ilab.longneck.process.block.MatchExtract;
import hu.sztaki.ilab.longneck.process.block.Sequence;
import hu.sztaki.ilab.longneck.process.block.Set;
import hu.sztaki.ilab.longneck.process.block.Switch;
import hu.sztaki.ilab.longneck.process.block.SwitchStrict;
import hu.sztaki.ilab.longneck.process.block.TryAll;
import hu.sztaki.ilab.longneck.process.constraint.Constraint;
import hu.sztaki.ilab.longneck.process.constraint.EqualsConstraint;
import hu.sztaki.ilab.longneck.process.mapping.Map;
import hu.sztaki.ilab.longneck.process.mapping.MappedRecord;
import hu.sztaki.ilab.longneck.process.mapping.Mapping;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.*;
import org.junit.Test;

/**
*
* @author Lukacs Gabor <lukacsg@sztaki.mta.hu>
*/
public class KernelTest {
   
    public static Sequence createIfSequence(FrameAddressResolver far) {
       
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
        If ifBlock = new If();
        seq.setBlocks(Arrays.asList(new Block[] { ifBlock }));
       
        EqualsConstraint equals = new EqualsConstraint();
        equals.setApplyTo("a");
        equals.setValue("aaa");
        ifBlock.setConstraints(Arrays.asList(new Constraint[] { equals }));
       
        Sequence thenBranch = new Sequence();
        thenBranch.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(thenBranch);
        Set setbThen = new Set();
        setbThen.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 3, 3, 0));
        setbThen.setApplyTo("b");
        setbThen.setValue("then");       
        thenBranch.setBlocks(Arrays.asList(new Block[] { setbThen }));
        ifBlock.setThenBranch(thenBranch);
       
        Sequence elseBranch = new Sequence();
        elseBranch.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 4, 4, 0));
        far.put(elseBranch);
        Set setbElse = new Set();
        setbElse.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 5, 5, 0));
        setbElse.setApplyTo("b");
        setbElse.setValue("else");       
        elseBranch.setBlocks(Arrays.asList(new Block[] { setbElse }));
        ifBlock.setElseBranch(elseBranch);

        return seq;
    }

    @Test
    public void testIfThen() throws FailException, FilterException {       
        FrameAddressResolver far = new FrameAddressResolver();
       
        // Create an if sequence
        Sequence seq = createIfSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "aaa"));
       
        Kernel kernel = new Kernel(seq, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("then", rec.get("b").getValue())
    }
   
    @Test
    public void testIfElse() throws FailException, FilterException {       
        FrameAddressResolver far = new FrameAddressResolver();
       
        // Create an if sequence
        Sequence seq = createIfSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(seq, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("else", rec.get("b").getValue())
    }
   
    public static Sequence createSwitchStrictSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        SwitchStrict ss = new SwitchStrict();
        ss.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(ss);
       
        // Case 1
        Case c1 = new Case();
        c1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 3, 3, 0));
        far.put(c1);
       
        // Case 1 check
        Check c1check = new Check();
        c1check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 4, 4, 0));
        far.put(c1check);
       
        EqualsConstraint c1equals = new EqualsConstraint();
        c1equals.setApplyTo("a");
        c1equals.setValue("aaa");
        c1check.setConstraints(Arrays.asList(new Constraint[] { c1equals }));
       
        // Case 1 block
        Set c1set = new Set();
        c1set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 5, 5, 0));
        far.put(c1set);
        c1set.setApplyTo("b");
        c1set.setValue("case1");       
       
        Set c1set2 = new Set();
        c1set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 6, 6, 0));
        far.put(c1set2);
        c1set2.setApplyTo("c1");
        c1set2.setValue("case1");
       
        c1.setBlocks(Arrays.asList(new Block[] { c1check, c1set, c1set2 }));
       
       
        // Case 2
        Case c2 = new Case();
        c2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 7, 7, 0));
        far.put(c2);
       
        // Case 2 check
        Check c2check = new Check();
        c2check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 8, 8, 0));
        far.put(c2check);
       
        EqualsConstraint c2equals = new EqualsConstraint();
        c2equals.setApplyTo("a");
        c2equals.setValue("bbb");
        c2check.setConstraints(Arrays.asList(new Constraint[] { c2equals }));
       
        // Case 2 block
        Set c2set = new Set();
        c2set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 9, 9, 0));
        far.put(c2set);
        c2set.setApplyTo("b");
        c2set.setValue("case2");
       
        Set c2set2 = new Set();
        c2set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 10, 10, 0));
        far.put(c2set2);
        c2set2.setApplyTo("c2");
        c2set2.setValue("case2");
       
        c2.setBlocks(Arrays.asList(new Block[] { c2check, c2set, c2set2 }));

       
        // Case 3
        Case c3 = new Case();
        c3.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 11, 11, 0));
        far.put(c1);
       
        // Case 3 check
        Check c3check = new Check();
        c3check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 12, 12, 0));
        far.put(c3check);
       
        EqualsConstraint c3equals = new EqualsConstraint();
        c3equals.setApplyTo("a");
        c3equals.setValue("ccc");
        c3check.setConstraints(Arrays.asList(new Constraint[] { c3equals }));
       
        // Case 3 block
        Set c3set = new Set();
        c3set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 13, 13, 0));
        far.put(c3set);
        c3set.setApplyTo("b");
        c3set.setValue("case3");       
       
        Set c3set2 = new Set();
        c3set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 14, 14, 0));
        far.put(c3set2);
        c3set2.setApplyTo("c3");
        c3set2.setValue("case3");
       
        c3.setBlocks(Arrays.asList(new Block[] { c3check, c3set, c3set2 }));

        Set afterSet = new Set();
        afterSet.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 15, 15, 0));
        far.put(afterSet);
        afterSet.setApplyTo("after");
        afterSet.setValue("true");

        // Add cases to switch
        ss.setCases(Arrays.asList(new Case[] { c1, c2, c3 }));
        // Add blocks to top-level sequence       
        seq.setBlocks(Arrays.asList(new Block[] { ss, afterSet }));
       
        return seq;
    }
   
    @Test
    public void testSwitchStrictCase1() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchStrictSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "aaa"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case1", rec.get("b").getValue())
       
        // Only case 1 was run
        assertTrue(rec.has("c1"));
        assertEquals("case1", rec.get("c1").getValue())
        assertFalse(rec.has("c2"));
        assertFalse(rec.has("c3"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test
    public void testSwitchStrictCase2() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchStrictSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case2", rec.get("b").getValue())
       
        // Only case 2 was run
        assertTrue(rec.has("c2"));
        assertEquals("case2", rec.get("c2").getValue())
        assertFalse(rec.has("c1"));
        assertFalse(rec.has("c3"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test   
    public void testSwitchStrictCase3() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchStrictSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "ccc"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case3", rec.get("b").getValue())
       
        // Only case 3 was run
        assertTrue(rec.has("c3"));
        assertEquals("case3", rec.get("c3").getValue())
        assertFalse(rec.has("c1"));
        assertFalse(rec.has("c2"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test   
    public void testSwitchStrictAllCasesFail() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchStrictSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "ddd"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);

        assertFalse(rec.has("after"));
    }

    public static Sequence createSwitchSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        Switch sw = new Switch();
        sw.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(sw);
       
        // Case 1
        Case c1 = new Case();
        c1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 3, 3, 0));
        far.put(c1);
       
        // Case 1 check
        Check c1check = new Check();
        c1check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 4, 4, 0));
        far.put(c1check);
       
        EqualsConstraint c1equals = new EqualsConstraint();
        c1equals.setApplyTo("a");
        c1equals.setValue("aaa");
        c1check.setConstraints(Arrays.asList(new Constraint[] { c1equals }));
       
        // Case 1 block
        Set c1set = new Set();
        c1set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 5, 5, 0));
        far.put(c1set);
        c1set.setApplyTo("b");
        c1set.setValue("case1");       
       
        Set c1set2 = new Set();
        c1set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 6, 6, 0));
        far.put(c1set2);
        c1set2.setApplyTo("c1");
        c1set2.setValue("case1");
       
        c1.setBlocks(Arrays.asList(new Block[] { c1check, c1set, c1set2 }));
       
       
        // Case 2
        Case c2 = new Case();
        c2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 7, 7, 0));
        far.put(c2);
       
        // Case 2 check
        Check c2check = new Check();
        c2check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 8, 8, 0));
        far.put(c2check);
       
        EqualsConstraint c2equals = new EqualsConstraint();
        c2equals.setApplyTo("a");
        c2equals.setValue("bbb");
        c2check.setConstraints(Arrays.asList(new Constraint[] { c2equals }));
       
        // Case 2 block
        Set c2set = new Set();
        c2set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 9, 9, 0));
        far.put(c2set);
        c2set.setApplyTo("b");
        c2set.setValue("case2");
       
        Set c2set2 = new Set();
        c2set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 10, 10, 0));
        far.put(c2set2);
        c2set2.setApplyTo("c2");
        c2set2.setValue("case2");
       
        c2.setBlocks(Arrays.asList(new Block[] { c2check, c2set, c2set2 }));

       
        // Case 3
        Case c3 = new Case();
        c3.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 11, 11, 0));
        far.put(c1);
       
        // Case 3 check
        Check c3check = new Check();
        c3check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 12, 12, 0));
        far.put(c3check);
       
        EqualsConstraint c3equals = new EqualsConstraint();
        c3equals.setApplyTo("a");
        c3equals.setValue("ccc");
        c3check.setConstraints(Arrays.asList(new Constraint[] { c3equals }));
       
        // Case 3 block
        Set c3set = new Set();
        c3set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 13, 13, 0));
        far.put(c3set);
        c3set.setApplyTo("b");
        c3set.setValue("case3");       
       
        Set c3set2 = new Set();
        c3set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 14, 14, 0));
        far.put(c3set2);
        c3set2.setApplyTo("c3");
        c3set2.setValue("case3");
       
        c3.setBlocks(Arrays.asList(new Block[] { c3check, c3set, c3set2 }));

        Set afterSet = new Set();
        afterSet.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 15, 15, 0));
        far.put(afterSet);
        afterSet.setApplyTo("after");
        afterSet.setValue("true");

        // Add cases to switch
        sw.setCases(Arrays.asList(new Case[] { c1, c2, c3 }));
        // Add blocks to top-level sequence       
        seq.setBlocks(Arrays.asList(new Block[] { sw, afterSet }));
       
        return seq;
    }
   
    @Test
    public void testSwitchCase1() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "aaa"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case1", rec.get("b").getValue())
       
        // Only case 1 was run
        assertTrue(rec.has("c1"));
        assertEquals("case1", rec.get("c1").getValue())
        assertFalse(rec.has("c2"));
        assertFalse(rec.has("c3"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test
    public void testSwitchCase2() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case2", rec.get("b").getValue())
       
        // Only case 2 was run
        assertTrue(rec.has("c2"));
        assertEquals("case2", rec.get("c2").getValue())
        assertFalse(rec.has("c1"));
        assertFalse(rec.has("c3"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test   
    public void testSwitchCase3() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "ccc"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case3", rec.get("b").getValue())
       
        // Only case 3 was run
        assertTrue(rec.has("c3"));
        assertEquals("case3", rec.get("c3").getValue())
        assertFalse(rec.has("c1"));
        assertFalse(rec.has("c2"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test   
    public void testSwitchAllCasesFail() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createSwitchSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "ddd"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);

        assertTrue(rec.has("after"));
    }
   
    public static Sequence createTryAllSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        TryAll ta = new TryAll();
        ta.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(ta);
       
        // Case 1
        Case c1 = new Case();
        c1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 3, 3, 0));
        far.put(c1);
       
        // Case 1 check
        Check c1check = new Check();
        c1check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 4, 4, 0));
        far.put(c1check);
       
        EqualsConstraint c1equals = new EqualsConstraint();
        c1equals.setApplyTo("a");
        c1equals.setValue("aaa");
        c1check.setConstraints(Arrays.asList(new Constraint[] { c1equals }));
       
        // Case 1 block
        Set c1set = new Set();
        c1set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 5, 5, 0));
        far.put(c1set);
        c1set.setApplyTo("b");
        c1set.setValue("case1");       
       
        Set c1set2 = new Set();
        c1set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 6, 6, 0));
        far.put(c1set2);
        c1set2.setApplyTo("c1");
        c1set2.setValue("case1");
       
        c1.setBlocks(Arrays.asList(new Block[] { c1check, c1set, c1set2 }));
       
       
        // Case 2
        Case c2 = new Case();
        c2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 7, 7, 0));
        far.put(c2);
       
        // Case 2 check
        Check c2check = new Check();
        c2check.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 8, 8, 0));
        far.put(c2check);
       
        EqualsConstraint c2equals = new EqualsConstraint();
        c2equals.setApplyTo("a");
        c2equals.setValue("bbb");
        c2check.setConstraints(Arrays.asList(new Constraint[] { c2equals }));
       
        // Case 2 block
        Set c2set = new Set();
        c2set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 9, 9, 0));
        far.put(c2set);
        c2set.setApplyTo("b");
        c2set.setValue("case2");
       
        Set c2set2 = new Set();
        c2set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 10, 10, 0));
        far.put(c2set2);
        c2set2.setApplyTo("c2");
        c2set2.setValue("case2");
       
        c2.setBlocks(Arrays.asList(new Block[] { c2check, c2set, c2set2 }));

       
        // Case 3
        Case c3 = new Case();
        c3.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 11, 11, 0));
        far.put(c1);
       
        // Case 3 block
        Set c3set = new Set();
        c3set.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 13, 13, 0));
        far.put(c3set);
        c3set.setApplyTo("b");
        c3set.setValue("case3");       
       
        Set c3set2 = new Set();
        c3set2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 14, 14, 0));
        far.put(c3set2);
        c3set2.setApplyTo("c3");
        c3set2.setValue("case3");
       
        c3.setBlocks(Arrays.asList(new Block[] { c3set, c3set2 }));

        Set afterSet = new Set();
        afterSet.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 15, 15, 0));
        far.put(afterSet);
        afterSet.setApplyTo("after");
        afterSet.setValue("true");

        // Add cases to switch
        ta.setCases(Arrays.asList(new Case[] { c1, c2, c3 }));
        // Add blocks to top-level sequence       
        seq.setBlocks(Arrays.asList(new Block[] { ta, afterSet }));
       
        return seq;
    }
   
    @Test
    public void testTryAllCase13() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createTryAllSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "aaa"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case3", rec.get("b").getValue())
       
        // Case 1 and case 3 was run
        assertTrue(rec.has("c1"));
        assertEquals("case1", rec.get("c1").getValue())
       
        assertFalse(rec.has("c2"));
       
        assertTrue(rec.has("c3"));
        assertEquals("case3", rec.get("c3").getValue())
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test
    public void testTryAllCase23() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createTryAllSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case3", rec.get("b").getValue())
       
        // Only case 2 was run
        assertTrue(rec.has("c2"));
        assertEquals("case2", rec.get("c2").getValue())
       
        assertFalse(rec.has("c1"));
       
        assertTrue(rec.has("c3"));
        assertEquals("case3", rec.get("c3").getValue())
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    @Test   
    public void testTryAllCase3() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createTryAllSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "ccc"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("case3", rec.get("b").getValue())
       
        // Only case 3 was run
        assertTrue(rec.has("c3"));
        assertEquals("case3", rec.get("c3").getValue());
       
        assertFalse(rec.has("c1"));
        assertFalse(rec.has("c2"));
       
        // After set was run
        assertTrue(rec.has("after"));
    }
   
    public static Sequence createBlockRefSequence1(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        // Block 1
        GenericBlock b1 = new GenericBlock();
        b1.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 1, 1, 0));
        b1.setId("b1");
        b1.setVersion("1");
       
        Set b1set = new Set();
        b1set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 2, 2, 0));
        far.put(b1set);
        b1set.setApplyTo("b");
        b1set.setValue("b1");       
       
        BlockReference br2 = new BlockReference();
        br2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 3, 3, 0));
        far.put(br2);
        br2.setId("pkg1:b2");
        br2.setVersion("1");
       
        Set b1set2 = new Set();
        b1set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 4, 4, 0));
        far.put(b1set2);
        b1set2.setApplyTo("c");
        b1set2.setValue("b1");
       
        b1.setBlocks(Arrays.asList(new Block[] { b1set, br2, b1set2 }));
       
        // Block 2
        GenericBlock b2 = new GenericBlock();
        b2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 5, 5, 0));
        b2.setId("b2");
        b2.setVersion("1");
       
        Set b2set = new Set();
        b2set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 6, 6, 0));
        far.put(b2set);
        b2set.setApplyTo("b");
        b2set.setValue("b2");
       
        Set b2set2 = new Set();
        b2set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 7, 7, 0));
        far.put(b2set2);
        b2set2.setApplyTo("d");
        b2set2.setValue("b2");
       
        b2.setBlocks(Arrays.asList(new Block[] { b2set, b2set2 }));
        br2.setReferredBlock(b2);
       
       
        BlockReference br1 = new BlockReference();
        br1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(br1);
        br1.setId("pkg1:b1");
        br1.setVersion("1");
       
        br1.setReferredBlock(b1);
        seq.setBlocks(Arrays.asList(new Block[] { br1 }));
       
        return seq;      
    }
   
    @Test
    public void testBlockReference1() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createBlockRefSequence1(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue(rec.has("b"));
        assertEquals("b2", rec.get("b").getValue());
        assertTrue(rec.has("c"));
        assertEquals("b1", rec.get("c").getValue());
        assertTrue(rec.has("d"));
        assertEquals("b2", rec.get("d").getValue());
    }
   
    public static Sequence createBlockRefSuppressErrorSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        // Block 1
        GenericBlock b1 = new GenericBlock();
        b1.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 1, 1, 0));
        b1.setId("b1");
        b1.setVersion("1");
       
        Set b1set = new Set();
        b1set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 2, 2, 0));
        far.put(b1set);
        b1set.setApplyTo("b");
        b1set.setValue("b1");       
       
        BlockReference br2 = new BlockReference();
        br2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 3, 3, 0));
        far.put(br2);
        br2.setId("pkg1:b2");
        br2.setVersion("1");
       
        Set b1set2 = new Set();
        b1set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 4, 4, 0));
        far.put(b1set2);
        b1set2.setApplyTo("c");
        b1set2.setValue("b1");
       
        b1.setBlocks(Arrays.asList(new Block[] { b1set, br2, b1set2 }));
       
        // Block 2
        GenericBlock b2 = new GenericBlock();
        b2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 5, 5, 0));
        b2.setId("b2");
        b2.setVersion("1");
       
        Check b2check = new Check();
        b2check.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 6, 6, 0));
        far.put(b2check);
       
        EqualsConstraint equals = new EqualsConstraint();
        equals.setApplyTo("a");
        equals.setValue("xxx");
        b2check.setConstraints(Arrays.asList(new Constraint[] { equals }));
       
        Set b2set = new Set();
        b2set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 6, 6, 0));
        far.put(b2set);
        b2set.setApplyTo("b");
        b2set.setValue("b2");
       
        Set b2set2 = new Set();
        b2set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 7, 7, 0));
        far.put(b2set2);
        b2set2.setApplyTo("d");
        b2set2.setValue("b2");
       
        b2.setBlocks(Arrays.asList(new Block[] { b2check, b2set, b2set2 }));
        br2.setReferredBlock(b2);
       
       
        BlockReference br1 = new BlockReference();
        br1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(br1);
        br1.setId("pkg1:b1");
        br1.setVersion("1");
       
        br1.setReferredBlock(b1);
        seq.setBlocks(Arrays.asList(new Block[] { br1 }));
       
        return seq;      
    }

    @Test
    public void testBlockReferenceSupressError() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createBlockRefSuppressErrorSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        assertTrue("Check fields set by b1", rec.has("b"));
        assertEquals("Check fields set by b1", "b1", rec.get("b").getValue());
       
        assertTrue("Check fields set by b1", rec.has("c"));
        assertEquals("Check fields set by b1", "b1", rec.get("c").getValue());
       
        assertFalse("Check that b2 did not set fields", rec.has("d"));
    }

    public static Sequence createBlockRefPropagateErrorSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        // Block 1
        GenericBlock b1 = new GenericBlock();
        b1.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 1, 1, 0));
        b1.setId("b1");
        b1.setVersion("1");
       
        Set b1set = new Set();
        b1set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 2, 2, 0));
        far.put(b1set);
        b1set.setApplyTo("b");
        b1set.setValue("b1");       
       
        BlockReference br2 = new BlockReference();
        br2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 3, 3, 0));
        far.put(br2);
        br2.setId("pkg1:b2");
        br2.setVersion("1");
        br2.setPropagateFailure(true);
       
        Set b1set2 = new Set();
        b1set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 4, 4, 0));
        far.put(b1set2);
        b1set2.setApplyTo("c");
        b1set2.setValue("b1");
       
        b1.setBlocks(Arrays.asList(new Block[] { b1set, br2, b1set2 }));
       
        // Block 2
        GenericBlock b2 = new GenericBlock();
        b2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 5, 5, 0));
        b2.setId("b2");
        b2.setVersion("1");
       
        Check b2check = new Check();
        b2check.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 6, 6, 0));
        far.put(b2check);
       
        EqualsConstraint equals = new EqualsConstraint();
        equals.setApplyTo("a");
        equals.setValue("xxx");
        b2check.setConstraints(Arrays.asList(new Constraint[] { equals }));
       
        Set b2set = new Set();
        b2set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 7, 7, 0));
        far.put(b2set);
        b2set.setApplyTo("b");
        b2set.setValue("b2");
       
        Set b2set2 = new Set();
        b2set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 8, 8, 0));
        far.put(b2set2);
        b2set2.setApplyTo("d");
        b2set2.setValue("b2");
       
        b2.setBlocks(Arrays.asList(new Block[] { b2check, b2set, b2set2 }));
        br2.setReferredBlock(b2);
       
       
        BlockReference br1 = new BlockReference();
        br1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(br1);
        br1.setId("pkg1:b1");
        br1.setVersion("1");
       
        br1.setReferredBlock(b1);
        seq.setBlocks(Arrays.asList(new Block[] { br1 }));
       
        return seq;      
    }

    @Test
    public void createBlockRefPropagateErrorSequence() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createBlockRefPropagateErrorSequence(far);
       
        Record rec = new RecordImpl();
        rec.add(new Field("a", "bbb"));
       
        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);
       
        // Check fields set by b1 before reference
        assertTrue("Check fields set by b1 before reference", rec.has("b"));
        assertEquals("Check fields set by b1 before reference", "b1", rec.get("b").getValue());
       
        // Check that field after reference was not set
        assertFalse("Check that field after reference was not set", rec.has("c"));
       
        // Check that b2 did not set fields
        assertFalse("Check that b2 did not set fields", rec.has("d"));
    }

    public static Sequence createMatchExtractSequence(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);
       
        MatchExtract me = new MatchExtract();
        me.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(me);
       
        me.setApplyTo("a");
        me.setRegexp("^(.)(.)(.)$");
       
        Copy copy1 = new Copy();
        copy1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 3, 3, 0));
        far.put(copy1);
        copy1.setApplyTo("var1");
        copy1.setFrom("$1");
       
        Copy copy2 = new Copy();
        copy2.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 4, 4, 0));
        far.put(copy1);
        copy2.setApplyTo("var2");
        copy2.setFrom("$2");
       
        Copy copy3 = new Copy();
        copy3.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 5, 5, 0));
        far.put(copy1);
        copy3.setApplyTo("var3");
        copy3.setFrom("$3");

        me.setBlocks(Arrays.asList(new Block[]{copy1, copy2, copy3}));

        seq.setBlocks(Arrays.asList(new Block[]{me}));

        return seq;
    }

    @Test
    public void testMatchExtract() throws FailException, FilterException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createMatchExtractSequence(far);

        Record rec = new RecordImpl();
        rec.add(new Field("a", "abc"));

        Kernel kernel = new Kernel(tested, far, null);
        kernel.process(rec);

        assertTrue("First regexp group exists.", rec.has("var1"));
        assertEquals("First regexp group is correctly extracted", "a", rec.get("var1").getValue());

        assertTrue("Second regexp group exists.", rec.has("var2"));
        assertEquals("Second regexp group is correctly extracted", "b", rec.get("var2").getValue());

        assertTrue("Third regexp group exists.", rec.has("var3"));
        assertEquals("Third regexp group is correctly extracted", "c", rec.get("var3").getValue());
    }

    @Test
    public void testFilter() throws FailException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);

        Filter filter = new Filter();
        filter.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(filter);

        seq.setBlocks(Arrays.asList(new Block[]{filter}));

        Record rec = new RecordImpl();
        rec.add(new Field("a", "abc"));

        Kernel kernel = new Kernel(seq, far, null);

        try {
            kernel.process(rec);
            fail("Filter exception not raised!");
        } catch (FilterException ex) {
            // OK
        }

    }

    @Test
    public void testMapping() throws FailException {
        FrameAddressResolver far = new FrameAddressResolver();
        Sequence tested = createMappingTestSequence1(far);
        List<Record> localCloneQueue = new ArrayList<>();

        Record record = new RecordImpl();
        record.add(new Field("a", "a1"));

        Kernel kernel = new Kernel(tested, far, localCloneQueue);

        try {
            kernel.process(record);
        } catch (FailException | FilterException e) {
            fail();
        }

        // record out test
        assertTrue("Check field exist: a", record.has("a"));
        assertEquals("Check field value: a", "b2", record.get("a").getValue());

        assertTrue("Check field exist: c", record.has("c"));
        assertEquals("Check field value: c", "ok", record.get("c").getValue());

        assertTrue("Check that another field isn't exist.", record.getFields().size() == 2);


        // test clone1:
        Record clone1 = localCloneQueue.get(1);
        assertTrue("Check field exist: b", clone1.has("b"));
        assertEquals("Check field value: b", "b3", clone1.get("b").getValue());

        assertTrue("Check field exist: f", clone1.has("f"));
        assertEquals("Check field value: f", "ok", clone1.get("f").getValue());
       
        assertTrue("Check field exist: a", clone1.has("a"));
        assertEquals("Check field value: a", "error", clone1.get("a").getValue());

        assertTrue("Check that another field isn't exist.", clone1.getFields().size() == 3);
       
        // test clone1 parent
        Record parent1 = ((MappedRecord)clone1).getParent();
        assertTrue("Check field exist: a", parent1.has("a"));
        assertEquals("Check field value: a", "a1", parent1.get("a").getValue());
       
        assertTrue("Check that another field isn't exist.", parent1.getFields().size() == 1);

       
        // test clone2:
        Record clone2 = localCloneQueue.get(0);
        assertTrue("Check field exist: b", clone2.has("b"));
        assertEquals("Check field value: b", "error", clone2.get("b").getValue());

        assertTrue("Check field exist: c", clone2.has("c"));
        assertEquals("Check field value: c", "ok", clone2.get("c").getValue());
       
        assertTrue("Check field exist: a", clone2.has("a"));
        assertEquals("Check field value: a", "error", clone2.get("a").getValue());
       
        assertTrue("Check field exist: d", clone2.has("d"));
        assertEquals("Check field value: d", "b2", clone2.get("d").getValue());
       
        assertTrue("Check field exist: e", clone2.has("e"));
        assertEquals("Check field value: e", "b2", clone2.get("e").getValue());

        assertTrue("Check that another field isn't exist.", clone2.getFields().size() == 5);
       
        // test clone2 parent
        Record parent2 = ((MappedRecord)clone2).getParent();
        assertTrue("Check field exist: b", parent2.has("b"));
        assertEquals("Check field value: b", "b1", parent2.get("b").getValue());
       
        assertTrue("Check that another field isn't exist.", parent2.getFields().size() == 1);
       
        // test clone2 parent's parent
        Record parent3 = ((MappedRecord)parent2).getParent();
        assertTrue("Check field exist: a", parent3.has("a"));
        assertEquals("Check field value: a", "a1", parent3.get("a").getValue());
       
        assertTrue("Check that another field isn't exist.", parent3.getFields().size() == 1);
       
        // test clone2 out
        try {
            kernel.process(clone2);
            // Beacause the cloned records
            if (clone2 instanceof MappedRecord) {
                record = ((MappedRecord) clone2).getAncestor();
            }
        } catch (FailException | FilterException e) {
            fail();
        }
        assertTrue("Check field exist: a", record.has("a"));
        assertEquals("Check field value: a", "b2", record.get("a").getValue());

        assertTrue("Check field exist: c", record.has("c"));
        assertEquals("Check field value: c", "ok", record.get("c").getValue());

        assertTrue("Check that another field isn't exist.", record.getFields().size() == 2);
       
        // test clone1 out
        try {
            kernel.process(clone1);
            // Beacause the cloned records
            if (clone1 instanceof MappedRecord) {
                record = ((MappedRecord) clone1).getAncestor();
            }
        } catch (FailException | FilterException e) {
            fail();
        }
        assertTrue("Check field exist: a", record.has("a"));
        assertEquals("Check field value: a", "b3", record.get("a").getValue());

        assertTrue("Check field exist: c", record.has("c"));
        assertEquals("Check field value: c", "ok", record.get("c").getValue());

        assertTrue("Check that another field isn't exist.", record.getFields().size() == 2);
       
        // test clone2 cloned record cloned by clone1 record out
        Record clone3 = localCloneQueue.get(2);
        try {
            kernel.process(clone3);
            // Beacause the cloned records
            if (clone3 instanceof MappedRecord) {
                record = ((MappedRecord) clone3).getAncestor();
            }
        } catch (FailException | FilterException e) {
            fail();
        }
        assertTrue("Check field exist: a", record.has("a"));
        assertEquals("Check field value: a", "b3", record.get("a").getValue());

        assertTrue("Check field exist: c", record.has("c"));
        assertEquals("Check field value: c", "ok", record.get("c").getValue());

        assertTrue("Check that another field isn't exist.", record.getFields().size() == 2);
    }

    public static Sequence createMappingTestSequence1(FrameAddressResolver far) {
        // Create an if sequence
        Sequence seq = new Sequence();
        seq.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 1, 1, 0));
        far.put(seq);

        // Block 1
        GenericBlock b1 = new GenericBlock();
        b1.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 1, 1, 0));
        b1.setId("b1");
        b1.setVersion("1");

        Set b1set = new Set();
        b1set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 2, 2, 0));
        far.put(b1set);
        b1set.setApplyTo("b");
        b1set.setValue("b1");

        BlockReference br2 = new BlockReference();
        br2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 3, 3, 0));
        far.put(br2);
        br2.setId("pkg1:b2");
        br2.setVersion("1");
        Mapping mapping1 = new Mapping();
        Map map1 = new Map();
        map1.setTo("d");
        map1.setFrom("b");
        mapping1.addRule(map1);
        Map map11 = new Map();
        map11.setTo("c");
        map11.setFrom("f");
        mapping1.addRule(map11);
        br2.setMapping(mapping1);

        Set b1set2 = new Set();
        b1set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 4, 4, 0));
        far.put(b1set2);
        b1set2.setApplyTo("a");
        b1set2.setValue("error");
       
        CloneRecord b1clone = new CloneRecord();
        b1clone.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 5, 5, 0));
        far.put(b1clone);
        b1clone.setFieldName("b");
        b1clone.setFieldValue("b3");

        b1.setBlocks(Arrays.asList(new Block[]{b1set, br2, b1set2, b1clone}));

        // Block 2
        GenericBlock b2 = new GenericBlock();
        b2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", null, 6, 6, 0));
        b2.setId("b2");
        b2.setVersion("1");

        Set b2set = new Set();
        b2set.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 7, 7, 0));
        far.put(b2set);
        b2set.setApplyTo("e");
        b2set.setValue("b2");

        Copy b2copy = new Copy();
        b2copy.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 8, 8, 0));
        far.put(b2copy);
        b2copy.setApplyTo("d");
        b2copy.setFrom("e");

        Set b2set2 = new Set();
        b2set2.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 9, 9, 0));
        far.put(b2set2);
        b2set2.setApplyTo("b");
        b2set2.setValue("error");

        Set b2set3 = new Set();
        b2set3.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 10, 10, 0));
        far.put(b2set2);
        b2set3.setApplyTo("a");
        b2set3.setValue("error");

        Set b2set4 = new Set();
        b2set4.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b2:1", 11, 11, 0));
        far.put(b2set4);
        b2set4.setApplyTo("c");
        b2set4.setValue("ok");
       
        CloneRecord b2clone = new CloneRecord();
        b2clone.setSourceInfo(new SourceInfo("file:///pkg1.blocks.xml", "b1:1", 12, 12, 0));
        far.put(b2clone);

        b2.setBlocks(Arrays.asList(new Block[]{b2set, b2copy, b2set2, b2set3, b2set4, b2clone}));
        br2.setReferredBlock(b2);

        BlockReference br1 = new BlockReference();
        br1.setSourceInfo(new SourceInfo("file:///dummy.xml", null, 2, 2, 0));
        far.put(br1);
        br1.setId("pkg1:b1");
        br1.setVersion("1");
        Mapping mapping0 = new Mapping();
        Map map0 = new Map();
        map0.setTo("b");
        map0.setFrom("a");
        mapping0.addRule(map0);
        Map map01 = new Map();
        map01.setTo("f");
        map01.setFrom("c");
        mapping0.addRule(map01);
        br1.setMapping(mapping0);

        br1.setReferredBlock(b1);
        seq.setBlocks(Arrays.asList(new Block[]{br1}));

        return seq;
    }
   
}
TOP

Related Classes of hu.sztaki.ilab.longneck.process.kernel.KernelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.