PrintSettings.java revision e0ae5d7e87b1dd6e789803c1b9615a84bd7488b7
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}