Merge branch '5.3.x'

This commit is contained in:
Sam Brannen
2022-07-04 19:31:47 +02:00
8 changed files with 84 additions and 29 deletions

View File

@@ -232,21 +232,23 @@ public abstract class StringUtils {
}
/**
* Trim <i>all</i> whitespace from the given {@code String}:
* Trim <em>all</em> whitespace from the given {@code CharSequence}:
* leading, trailing, and in between characters.
* @param str the {@code String} to check
* @return the trimmed {@code String}
* @param text the {@code CharSequence} to check
* @return the trimmed {@code CharSequence}
* @since 5.3.22
* @see #trimAllWhitespace(String)
* @see java.lang.Character#isWhitespace
*/
public static String trimAllWhitespace(String str) {
if (!hasLength(str)) {
return str;
public static CharSequence trimAllWhitespace(CharSequence text) {
if (!hasLength(text)) {
return text;
}
int len = str.length();
StringBuilder sb = new StringBuilder(str.length());
int len = text.length();
StringBuilder sb = new StringBuilder(text.length());
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
char c = text.charAt(i);
if (!Character.isWhitespace(c)) {
sb.append(c);
}
@@ -254,6 +256,21 @@ public abstract class StringUtils {
return sb.toString();
}
/**
* Trim <em>all</em> whitespace from the given {@code String}:
* leading, trailing, and in between characters.
* @param str the {@code String} to check
* @return the trimmed {@code String}
* @see #trimAllWhitespace(CharSequence)
* @see java.lang.Character#isWhitespace
*/
public static String trimAllWhitespace(String str) {
if (str == null) {
return null;
}
return trimAllWhitespace((CharSequence) str).toString();
}
/**
* Trim leading whitespace from the given {@code String}.
* @param str the {@code String} to check

View File

@@ -174,7 +174,7 @@ public final class DataSize implements Comparable<DataSize>, Serializable {
public static DataSize parse(CharSequence text, @Nullable DataUnit defaultUnit) {
Assert.notNull(text, "Text must not be null");
try {
Matcher matcher = DataSizeUtils.PATTERN.matcher(text);
Matcher matcher = DataSizeUtils.PATTERN.matcher(StringUtils.trimAllWhitespace(text));
Assert.state(matcher.matches(), "Does not match data size pattern");
DataUnit unit = DataSizeUtils.determineDataUnit(matcher.group(2), defaultUnit);
long amount = Long.parseLong(matcher.group(1));

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -17,6 +17,8 @@
package org.springframework.util.unit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
@@ -25,6 +27,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
* Tests for {@link DataSize}.
*
* @author Stephane Nicoll
* @author Sam Brannen
*/
class DataSizeTests {
@@ -128,9 +131,17 @@ class DataSizeTests {
assertThat(DataSize.parse("-1", DataUnit.KILOBYTES)).isEqualTo(DataSize.ofKilobytes(-1));
}
@Test
void parseWithBytes() {
assertThat(DataSize.parse("1024B")).isEqualTo(DataSize.ofKilobytes(1));
@ParameterizedTest(name = "[{index}] text = ''{0}''")
@ValueSource(strings = {
"1024B",
"1024 B",
"1024B ",
" 1024B",
" 1024B ",
"\t1024 B\t"
})
void parseWithBytes(CharSequence text) {
assertThat(DataSize.parse(text)).isEqualTo(DataSize.ofKilobytes(1));
}
@Test
@@ -210,9 +221,12 @@ class DataSizeTests {
@Test
void parseWithUnsupportedUnit() {
assertThatIllegalArgumentException().isThrownBy(() ->
DataSize.parse("3WB"))
assertThatIllegalArgumentException()
.isThrownBy(() -> DataSize.parse("3WB"))
.withMessage("'3WB' is not a valid data size");
assertThatIllegalArgumentException()
.isThrownBy(() -> DataSize.parse("3 WB"))
.withMessage("'3 WB' is not a valid data size");
}
}