5656import java .util .ArrayList ;
5757import java .util .Arrays ;
5858import java .util .Calendar ;
59+ import java .util .Collection ;
5960import java .util .Collections ;
6061import java .util .Date ;
6162import java .util .HashMap ;
6263import java .util .LinkedHashMap ;
6364import java .util .List ;
6465import java .util .Map ;
66+ import java .util .Set ;
6567import java .util .UUID ;
68+ import java .util .stream .Stream ;
6669
70+ import org .assertj .core .api .InstanceOfAssertFactories ;
6771import org .junit .jupiter .api .BeforeEach ;
6872import org .junit .jupiter .api .Test ;
6973import org .junit .jupiter .api .extension .ExtendWith ;
74+ import org .junit .jupiter .params .ParameterizedTest ;
75+ import org .junit .jupiter .params .provider .Arguments ;
76+ import org .junit .jupiter .params .provider .MethodSource ;
7077import org .mockito .Mock ;
7178import org .mockito .junit .jupiter .MockitoExtension ;
7279import org .springframework .core .convert .converter .Converter ;
@@ -1997,20 +2004,18 @@ void readGenericEntity() {
19972004
19982005 @ Test // GH-2168, GH-3179
19992006 void writePlainList () {
2007+
20002008 List <Object > source = Arrays .asList ("Hello" , "stream" , "message" , 100L );
20012009 RedisTestData target = write (source );
2002- Object classValue = target .getBucket ().get ("_class" );
20032010
2004- assertThat (classValue )
2005- .as ("_class metadata should be written" )
2006- .isNotNull ()
2007- .isInstanceOf (byte [].class );
2008- assertThat (new String ((byte []) classValue , StandardCharsets .UTF_8 ))
2009- .isEqualTo (ClassUtils .getUserClass (source ).getName ());
2010- assertThat (target ).containsEntry ("[0]" , "Hello" )
2011- .containsEntry ("[1]" , "stream" )
2012- .containsEntry ("[2]" , "message" )
2013- .containsEntry ("[3]" , "100" );
2011+ assertThat (target ) //
2012+ .containsEntry ("_class" , "java.util.List" ) //
2013+ .containsEntry ("[0]" , "Hello" ) //
2014+ .containsEntry ("[0]._class" , "java.lang.String" ) //
2015+ .containsEntry ("[1]" , "stream" ) //
2016+ .containsEntry ("[2]" , "message" ) //
2017+ .containsEntry ("[3]" , "100" ) //
2018+ .containsEntry ("[3]._class" , "java.lang.Long" );
20142019 }
20152020
20162021 @ Test // DATAREDIS-1175
@@ -2031,6 +2036,21 @@ void readPlainList() {
20312036 assertThat (target ).containsExactly ("Hello" , "stream" , "message" , 100L );
20322037 }
20332038
2039+ @ ParameterizedTest // GH-3179
2040+ @ MethodSource ("justCollections" )
2041+ void readsPlainCollectionIfObjectTypeRequested (Class <?> type , Collection <Object > collection ) {
2042+
2043+ RedisTestData source = write (collection );
2044+
2045+ Object target = this .converter .read (Object .class , source .getRedisData ());
2046+
2047+ assertThat (target ).isInstanceOf (type ).asInstanceOf (InstanceOfAssertFactories .COLLECTION ).containsExactlyElementsOf (collection );
2048+ }
2049+
2050+ private static Stream <Arguments > justCollections () {
2051+ return Stream .of (Arguments .of (List .class , Arrays .asList ("Hello" , "stream" , "message" , 100L )), Arguments .of (Set .class , Set .of ("Hello" , "stream" , "message" , 100L )));
2052+ }
2053+
20342054 private RedisTestData write (Object source ) {
20352055
20362056 RedisData rdo = new RedisData ();
0 commit comments