aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/junit/ClassRule.java
diff options
context:
space:
mode:
authorPete Bentley <prb@google.com>2021-03-03 14:33:07 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-03-03 14:33:07 +0000
commita9a7715d84046efd231e038b0dc2f551daf61701 (patch)
tree10923530939981dd1dc5f44ceb6316fb9442428a /src/main/java/org/junit/ClassRule.java
parent138b64feb682b90292d36002f3aff9869d6a9e4b (diff)
parentc7a6d4ec7defd99aab81c3add6e2916629a79a24 (diff)
downloadjunit-a9a7715d84046efd231e038b0dc2f551daf61701.tar.gz
Merge changes I578a2676,I4b37c2d0,Id1e2d638,I1ebe37da,I6135799c am: b6446bec0a am: fcd81b3e3f am: c7a6d4ec7d
Original change: https://android-review.googlesource.com/c/platform/external/junit/+/1613132 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: Ie1a9bf8405e1b57da206312f5694e8c3ff5ce613
Diffstat (limited to 'src/main/java/org/junit/ClassRule.java')
-rw-r--r--src/main/java/org/junit/ClassRule.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/main/java/org/junit/ClassRule.java b/src/main/java/org/junit/ClassRule.java
index 02c40a7..94ee29f 100644
--- a/src/main/java/org/junit/ClassRule.java
+++ b/src/main/java/org/junit/ClassRule.java
@@ -28,7 +28,10 @@ import java.lang.annotation.Target;
* annotated {@link ClassRule}s on a class, they will be applied in an order
* that depends on your JVM's implementation of the reflection API, which is
* undefined, in general. However, Rules defined by fields will always be applied
- * before Rules defined by methods.
+ * after Rules defined by methods, i.e. the Statements returned by the former will
+ * be executed around those returned by the latter.
+ *
+ * <h3>Usage</h3>
* <p>
* For example, here is a test suite that connects to a server once before
* all the test classes run, and disconnects after they are finished:
@@ -79,9 +82,37 @@ import java.lang.annotation.Target;
* <p>
* For more information and more examples, see {@link org.junit.rules.TestRule}.
*
+ * <h3>Ordering</h3>
+ * <p>
+ * You can use {@link #order()} if you want to have control over the order in
+ * which the Rules are applied.
+ *
+ * <pre>
+ * public class ThreeClassRules {
+ * &#064;ClassRule(order = 0)
+ * public static LoggingRule outer = new LoggingRule("outer rule");
+ *
+ * &#064;ClassRule(order = 1)
+ * public static LoggingRule middle = new LoggingRule("middle rule");
+ *
+ * &#064;ClassRule(order = 2)
+ * public static LoggingRule inner = new LoggingRule("inner rule");
+ *
+ * // ...
+ * }
+ * </pre>
+ *
* @since 4.9
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface ClassRule {
+
+ /**
+ * Specifies the order in which rules are applied. The rules with a higher value are inner.
+ *
+ * @since 4.13
+ */
+ int order() default Rule.DEFAULT_ORDER;
+
}