001 /* 002 * Created on Jan 28, 2011 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this Throwable except in compliance with 005 * the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 010 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 011 * specific language governing permissions and limitations under the License. 012 * 013 * Copyright @2011 the original author or authors. 014 */ 015 package org.fest.assertions.api; 016 017 import org.fest.assertions.internal.*; 018 import org.fest.util.VisibleForTesting; 019 020 /** 021 * Assertion methods for <code>{@link Throwable}</code>s. 022 * <p> 023 * To create a new instance of this class, invoke <code>{@link Assertions#assertThat(Throwable)}</code>. 024 * </p> 025 * 026 * @author David DIDIER 027 * @author Alex Ruiz 028 * @author Joel Costigliola 029 */ 030 public class ThrowableAssert extends AbstractAssert<ThrowableAssert, Throwable> { 031 032 @VisibleForTesting Throwables throwables = Throwables.instance(); 033 034 protected ThrowableAssert(Throwable actual) { 035 super(actual, ThrowableAssert.class); 036 } 037 038 /** 039 * Verifies that the actual {@code Throwable} is an instance of the given type. 040 * @param type the type to check the actual {@code Throwable} against. 041 * @return this assertion object. 042 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 043 * @throws AssertionError if the actual {@code Throwable} is not an instance of the given type. 044 * @throws NullPointerException if the given type is {@code null}. 045 */ 046 public ThrowableAssert isInstanceOf(Class<? extends Throwable> type) { 047 Objects.instance().assertIsInstanceOf(info, actual, type); 048 return this; 049 } 050 051 /** 052 * Verifies that the actual {@code Throwable} is an instance of the given type. In order for the assertion to 053 * pass, the type of the actual {@code Throwable} has to be exactly the same as the given type. 054 * @param type the type to check the actual {@code Throwable} against. 055 * @return this assertion object. 056 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 057 * @throws AssertionError if the actual {@code Throwable} is not an instance of the given type. 058 * @throws NullPointerException if the given type is {@code null}. 059 */ 060 public ThrowableAssert isExactlyInstanceOf(Class<? extends Throwable> type) { 061 throwables.assertIsExactlyInstanceOf(info, actual, type); 062 return this; 063 } 064 065 /** 066 * Verifies that the message of the actual {@code Throwable} is equal to the given one. 067 * @param message the expected message. 068 * @return this assertion object. 069 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 070 * @throws AssertionError if the message of the actual {@code Throwable} is not equal to the given one. 071 */ 072 public ThrowableAssert hasMessage(String message) { 073 throwables.assertHasMessage(info, actual, message); 074 return this; 075 } 076 077 /** 078 * Verifies that the actual {@code Throwable} does not have a cause. 079 * @return this assertion object. 080 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 081 * @throws AssertionError if the actual {@code Throwable} has a cause. 082 */ 083 public ThrowableAssert hasNoCause() { 084 throwables.assertHasNoCause(info, actual); 085 return this; 086 } 087 088 /** 089 * Verifies that the message of the actual {@code Throwable} starts with the given description. 090 * @param description the description expected to start the actual {@code Throwable}'s message. 091 * @return this assertion object. 092 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 093 * @throws AssertionError if the message of the actual {@code Throwable} does not start with the given description. 094 */ 095 public ThrowableAssert hasMessageStartingWith(String description) { 096 throwables.assertHasMessageStartingWith(info, actual, description); 097 return this; 098 } 099 100 /** 101 * Verifies that the message of the actual {@code Throwable} contains with the given description. 102 * @param description the description expected to be contained in the actual {@code Throwable}'s message. 103 * @return this assertion object. 104 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 105 * @throws AssertionError if the message of the actual {@code Throwable} does not contain the given description. 106 */ 107 public ThrowableAssert hasMessageContaining(String description) { 108 throwables.assertHasMessageContaining(info, actual, description); 109 return this; 110 } 111 112 /** 113 * Verifies that the message of the actual {@code Throwable} ends with the given description. 114 * @param description the description expected to end the actual {@code Throwable}'s message. 115 * @return this assertion object. 116 * @throws AssertionError if the actual {@code Throwable} is {@code null}. 117 * @throws AssertionError if the message of the actual {@code Throwable} does not end with the given description. 118 */ 119 public ThrowableAssert hasMessageEndingWith(String description) { 120 throwables.assertHasMessageEndingWith(info, actual, description); 121 return this; 122 } 123 124 }