/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and others contributors as indicated
* by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package org.jboss.soa.bpel.bpel2svg;
import junit.framework.TestCase;
import org.wso2.carbon.bpel.ui.bpel2svg.ActivityInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.AssignInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.IfInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.ReceiveInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.ReplyInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.SVGInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.SequenceInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.ThrowInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.WhileInterface;
import org.wso2.carbon.bpel.ui.bpel2svg.ActivityInterface.ActivityState;
public class BPEL2SVGUtilTest extends TestCase {
public void testGenerateEventWorkFlowNoTrace() {
java.io.InputStream is=ClassLoader.getSystemResourceAsStream("bpel/EventWorkFlow.bpel");
if (is == null) {
fail("BPEL process not found");
}
SVGInterface svg=null;
try {
svg = BPEL2SVGUtil.generate(is);
if (svg == null) {
fail("Failed to get SVGInterface");
}
} catch(Exception e) {
fail("Failed: "+e);
}
// Serialize
SVGImageTransformer transformer=BPEL2SVGUtil.getTransformer(BPEL2SVGUtil.SVG_IMAGE);
String svgxml=null;
try {
java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
transformer.transform(svg, os);
os.close();
svgxml = new String(os.toByteArray());
} catch(Exception e) {
e.printStackTrace();
fail("Failed to generate SVG XML doc: "+e);
}
// Compare to saved svg image
try {
java.io.InputStream svgfile=ClassLoader.getSystemResourceAsStream("svg/EventWorkFlow-no-trace.svg");
byte[] b=new byte[svgfile.available()];
svgfile.read(b);
svgfile.close();
String savedsvg=new String(b);
if (savedsvg.equals(svgxml) == false) {
showDiffs(savedsvg, svgxml);
fail("SVG images did not match");
}
} catch(Exception e) {
fail("Compare failed: "+e);
}
}
public void testGenerateMathNoTrace() {
java.io.InputStream is=ClassLoader.getSystemResourceAsStream("bpel/Math.bpel");
if (is == null) {
fail("BPEL process not found");
}
SVGInterface svg=null;
try {
svg = BPEL2SVGUtil.generate(is);
if (svg == null) {
fail("Failed to get SVGInterface");
}
} catch(Exception e) {
fail("Failed: "+e);
}
// Serialize
SVGImageTransformer transformer=BPEL2SVGUtil.getTransformer(BPEL2SVGUtil.SVG_IMAGE);
String svgxml=null;
try {
java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
transformer.transform(svg, os);
os.close();
svgxml = new String(os.toByteArray());
} catch(Exception e) {
fail("Failed to generate SVG XML doc: "+e);
}
// Compare to saved svg image
try {
java.io.InputStream svgfile=ClassLoader.getSystemResourceAsStream("svg/Math-no-trace.svg");
byte[] b=new byte[svgfile.available()];
svgfile.read(b);
svgfile.close();
String savedsvg=new String(b);
if (savedsvg.equals(svgxml) == false) {
showDiffs(savedsvg, svgxml);
fail("SVG images did not match");
}
} catch(Exception e) {
fail("Compare failed: "+e);
}
}
/*
public void testGenerateMathRecvCompletedAssignFailed() {
java.io.InputStream is=ClassLoader.getSystemResourceAsStream("bpel/Math.bpel");
if (is == null) {
fail("BPEL process not found");
}
SVGInterface svg=null;
try {
svg = BPEL2SVGUtil.generate(is);
if (svg == null) {
fail("Failed to get SVGInterface");
}
} catch(Exception e) {
fail("Failed: "+e);
}
ActivityInterface seq=svg.getActivityAtLineNumber(53);
ActivityInterface recv=svg.getActivityAtLineNumber(61);
ActivityInterface assign=svg.getActivityAtLineNumber(64);
seq.setState(ActivityState.Active);
recv.setState(ActivityState.Completed);
assign.setState(ActivityState.Active);
// Serialize
SVGImageTransformer transformer=BPEL2SVGUtil.getTransformer(BPEL2SVGUtil.SVG_IMAGE);
String svgxml=null;
try {
java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
transformer.transform(svg, os);
os.close();
svgxml = new String(os.toByteArray());
} catch(Exception e) {
fail("Failed to generate SVG XML doc: "+e);
}
// Compare to saved svg image
try {
java.io.InputStream svgfile=ClassLoader.getSystemResourceAsStream("svg/Math-recv-completed-assign-active.svg");
byte[] b=new byte[svgfile.available()];
svgfile.read(b);
svgfile.close();
String savedsvg=new String(b);
if (savedsvg.equals(svgxml) == false) {
showDiffs(savedsvg, svgxml);
fail("SVG images did not match");
}
} catch(Exception e) {
fail("Compare failed: "+e);
}
}
public void testGenerateMathRecvCompletedAssignActive() {
java.io.InputStream is=ClassLoader.getSystemResourceAsStream("bpel/Math.bpel");
if (is == null) {
fail("BPEL process not found");
}
SVGInterface svg=null;
try {
svg = BPEL2SVGUtil.generate(is);
if (svg == null) {
fail("Failed to get SVGInterface");
}
} catch(Exception e) {
fail("Failed: "+e);
}
ActivityInterface seq=svg.getActivityAtLineNumber(53);
ActivityInterface recv=svg.getActivityAtLineNumber(61);
ActivityInterface assign=svg.getActivityAtLineNumber(64);
seq.setState(ActivityState.Failed);
recv.setState(ActivityState.Completed);
assign.setState(ActivityState.Failed);
// Serialize
SVGImageTransformer transformer=BPEL2SVGUtil.getTransformer(BPEL2SVGUtil.SVG_IMAGE);
String svgxml=null;
try {
java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
transformer.transform(svg, os);
os.close();
svgxml = new String(os.toByteArray());
} catch(Exception e) {
fail("Failed to generate SVG XML doc: "+e);
}
// Compare to saved svg image
try {
java.io.InputStream svgfile=ClassLoader.getSystemResourceAsStream("svg/Math-recv-completed-assign-failed.svg");
byte[] b=new byte[svgfile.available()];
svgfile.read(b);
svgfile.close();
String savedsvg=new String(b);
if (savedsvg.equals(svgxml) == false) {
showDiffs(savedsvg, svgxml);
fail("SVG images did not match");
}
} catch(Exception e) {
fail("Compare failed: "+e);
}
}
*/
public void testMathGetLineNum53Seq() {
checkActivityAtLine("bpel/Math.bpel", 53, SequenceInterface.class);
}
public void testMathGetLineNum61PickReceive() {
checkActivityAtLine("bpel/Math.bpel", 61, ReceiveInterface.class);
}
public void testMathGetLineNum64Assign() {
checkActivityAtLine("bpel/Math.bpel", 64, AssignInterface.class);
}
public void testMathGetLineNum72AssignStill() {
checkActivityAtLine("bpel/Math.bpel", 72, AssignInterface.class);
}
public void testMathGetLineNum88Switch() {
checkActivityAtLine("bpel/Math.bpel", 88, IfInterface.class);
}
public void testMathGetLineNum118Sequence() {
checkActivityAtLine("bpel/Math.bpel", 118, SequenceInterface.class);
}
public void testMathGetLineNum119Assign() {
checkActivityAtLine("bpel/Math.bpel", 119, AssignInterface.class);
}
public void testMathGetLineNum132Sequence() {
checkActivityAtLine("bpel/Math.bpel", 132, SequenceInterface.class);
}
public void testMathGetLineNum133Switch() {
checkActivityAtLine("bpel/Math.bpel", 133, IfInterface.class);
}
public void testMathGetLineNum146Sequence() {
checkActivityAtLine("bpel/Math.bpel", 146, SequenceInterface.class);
}
public void testMathGetLineNum147Assign() {
checkActivityAtLine("bpel/Math.bpel", 147, AssignInterface.class);
}
public void testMathGetLineNum168Throw() {
checkActivityAtLine("bpel/Math.bpel", 168, ThrowInterface.class);
}
public void testMathGetLineNum177Sequence() {
checkActivityAtLine("bpel/Math.bpel", 177, SequenceInterface.class);
}
public void testMathGetLineNum178Assign() {
checkActivityAtLine("bpel/Math.bpel", 178, AssignInterface.class);
}
public void testMathGetLineNum186While() {
checkActivityAtLine("bpel/Math.bpel", 186, WhileInterface.class);
}
public void testMathGetLineNum188Assign() {
checkActivityAtLine("bpel/Math.bpel", 188, AssignInterface.class);
}
public void testMathGetLineNum229Assign() {
checkActivityAtLine("bpel/Math.bpel", 229, AssignInterface.class);
}
public void testMathGetLineNum253Reply() {
checkActivityAtLine("bpel/Math.bpel", 253, ReplyInterface.class);
}
public void checkActivityAtLine(String filename, int lineNo, Class<?> type) {
java.io.InputStream is=ClassLoader.getSystemResourceAsStream(filename);
if (is == null) {
fail("BPEL process '"+filename+"' not found");
}
SVGInterface svg=null;
try {
svg = BPEL2SVGUtil.generate(is);
if (svg == null) {
fail("Failed to get SVGInterface");
}
} catch(Exception e) {
fail("Failed: "+e);
}
ActivityInterface act=svg.getActivityAtLineNumber(lineNo);
if (act == null) {
fail("Failed to get '"+type.getName()+"' at line "+lineNo);
}
if (type.isAssignableFrom(act.getClass()) == false) {
fail("Returned activity is not a '"+type.getName()+"'");
}
}
protected void showDiffs(String savedsvg, String svgxml) {
System.err.println("svgxml len="+svgxml.length()+", saved len="+savedsvg.length());
int mismatch=0;
for (int i=0; i < svgxml.length(); i++) {
if (savedsvg.charAt(i) != svgxml.charAt(i)) {
System.out.println("Mismatch at "+i+" ("+savedsvg.charAt(i)+" != "+svgxml.charAt(i)+")");
System.out.println(" "+savedsvg.substring(i-20, i+20)+" : "+svgxml.substring(i-20, i+20));
if (mismatch++ > 10) {
break;
}
}
}
}
}