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 }