CaseTest.java :  » Workflow-Engines » Bossa » com » bigbross » bossa » wfnet » Java Open Source

Java Open Source » Workflow Engines » Bossa 
Bossa » com » bigbross » bossa » wfnet » CaseTest.java
/*
 * Bossa Workflow System
 *
 * $Id: CaseTest.java,v 1.46 2004/03/03 17:19:03 gdvieira Exp $
 *
 * Copyright (C) 2003,2004 OpenBR Sistemas S/C Ltda.
 *
 * This file is part of Bossa.
 *
 * Bossa is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

package com.bigbross.bossa.wfnet;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import com.bigbross.bossa.BossaException;
import com.bigbross.bossa.BossaTestUtil;
import com.bigbross.bossa.resource.Resource;
import com.bigbross.bossa.resource.ResourceUtil;

public class CaseTest extends TestCase {

    private Resource jdoe;

    public CaseTest(String name) {
  super(name);
    }

    protected void setUp() {
        jdoe = ResourceUtil.createResource("jdoe");
    }

    static void sameState(Map expected, Map actual) {
        int matches = 0;
        for (Iterator i = actual.keySet().iterator(); i.hasNext(); ) {
            String key = (String) i.next();
            if (expected.get(key) != null) {
                assertEquals(expected.get(key), actual.get(key));
                matches++; 
            } else {
                assertEquals(new Integer(0), actual.get(key)); 
            }
        }
        assertEquals(matches, expected.size());
    } 

    public void testGetWorkItem() throws Exception {
        Case caze = WFNetUtil.createCase();
        
        WorkItem wi = caze.getWorkItem("a");
        assertNotNull(wi);
        assertEquals("a", wi.getId());
        assertNull(caze.getWorkItem("invalid id"));
    }

    public void testGetState() throws Exception {
        Case caze = WFNetUtil.createCase();

        Map expected = new HashMap();
        expected.put("A", new Integer(1));
        expected.put("B", new Integer(0));
        expected.put("C", new Integer(0));
        expected.put("D", new Integer(0));
        expected.put("E", new Integer(0));
        expected.put("F", new Integer(0));
        expected.put("G", new Integer(0));
        expected.put("H", new Integer(0));

        CaseTest.sameState(expected, caze.getState());
    }

    public void testOpenClose() throws Exception {
        Case caze = WFNetUtil.createCase();

        Map expected = new HashMap();
        expected.put("B", new Integer(1));

        assertTrue(WFNetUtil.fire(caze, "a", null));

        CaseTest.sameState(expected, caze.getState());
    }

    public void testInvalidOpen() throws Exception {
        Case caze = WFNetUtil.createCase();
        
        Map start = caze.getState();
        
        assertFalse(WFNetUtil.fire(caze, "b", null));

        CaseTest.sameState(start, caze.getState());
    }

    public void testOpenCancel() throws Exception {
        Case caze = WFNetUtil.createCase();
        
        Map start = caze.getState();

        Activity act = caze.open(caze.getWorkItem("a"), jdoe);
        assertNotNull(act);
        assertTrue(caze.cancel(act));

        CaseTest.sameState(start, caze.getState());
    }
    
    public void testInvalidCloseCancel() throws Exception {
        Case caze = WFNetUtil.createCase();
        
        Map expected = new HashMap();
        expected.put("B", new Integer(1));
        Activity act = caze.open(caze.getWorkItem("a"), jdoe);
        assertNotNull(act);
        assertTrue(caze.close(act, null));
        
        CaseTest.sameState(expected, caze.getState());
        
        assertFalse(caze.close(act, null));
        CaseTest.sameState(expected, caze.getState());
        
        assertFalse(caze.cancel(act));
        CaseTest.sameState(expected, caze.getState());
    }

    public void testAttributes() throws Exception {
        Case caze = WFNetUtil.createCase();
        Map attributes = caze.getAttributes();
        
        assertEquals(4, attributes.size());
        assertEquals(new Boolean(false), attributes.get("SOK"));
        assertEquals(new Boolean(false), attributes.get("DIR"));
        assertEquals("", attributes.get("ADIR"));
        assertEquals(new Boolean(false), attributes.get("OK"));
    }
    
    public void testEdgeEvaluation() throws Exception {
        Case caze = WFNetUtil.createCase();
        caze.declare("SOK", new Boolean(true));
        caze.declare("DIR", new Boolean(false));
        caze.declare("AVL", new Integer(3));

        Edge e1 = Edge.newOutput(null, "AVL * SOK || DIR");
        Edge e2 = Edge.newInput(null, "AVL * SOK && DIR");

        assertEquals(3, e1.eval(caze));
        assertEquals(0, e2.eval(caze));
        
        e1 = Edge.newInput(null, "AVL * XXX && DIR");
        try {
            e1.eval(caze);
            fail("Undetected undeclared attribute.");
        } catch (EvaluationException e) {
        }
    }

    public void testEdgeOrientation() throws Exception {
        Case caze = WFNetUtil.createCase();

        Edge output = Edge.newOutput(null, "1");
        Edge input = Edge.newInput(null, "2");

        assertEquals(1, output.output(caze));
        assertEquals(2, input.input(caze));
        assertEquals(0, output.input(caze));
        assertEquals(0, input.output(caze));
    }

    public void testMachineGun() throws Exception {
        Case caze = WFNetUtil.createCase();
        HashMap attributes = new HashMap();
  attributes.put("SOK", new Boolean(true));
        attributes.put("DIR", new Boolean(true));
        attributes.put("ADIR", "OK");

        Map expected = new HashMap();
        expected.put("G", new Integer(1));

        assertTrue(WFNetUtil.fire(caze, "a", attributes));
        assertTrue(WFNetUtil.fire(caze, "b", null));
        assertTrue(WFNetUtil.fire(caze, "c", null));
        assertTrue(WFNetUtil.fire(caze, "d", null));
        assertTrue(WFNetUtil.fire(caze, "e", null));

        sameState(expected, caze.getState());
    }

    public void testSelfLoop() throws Exception {
        CaseType caseType = new CaseType("selfloop");
        Place A = caseType.registerPlace("A", 1);
        Place B = caseType.registerPlace("B");
        Transition a = caseType.registerTransition("a", "boss");
        a.input(A,  "1");
        a.output(B, "1");
        a.output(A, "1");
        caseType.buildTemplate(null);
        Case caze = caseType.openCaseImpl(null);
        
        Map expected = new HashMap();
        expected.put("A", new Integer(1));
        expected.put("B", new Integer(1));

        assertTrue(WFNetUtil.fire(caze, "a", null));

        sameState(expected, caze.getState());
    }

    public void testZeroTimeout() throws Exception {
        Case caze = WFNetUtil.createAutoFireCase();

        Map expected = new HashMap();
        expected.put("A", new Integer(1));
        expected.put("B", new Integer(0));
        expected.put("C", new Integer(0));
        sameState(expected, caze.getState());

        expected = new HashMap();
        expected.put("A", new Integer(0));
        expected.put("B", new Integer(0));
        expected.put("C", new Integer(1));
        assertTrue(WFNetUtil.fire(caze, "a", null));
        sameState(expected, caze.getState());

        /* Add a test to stress nested auto firing going beyond case closing. */
        assertEquals(0, caze.getCaseType().getCases().size());
    }

    public void testSetState() throws Exception {
        Case caze = WFNetUtil.createCase();

        Map newState = new HashMap();
        newState.put("A", new Integer(0));
        newState.put("B", new Integer(0));
        newState.put("C", new Integer(0));
        newState.put("D", new Integer(0));
        newState.put("E", new Integer(1));
        newState.put("F", new Integer(0));
        newState.put("G", new Integer(0));
        newState.put("H", new Integer(0));

        caze.setStateImpl(newState);
        CaseTest.sameState(newState, caze.getState());
        
        assertFalse(caze.getWorkItem("a").isFireable());
        List workItens = caze.getWorkItems();
        assertEquals(1, workItens.size());
        assertEquals("d", ((WorkItem) workItens.get(0)).getId());

        newState = new HashMap();
        newState.put("A", new Integer(1));

        caze.setStateImpl(newState);
        assertTrue(caze.getWorkItem("a").isFireable());
        assertEquals(2, caze.getWorkItems().size());
    }
    
    public void testSetStateZeroTimeout() throws Exception {
        Case caze = WFNetUtil.createAutoFireCase();

        Map newState = new HashMap();
        newState.put("A", new Integer(0));
        newState.put("B", new Integer(1));
        newState.put("C", new Integer(0));
        
        Map expected = new HashMap();
        expected.put("A", new Integer(0));
        expected.put("B", new Integer(0));
        expected.put("C", new Integer(1));

        caze.setStateImpl(newState);
        sameState(expected, caze.getState());
    }

    public void testAutomaticCreation() throws Exception {
        CaseType caseType = BossaTestUtil.createCaseType("test");
        WorkItem wi = (WorkItem) caseType.getWorkItems(true).get(0);
        Case template = wi.getCase();

        Activity a1 = template.open(wi, jdoe);
        Case caze = a1.getCase();
        assertEquals(1, caze.getId());

        assertTrue(caze.cancel(a1));

        Activity a2 = caze.open(caze.getWorkItem("a"), jdoe);
        assertEquals(1, a2.getCase().getId());
    }

    public void testWorkItensList() throws Exception {
        Case caze = WFNetUtil.createCase(new int[] {1,1,0,0,0,0,0,0});
        List workItens = caze.getWorkItems();
        assertEquals(2, workItens.size());

        WorkItem w0 = (WorkItem) workItens.get(0);
        WorkItem w1 = (WorkItem) workItens.get(1);
        assertNotSame(w0, w1);
        assertTrue("a".equals(w0.getId()) || "a".equals(w1.getId()));
        assertTrue("b".equals(w0.getId()) || "b".equals(w1.getId()));
    }
    
    public void testCanPerformWorkItem() throws BossaException {
        CaseType caseType = new CaseType("canPerform");
        Place A = caseType.registerPlace("A", 1);
        Transition a = caseType.registerTransition("a", "bosses");
        Transition b = caseType.registerTransition("b", "");
        Transition c = caseType.registerTransition("c", null);
        a.input(A,  "1");
        b.input(A,  "1");
        c.input(A,  "1");
        caseType.buildTemplate(null);
        Resource mary = ResourceUtil.createResource("mary");
        Resource bosses = (Resource) caseType.getResources().get(0);
        assertEquals("bosses", bosses.getId());
        bosses.includeImpl(jdoe, false);
        
        Case caze = caseType.openCaseImpl(null);
        assertTrue(caze.getWorkItem("a").canBePerformedBy(jdoe));
        assertFalse(caze.getWorkItem("a").canBePerformedBy(mary));
        assertTrue(caze.getWorkItem("b").canBePerformedBy(jdoe));
        assertTrue(caze.getWorkItem("c").canBePerformedBy(jdoe));
    }

    public void testGetActivity() throws Exception {
        Case caze = WFNetUtil.createCase();
        WorkItem wi = caze.getWorkItem("a");
        caze.open(wi, jdoe);

        Activity act = caze.getActivity(1);
        assertNotNull(act);
        assertEquals("a", act.getWorkItemId());
        assertNull(caze.getActivity(2));
    }

    public void testActivitiesList() throws Exception {
        Case caze = WFNetUtil.createCase(new int[] {2,0,0,0,0,0,0,0});
        WorkItem wi = caze.getWorkItem("a");

        caze.open(wi, jdoe);
        assertEquals(1, caze.getActivities().size());

        caze.open(wi, jdoe);
        List activities = caze.getActivities();
        assertEquals(2, activities.size());

        Activity a0 = (Activity) activities.get(0);
        Activity a1 = (Activity) activities.get(1);
        assertNotSame(a0, a1);
        assertSame(a0.getTransition(), a1.getTransition());
        assertEquals(jdoe, a0.getResource());
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.