001package org.junit.experimental.theories.internal; 002 003import java.util.Arrays; 004import java.util.Collection; 005import java.util.Iterator; 006 007public class ParameterizedAssertionError extends AssertionError { 008 private static final long serialVersionUID = 1L; 009 010 public ParameterizedAssertionError(Throwable targetException, 011 String methodName, Object... params) { 012 super(String.format("%s(%s)", methodName, join(", ", params))); 013 this.initCause(targetException); 014 } 015 016 @Override 017 public boolean equals(Object obj) { 018 return obj instanceof ParameterizedAssertionError && toString().equals(obj.toString()); 019 } 020 021 @Override 022 public int hashCode() { 023 return toString().hashCode(); 024 } 025 026 public static String join(String delimiter, Object... params) { 027 return join(delimiter, Arrays.asList(params)); 028 } 029 030 public static String join(String delimiter, Collection<Object> values) { 031 StringBuilder sb = new StringBuilder(); 032 Iterator<Object> iter = values.iterator(); 033 while (iter.hasNext()) { 034 Object next = iter.next(); 035 sb.append(stringValueOf(next)); 036 if (iter.hasNext()) { 037 sb.append(delimiter); 038 } 039 } 040 return sb.toString(); 041 } 042 043 private static String stringValueOf(Object next) { 044 try { 045 return String.valueOf(next); 046 } catch (Throwable e) { 047 return "[toString failed]"; 048 } 049 } 050}