package com.jdroid.android.debug; import com.jdroid.java.exception.CommonErrorCode; import com.jdroid.java.exception.ConnectionException; import com.jdroid.java.exception.ErrorCodeException; import com.jdroid.java.exception.HttpResponseException; import com.jdroid.java.exception.UnexpectedException; public enum ExceptionType { CONNECTION_EXCEPTION { @Override public void crash() { throw new ConnectionException(CRASH_MESSAGE); } }, ERROR_CODE_EXCEPTION { @Override public void crash() { throw new ErrorCodeException(CommonErrorCode.UNEXPECTED_ERROR, CRASH_MESSAGE); } }, HTTP_RESPONSE_EXCEPTION { @Override public void crash() { throw new HttpResponseException(CRASH_MESSAGE); } }, UNEXPECTED_EXCEPTION { @Override public void crash() { throw new UnexpectedException(CRASH_MESSAGE); } }, UNEXPECTED_WRAPPED_EXCEPTION { @SuppressWarnings({"null", "ConstantConditions", "ResultOfMethodCallIgnored"}) @Override public void crash() { try { Long value = null; value.toString(); } catch (Exception e) { throw new UnexpectedException(CRASH_MESSAGE, e); } } }, UNEXPECTED_NO_MESSAGE_WRAPPED_EXCEPTION { @SuppressWarnings({"null", "ConstantConditions", "ResultOfMethodCallIgnored"}) @Override public void crash() { try { Long value = null; value.toString(); } catch (Exception e) { throw new UnexpectedException(e); } } }, RUNTIME_EXCEPTION { @Override public void crash() { throw new RuntimeException(CRASH_MESSAGE); } }, RUNTIME_NO_MESSAGE_EXCEPTION { @Override public void crash() { throw new RuntimeException(); } }; private static final String CRASH_MESSAGE = "This is a generated crash for testing"; public abstract void crash(); public static ExceptionType find(String name) { try { return ExceptionType.valueOf(name); } catch (Exception e) { return null; } } }