• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hazendaz / jmockit1 / 496

15 Nov 2025 05:33PM UTC coverage: 72.192% (-0.008%) from 72.2%
496

push

github

web-flow
Merge pull request #412 from hazendaz/renovate/major-spring-core

Update spring core to v7 (major)

5677 of 8360 branches covered (67.91%)

Branch coverage included in aggregate %.

11922 of 16018 relevant lines covered (74.43%)

0.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.75
/main/src/main/java/mockit/internal/expectations/SequenceOfReturnValues.java
1
/*
2
 * MIT License
3
 * Copyright (c) 2006-2025 JMockit developers
4
 * See LICENSE file for full license text.
5
 */
6
package mockit.internal.expectations;
7

8
import edu.umd.cs.findbugs.annotations.NonNull;
9
import edu.umd.cs.findbugs.annotations.Nullable;
10

11
import java.lang.reflect.Array;
12
import java.util.ArrayList;
13
import java.util.Collection;
14
import java.util.Collections;
15
import java.util.Iterator;
16
import java.util.LinkedHashSet;
17
import java.util.List;
18
import java.util.Set;
19
import java.util.SortedSet;
20
import java.util.TreeSet;
21

22
final class SequenceOfReturnValues {
23
    @NonNull
24
    private final Expectation expectation;
25
    @NonNull
26
    private final Class<?> returnType;
27
    @Nullable
28
    private final Object firstValue;
29
    @NonNull
30
    private final Object[] remainingValues;
31

32
    SequenceOfReturnValues(@NonNull Expectation expectation, @Nullable Object firstValue,
33
            @NonNull Object[] remainingValues) {
1✔
34
        this.expectation = expectation;
1✔
35
        returnType = expectation.getReturnType();
1✔
36
        this.firstValue = firstValue;
1✔
37
        this.remainingValues = remainingValues;
1✔
38
    }
1✔
39

40
    boolean addResultWithSequenceOfValues() {
41
        boolean added = false;
1✔
42

43
        if (returnType != void.class) {
1!
44
            if (returnType.isArray()) {
1✔
45
                added = addValuesInArrayIfApplicable();
1✔
46
            } else if (Iterator.class.isAssignableFrom(returnType)) {
1✔
47
                added = addValuesInIteratorIfApplicable();
1✔
48
            } else if (Iterable.class.isAssignableFrom(returnType)) {
1✔
49
                added = addValuesInIterableIfApplicable();
1✔
50
            }
51
        }
52

53
        return added;
1✔
54
    }
55

56
    private boolean addValuesInArrayIfApplicable() {
57
        if (firstValue == null || !firstValue.getClass().isArray()) {
1!
58
            addArrayAsReturnValue();
1✔
59
            return true;
1✔
60
        }
61

62
        return false;
1✔
63
    }
64

65
    private void addArrayAsReturnValue() {
66
        Class<?> elementType = returnType.getComponentType();
1✔
67
        int n = 1 + remainingValues.length;
1✔
68
        Object values = Array.newInstance(elementType, n);
1✔
69
        setArrayElement(elementType, values, 0, firstValue);
1✔
70

71
        for (int i = 1; i < n; i++) {
1✔
72
            setArrayElement(elementType, values, i, remainingValues[i - 1]);
1✔
73
        }
74

75
        expectation.getResults().addReturnValue(values);
1✔
76
    }
1✔
77

78
    private static void setArrayElement(Class<?> elementType, Object array, int index, @Nullable Object value) {
79
        Object arrayValue = value;
1✔
80

81
        if (value != null) {
1✔
82
            if (elementType == byte.class || elementType == Byte.class) {
1✔
83
                arrayValue = ((Number) value).byteValue();
1✔
84
            } else if (elementType == short.class || elementType == Short.class) {
1✔
85
                arrayValue = ((Number) value).shortValue();
1✔
86
            }
87
        }
88

89
        Array.set(array, index, arrayValue);
1✔
90
    }
1✔
91

92
    private boolean addValuesInIteratorIfApplicable() {
93
        if (firstValue == null || !Iterator.class.isAssignableFrom(firstValue.getClass())) {
1!
94
            List<Object> values = new ArrayList<>(1 + remainingValues.length);
1✔
95
            addAllValues(values);
1✔
96
            expectation.getResults().addReturnValue(values.iterator());
1✔
97
            return true;
1✔
98
        }
99

100
        return false;
1✔
101
    }
102

103
    private void addAllValues(@NonNull Collection<Object> values) {
104
        values.add(firstValue);
1✔
105
        Collections.addAll(values, remainingValues);
1✔
106
    }
1✔
107

108
    private boolean addValuesInIterableIfApplicable() {
109
        if (firstValue == null || !Iterable.class.isAssignableFrom(firstValue.getClass())) {
1!
110
            Collection<Object> values;
111

112
            if (returnType.isAssignableFrom(List.class)) {
1✔
113
                values = new ArrayList<>(1 + remainingValues.length);
1✔
114
            } else if (returnType.isAssignableFrom(Set.class)) {
1✔
115
                values = new LinkedHashSet<>(1 + remainingValues.length);
1✔
116
            } else if (returnType.isAssignableFrom(SortedSet.class)) {
1!
117
                values = new TreeSet<>();
1✔
118
            } else {
119
                return false;
×
120
            }
121

122
            addReturnValues(values);
1✔
123
            return true;
1✔
124
        }
125

126
        return false;
1✔
127
    }
128

129
    private void addReturnValues(@NonNull Collection<Object> values) {
130
        addAllValues(values);
1✔
131
        expectation.getResults().addReturnValue(values);
1✔
132
    }
1✔
133
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc