001 package org.springframework.richclient.exceptionhandling.delegation;
002
003 import java.util.ArrayList;
004 import java.util.Arrays;
005 import java.util.Collections;
006 import java.util.List;
007
008 import junit.framework.TestCase;
009
010 /**
011 * @author Geoffrey De Smet
012 */
013 public class DefaultExceptionPurgerTests extends TestCase {
014
015 // Chain A1->B1->C1->B2->D1
016 private DException d1 = new DException();
017 private BException b2 = new BException(d1);
018 private CException c1 = new CException(b2);
019 private BException b1 = new BException(c1);
020 private AException a1 = new AException(b1);
021
022 /**
023 * {A} returns A1;
024 * {B} returns B1;
025 * {D} returns D1;
026 * {Z) returns A1;
027 * {C, Z} returns C1;
028 * {B, D} returns B1;
029 * {D, B} return B1;
030 */
031 public void testIncludedThrowableClassList() {
032 assertEquals(a1, checkIncluded(AException.class));
033 assertEquals(b1, checkIncluded(BException.class));
034 assertEquals(d1, checkIncluded(DException.class));
035 assertEquals(a1, checkIncluded(ZException.class));
036 assertEquals(c1, checkIncluded(CException.class, ZException.class));
037 assertEquals(b1, checkIncluded(BException.class, DException.class));
038 assertEquals(b1, checkIncluded(DException.class, BException.class));
039 }
040
041 public Throwable checkIncluded(Class ... includedThrowableClasses) {
042 return new DefaultExceptionPurger(Arrays.asList(includedThrowableClasses), null).purge(a1);
043 }
044
045 /**
046 * {A} returns B1;
047 * {B} returns D1;
048 * {D} returns D1;
049 * {Z) returns A1;
050 * {C, Z} returns B2;
051 * {C, D} returns D1;
052 * {D, C} return D1;
053 */
054 public void testExcludedThrowableClassList() {
055 assertEquals(b1, checkExcluded(AException.class));
056 assertEquals(d1, checkExcluded(BException.class));
057 assertEquals(d1, checkExcluded(DException.class));
058 assertEquals(a1, checkExcluded(ZException.class));
059 assertEquals(b2, checkExcluded(CException.class, ZException.class));
060 assertEquals(d1, checkExcluded(CException.class, DException.class));
061 assertEquals(d1, checkExcluded(DException.class, CException.class));
062 }
063
064 public Throwable checkExcluded(Class ... excludedThrowableClasses) {
065 return new DefaultExceptionPurger(null, Arrays.asList(excludedThrowableClasses)).purge(a1);
066 }
067
068 private class AException extends RuntimeException {
069 private AException(Throwable cause) {
070 super(cause);
071 }
072 }
073 private class BException extends RuntimeException {
074 private BException(Throwable cause) {
075 super(cause);
076 }
077 }
078 private class CException extends RuntimeException {
079 private CException(Throwable cause) {
080 super(cause);
081 }
082 }
083 private class DException extends RuntimeException {
084 }
085 private class ZException extends RuntimeException {
086 }
087
088 }