code: public static String friendlyName(Enum<?>[] arguments, Annotation[][] argumentAnnotations) {
      checkNotNull(arguments, "arguments");
      if (arguments.length == 0) {
        return "";
      }
  
      StringBuilder builder = new StringBuilder();
      for (int i = 0; i < arguments.length; i++) {
        Object argument = arguments[i];
        if (builder.length() > 0) {
          builder.append(", ");
        }
  
        Enum<?> value = (Enum<?>) argument;
        // Appends the enum name and value name. (e.g., Card.VISA)
        if (argumentAnnotations.length > i) {
          for (Annotation annotation : argumentAnnotations[i]) {
            if (annotation instanceof Name) {
              String name = ((Name) annotation).value();
              builder.append(name).append('=');
              break;
            }
          }
        }
        builder.append(value);
      }
      return builder.toString();
    }
docs: Creates an "exploded" test name which includes information about the {@code constructorArgs}
  and {@code methodArgs}. This will append both the enum class and enum value name for every
  argument in order.
  <p>
  For example, a method named "snackBreak" being invoked with constructor arguments
  {@code Drink.SODA} and {@code Snack.ALMONDS} and method arguments {@code BreakTime.AFTERNOON}
  would produce "snackBreak_SODA_ALMONDS_AFTERNOON".
  <p>
  If any of the arguments have an {@literal @}Name annotation, the enum class name will be
  replaced with the value provided in the annotation.
  
  @throws ClassCastException If any element of {@code constructorArgs} or {@code methodArgs} is
  not an enum value.