AssertThatObjectImpl.java
- /**
- * 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 java.util.function.Function;
- import java.util.function.Supplier;
- import org.hamcrest.Description;
- import org.hamcrest.Matcher;
- import org.hamcrest.StringDescription;
- import ch.powerunit.AssertThatCastableObject;
- import ch.powerunit.AssertThatObject;
- import ch.powerunit.exception.AssumptionError;
- import ch.powerunit.exception.InternalError;
- public class AssertThatObjectImpl<T> implements AssertThatObject<T>,
- AssertThatCastableObject<T> {
- private final boolean assertion;
- private final Object underTest;
- public AssertThatObjectImpl(Object underTest,boolean assertion, String msg,
- Supplier<T> provider) {
- this.underTest = underTest;
- this.provider = provider;
- this.msg = msg;
- this.assertion = assertion;
- }
- private final Supplier<T> provider;
- private final String msg;
- @Override
- public boolean is(Matcher<? super T> matching) {
- Description message = new StringDescription();
- message.appendText("expecting ");
- matching.describeTo(message);
- message.appendText(" but ");
- T obj = provider.get();
- if (!matching.matches(obj)) {
- matching.describeMismatch(obj, message);
- if (assertion) {
- TestContextImpl<Object> ctx = DefaultPowerUnitRunnerImpl
- .getCurrentContext(underTest);
- AssertionError e = new AssertionError((msg == null ? "" : msg
- + "\n")
- + message.toString());
- if (ctx == null || ctx.isFastFail()) {
- throw e;
- } else {
- ctx.addAssertionError(e);
- return false;
- }
- } else {
- throw new AssumptionError((msg == null ? "" : msg + "\n")
- + message.toString());
- }
- }
- return true;
- }
- @Override
- public <P extends T> AssertThatObject<P> as(Class<P> clazz) {
- if (clazz == null) {
- throw new InternalError("clazz argument can't be null");
- }
- return new AssertThatObjectImpl<P>(underTest,assertion, msg, () -> {
- T v = provider.get();
- if (v == null) {
- return null;
- } else if (!clazz.isAssignableFrom(v.getClass())) {
- if (assertion) {
- throw new AssertionError((msg == null ? "" : msg + "\n")
- + "The value " + v + " can't be casted to "
- + clazz.getName());
- } else {
- throw new AssumptionError((msg == null ? "" : msg + "\n")
- + "The value " + v + " can't be casted to "
- + clazz.getName());
- }
- } else {
- return (P) v;
- }
- });
- }
- @Override
- public <P> AssertThatCastableObject<P> as(Class<P> targetClass,
- Function<T, P> converter) {
- if (targetClass == null) {
- throw new InternalError("targetClass argument can't be null");
- }
- return new AssertThatObjectImpl<P>(underTest,assertion, msg,
- () -> converter.apply(provider.get()));
- }
- }