/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.core.designer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import junit.framework.TestCase; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.teiid.core.designer.ModelerCoreException; /** */ public class TestModelerCoreException extends TestCase { /** * Assert that the two exceptions have the same message and status. */ public static void assertEqualThrowables( Throwable e1, Throwable e2 ) { assertEquals(e1.getClass(), e2.getClass()); assertEquals(e1.getMessage(), e2.getMessage()); StackTraceElement[] stack1 = e1.getStackTrace(); StackTraceElement[] stack2 = e2.getStackTrace(); assertEquals(stack1.length, stack2.length); for (int i = 0; i < stack1.length; i++) { assertEquals(stack1[i], stack2[i]); } } public static Object helpSerializeRoundtrip( Object testObject ) throws Exception { Object result = null; // build a buffer to use for the output ByteArrayOutputStream bout = new ByteArrayOutputStream(4096); ObjectOutputStream oout = new ObjectOutputStream(bout); oout.writeObject(testObject); oout.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream oin = new ObjectInputStream(bin); result = oin.readObject(); return result; } private ByteArrayOutputStream bout; private ObjectOutputStream oout; private ByteArrayInputStream bin; private ObjectInputStream oin; /** * Constructor for TestModelerCoreException. * * @param name */ public TestModelerCoreException( String name ) { super(name); } @Override public void setUp() throws Exception { bout = new ByteArrayOutputStream(4096); oout = new ObjectOutputStream(bout); } @Override public void tearDown() throws Exception { oout.close(); bout.close(); if (oin != null) { oin.close(); } if (bin != null) { bin.close(); } } public void testGetNonNullMessage_nonNullMessage() { String msg = "xyz"; //$NON-NLS-1$ String out = ModelerCoreException.getNonNullMessage(msg); assertEquals("Did not get expected message", msg, out); //$NON-NLS-1$ } public void testGetNonNullMessage_nullMessage() { String out = ModelerCoreException.getNonNullMessage(null); assertEquals("Did not get expected message", "", out); //$NON-NLS-1$ //$NON-NLS-2$ } public void testGetNonNullMessage_emptyMessage() { String msg = ""; //$NON-NLS-1$ String out = ModelerCoreException.getNonNullMessage(msg); assertEquals("Did not get expected message", msg, out); //$NON-NLS-1$ } public void testGetNonNullThrowableMessage_nullThrowable() { String out = ModelerCoreException.getNonNullMessageFromThrowable(null); assertEquals("Did not get expected message", "", out); //$NON-NLS-1$ //$NON-NLS-2$ } public void testGetNonNullThrowableMessage_nullMessage() { Throwable t = new NullPointerException(); String out = ModelerCoreException.getNonNullMessageFromThrowable(t); assertEquals("Did not get expected message", "", out); //$NON-NLS-1$ //$NON-NLS-2$ } public void testGetNonNullThrowableMessage_hasMessage() { String msg = "xyz"; //$NON-NLS-1$ Throwable t = new NullPointerException(msg); String out = ModelerCoreException.getNonNullMessageFromThrowable(t); assertEquals("Did not get expected message", msg, out); //$NON-NLS-1$ } public void testConstructor1_null() { try { new ModelerCoreException((CoreException)null); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor1() { String msg = "msg"; //$NON-NLS-1$ NullPointerException npe = new NullPointerException(); IStatus status = new Status(2, "xyz", 10, msg, npe); //$NON-NLS-1$ CoreException e1 = new CoreException(status); ModelerCoreException e2 = new ModelerCoreException(e1); assertEquals("Did not get real exception", e1, e2.getException()); //$NON-NLS-1$ assertEquals("Did not get real status", status, e2.getStatus()); //$NON-NLS-1$ assertEquals("Did not get real message", msg, e2.getMessage()); //$NON-NLS-1$ } public void testConstructor2_null() { try { new ModelerCoreException((IStatus)null); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor2() { String msg = "msg"; //$NON-NLS-1$ NullPointerException npe = new NullPointerException(); IStatus status = new Status(2, "xyz", 10, msg, npe); //$NON-NLS-1$ ModelerCoreException e2 = new ModelerCoreException(status); assertEquals("Did not get real exception", npe, e2.getException()); //$NON-NLS-1$ assertEquals("Did not get real status", status, e2.getStatus()); //$NON-NLS-1$ assertEquals("Did not get real message", msg, e2.getMessage()); //$NON-NLS-1$ } public void testConstructor4_null() { try { new ModelerCoreException((String)null); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor4() { String msg = "msg"; //$NON-NLS-1$ ModelerCoreException e2 = new ModelerCoreException(msg); assertEquals("Did not get real message", msg, e2.getMessage()); //$NON-NLS-1$ } public void testConstructor5_null() { try { new ModelerCoreException((Throwable)null); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor5() { NullPointerException npe = new NullPointerException(); ModelerCoreException e2 = new ModelerCoreException(npe); assertEquals("Did not get real exception", npe, e2.getException()); //$NON-NLS-1$ } public void testConstructor6_null() { try { new ModelerCoreException((Throwable)null, 0); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor6() { NullPointerException npe = new NullPointerException(); int code = 10; ModelerCoreException e2 = new ModelerCoreException(npe, code); assertEquals("Did not get real message", npe, e2.getException()); //$NON-NLS-1$ assertEquals("Did not get real status", code, e2.getStatus().getCode()); //$NON-NLS-1$ } public void testConstructor8_null() { try { new ModelerCoreException((Throwable)null, null); } catch (Throwable e) { fail(e.getMessage()); } } public void testConstructor8() { NullPointerException npe = new NullPointerException(); String msg = "msg"; //$NON-NLS-1$ ModelerCoreException e2 = new ModelerCoreException(npe, msg); assertEquals("Did not get real exception", npe, e2.getException()); //$NON-NLS-1$ assertEquals("Did not get real message", msg, e2.getMessage()); //$NON-NLS-1$ } public void testSerialization() throws Exception { NullPointerException npe = new NullPointerException(); String msg = "msg"; //$NON-NLS-1$ ModelerCoreException e = new ModelerCoreException(npe, msg); // Serialize once Object s1 = helpSerializeRoundtrip(e); assertNotNull(s1); assertTrue(s1 instanceof ModelerCoreException); // Serialize a second time Object s2 = helpSerializeRoundtrip(s1); assertNotNull(s2); assertTrue(s2 instanceof ModelerCoreException); } public static IStatus example() { Status child = new Status(IStatus.OK, "PluginID", 4, "Hello", new Exception()); //$NON-NLS-1$ //$NON-NLS-2$ MultiStatus multi = new MultiStatus("PluginID", IStatus.ERROR, new IStatus[] {child}, "MyMessage", new Exception()); //$NON-NLS-1$ //$NON-NLS-2$ return new ModelerCoreException.StatusImpl(multi); } public void testSerializeIStatus() throws Exception { IStatus example = example(); Object serialized = helpSerializeRoundtrip(example); assertNotNull(serialized); assertTrue(serialized instanceof ModelerCoreException.StatusImpl); assertTrue(serialized.equals(example)); } }