package fr.mch.mdo.restaurant.exception; import java.util.Locale; import fr.mch.mdo.i18n.IMessageQuery; import fr.mch.mdo.i18n.MessageQueryResourceBundleImpl; import fr.mch.mdo.logs.ILogger; import fr.mch.mdo.restaurant.resources.IResources; import fr.mch.mdo.restaurant.services.logs.LoggerImpl; import fr.mch.mdo.test.MdoTestCase; public class MdoCommonExceptionTest extends MdoTestCase { /** * Create the test case * * @param testName * name of the test case */ public MdoCommonExceptionTest(String testName) { super(testName); } protected void checkMdoMdoExceptionConstrutors(Class<? extends MdoException> clazz, Locale locale) { IMessageQuery messageQuery = new MessageQueryResourceBundleImpl(IResources.EXCEPTION_RESOURCE_BUNDLE_MESSAGES_FILE, locale); String message = null; String localizedMessage = messageQuery.getMessage(message); Object[] params = null; Throwable throwable = null; try { throw clazz.getConstructor().newInstance(); } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params); } throwable = new NullPointerException(); params = null; message = "java.lang.NullPointerException"; localizedMessage = messageQuery.getMessage(message); try { throw clazz.getConstructor(Throwable.class).newInstance(throwable); } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } throwable = null; params = null; message = null; localizedMessage = messageQuery.getMessage(message); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class).newInstance(locale, message); } else { throw clazz.getConstructor(String.class).newInstance(message); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message); } throwable = null; params = null; message = "message.error.dinner.tablesX"; localizedMessage = messageQuery.getMessage(message); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class).newInstance(locale, message); } else { throw clazz.getConstructor(String.class).newInstance(message); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message); } throwable = null; params = null; message = "message.error.dinner.tables"; localizedMessage = messageQuery.getMessage(message); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class).newInstance(locale, message); } else { throw clazz.getConstructor(String.class).newInstance(message); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } throwable = null; params = null; message = "message.error.product"; localizedMessage = messageQuery.getMessage(message); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class).newInstance(locale, message); } else { throw clazz.getConstructor(String.class).newInstance(message); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } throwable = null; params = new Object[] { "11" }; message = "message.error.product"; localizedMessage = messageQuery.getMessage(message, params); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class, Object[].class).newInstance(locale, message, params); } else { throw clazz.getConstructor(String.class, Object[].class).newInstance(message, params); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } throwable = new NullPointerException(); params = null; message = "message.error.product"; localizedMessage = messageQuery.getMessage(message); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class, Throwable.class).newInstance(locale, message, throwable); } else { throw clazz.getConstructor(String.class, Throwable.class).newInstance(message, throwable); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } throwable = new NullPointerException(); params = new Object[] { "11" }; message = "message.error.product"; localizedMessage = messageQuery.getMessage(message, params); try { if (locale != null) { throw clazz.getConstructor(Locale.class, String.class, Object[].class, Throwable.class).newInstance(locale, message, params, throwable); } else { throw clazz.getConstructor(String.class, Object[].class, Throwable.class).newInstance(message, params, throwable); } } catch (Exception e) { // Check all fields private, protected and public checkFields(e, throwable, params, message, localizedMessage); } } private void checkFields(Exception e, Throwable expectedParentException, Object[] expectedParams, String... messages) { // Check all fields private, protected and public assertTrue("The exception must be MdoMessageManagerException", e instanceof MdoMessageManagerException); assertEquals("Check parent exception", expectedParentException, e.getCause()); String message = messages.length == 0 ? null: messages[0]; String localizedMessage = messages.length == 2 ? messages[1]: messages.length == 1 ? messages[0]: null; if (message == null) { assertNull("The message must be null", e.getMessage()); assertNull("The localized message must be null", e.getLocalizedMessage()); } else { assertEquals("The message must be " + message, message, e.getMessage()); assertEquals("The localized message must be " + localizedMessage, localizedMessage, e.getLocalizedMessage()); } Object[] params = (Object[]) super.getField(e, "params"); if (params != null) { assertTrue("The params must be an array", params.getClass().isArray()); assertEquals("Check params array length", expectedParams.length, params.length); for (int i=0; i<expectedParams.length; i++) { assertEquals("Check param " + expectedParams[i], expectedParams[i], params[i]); } } else { assertNull("The params must be null", params); } Object messageQuery = super.getField(e, "messageQuery"); assertNotNull("The messageQuery must be not null", messageQuery); assertTrue("The messageQuery is an instance of IMessageQuery", messageQuery instanceof IMessageQuery); assertTrue("The messageQuery is an instance of MessageQueryResourceBundleImpl", messageQuery instanceof MessageQueryResourceBundleImpl); Object logger = super.getField(e, "logger"); assertNotNull("The logger must be not null", logger); assertTrue("The logger is an instance of ILogger", logger instanceof ILogger); assertTrue("The logger is an instance of LoggerImpl", logger instanceof LoggerImpl); } public void testDummy() { // This is a dummy test. // Because PMD needs that there is at least one test in a TestCase. assertTrue(true); } }