16
16
17
17
package org .springframework .util ;
18
18
19
+ import java .io .File ;
19
20
import java .io .IOException ;
20
21
import java .math .BigDecimal ;
21
22
import java .math .BigInteger ;
23
+ import java .net .InetAddress ;
22
24
import java .net .URI ;
23
25
import java .net .URL ;
26
+ import java .net .UnknownHostException ;
27
+ import java .nio .charset .Charset ;
28
+ import java .nio .charset .StandardCharsets ;
29
+ import java .nio .file .Path ;
24
30
import java .sql .SQLException ;
25
31
import java .time .LocalDate ;
32
+ import java .time .ZoneId ;
26
33
import java .util .ArrayList ;
27
34
import java .util .Collections ;
35
+ import java .util .Currency ;
28
36
import java .util .Date ;
29
37
import java .util .HashMap ;
30
38
import java .util .HashSet ;
31
39
import java .util .List ;
32
40
import java .util .Locale ;
33
41
import java .util .Map ;
42
+ import java .util .Optional ;
34
43
import java .util .Set ;
44
+ import java .util .TimeZone ;
35
45
import java .util .UUID ;
46
+ import java .util .regex .Pattern ;
36
47
37
48
import org .junit .jupiter .api .Nested ;
38
49
import org .junit .jupiter .api .Test ;
@@ -826,6 +837,41 @@ void nullSafeConciseToStringForNull() {
826
837
assertThat (ObjectUtils .nullSafeConciseToString (null )).isEqualTo ("null" );
827
838
}
828
839
840
+ @ Test
841
+ void nullSafeConciseToStringForEmptyOptional () {
842
+ Optional <String > optional = Optional .empty ();
843
+ assertThat (ObjectUtils .nullSafeConciseToString (optional )).isEqualTo ("Optional.empty" );
844
+ }
845
+
846
+ @ Test
847
+ void nullSafeConciseToStringForNonEmptyOptionals () {
848
+ Optional <Tropes > optionalEnum = Optional .of (Tropes .BAR );
849
+ String expected = "Optional[BAR]" ;
850
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalEnum )).isEqualTo (expected );
851
+
852
+ String repeat100 = "X" .repeat (100 );
853
+ String repeat101 = "X" .repeat (101 );
854
+
855
+ Optional <String > optionalString = Optional .of (repeat100 );
856
+ expected = "Optional[%s]" .formatted (repeat100 );
857
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalString )).isEqualTo (expected );
858
+
859
+ optionalString = Optional .of (repeat101 );
860
+ expected = "Optional[%s]" .formatted (repeat100 + truncated );
861
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalString )).isEqualTo (expected );
862
+ }
863
+
864
+ @ Test
865
+ void nullSafeConciseToStringForNonEmptyOptionalCustomType () {
866
+ class CustomType {
867
+ }
868
+
869
+ CustomType customType = new CustomType ();
870
+ Optional <CustomType > optional = Optional .of (customType );
871
+ String expected = "Optional[%s]" .formatted (ObjectUtils .nullSafeConciseToString (customType ));
872
+ assertThat (ObjectUtils .nullSafeConciseToString (optional )).isEqualTo (expected );
873
+ }
874
+
829
875
@ Test
830
876
void nullSafeConciseToStringForClass () {
831
877
assertThat (ObjectUtils .nullSafeConciseToString (String .class )).isEqualTo ("java.lang.String" );
@@ -889,6 +935,30 @@ void nullSafeConciseToStringForUUID() {
889
935
assertThat (ObjectUtils .nullSafeConciseToString (id )).isEqualTo (id .toString ());
890
936
}
891
937
938
+ @ Test
939
+ void nullSafeConciseToStringForFile () {
940
+ String path = "/tmp/file.txt" ;
941
+ assertThat (ObjectUtils .nullSafeConciseToString (new File (path ))).isEqualTo (path );
942
+
943
+ path = "/tmp/" + "xyz" .repeat (32 );
944
+ assertThat (ObjectUtils .nullSafeConciseToString (new File (path )))
945
+ .hasSize (truncatedLength )
946
+ .startsWith (path .subSequence (0 , 100 ))
947
+ .endsWith (truncated );
948
+ }
949
+
950
+ @ Test
951
+ void nullSafeConciseToStringForPath () {
952
+ String path = "/tmp/file.txt" ;
953
+ assertThat (ObjectUtils .nullSafeConciseToString (Path .of (path ))).isEqualTo (path );
954
+
955
+ path = "/tmp/" + "xyz" .repeat (32 );
956
+ assertThat (ObjectUtils .nullSafeConciseToString (Path .of (path )))
957
+ .hasSize (truncatedLength )
958
+ .startsWith (path .subSequence (0 , 100 ))
959
+ .endsWith (truncated );
960
+ }
961
+
892
962
@ Test
893
963
void nullSafeConciseToStringForURI () {
894
964
String uri = "https://www.example.com/?foo=1&bar=2&baz=3" ;
@@ -913,11 +983,56 @@ void nullSafeConciseToStringForURL() throws Exception {
913
983
.endsWith (truncated );
914
984
}
915
985
986
+ @ Test
987
+ void nullSafeConciseToStringForInetAddress () {
988
+ InetAddress localhost = getLocalhost ();
989
+ assertThat (ObjectUtils .nullSafeConciseToString (localhost )).isEqualTo (localhost .toString ());
990
+ }
991
+
992
+ private static InetAddress getLocalhost () {
993
+ try {
994
+ return InetAddress .getLocalHost ();
995
+ }
996
+ catch (UnknownHostException ex ) {
997
+ return InetAddress .getLoopbackAddress ();
998
+ }
999
+ }
1000
+
1001
+ @ Test
1002
+ void nullSafeConciseToStringForCharset () {
1003
+ Charset charset = StandardCharsets .UTF_8 ;
1004
+ assertThat (ObjectUtils .nullSafeConciseToString (charset )).isEqualTo (charset .name ());
1005
+ }
1006
+
1007
+ @ Test
1008
+ void nullSafeConciseToStringForCurrency () {
1009
+ Currency currency = Currency .getInstance (Locale .US );
1010
+ assertThat (ObjectUtils .nullSafeConciseToString (currency )).isEqualTo (currency .toString ());
1011
+ }
1012
+
916
1013
@ Test
917
1014
void nullSafeConciseToStringForLocale () {
918
1015
assertThat (ObjectUtils .nullSafeConciseToString (Locale .GERMANY )).isEqualTo ("de_DE" );
919
1016
}
920
1017
1018
+ @ Test
1019
+ void nullSafeConciseToStringForRegExPattern () {
1020
+ Pattern pattern = Pattern .compile ("^(foo|bar)$" );
1021
+ assertThat (ObjectUtils .nullSafeConciseToString (pattern )).isEqualTo (pattern .toString ());
1022
+ }
1023
+
1024
+ @ Test
1025
+ void nullSafeConciseToStringForTimeZone () {
1026
+ TimeZone timeZone = TimeZone .getDefault ();
1027
+ assertThat (ObjectUtils .nullSafeConciseToString (timeZone )).isEqualTo (timeZone .getID ());
1028
+ }
1029
+
1030
+ @ Test
1031
+ void nullSafeConciseToStringForZoneId () {
1032
+ ZoneId zoneId = ZoneId .systemDefault ();
1033
+ assertThat (ObjectUtils .nullSafeConciseToString (zoneId )).isEqualTo (zoneId .getId ());
1034
+ }
1035
+
921
1036
@ Test
922
1037
void nullSafeConciseToStringForArraysAndCollections () {
923
1038
List <String > list = List .of ("a" , "b" , "c" );
0 commit comments