// Path: core/src/main/java/com/mindscapehq/raygun4java/core/messages/RaygunErrorMessage.java
// public class RaygunErrorMessage {
// 
//     private transient WeakReference<Throwable> throwable;
//     private RaygunErrorMessage innerError;
//     private String message;
//     private String className;
//     private RaygunErrorStackTraceLineMessage[] stackTrace;
// 
//     public RaygunErrorMessage(Throwable throwable) {
//         if (throwable == null) {
//             return;
//         }
// 
//         this.throwable = new WeakReference<Throwable>(throwable);
//         message = throwable.getClass().getSimpleName();
//         String throwableMessage = throwable.getMessage();
//         if (throwableMessage != null) {
//             message = message.concat(": ").concat(throwableMessage);
//         }
//         className = throwable.getClass().getCanonicalName();
// 
//         if (throwable.getCause() != null) {
//             innerError = new RaygunErrorMessage(throwable.getCause());
//         }
// 
//         StackTraceElement[] ste = throwable.getStackTrace();
//         stackTrace = new RaygunErrorStackTraceLineMessage[ste.length];
// 
//         for (int i = 0; i < ste.length; i++) {
//             stackTrace[i] = new RaygunErrorStackTraceLineMessage(ste[i]);
//         }
//     }
// 
//     public RaygunErrorMessage getInnerError() {
//         return innerError;
//     }
// 
//     public void setInnerError(RaygunErrorMessage innerError) {
//         this.innerError = innerError;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public void setClassName(String className) {
//         this.className = className;
//     }
// 
//     public RaygunErrorStackTraceLineMessage[] getStackTrace() {
//         return stackTrace;
//     }
// 
//     public void setStackTrace(RaygunErrorStackTraceLineMessage[] stackTrace) {
//         this.stackTrace = stackTrace;
//     }
// 
//     public Throwable getThrowable() {
//         if(throwable != null && throwable.get() != null) {
//             return throwable.get();
//         }
//         return null;
//     }
// }
// 
// Path: core/src/main/java/com/mindscapehq/raygun4java/core/messages/RaygunMessage.java
// public class RaygunMessage {
// 
//     protected String occurredOn;
//     protected RaygunMessageDetails details;
// 
//     public RaygunMessage() {
//         details = new RaygunMessageDetails();
// 
//         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
//         df.setTimeZone(TimeZone.getTimeZone("UTC"));
//         occurredOn = df.format(Calendar.getInstance().getTime());
//     }
// 
//     public String getOccurredOn() {
//         return occurredOn;
//     }
// 
//     public void setOccurredOn(String occurredOn) {
//         this.occurredOn = occurredOn;
//     }
// 
//     public RaygunMessageDetails getDetails() {
//         return details;
//     }
// 
//     public void setDetails(RaygunMessageDetails details) {
//         this.details = details;
//     }
// }


import com.mindscapehq.raygun4java.core.messages.RaygunErrorMessage;
import com.mindscapehq.raygun4java.core.messages.RaygunMessage;
import org.junit.Test;
import static org.junit.Assert.*;
package com.mindscapehq.raygun4java.core.handlers.requestfilters;



public class RaygunExcludeExceptionFilterTest {

    @Test
    public void shouldExcludeNestedException() {
        RaygunExcludeExceptionFilter f = new RaygunExcludeExceptionFilter(IllegalStateException.class);

        RaygunMessage message = new RaygunMessage();
// Path: core/src/main/java/com/mindscapehq/raygun4java/core/messages/RaygunErrorMessage.java
// public class RaygunErrorMessage {
// 
//     private transient WeakReference<Throwable> throwable;
//     private RaygunErrorMessage innerError;
//     private String message;
//     private String className;
//     private RaygunErrorStackTraceLineMessage[] stackTrace;
// 
//     public RaygunErrorMessage(Throwable throwable) {
//         if (throwable == null) {
//             return;
//         }
// 
//         this.throwable = new WeakReference<Throwable>(throwable);
//         message = throwable.getClass().getSimpleName();
//         String throwableMessage = throwable.getMessage();
//         if (throwableMessage != null) {
//             message = message.concat(": ").concat(throwableMessage);
//         }
//         className = throwable.getClass().getCanonicalName();
// 
//         if (throwable.getCause() != null) {
//             innerError = new RaygunErrorMessage(throwable.getCause());
//         }
// 
//         StackTraceElement[] ste = throwable.getStackTrace();
//         stackTrace = new RaygunErrorStackTraceLineMessage[ste.length];
// 
//         for (int i = 0; i < ste.length; i++) {
//             stackTrace[i] = new RaygunErrorStackTraceLineMessage(ste[i]);
//         }
//     }
// 
//     public RaygunErrorMessage getInnerError() {
//         return innerError;
//     }
// 
//     public void setInnerError(RaygunErrorMessage innerError) {
//         this.innerError = innerError;
//     }
// 
//     public String getMessage() {
//         return message;
//     }
// 
//     public void setMessage(String message) {
//         this.message = message;
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public void setClassName(String className) {
//         this.className = className;
//     }
// 
//     public RaygunErrorStackTraceLineMessage[] getStackTrace() {
//         return stackTrace;
//     }
// 
//     public void setStackTrace(RaygunErrorStackTraceLineMessage[] stackTrace) {
//         this.stackTrace = stackTrace;
//     }
// 
//     public Throwable getThrowable() {
//         if(throwable != null && throwable.get() != null) {
//             return throwable.get();
//         }
//         return null;
//     }
// }
// 
// Path: core/src/main/java/com/mindscapehq/raygun4java/core/messages/RaygunMessage.java
// public class RaygunMessage {
// 
//     protected String occurredOn;
//     protected RaygunMessageDetails details;
// 
//     public RaygunMessage() {
//         details = new RaygunMessageDetails();
// 
//         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
//         df.setTimeZone(TimeZone.getTimeZone("UTC"));
//         occurredOn = df.format(Calendar.getInstance().getTime());
//     }
// 
//     public String getOccurredOn() {
//         return occurredOn;
//     }
// 
//     public void setOccurredOn(String occurredOn) {
//         this.occurredOn = occurredOn;
//     }
// 
//     public RaygunMessageDetails getDetails() {
//         return details;
//     }
// 
//     public void setDetails(RaygunMessageDetails details) {
//         this.details = details;
//     }
// }


// Path: core/src/test/java/com/mindscapehq/raygun4java/core/handlers/requestfilters/RaygunExcludeExceptionFilterTest.java
import com.mindscapehq.raygun4java.core.messages.RaygunErrorMessage;
import com.mindscapehq.raygun4java.core.messages.RaygunMessage;
import org.junit.Test;
import static org.junit.Assert.*;

package com.mindscapehq.raygun4java.core.handlers.requestfilters;



public class RaygunExcludeExceptionFilterTest {

    @Test
    public void shouldExcludeNestedException() {
        RaygunExcludeExceptionFilter f = new RaygunExcludeExceptionFilter(IllegalStateException.class);

        RaygunMessage message = new RaygunMessage();
        message.getDetails().setError(new RaygunErrorMessage(new ClassNotFoundException("wrapper1", new IllegalStateException("wrapper2", new ClassNotFoundException("wrapper3")))));