Author: stephenc Date: Wed May 25 22:19:44 2011 New Revision: 1127708 URL: http://svn.apache.org/viewvc?rev=1127708&view=rev Log: add a rule to help when we start fixing the bugs in plexus
Added: maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/apache/maven/tck/FixPlexusBugs.java Added: maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/apache/maven/tck/FixPlexusBugs.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/apache/maven/tck/FixPlexusBugs.java?rev=1127708&view=auto ============================================================================== --- maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/apache/maven/tck/FixPlexusBugs.java (added) +++ maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-tck/src/test/java/org/apache/maven/tck/FixPlexusBugs.java Wed May 25 22:19:44 2011 @@ -0,0 +1,49 @@ +package org.apache.maven.tck; + +import org.junit.rules.MethodRule; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.Statement; + +/** + * A rule that checks for a resource called {@code /FixPlexusBugs.enforce} and if it exists, will invert the test + * result of any tests annotated with {@link ReproducesPlexusBug}. Obviously this invertion only occurs in test classes + * with this rule, e.g. have a public field like {@code @Rule public FixPlexusBugs fixPlexusBugs = new FixPlexusBugs();} + */ +public class FixPlexusBugs + implements MethodRule +{ + public Statement apply( final Statement base, FrameworkMethod method, Object target ) + { + if ( method.getAnnotation( ReproducesPlexusBug.class ) == null ) + { + return base; + } + + if ( getClass().getResource( "/" + getClass().getSimpleName() + ".enforce" ) == null ) + { + return base; + } + return new Statement() + { + @Override + public void evaluate() + throws Throwable + { + boolean passed; + try + { + base.evaluate(); + passed = true; + } + catch ( AssertionError t ) + { + passed = false; + } + if ( passed ) + { + throw new AssertionError( "Test verifies a bug in original code that should now be fixed" ); + } + } + }; + } +}