/** * Validate {@code candidate} checking if its value is present in the array supplied. */ @Override public void validate(Metadata<Enum> metadata, Object candidate) throws AssertionError { throwExceptionOnEmptyArray(metadata); boolean valid = false; String[] values = metadata.getAnnotation().value(); for (String value : values) { if (candidate == null) break; if (value.equals(candidate.toString())) { valid = true; break; } } String input = String.valueOf(candidate); if (input.isEmpty()) input = "empty"; String errorMessage = input + " not matches with any of specified values: " + Arrays.toString(values); if (!valid) throw new AssertionError(errorMessage); }
/** * Return as legal value a random one from the array supplied, or if legal value was set then return that. */ @Override public Object legal(Metadata<Enum> metadata) { throwExceptionOnEmptyArray(metadata); Enum enumAnnotation = metadata.getAnnotation(); String defaultLegal = enumAnnotation.legal(); if (!defaultLegal.isEmpty()) { return safetyCast.with(defaultLegal, metadata.getType()); } int length = enumAnnotation.value().length; int randomIndex = new Random().nextInt(length); String result = enumAnnotation.value()[randomIndex]; return safetyCast.with(result, metadata.getType()); }
private void throwExceptionOnEmptyArray(Metadata<Enum> metadata) { if (metadata.getAnnotation().value().length == 0) { String errorMessage = Messages.emptyEnumArray(metadata.getMockingClass(), metadata.getMethod()); throw new RuntimeException(errorMessage); } }