ClassName implements Serializable { public static boolean isClassNameValid(String className) { if (StringUtils.isBlank(className)) { return false; } String regex = "([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*"; return Pattern.matches(regex, className); } ClassName(String className);  ClassName(String className, String jsonInitProperties); @JsonCreator  ClassName(@JsonProperty("className") String className,
      @JsonProperty("initProperties") Properties properties); String getClassName(); Properties getInitProperties(); @Override int hashCode(); @Override boolean equals(Object o); static boolean isClassNameValid(String className); static final ClassName EMPTY; }
@Test public void isValidClassNameGivenEmptyStringReturnsFalse() { assertThat(isClassNameValid("")).isFalse(); }
@Test public void isValidClassNameGivenDashReturnsFalse() { assertThat(isClassNameValid("-")).isFalse(); }
@Test public void isValidClassNameGivenSpaceReturnsFalse() { assertThat(isClassNameValid(" ")).isFalse(); }
@Test public void isValidClassNameGivenCommaReturnsFalse() { assertThat(isClassNameValid(",")).isFalse(); }
@Test public void isValidClassNameGivenLeadingDotReturnsFalse() { assertThat(isClassNameValid(".a")).isFalse(); }
@Test public void isValidClassNameGivenTrailingDotReturnsFalse() { assertThat(isClassNameValid("a.")).isFalse(); }
@Test public void isValidClassNameGivenTwoDotsReturnsFalse() { assertThat(isClassNameValid("a..a")).isFalse(); }
@Test public void isValidClassNameGivenNameThatStartsWithDigitReturnsFalse() { assertThat(isClassNameValid("9a")).isFalse(); }
@Test public void isValidClassNameGivenNameReturnsTrue() { assertThat(isClassNameValid("a9")).isTrue(); }
@Test public void isValidClassNameGivenDotDelimitedNamesReturnsTrue() { assertThat(isClassNameValid("$a1._b2.c3$")).isTrue(); }
@Test public void isValidClassNameGivenMiddleNameThatStartsWithDigitReturnsFalse() { assertThat(isClassNameValid("a1.2b.c3")).isFalse(); }