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 .Paths ;
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 .Arrays ;
28
35
import java .util .Collections ;
36
+ import java .util .Currency ;
29
37
import java .util .Date ;
30
38
import java .util .HashMap ;
31
39
import java .util .HashSet ;
32
40
import java .util .List ;
33
41
import java .util .Locale ;
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 ;
@@ -851,6 +862,41 @@ void nullSafeConciseToStringForNull() {
851
862
assertThat (ObjectUtils .nullSafeConciseToString (null )).isEqualTo ("null" );
852
863
}
853
864
865
+ @ Test
866
+ void nullSafeConciseToStringForEmptyOptional () {
867
+ Optional <String > optional = Optional .empty ();
868
+ assertThat (ObjectUtils .nullSafeConciseToString (optional )).isEqualTo ("Optional.empty" );
869
+ }
870
+
871
+ @ Test
872
+ void nullSafeConciseToStringForNonEmptyOptionals () {
873
+ Optional <Tropes > optionalEnum = Optional .of (Tropes .BAR );
874
+ String expected = "Optional[BAR]" ;
875
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalEnum )).isEqualTo (expected );
876
+
877
+ String repeat100 = repeat ("X" , 100 );
878
+ String repeat101 = repeat ("X" , 101 );
879
+
880
+ Optional <String > optionalString = Optional .of (repeat100 );
881
+ expected = String .format ("Optional[%s]" , repeat100 );
882
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalString )).isEqualTo (expected );
883
+
884
+ optionalString = Optional .of (repeat101 );
885
+ expected = String .format ("Optional[%s]" , repeat100 + truncated );
886
+ assertThat (ObjectUtils .nullSafeConciseToString (optionalString )).isEqualTo (expected );
887
+ }
888
+
889
+ @ Test
890
+ void nullSafeConciseToStringForNonEmptyOptionalCustomType () {
891
+ class CustomType {
892
+ }
893
+
894
+ CustomType customType = new CustomType ();
895
+ Optional <CustomType > optional = Optional .of (customType );
896
+ String expected = String .format ("Optional[%s]" , ObjectUtils .nullSafeConciseToString (customType ));
897
+ assertThat (ObjectUtils .nullSafeConciseToString (optional )).isEqualTo (expected );
898
+ }
899
+
854
900
@ Test
855
901
void nullSafeConciseToStringForClass () {
856
902
assertThat (ObjectUtils .nullSafeConciseToString (String .class )).isEqualTo ("java.lang.String" );
@@ -914,6 +960,30 @@ void nullSafeConciseToStringForUUID() {
914
960
assertThat (ObjectUtils .nullSafeConciseToString (id )).isEqualTo (id .toString ());
915
961
}
916
962
963
+ @ Test
964
+ void nullSafeConciseToStringForFile () {
965
+ String path = "/tmp/file.txt" ;
966
+ assertThat (ObjectUtils .nullSafeConciseToString (new File (path ))).isEqualTo (path );
967
+
968
+ path = "/tmp/" + repeat ("xyz" , 32 );
969
+ assertThat (ObjectUtils .nullSafeConciseToString (new File (path )))
970
+ .hasSize (truncatedLength )
971
+ .startsWith (path .subSequence (0 , 100 ))
972
+ .endsWith (truncated );
973
+ }
974
+
975
+ @ Test
976
+ void nullSafeConciseToStringForPath () {
977
+ String path = "/tmp/file.txt" ;
978
+ assertThat (ObjectUtils .nullSafeConciseToString (Paths .get (path ))).isEqualTo (path );
979
+
980
+ path = "/tmp/" + repeat ("xyz" , 32 );
981
+ assertThat (ObjectUtils .nullSafeConciseToString (Paths .get (path )))
982
+ .hasSize (truncatedLength )
983
+ .startsWith (path .subSequence (0 , 100 ))
984
+ .endsWith (truncated );
985
+ }
986
+
917
987
@ Test
918
988
void nullSafeConciseToStringForURI () {
919
989
String uri = "https://www.example.com/?foo=1&bar=2&baz=3" ;
@@ -938,11 +1008,56 @@ void nullSafeConciseToStringForURL() throws Exception {
938
1008
.endsWith (truncated );
939
1009
}
940
1010
1011
+ @ Test
1012
+ void nullSafeConciseToStringForInetAddress () {
1013
+ InetAddress localhost = getLocalhost ();
1014
+ assertThat (ObjectUtils .nullSafeConciseToString (localhost )).isEqualTo (localhost .toString ());
1015
+ }
1016
+
1017
+ private InetAddress getLocalhost () {
1018
+ try {
1019
+ return InetAddress .getLocalHost ();
1020
+ }
1021
+ catch (UnknownHostException ex ) {
1022
+ return InetAddress .getLoopbackAddress ();
1023
+ }
1024
+ }
1025
+
1026
+ @ Test
1027
+ void nullSafeConciseToStringForCharset () {
1028
+ Charset charset = StandardCharsets .UTF_8 ;
1029
+ assertThat (ObjectUtils .nullSafeConciseToString (charset )).isEqualTo (charset .name ());
1030
+ }
1031
+
1032
+ @ Test
1033
+ void nullSafeConciseToStringForCurrency () {
1034
+ Currency currency = Currency .getInstance (Locale .US );
1035
+ assertThat (ObjectUtils .nullSafeConciseToString (currency )).isEqualTo (currency .toString ());
1036
+ }
1037
+
941
1038
@ Test
942
1039
void nullSafeConciseToStringForLocale () {
943
1040
assertThat (ObjectUtils .nullSafeConciseToString (Locale .GERMANY )).isEqualTo ("de_DE" );
944
1041
}
945
1042
1043
+ @ Test
1044
+ void nullSafeConciseToStringForRegExPattern () {
1045
+ Pattern pattern = Pattern .compile ("^(foo|bar)$" );
1046
+ assertThat (ObjectUtils .nullSafeConciseToString (pattern )).isEqualTo (pattern .toString ());
1047
+ }
1048
+
1049
+ @ Test
1050
+ void nullSafeConciseToStringForTimeZone () {
1051
+ TimeZone timeZone = TimeZone .getDefault ();
1052
+ assertThat (ObjectUtils .nullSafeConciseToString (timeZone )).isEqualTo (timeZone .getID ());
1053
+ }
1054
+
1055
+ @ Test
1056
+ void nullSafeConciseToStringForZoneId () {
1057
+ ZoneId zoneId = ZoneId .systemDefault ();
1058
+ assertThat (ObjectUtils .nullSafeConciseToString (zoneId )).isEqualTo (zoneId .getId ());
1059
+ }
1060
+
946
1061
@ Test
947
1062
void nullSafeConciseToStringForArraysAndCollections () {
948
1063
List <String > list = Arrays .asList ("a" , "b" , "c" );
0 commit comments