/** * Powerunit - A JDK1.8 test framework * Copyright (C) 2014 Mathieu Boretti. * * This file is part of Powerunit * * Powerunit is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Powerunit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Powerunit. If not, see <http://www.gnu.org/licenses/>. */ package ch.powerunit.impl; import org.hamcrest.Matcher; import ch.powerunit.AssertThatException; import ch.powerunit.Statement; import ch.powerunit.TestSuite; import ch.powerunit.exception.AssumptionError; public class AssertThatExceptionImpl<P, T extends Throwable> implements AssertThatException<T>, TestSuite { private final boolean assertion; private final Object underTest; public AssertThatExceptionImpl(Object underTest, boolean assertion, Statement<P, T> runnable, P param, String msg) { this.runnable = runnable; this.msg = msg; this.param = param; this.assertion = assertion; this.underTest = underTest; } private final Statement<P, T> runnable; private final String msg; private final P param; @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public boolean throwException(Matcher<? super T> matching) { try { runnable.run(param); } catch (Throwable t) {// NOSONAR // As we really want all error if (assertion) { return assertThat(msg, t).is((Matcher) matching); } else { return assumeThat(msg, t).is((Matcher) matching); } } if (assertion) { TestContextImpl<Object> ctx = DefaultPowerUnitRunnerImpl .getCurrentContext(underTest); AssertionError e = new AssertionError((msg == null ? "" : msg + "\n") + "An exception was expected, but none was thrown"); if (ctx == null || ctx.isFastFail()) { throw e; } else { ctx.addAssertionError(e); return false; } } else { throw new AssumptionError((msg == null ? "" : msg + "\n") + "An exception was expected, but none was thrown"); } } }