001    /*
002     * Created on Jul 29, 2010
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 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 @2010-2011 the original author or authors.
014     */
015    package org.fest.assertions.core;
016    
017    import static java.lang.String.format;
018    import static org.fest.assertions.core.DescriptionValidations.checkIsNotNull;
019    import static org.fest.util.Strings.quote;
020    
021    import org.fest.assertions.description.*;
022    
023    /**
024     * Writable information about an assertion.
025     *
026     * @author Alex Ruiz
027     * @author Yvonne Wang
028     */
029    public final class WritableAssertionInfo implements AssertionInfo {
030    
031      private String overridingErrorMessage;
032      private Description description;
033    
034      /** {@inheritDoc} */
035      public String overridingErrorMessage() {
036        return overridingErrorMessage;
037      }
038    
039      /**
040       * Sets the message that will replace the default message of an assertion failure.
041       * @param newErrorMessage the new message. It can be {@code null}.
042       */
043      public void overridingErrorMessage(String newErrorMessage) {
044        overridingErrorMessage = newErrorMessage;
045      }
046    
047      /** {@inheritDoc} */
048      public Description description() {
049        return description;
050      }
051    
052      /**
053       * Returns the text of this object's description, or {@code null} if such description is {@code null}.
054       * @return the text of this object's description, or {@code null} if such description is {@code null}.
055       */
056      public String descriptionText() {
057        return description != null ? description.value() : null;
058      }
059    
060      /**
061       * Sets the description of an assertion.
062       * @param newDescription the new description.
063       * @throws NullPointerException if the given description is {@code null}.
064       * @see #description(Description)
065       */
066      public void description(String newDescription) {
067        description = checkIsNotNull(newDescription);
068      }
069    
070      /**
071       * Sets the description of an assertion. To remove or clear the description, pass a
072       * <code>{@link EmptyTextDescription}</code> as argument.
073       * @param newDescription the new description.
074       * @throws NullPointerException if the given description is {@code null}.
075       */
076      public void description(Description newDescription) {
077        description = checkIsNotNull(newDescription);
078      }
079    
080      /** {@inheritDoc} */
081      @Override public String toString() {
082        String format = "%s[overridingErrorMessage=%s, description=%s]";
083        return format(format, getClass().getSimpleName(), quote(overridingErrorMessage()), quote(descriptionText()));
084      }
085    }