001package org.hamcrest;
002
003import java.io.IOException;
004
005/**
006 * A {@link Description} that is stored as a string.
007 */
008public class StringDescription extends BaseDescription {
009    private final Appendable out;
010
011    public StringDescription() {
012        this(new StringBuilder());
013    }
014
015    public StringDescription(Appendable out) {
016        this.out = out;
017    }
018    
019    /**
020     * Return the description of a {@link SelfDescribing} object as a String.
021     * 
022     * @param selfDescribing
023     *   The object to be described.
024     * @return
025     *   The description of the object.
026     */
027    public static String toString(SelfDescribing selfDescribing) {
028        return new StringDescription().appendDescriptionOf(selfDescribing).toString();
029    }
030
031    /**
032     * Alias for {@link #toString(SelfDescribing)}.
033     */
034    public static String asString(SelfDescribing selfDescribing) {
035        return toString(selfDescribing);
036    }
037
038    @Override
039    protected void append(String str) {
040        try {
041            out.append(str);
042        } catch (IOException e) {
043            throw new RuntimeException("Could not write description", e);
044        }
045    }
046
047    @Override
048    protected void append(char c) {
049        try {
050            out.append(c);
051        } catch (IOException e) {
052            throw new RuntimeException("Could not write description", e);
053        }
054    }
055    
056    /**
057     * Returns the description as a string.
058     */
059    @Override
060    public String toString() {
061        return out.toString();
062    }
063}