1e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/* 2e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Copyright (c) 2007 Mockito contributors 3e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * This program is made available under the terms of the MIT License. 4e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 5e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.util.junit; 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.junit.runner.notification.Failure; 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.exceptions.ExceptionIncludingMockitoWarnings; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.internal.util.reflection.Whitebox; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class JUnitFailureHacker { 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public void appendWarnings(Failure failure, String warnings) { 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (isEmpty(warnings)) { 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return; 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson //TODO: this has to protect the use in case jUnit changes and this internal state logic fails 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Throwable throwable = (Throwable) Whitebox.getInternalState(failure, "fThrownException"); 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson String newMessage = "contains both: actual test failure *and* Mockito warnings.\n" + 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson warnings + "\n *** The actual failure is because of: ***\n"; 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson ExceptionIncludingMockitoWarnings e = new ExceptionIncludingMockitoWarnings(newMessage, throwable); 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson e.setStackTrace(throwable.getStackTrace()); 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Whitebox.setInternalState(failure, "fThrownException", e); 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private boolean isEmpty(String warnings) { 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return warnings == null || "".equals(warnings); // isEmpty() is in JDK 6+ 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}