KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > junitx > framework > OrderedTestSuite


1 /*
2  * The JUnit-addons Software License, Version 1.0
3  * (based on the Apache Software License, Version 1.1)
4  *
5  * Copyright (c) 2002-2003 Vladimir R. Bossicard. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if
20  * any, must include the following acknowlegement:
21  * "This product includes software developed by Vladimir R.
22  * Bossicard as well as other contributors
23  * (http://junit-addons.sourceforge.net/)."
24  * Alternately, this acknowlegement may appear in the software itself,
25  * if and wherever such third-party acknowlegements normally appear.
26  *
27  * 4. The name "JUnit-addons" must not be used to endorse or promote
28  * products derived from this software without prior written
29  * permission. For written permission, please contact
30  * vbossica@users.sourceforge.net.
31  *
32  * 5. Products derived from this software may not be called "JUnit-addons"
33  * nor may "JUnit-addons" appear in their names without prior written
34  * permission of the project managers.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ======================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals. For more information on the JUnit-addons Project, please
52  * see <http://junit-addons.sourceforge.net/>.
53  */

54
55 package junitx.framework;
56
57 import junit.framework.Test;
58
59 /**
60  * Constructs an alphabetically ordered suite of tests.<p>
61  *
62  * <b>Warning</b>: if you are tempted to use this class, think twice before
63  * doing it. Ideally the tests should be independant from one another so first
64  * try to refactor them and use the <tt>TestSetup</tt> class to initialize them.
65  * But if you still want to use this class... it's up to you.
66  *
67  * @version $Revision: 1.5 $ $Date: 2003/03/30 19:02:57 $
68  * @author <a HREF="mailto:vbossica@users.sourceforge.net">Vladimir R. Bossicard</a>
69  */

70 public class OrderedTestSuite
71         extends TestSuite {
72
73     /**
74      * Creates an <tt>OrderedTestSuite</tt> with no name.
75      */

76     public OrderedTestSuite() {
77         super();
78     }
79
80     /**
81      * Constructs a <tt>OrderedTestSuite</tt> from the given class. Adds all
82      * the methods starting with "test" as test cases to the suite.<p>
83      * The method calls <tt>addTest</tt> for each insertion of test methods
84      * found so the sorting is done for each method, and not at the end.
85      */

86     public OrderedTestSuite(final Class JavaDoc theClass) {
87         super(theClass);
88     }
89
90     /**
91      * Creates an <tt>OrderedTestSuite</tt> with the given name.
92      */

93     public OrderedTestSuite(String JavaDoc name) {
94         super(name);
95     }
96
97     /**
98      * Adds a test to the suite. The elements are sorted after beeing inserted
99      * into the vector.
100      */

101     public void addTest(Test test) {
102         fTests.add(test);
103         sortTests(0, fTests.size() - 1);
104     }
105
106     protected void sortTests(int left, int right) {
107         int oleft = left;
108         int oright = right;
109         String JavaDoc mid = ((Test) this.fTests.get((left + right) / 2)).toString();
110         do {
111             while ((((Test) this.fTests.get(left)).toString()).compareTo(mid) < 0) {
112                 left++;
113             }
114             while (mid.compareTo(((Test) this.fTests.get(right)).toString()) < 0) {
115                 right--;
116             }
117             if (left <= right) {
118                 Object JavaDoc tmp = this.fTests.get(left);
119                 this.fTests.set(left, this.fTests.get(right));
120                 this.fTests.set(right, tmp);
121
122                 left++;
123                 right--;
124             }
125         } while (left <= right);
126
127         if (oleft < right) {
128             sortTests(oleft, right);
129         }
130         if (left < oright) {
131             sortTests(left, oright);
132         }
133     }
134
135 }
136
Popular Tags