001 /*
002 * Created on Mar 19, 2007
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
005 * in compliance with 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
010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
011 * or implied. See the License for the specific language governing permissions and limitations under
012 * the License.
013 *
014 * Copyright @2007-2009 the original author or authors.
015 */
016 package org.fest.assertions;
017
018 import static org.fest.assertions.ErrorMessages.unexpectedNotEqual;
019 import static org.fest.assertions.Fail.failIfEqual;
020
021 /**
022 * Understands assertion methods for <code>boolean</code> values. To create a new instance of this class use the method
023 * <code>{@link Assertions#assertThat(boolean)}</code>.
024 *
025 * @author Alex Ruiz
026 * @author Yvonne Wang
027 * @author David DIDIER
028 */
029 public class BooleanAssert extends PrimitiveAssert {
030
031 private final boolean actual;
032
033 /**
034 * Creates a new </code>{@link BooleanAssert}</code>.
035 * @param actual the target to verify.
036 */
037 protected BooleanAssert(boolean actual) {
038 this.actual = actual;
039 }
040
041 /**
042 * Sets the description of the actual value, to be used in as message of any <code>{@link AssertionError}</code>
043 * thrown when an assertion fails. This method should be called before any assertion method, otherwise any assertion
044 * failure will not show the provided description.
045 * <p>
046 * For example:
047 * <pre>
048 * assertThat(value).<strong>as</strong>("Some value").isEqualTo(otherValue);
049 * </pre>
050 * </p>
051 * @param description the description of the actual value.
052 * @return this assertion object.
053 */
054 public BooleanAssert as(String description) {
055 description(description);
056 return this;
057 }
058
059 /**
060 * Alias for <code>{@link #as(String)}</code>, since "as" is a keyword in
061 * <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a>. This method should be called before any assertion
062 * method, otherwise any assertion failure will not show the provided description.
063 * <p>
064 * For example:
065 * <pre>
066 * assertThat(value).<strong>describedAs</strong>("Some value").isEqualTo(otherValue);
067 * </pre>
068 * </p>
069 * @param description the description of the actual value.
070 * @return this assertion object.
071 */
072 public BooleanAssert describedAs(String description) {
073 return as(description);
074 }
075
076 /**
077 * Sets the description of the actual value, to be used in as message of any <code>{@link AssertionError}</code>
078 * thrown when an assertion fails. This method should be called before any assertion method, otherwise any assertion
079 * failure will not show the provided description.
080 * <p>
081 * For example:
082 * <pre>
083 * assertThat(value).<strong>as</strong>(new BasicDescription("Some value")).isEqualTo(otherValue);
084 * </pre>
085 * </p>
086 * @param description the description of the actual value.
087 * @return this assertion object.
088 */
089 public BooleanAssert as(Description description) {
090 description(description);
091 return this;
092 }
093
094 /**
095 * Alias for <code>{@link #as(Description)}</code>, since "as" is a keyword in
096 * <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a>. This method should be called before any assertion
097 * method, otherwise any assertion failure will not show the provided description.
098 * <p>
099 * For example:
100 * <pre>
101 * assertThat(value).<strong>describedAs</strong>(new BasicDescription("Some value")).isEqualTo(otherValue);
102 * </pre>
103 * </p>
104 * @param description the description of the actual value.
105 * @return this assertion object.
106 */
107 public BooleanAssert describedAs(Description description) {
108 return as(description);
109 }
110
111 /**
112 * Verifies that the actual <code>boolean</code> value is <code>true</code>.
113 * @throws AssertionError if the actual <code>boolean</code> value is <code>false</code>.
114 */
115 public void isTrue() {
116 isEqualTo(true);
117 }
118
119 /**
120 * Verifies that the actual <code>boolean</code> value is <code>false</code>.
121 * @throws AssertionError if the actual <code>boolean</code> value is <code>true</code>.
122 */
123 public void isFalse() {
124 isEqualTo(false);
125 }
126
127 /**
128 * Verifies that the actual <code>boolean</code> is equal to the given one.
129 * @param expected the given <code>boolean</code> to compare the actual <code>boolean</code> to.
130 * @return this assertion object.
131 * @throws AssertionError if the actual <code>boolean</code> is not equal to the given one.
132 */
133 public BooleanAssert isEqualTo(boolean expected) {
134 if (actual == expected) return this;
135 failIfCustomMessageIsSet();
136 throw failure(unexpectedNotEqual(actual, expected));
137 }
138
139 /**
140 * Verifies that the actual <code>boolean</code> is not equal to the given one.
141 * @param other the given <code>boolean</code> to compare the actual <code>boolean</code> to.
142 * @return this assertion object.
143 * @throws AssertionError if the actual <code>boolean</code> is equal to the given one.
144 */
145 public BooleanAssert isNotEqualTo(boolean other) {
146 failIfEqual(customErrorMessage(), rawDescription(), actual, other);
147 return this;
148 }
149
150 /** {@inheritDoc} */
151 public BooleanAssert overridingErrorMessage(String message) {
152 replaceDefaultErrorMessagesWith(message);
153 return this;
154 }
155 }