1 package org.apache.maven.surefire.util;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.Collections;
25 import java.util.HashSet;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.Set;
29 import org.apache.maven.surefire.testset.TestSetFailedException;
30
31
32
33
34
35
36
37 public class TestsToRun implements Iterable<Class>
38 {
39 private final List<Class> locatedClasses;
40
41
42
43
44
45
46 public TestsToRun( List<Class> locatedClasses )
47 {
48 this.locatedClasses = Collections.unmodifiableList( locatedClasses );
49 Set<Class> testSets = new HashSet<Class>();
50
51 for ( Class testClass : locatedClasses )
52 {
53 if ( testSets.contains( testClass ) )
54 {
55 throw new RuntimeException( "Duplicate test set '" + testClass.getName() + "'" );
56 }
57 testSets.add( testClass );
58 }
59 }
60
61 public static TestsToRun fromClass( Class clazz )
62 throws TestSetFailedException
63 {
64 return new TestsToRun( Arrays.<Class>asList( clazz ) );
65 }
66
67
68
69
70
71
72 public Iterator<Class> iterator()
73 {
74 return locatedClasses.iterator();
75 }
76
77 public String toString()
78 {
79 StringBuilder sb = new StringBuilder();
80 sb.append( "TestsToRun: [" );
81 Iterator it = iterator();
82 while ( it.hasNext() )
83 {
84 Class clazz = (Class) it.next();
85 sb.append( " " ).append( clazz.getName() );
86 }
87
88 sb.append( ']' );
89 return sb.toString();
90 }
91
92 public boolean containsAtLeast( int atLeast )
93 {
94 return containsAtLeast( iterator(), atLeast );
95 }
96
97 private boolean containsAtLeast( Iterator it, int atLeast )
98 {
99 for ( int i = 0; i < atLeast; i++ )
100 {
101 if ( !it.hasNext() )
102 {
103 return false;
104 }
105
106 it.next();
107 }
108
109 return true;
110 }
111
112 public boolean containsExactly( int items )
113 {
114 Iterator it = iterator();
115 return containsAtLeast( it, items ) && !it.hasNext();
116 }
117
118
119
120
121
122 public boolean allowEagerReading()
123 {
124 return true;
125 }
126
127 public Class[] getLocatedClasses()
128 {
129 if ( !allowEagerReading() )
130 {
131 throw new IllegalStateException( "Cannot eagerly read" );
132 }
133 List<Class> result = new ArrayList<Class>();
134 Iterator<Class> it = iterator();
135 while ( it.hasNext() )
136 {
137 result.add( it.next() );
138 }
139 return result.toArray( new Class[result.size()] );
140 }
141 }