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 Parkinson 6e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpackage org.mockito.internal.stubbing.defaultanswers; 7e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 8e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.io.Serializable; 9e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport java.lang.reflect.Array; 10e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 11e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.Mockito; 12e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.invocation.InvocationOnMock; 13e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonimport org.mockito.stubbing.Answer; 14e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 15e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson/** 16e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * It's likely this implementation will be used by default by every Mockito 2.0 mock. 17e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 18e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Currently <b>used only</b> by {@link Mockito#RETURNS_SMART_NULLS} 19e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <p> 20e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Current version of Mockito mocks by deafult use {@link ReturnsEmptyValues} 21e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <ul> 22e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 23e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns appropriate primitive for primitive-returning methods 24e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 25e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 26e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns consistent values for primitive wrapper classes (e.g. int-returning method retuns 0 <b>and</b> Integer-returning method returns 0, too) 27e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 28e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 29e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns empty collection for collection-returning methods (works for most commonly used collection types) 30e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 31e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 32e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns empty array for array-returning methods 33e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 34e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 35e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns "" for String-returning method 36e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 37e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 38e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns description of mock for toString() method 39e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 40e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 41e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns non-zero for Comparable#compareTo(T other) method (see issue 184) 42e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 43e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * <li> 44e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * Returns null for everything else 45e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </li> 46e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * </ul> 47e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 48e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinsonpublic class ReturnsMoreEmptyValues implements Answer<Object>, Serializable { 49e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 50e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private static final long serialVersionUID = -2816745041482698471L; 51e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson private Answer<Object> delegate = new ReturnsEmptyValues(); 52e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 53e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson /* (non-Javadoc) 54e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson * @see org.mockito.stubbing.Answer#answer(org.mockito.invocation.InvocationOnMock) 55e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson */ 56e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson public Object answer(InvocationOnMock invocation) throws Throwable { 57e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Object ret = delegate.answer(invocation); 58e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (ret != null) { 59e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return ret; 60e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 61e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 62e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?> returnType = invocation.getMethod().getReturnType(); 63e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return returnValueFor(returnType); 64e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 65e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson 66e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Object returnValueFor(Class<?> type) { 67e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson if (type == String.class) { 68e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return ""; 69e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } else if (type.isArray()) { 70e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson Class<?> componenetType = type.getComponentType(); 71e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return Array.newInstance(componenetType, 0); 72e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 73e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson return null; 74e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson } 75e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7Ian Parkinson}