package org.modeldriven.fuml.test; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Hashtable; import javax.management.MBeanServerConnection; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import fUML.Semantics.Classes.Kernel.BooleanValue; import fUML.Semantics.Classes.Kernel.IntegerValue; import fUML.Semantics.Classes.Kernel.RealValue; import fUML.Semantics.Classes.Kernel.StringValue; import fUML.Semantics.Classes.Kernel.UnlimitedNaturalValue; import fUML.Semantics.Classes.Kernel.Value; import fUML.Semantics.Classes.Kernel.ValueList; import fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValue; import fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList; import fUML.Syntax.Classes.Kernel.Parameter; /** */ public abstract class FUMLTest extends TestCase { protected Log log = LogFactory.getLog(getClass().getName()); public FUMLTest() { } public FUMLTest(String name) { super(name); } /** Get the MBeanServerConnection from JNDI */ public MBeanServerConnection getServer() throws NamingException { throw new RuntimeException("not implemented"); } /** True, if -Djbossws.integration.target=jboss?? */ public boolean isTargetJBoss() { return true; } /** True, if -Djbossws.integration.target=tomcat */ public boolean isTargetTomcat() { return false; } /** * Get the client's env context for a given name. */ protected InitialContext getInitialContext(String clientName) throws NamingException { InitialContext iniCtx = new InitialContext(); Hashtable env = iniCtx.getEnvironment(); env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming.client"); env.put("j2ee.clientName", clientName); return new InitialContext(env); } /** * Get the client's env context */ protected InitialContext getInitialContext() throws NamingException { return getInitialContext("jbossws-client"); } public boolean hasJDK15() { try { Class.forName("java.lang.Enum"); return true; } catch (ClassNotFoundException ex) { return false; } } public static String getServerHost() { String hostName = System.getProperty("jbosstest.host.name", "localhost"); return hostName; } public static void assertEqualValues(String label, ParameterValueList parameterValues, String parameterName, Object...expectedValues) throws Exception { for (ParameterValue parameterValue: parameterValues) { Parameter parameter = parameterValue.parameter; if (parameter != null && parameterName.equals(parameter.name)) { assertEqualValues(label, parameterValue, expectedValues); return; } } fail(label + ": No such parameter."); } public static void assertEqualValues(String label, ParameterValue parameterValue, Object... expectedValues) throws Exception { assertEqualValues(label, parameterValue.values, expectedValues); } public static void assertEqualValues(String label, ValueList values, Object... expectedValues) throws Exception { assertEquals(label + ": values.size()", expectedValues.length, values.size()); for (int i = 0; i < values.size(); i++) { Value value = values.get(i); assertEquals(label + ": value[" + i + "]", expectedValues[i], valueOf(value)); } } public static Object valueOf(Value value) { if (value instanceof BooleanValue) { return ((BooleanValue)value).value; } else if (value instanceof IntegerValue) { return ((IntegerValue)value).value; } else if (value instanceof RealValue) { return ((RealValue)value).value; } else if (value instanceof UnlimitedNaturalValue) { return ((UnlimitedNaturalValue)value).value.naturalValue; } else if (value instanceof StringValue) { return ((StringValue)value).value; } else { return null; } } public static void assertAllEquals(String label, Value expectedValue, ValueList values) { for (int i = 0; i < values.size(); i++) { // NOTE: Uses fUML-specific Value::equals method. assertTrue(label + "value[" + i + "]", values.get(i).equals(expectedValue)); } } public static void assertEquals(Object exp, Object was) { if (exp instanceof Object[] && was instanceof Object[]) assertEqualsArray((Object[]) exp, (Object[]) was); else if (exp instanceof byte[] && was instanceof byte[]) assertEqualsArray((byte[]) exp, (byte[]) was); else if (exp instanceof boolean[] && was instanceof boolean[]) assertEqualsArray((boolean[]) exp, (boolean[]) was); else if (exp instanceof short[] && was instanceof short[]) assertEqualsArray((short[]) exp, (short[]) was); else if (exp instanceof int[] && was instanceof int[]) assertEqualsArray((int[]) exp, (int[]) was); else if (exp instanceof long[] && was instanceof long[]) assertEqualsArray((long[]) exp, (long[]) was); else if (exp instanceof float[] && was instanceof float[]) assertEqualsArray((float[]) exp, (float[]) was); else if (exp instanceof double[] && was instanceof double[]) assertEqualsArray((double[]) exp, (double[]) was); else TestCase.assertEquals(exp, was); } private static void assertEqualsArray(Object[] exp, Object[] was) { if (exp == null && was == null) return; if (exp != null && was != null) { if (exp.length != was.length) { fail("Expected <" + exp.length + "> array items, but was <" + was.length + ">"); } else { for (int i = 0; i < exp.length; i++) { Object compExp = exp[i]; Object compWas = was[i]; assertEquals(compExp, compWas); } } } else if (exp == null) { fail("Expected a null array, but was: " + Arrays.asList(was)); } else if (was == null) { fail("Expected " + Arrays.asList(exp) + ", but was: null"); } } private static void assertEqualsArray(byte[] exp, byte[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(boolean[] exp, boolean[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(short[] exp, short[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(int[] exp, int[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(long[] exp, long[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(float[] exp, float[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } private static void assertEqualsArray(double[] exp, double[] was) { assertTrue("Arrays don't match", Arrays.equals(exp, was)); } public byte[] getContent(InputStream source) throws IOException { byte[] buf = new byte[4000]; ByteArrayOutputStream os = new ByteArrayOutputStream(4000); try { int len = -1; while ((len = source.read(buf)) != -1) os.write(buf, 0, len); } finally { source.close(); os.flush(); } return os.toByteArray(); } }