@Test
public void test_isValid_string() {

	String fieldName = "value-field-Name";
	String collectionName = "value-collection-Name";
	Set<String> alreadySeen = new HashSet<>();
	// null/empty string value is invalid
	for (String value : new String[] { null, "", "  " }) {
		Assert.assertFalse(_validator.isUnique(value, alreadySeen, fieldName, collectionName, _failures));
		_utils.checkFailureForMissingValue(_failures, fieldName);
	}
	// value should not have been seen so far.
	String value = "blah";
	_failures.clear(); Assert.assertTrue(_validator.isUnique(value, alreadySeen, fieldName, collectionName, _failures));
	Assert.assertTrue(_failures.isEmpty());
	Assert.assertTrue(alreadySeen.contains(value));
	// since "blah" has already been seen doing this test again should fail
	_failures.clear(); Assert.assertFalse(_validator.isUnique(value, alreadySeen, fieldName, collectionName, _failures));
	_utils.checkFailureForSemanticError(_failures, fieldName, value);
	
	// not see check is done in a case-insenstive manner
	value = "bLaH";
	_failures.clear(); Assert.assertFalse(_validator.isUnique(value, alreadySeen, fieldName, collectionName, _failures));
	_utils.checkFailureForSemanticError(_failures, fieldName, value);
}