@@ -0,0 +1,1257 @@
+package TestUtil;%0A%0Aimport org.hamcrest.BaseMatcher;%0Aimport org.hamcrest.Description;%0Aimport org.hamcrest.Matcher;%0Aimport org.junit.Assert;%0A%0Apublic class TestUtil %7B%0A    public static void assertThrows(CheckedFunction fn, Class%3C? extends Exception%3E exceptionType, Matcher%3CException%3E%0A            exceptionMatcher) throws Exception %7B%0A        try %7B%0A            fn.apply();%0A            Assert.fail();%0A        %7D catch (Exception maybeExpected) %7B%0A            if (!exceptionType.isInstance(maybeExpected)) %7B%0A                throw maybeExpected;%0A            %7D%0A            Assert.assertThat(maybeExpected, exceptionMatcher);%0A        %7D%0A    %7D%0A%0A    public static Matcher%3CException%3E exceptionMessageMatches(String pattern) %7B%0A        return new BaseMatcher%3CException%3E() %7B%0A            @Override%0A            public void describeTo(Description description) %7B%0A                description.appendText(%22Should match pattern %22 + pattern);%0A            %7D%0A%0A            @Override%0A            public boolean%0A            matches(Object item) %7B%0A                return ((Exception) item).getMessage().matches(pattern);%0A            %7D%0A        %7D;%0A    %7D%0A%0A    @FunctionalInterface%0A    public interface CheckedFunction %7B%0A        void apply() throws Exception;%0A    %7D%0A%0A    private TestUtil() %7B%7D%0A%7D%0A

Add assertThrows convenience function and a new home :)