• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2001-2009 OFFIS, Tammo Freese
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.easymock.internal;
17 
18 import java.io.Serializable;
19 import java.util.ArrayList;
20 import java.util.LinkedList;
21 import java.util.List;
22 
23 public class Results implements Serializable {
24 
25     private static final long serialVersionUID = -2722051869610289637L;
26 
27     private int callCount;
28 
29     private final LinkedList<Range> ranges = new LinkedList<Range>();
30 
31     private final List<Result> results = new ArrayList<Result>();
32 
add(Result result, Range range)33     public void add(Result result, Range range) {
34         if (!ranges.isEmpty()) {
35             Range lastRange = ranges.getLast();
36             if (!lastRange.hasFixedCount())
37                 throw new RuntimeExceptionWrapper(
38                         new IllegalStateException(
39                                 "last method called on mock already has a non-fixed count set."));
40         }
41         ranges.add(range);
42         results.add(result);
43     }
44 
next()45     public Result next() {
46         int currentPosition = 0;
47         for (int i = 0; i < ranges.size(); i++) {
48             Range interval = ranges.get(i);
49             if (interval.hasOpenCount()) {
50                 callCount += 1;
51                 return results.get(i);
52             }
53             currentPosition += interval.getMaximum();
54             if (currentPosition > callCount) {
55                 callCount += 1;
56                 return results.get(i);
57             }
58         }
59         return null;
60     }
61 
hasValidCallCount()62     public boolean hasValidCallCount() {
63         return getMainInterval().contains(getCallCount());
64     }
65 
66     @Override
toString()67     public String toString() {
68         return getMainInterval().expectedCount();
69     }
70 
getMainInterval()71     private Range getMainInterval() {
72         int min = 0, max = 0;
73 
74         for (Range interval : ranges) {
75             min += interval.getMinimum();
76             if (interval.hasOpenCount() || max == Integer.MAX_VALUE) {
77                 max = Integer.MAX_VALUE;
78             } else {
79                 max += interval.getMaximum();
80             }
81         }
82 
83         return new Range(min, max);
84     }
85 
getCallCount()86     public int getCallCount() {
87         return callCount;
88     }
89 }
90