001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.commons.scxml.model;
018:
019: import java.net.URL;
020: import java.util.Set;
021:
022: import junit.framework.Test;
023: import junit.framework.TestCase;
024: import junit.framework.TestSuite;
025: import junit.textui.TestRunner;
026:
027: import org.apache.commons.scxml.SCXMLExecutor;
028: import org.apache.commons.scxml.SCXMLTestHelper;
029: import org.apache.commons.scxml.TriggerEvent;
030: import org.apache.commons.scxml.env.jexl.JexlContext;
031: import org.apache.commons.scxml.env.jexl.JexlEvaluator;
032: import org.apache.commons.scxml.env.jsp.ELContext;
033: import org.apache.commons.scxml.env.jsp.ELEvaluator;
034:
035: /**
036: * Unit tests {@link org.apache.commons.scxml.SCXMLExecutor}.
037: */
038: public class DatamodelTest extends TestCase {
039: /**
040: * Construct a new instance of SCXMLExecutorTest with
041: * the specified name
042: */
043: public DatamodelTest(String name) {
044: super (name);
045: }
046:
047: public static Test suite() {
048: TestSuite suite = new TestSuite(DatamodelTest.class);
049: suite.setName("SCXML Executor Tests");
050: return suite;
051: }
052:
053: // Test data
054: private URL datamodel01jexl, datamodel02jexl, datamodel01jsp,
055: datamodel02jsp;
056: private SCXMLExecutor exec01, exec02;
057:
058: /**
059: * Set up instance variables required by this test case.
060: */
061: public void setUp() {
062: datamodel01jexl = this .getClass().getClassLoader().getResource(
063: "org/apache/commons/scxml/env/jexl/datamodel-01.xml");
064: datamodel02jexl = this .getClass().getClassLoader().getResource(
065: "org/apache/commons/scxml/env/jexl/datamodel-02.xml");
066: datamodel01jsp = this .getClass().getClassLoader().getResource(
067: "org/apache/commons/scxml/env/jsp/datamodel-01.xml");
068: datamodel02jsp = this .getClass().getClassLoader().getResource(
069: "org/apache/commons/scxml/env/jsp/datamodel-02.xml");
070: }
071:
072: /**
073: * Tear down instance variables required by this test case.
074: */
075: public void tearDown() {
076: datamodel01jexl = datamodel02jexl = datamodel01jsp = datamodel02jsp = null;
077: }
078:
079: /**
080: * Test the stateless model, simultaneous executions
081: */
082: public void testDatamodelSimultaneousJexl() {
083: exec01 = SCXMLTestHelper.getExecutor(datamodel01jexl,
084: new JexlContext(), new JexlEvaluator());
085: assertNotNull(exec01);
086: exec02 = SCXMLTestHelper.getExecutor(datamodel01jexl,
087: new JexlContext(), new JexlEvaluator());
088: assertNotNull(exec02);
089: assertFalse(exec01 == exec02);
090: runtest();
091: }
092:
093: public void testDatamodelSimultaneousJsp() {
094: exec01 = SCXMLTestHelper.getExecutor(datamodel01jsp,
095: new ELContext(), new ELEvaluator());
096: assertNotNull(exec01);
097: exec02 = SCXMLTestHelper.getExecutor(datamodel01jsp,
098: new ELContext(), new ELEvaluator());
099: assertNotNull(exec02);
100: assertFalse(exec01 == exec02);
101: runtest();
102: }
103:
104: public void testDatamodelNamespacePrefixedXPaths() {
105: exec01 = SCXMLTestHelper.getExecutor(datamodel02jexl,
106: new JexlContext(), new JexlEvaluator());
107: assertNotNull(exec01);
108: exec02 = SCXMLTestHelper.getExecutor(datamodel02jsp,
109: new ELContext(), new ELEvaluator());
110: assertNotNull(exec02);
111: assertFalse(exec01 == exec02);
112: runtest();
113: }
114:
115: private void runtest() {
116: try {
117: //// Interleaved
118: // exec01
119: Set currentStates = exec01.getCurrentStatus().getStates();
120: assertEquals(1, currentStates.size());
121: assertEquals("ten", ((State) currentStates.iterator()
122: .next()).getId());
123: exec01 = SCXMLTestHelper
124: .testExecutorSerializability(exec01);
125: currentStates = fireEvent("ten.done", exec01);
126: assertEquals(1, currentStates.size());
127: assertEquals("twenty", ((State) currentStates.iterator()
128: .next()).getId());
129: // exec02
130: currentStates = exec02.getCurrentStatus().getStates();
131: assertEquals(1, currentStates.size());
132: assertEquals("ten", ((State) currentStates.iterator()
133: .next()).getId());
134: // exec01
135: currentStates = fireEvent("twenty.done", exec01);
136: assertEquals(1, currentStates.size());
137: assertEquals("thirty", ((State) currentStates.iterator()
138: .next()).getId());
139: exec01 = SCXMLTestHelper
140: .testExecutorSerializability(exec01);
141: // exec02
142: currentStates = fireEvent("ten.done", exec02);
143: assertEquals(1, currentStates.size());
144: assertEquals("twenty", ((State) currentStates.iterator()
145: .next()).getId());
146: exec02 = SCXMLTestHelper
147: .testExecutorSerializability(exec02);
148: currentStates = fireEvent("twenty.done", exec02);
149: assertEquals(1, currentStates.size());
150: assertEquals("thirty", ((State) currentStates.iterator()
151: .next()).getId());
152: currentStates = fireEvent("thirty.done", exec02);
153: assertEquals(1, currentStates.size());
154: assertEquals("forty", ((State) currentStates.iterator()
155: .next()).getId());
156: // exec01
157: currentStates = fireEvent("thirty.done", exec01);
158: assertEquals(1, currentStates.size());
159: assertEquals("forty", ((State) currentStates.iterator()
160: .next()).getId());
161: } catch (Exception e) {
162: fail(e.getMessage());
163: }
164: }
165:
166: private Set fireEvent(String name, SCXMLExecutor exec) {
167: TriggerEvent[] evts = { new TriggerEvent(name,
168: TriggerEvent.SIGNAL_EVENT, null) };
169: try {
170: exec.triggerEvents(evts);
171: } catch (Exception e) {
172: fail(e.getMessage());
173: }
174: return exec.getCurrentStatus().getStates();
175: }
176:
177: public static void main(String args[]) {
178: TestRunner.run(suite());
179: }
180: }
|