    001    package org.junit.experimental.theories;
    002
    003    import static java.lang.String.format;
    004
    005    public abstract class PotentialAssignment {
    006        public static class CouldNotGenerateValueException extends Exception {
    007            private static final long serialVersionUID = 1L;
    008
    009            public CouldNotGenerateValueException() {
    010            }
    011
    012            public CouldNotGenerateValueException(Throwable e) {
    013                super(e);
    014            }
    015        }
    016
    017        public static PotentialAssignment forValue(final String name, final Object value) {
    018            return new PotentialAssignment() {
    019                @Override
    020                public Object getValue() {
    021                    return value;
    022                }
    023
    024                @Override
    025                public String toString() {
    026                    return format("[%s]", value);
    027                }
    028
    029                @Override
    030                public String getDescription() {
    031                    String valueString;
    032
    033                    if (value == null) {
    034                        valueString = "null";
    035                    } else {
    036                        try {
    037                            valueString = format("\"%s\"", value);
    038                        } catch (Throwable e) {
    039                            valueString = format("[toString() threw %s: %s]",
    040                                                 e.getClass().getSimpleName(), e.getMessage());
    041                        }
    042                    }
    043
    044                    return format("%s <from %s>", valueString, name);
    045                }
    046            };
    047        }
    048
    049        public abstract Object getValue() throws CouldNotGenerateValueException;
    050
    051        public abstract String getDescription() throws CouldNotGenerateValueException;
    052    }