From a4c5380ffe636edc0acbab144080adbc709d668c Mon Sep 17 00:00:00 2001 From: Kevin Cooney Date: Mon, 30 May 2011 20:28:12 -0700 Subject: [PATCH] Optimize Filter.intersect() for common cases - ALL.intersect(filter) - filter.intersect(ALL) - filter.intersect(filter) --- .../org/junit/runner/manipulation/Filter.java | 10 +++++++++- .../org/junit/tests/manipulation/FilterTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/junit/runner/manipulation/Filter.java b/src/main/java/org/junit/runner/manipulation/Filter.java index f5e0e09bd872..c0f31b0b40c4 100644 --- a/src/main/java/org/junit/runner/manipulation/Filter.java +++ b/src/main/java/org/junit/runner/manipulation/Filter.java @@ -30,7 +30,12 @@ public String describe() { @Override public void apply(Object child) throws NoTestsRemainException { // do nothing - }; + } + + @Override + public Filter intersect(Filter second) { + return second; + } }; /** @@ -89,6 +94,9 @@ public void apply(Object child) throws NoTestsRemainException { * by this Filter and {@code second} */ public Filter intersect(final Filter second) { + if (second == this || second == ALL) { + return this; + } final Filter first= this; return new Filter() { @Override diff --git a/src/test/java/org/junit/tests/manipulation/FilterTest.java b/src/test/java/org/junit/tests/manipulation/FilterTest.java index 16c1ff0c8d1d..242e9907f242 100644 --- a/src/test/java/org/junit/tests/manipulation/FilterTest.java +++ b/src/test/java/org/junit/tests/manipulation/FilterTest.java @@ -1,6 +1,7 @@ package org.junit.tests.manipulation; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; import org.junit.Test; import org.junit.runner.Description; import org.junit.runner.manipulation.Filter; @@ -31,4 +32,18 @@ public void intersectionText() { assertEquals("a and b", a.intersect(b).describe()); assertEquals("b and a", b.intersect(a).describe()); } + + @Test + public void intersectSelf() { + NamedFilter a= new NamedFilter("a"); + assertSame(a, a.intersect(a)); + } + + @Test + public void intersectAll() { + NamedFilter a= new NamedFilter("a"); + assertSame(a, a.intersect(Filter.ALL)); + assertSame(a, Filter.ALL.intersect(a)); + assertSame(Filter.ALL, Filter.ALL.intersect(Filter.ALL)); + } }