Merge pull request #34804 from eydunn

* gh-34804:
  Polish "Fix asymmetry of equals when element has trailing dashes"
  Fix asymmetry of equals when element has trailing dashes

Closes gh-34804
This commit is contained in:
Andy Wilkinson 2023-06-30 14:38:50 +01:00
commit 2b89b879f2
2 changed files with 27 additions and 5 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2022 the original author or authors.
* Copyright 2012-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -406,7 +406,7 @@ public final class ConfigurationPropertyName implements Comparable<Configuration
int i2 = 0;
while (i1 < l1) {
if (i2 >= l2) {
return false;
return remainderIsDashes(e1, i, i1);
}
char ch1 = e1.charAt(i, i1);
char ch2 = e2.charAt(i, i2);
@ -487,6 +487,21 @@ public final class ConfigurationPropertyName implements Comparable<Configuration
return true;
}
private boolean remainderIsDashes(Elements elements, int element, int index) {
if (elements.getType(element).isIndexed()) {
return false;
}
int length = elements.getLength(element);
do {
char c = Character.toLowerCase(elements.charAt(element, index++));
if (c != '-') {
return false;
}
}
while (index < length);
return true;
}
@Override
public int hashCode() {
int hashCode = this.hashCode;

View File

@ -693,15 +693,22 @@ class ConfigurationPropertyNameTests {
assertThat(n2).isNotEqualTo(n1);
}
@Test
void equalsWhenAdaptedNameMatchesDueToRemovalOfTrailingCharacters() {
// gh-30317
@Test // gh-30317
void equalsWhenAdaptedNameMatchesDueToRemovalOfTrailingNonUniformCharacters() {
ConfigurationPropertyName name1 = ConfigurationPropertyName.of("example.demo");
ConfigurationPropertyName name2 = ConfigurationPropertyName.adapt("example.demo$$", '.');
assertThat(name1).isEqualTo(name2);
assertThat(name2).isEqualTo(name1);
}
@Test // gh-34804
void equalsSymmetricWhenNameMatchesDueToIgnoredTrailingDashes() {
ConfigurationPropertyName n1 = ConfigurationPropertyName.of("example.demo");
ConfigurationPropertyName n2 = ConfigurationPropertyName.of("example.demo--");
assertThat(n2).isEqualTo(n1);
assertThat(n1).isEqualTo(n2);
}
@Test
void isValidWhenValidShouldReturnTrue() {
assertThat(ConfigurationPropertyName.isValid("")).isTrue();