1 /* 2 * Copyright (c) 2018 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockito.internal.session; 6 7 import org.mockito.MockitoSession; 8 import org.mockito.internal.framework.DefaultMockitoSession; 9 import org.mockito.internal.util.ConsoleMockitoLogger; 10 import org.mockito.internal.util.MockitoLogger; 11 import org.mockito.quality.Strictness; 12 import org.mockito.session.MockitoSessionBuilder; 13 import org.mockito.session.MockitoSessionLogger; 14 15 import java.util.ArrayList; 16 import java.util.List; 17 18 import static java.util.Collections.emptyList; 19 20 public class DefaultMockitoSessionBuilder implements MockitoSessionBuilder { 21 22 private List<Object> testClassInstances = new ArrayList<Object>(); 23 private String name; 24 private Strictness strictness; 25 private MockitoSessionLogger logger; 26 27 @Override initMocks(Object testClassInstance)28 public MockitoSessionBuilder initMocks(Object testClassInstance) { 29 if (testClassInstance != null) { 30 this.testClassInstances.add(testClassInstance); 31 } 32 return this; 33 } 34 35 @Override initMocks(Object... testClassInstances)36 public MockitoSessionBuilder initMocks(Object... testClassInstances) { 37 if (testClassInstances != null) { 38 for (Object instance : testClassInstances) { 39 initMocks(instance); 40 } 41 } 42 return this; 43 } 44 45 @Override name(String name)46 public MockitoSessionBuilder name(String name) { 47 this.name = name; 48 return this; 49 } 50 51 @Override strictness(Strictness strictness)52 public MockitoSessionBuilder strictness(Strictness strictness) { 53 this.strictness = strictness; 54 return this; 55 } 56 57 @Override logger(MockitoSessionLogger logger)58 public MockitoSessionBuilder logger(MockitoSessionLogger logger) { 59 this.logger = logger; 60 return this; 61 } 62 63 @Override startMocking()64 public MockitoSession startMocking() { 65 //Configure default values 66 List<Object> effectiveTestClassInstances; 67 String effectiveName; 68 if (testClassInstances.isEmpty()) { 69 effectiveTestClassInstances = emptyList(); 70 effectiveName = this.name == null ? "<Unnamed Session>" : this.name; 71 } else { 72 effectiveTestClassInstances = new ArrayList<Object>(testClassInstances); 73 Object lastTestClassInstance = testClassInstances.get(testClassInstances.size() - 1); 74 effectiveName = this.name == null ? lastTestClassInstance.getClass().getName() : this.name; 75 } 76 Strictness effectiveStrictness = this.strictness == null ? Strictness.STRICT_STUBS : this.strictness; 77 MockitoLogger logger = this.logger == null ? new ConsoleMockitoLogger() : new MockitoLoggerAdapter(this.logger); 78 return new DefaultMockitoSession(effectiveTestClassInstances, effectiveName, effectiveStrictness, logger); 79 } 80 } 81