001 package org.hamcrest;
002
003 /**
004 * A description of a Matcher. A Matcher will describe itself to a description
005 * which can later be used for reporting.
006 *
007 * @see Matcher#describeTo(Description)
008 */
009 public interface Description {
010 /**
011 * A description that consumes input but does nothing.
012 */
013 static final Description NONE = new NullDescription();
014
015 /**
016 * Appends some plain text to the description.
017 */
018 Description appendText(String text);
019
020 /**
021 * Appends the description of a {@link SelfDescribing} value to this description.
022 */
023 Description appendDescriptionOf(SelfDescribing value);
024
025 /**
026 * Appends an arbitary value to the description.
027 */
028 Description appendValue(Object value);
029
030 /**
031 * Appends a list of values to the description.
032 */
033 <T> Description appendValueList(String start, String separator, String end,
034 T... values);
035
036 /**
037 * Appends a list of values to the description.
038 */
039 <T> Description appendValueList(String start, String separator, String end,
040 Iterable<T> values);
041
042 /**
043 * Appends a list of {@link org.hamcrest.SelfDescribing} objects
044 * to the description.
045 */
046 Description appendList(String start, String separator, String end,
047 Iterable<? extends SelfDescribing> values);
048
049
050 public static final class NullDescription implements Description {
051 @Override
052 public Description appendDescriptionOf(SelfDescribing value) {
053 return this;
054 }
055
056 @Override
057 public Description appendList(String start, String separator,
058 String end, Iterable<? extends SelfDescribing> values) {
059 return this;
060 }
061
062 @Override
063 public Description appendText(String text) {
064 return this;
065 }
066
067 @Override
068 public Description appendValue(Object value) {
069 return this;
070 }
071
072 @Override
073 public <T> Description appendValueList(String start, String separator,
074 String end, T... values) {
075 return this;
076 }
077
078 @Override
079 public <T> Description appendValueList(String start, String separator,
080 String end, Iterable<T> values) {
081 return this;
082 }
083
084 @Override
085 public String toString() {
086 return "";
087 }
088 }
089 }