1/* 2 * Copyright (c) 2007 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5package org.mockito.internal.reporting; 6 7import org.hamcrest.Matcher; 8import org.mockito.internal.invocation.ArgumentsProcessor; 9import org.mockito.internal.invocation.InvocationMatcher; 10import org.mockito.internal.matchers.MatchersPrinter; 11import org.mockito.internal.util.MockUtil; 12import org.mockito.invocation.Invocation; 13 14import java.util.Arrays; 15import java.util.LinkedList; 16import java.util.List; 17 18public class PrintSettings { 19 20 public static final int MAX_LINE_LENGTH = 45; 21 private boolean multiline; 22 private List<Integer> withTypeInfo = new LinkedList<Integer>(); 23 24 public void setMultiline(boolean multiline) { 25 this.multiline = multiline; 26 } 27 28 public boolean isMultiline() { 29 return multiline; 30 } 31 32 public static PrintSettings verboseMatchers(Integer ... indexesOfMatchers) { 33 PrintSettings settings = new PrintSettings(); 34 settings.setMatchersToBeDescribedWithExtraTypeInfo(indexesOfMatchers); 35 return settings; 36 } 37 38 public boolean extraTypeInfoFor(int argumentIndex) { 39 return withTypeInfo.contains(argumentIndex); 40 } 41 42 public void setMatchersToBeDescribedWithExtraTypeInfo(Integer[] indexesOfMatchers) { 43 this.withTypeInfo = Arrays.asList(indexesOfMatchers); 44 } 45 46 public String print(List<Matcher> matchers, Invocation invocation) { 47 MatchersPrinter matchersPrinter = new MatchersPrinter(); 48 String qualifiedName = new MockUtil().getMockName(invocation.getMock()) + "." + invocation.getMethod().getName(); 49 String invocationString = qualifiedName + matchersPrinter.getArgumentsLine(matchers, this); 50 if (isMultiline() || (!matchers.isEmpty() && invocationString.length() > MAX_LINE_LENGTH)) { 51 return qualifiedName + matchersPrinter.getArgumentsBlock(matchers, this); 52 } else { 53 return invocationString; 54 } 55 } 56 57 public String print(Invocation invocation) { 58 return print(ArgumentsProcessor.argumentsToMatchers(invocation.getArguments()), invocation); 59 } 60 61 public String print(InvocationMatcher invocationMatcher) { 62 return print(invocationMatcher.getMatchers(), invocationMatcher.getInvocation()); 63 } 64}