001 package org.hamcrest;
002
003 import java.io.IOException;
004
005 /**
006 * A {@link Description} that is stored as a string.
007 */
008 public 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 }