package org.transgalactica.fwk.validation.exception;
import static org.junit.Assert.assertEquals;
import java.io.FileNotFoundException;
import org.junit.Test;
import org.springframework.context.MessageSourceResolvable;
import org.transgalactica.fwk.validation.exception.AbstractException;
import org.transgalactica.fwk.validation.exception.BusinessException;
import org.transgalactica.fwk.validation.exception.ExceptionUtils;
import org.transgalactica.fwk.validation.exception.MultipleErrorsException;
import org.transgalactica.fwk.validation.exception.TechnicalException;
public class ExceptionUtilsTest {
@Test
public void testExceptionCodes() {
String[] codes = ExceptionUtils.getErrorCodes(new Exception());
assertEquals(1, codes.length);
assertEquals("java.lang.Exception", codes[0]);
}
@Test
public void testTechnicalExceptionCodes() {
String[] codes = ExceptionUtils.getErrorCodes(new TechnicalException());
assertEquals(4, codes.length);
assertEquals(TechnicalException.class.getName(), codes[0]);
assertEquals(AbstractException.class.getName(), codes[1]);
assertEquals(RuntimeException.class.getName(), codes[2]);
assertEquals(Exception.class.getName(), codes[3]);
}
@Test
public void testBusinessExceptionCodes() {
String[] codes = ExceptionUtils.getErrorCodes(new BusinessException());
assertEquals(4, codes.length);
assertEquals(BusinessException.class.getName(), codes[0]);
assertEquals(AbstractException.class.getName(), codes[1]);
assertEquals(RuntimeException.class.getName(), codes[2]);
assertEquals(Exception.class.getName(), codes[3]);
}
@Test
public void testMultipleExceptionCodes() {
String[] codes = ExceptionUtils.getErrorCodes(new MultipleErrorsException());
assertEquals(5, codes.length);
assertEquals(MultipleErrorsException.class.getName(), codes[0]);
assertEquals(BusinessException.class.getName(), codes[1]);
assertEquals(AbstractException.class.getName(), codes[2]);
assertEquals(RuntimeException.class.getName(), codes[3]);
assertEquals(Exception.class.getName(), codes[4]);
}
@Test
public void testEmptyCauseMessage() {
String m = ExceptionUtils.getCauseMessage(new TechnicalException(new FileNotFoundException()));
assertEquals(FileNotFoundException.class.getName(), m);
}
@Test
public void testNullCauseMessage() {
String m = ExceptionUtils.getCauseMessage(new TechnicalException(new FileNotFoundException(null)));
assertEquals(FileNotFoundException.class.getName(), m);
}
@Test
public void testSimpleCauseMessage() {
String s = "bla bla";
String m = ExceptionUtils.getCauseMessage(new TechnicalException(new FileNotFoundException(s)));
assertEquals(s, m);
}
@Test
public void testExceptionArguments() {
Object[] args = ExceptionUtils.getArguments(new Exception());
assertEquals(0, args.length);
}
@Test
public void testBusinessExceptionWitoutArguments() {
Object[] args = ExceptionUtils.getArguments(new BusinessException());
assertEquals(0, args.length);
}
@Test
public void testBusinessExceptionWithArguments() {
BusinessException bex = new BusinessException();
Object arg1 = "arg1";
Object arg2 = "arg2";
bex.addArgument(arg1);
bex.addArgument(arg2);
Object[] args = ExceptionUtils.getArguments(bex);
assertEquals(2, args.length);
assertEquals(arg1, args[0]);
assertEquals(arg2, args[1]);
}
@Test
public void testBusinessExceptionWithArgumentsAndMessage() {
BusinessException bex = new BusinessException("RG_TEST");
bex.addArgument("arg1");
bex.addArgument("arg2");
Object[] args = ExceptionUtils.getArguments(bex);
assertEquals(3, args.length);
assertEquals("RG_TEST", ((MessageSourceResolvable) args[0]).getCodes()[0]);
assertEquals("arg1", args[1]);
assertEquals("arg2", args[2]);
}
@Test
public void testNullPointerExceptionArguments() {
NullPointerException nex = new NullPointerException();
nex.fillInStackTrace();
Object[] args = ExceptionUtils.getArguments(nex);
assertEquals(2, args.length);
assertEquals(this.getClass().getName() + ".class", args[0]);
assertEquals(Integer.class, args[1].getClass());
}
}