// Path: src/main/java/com/stackify/api/ErrorItem.java
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder(builderClassName = "Builder", builderMethodName = "newBuilder", toBuilder = true)
// @Data
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class ErrorItem {
// 
//     /**
//      * The error message
//      */
//     @Setter
//     @JsonProperty("Message")
//     private String message;
// 
//     /**
//      * The error's class name
//      */
//     @JsonProperty("ErrorType")
//     private String errorType;
// 
//     /**
//      * The error type code
//      */
//     @JsonProperty("ErrorTypeCode")
//     private String errorTypeCode;
// 
//     /**
//      * Custom data for the error
//      */
//     @JsonProperty("Data")
//     private Map<String, String> data;
// 
//     /**
//      * The method name
//      */
//     @JsonProperty("SourceMethod")
//     private String sourceMethod;
// 
//     /**
//      * The stack trace
//      */
//     @JsonProperty("StackTrace")
//     private List<TraceFrame> stackTrace;
// 
//     /**
//      * The cause of this error
//      */
//     @JsonProperty("InnerError")
//     private ErrorItem innerError;
// 
// }
// 
// Path: src/main/java/com/stackify/api/TraceFrame.java
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder(builderClassName = "Builder", builderMethodName = "newBuilder", toBuilder = true)
// @Data
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class TraceFrame {
// 
//     /**
//      * The file name
//      */
//     @JsonProperty("CodeFileName")
//     private String codeFileName;
// 
//     /**
//      * The line number
//      */
//     @JsonProperty("LineNum")
//     private Integer lineNum;
// 
//     /**
//      * The method name
//      */
//     @JsonProperty("Method")
//     private String method;
// 
// }


import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import com.stackify.api.ErrorItem;
import com.stackify.api.TraceFrame;
		Throwable c2 = new RuntimeException();
		Throwable c1 = new RuntimeException(c2);
		c2.initCause(c1);
		Throwable t = new RuntimeException(c1);
		
		List<Throwable> throwables = Throwables.getCausalChain(t);
		Assert.assertNotNull(throwables);
		Assert.assertEquals(3, throwables.size());
		Assert.assertEquals(t, throwables.get(0));
		Assert.assertEquals(c1, throwables.get(1));
		Assert.assertEquals(c2, throwables.get(2));
	}
	
	/**
	 * testToErrorDetail
	 */
	@Test
	public void testToErrorDetail() {
		String message = "message";
		String causeMessage = "causeMessage";
		Throwable cause = new NullPointerException(causeMessage);
		Throwable throwable = new RuntimeException(message, cause);
		
		ErrorItem errorDetail = Throwables.toErrorItem(throwable);
		
		Assert.assertNotNull(errorDetail);
		
		Assert.assertEquals(message, errorDetail.getMessage());
		Assert.assertEquals("java.lang.RuntimeException", errorDetail.getErrorType());
		
// Path: src/main/java/com/stackify/api/ErrorItem.java
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder(builderClassName = "Builder", builderMethodName = "newBuilder", toBuilder = true)
// @Data
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class ErrorItem {
// 
//     /**
//      * The error message
//      */
//     @Setter
//     @JsonProperty("Message")
//     private String message;
// 
//     /**
//      * The error's class name
//      */
//     @JsonProperty("ErrorType")
//     private String errorType;
// 
//     /**
//      * The error type code
//      */
//     @JsonProperty("ErrorTypeCode")
//     private String errorTypeCode;
// 
//     /**
//      * Custom data for the error
//      */
//     @JsonProperty("Data")
//     private Map<String, String> data;
// 
//     /**
//      * The method name
//      */
//     @JsonProperty("SourceMethod")
//     private String sourceMethod;
// 
//     /**
//      * The stack trace
//      */
//     @JsonProperty("StackTrace")
//     private List<TraceFrame> stackTrace;
// 
//     /**
//      * The cause of this error
//      */
//     @JsonProperty("InnerError")
//     private ErrorItem innerError;
// 
// }
// 
// Path: src/main/java/com/stackify/api/TraceFrame.java
// @AllArgsConstructor
// @NoArgsConstructor
// @Builder(builderClassName = "Builder", builderMethodName = "newBuilder", toBuilder = true)
// @Data
// @JsonInclude(JsonInclude.Include.NON_NULL)
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class TraceFrame {
// 
//     /**
//      * The file name
//      */
//     @JsonProperty("CodeFileName")
//     private String codeFileName;
// 
//     /**
//      * The line number
//      */
//     @JsonProperty("LineNum")
//     private Integer lineNum;
// 
//     /**
//      * The method name
//      */
//     @JsonProperty("Method")
//     private String method;
// 
// }


// Path: src/test/java/com/stackify/api/common/lang/ThrowablesTest.java
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import com.stackify.api.ErrorItem;
import com.stackify.api.TraceFrame;

		Throwable c2 = new RuntimeException();
		Throwable c1 = new RuntimeException(c2);
		c2.initCause(c1);
		Throwable t = new RuntimeException(c1);
		
		List<Throwable> throwables = Throwables.getCausalChain(t);
		Assert.assertNotNull(throwables);
		Assert.assertEquals(3, throwables.size());
		Assert.assertEquals(t, throwables.get(0));
		Assert.assertEquals(c1, throwables.get(1));
		Assert.assertEquals(c2, throwables.get(2));
	}
	
	/**
	 * testToErrorDetail
	 */
	@Test
	public void testToErrorDetail() {
		String message = "message";
		String causeMessage = "causeMessage";
		Throwable cause = new NullPointerException(causeMessage);
		Throwable throwable = new RuntimeException(message, cause);
		
		ErrorItem errorDetail = Throwables.toErrorItem(throwable);
		
		Assert.assertNotNull(errorDetail);
		
		Assert.assertEquals(message, errorDetail.getMessage());
		Assert.assertEquals("java.lang.RuntimeException", errorDetail.getErrorType());
		
		List<TraceFrame> stackTrace = errorDetail.getStackTrace();