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 }