From 5218116a80abba1bfee47875ef7221ba8d18b154 Mon Sep 17 00:00:00 2001 From: pivovarit Date: Sat, 11 Feb 2017 18:40:14 +0100 Subject: [PATCH 1/6] Reformat JoinerSplitter --- .../baeldung/streamApi/JoinerSplitter.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/streamApi/JoinerSplitter.java b/core-java/src/main/java/com/baeldung/streamApi/JoinerSplitter.java index 10bee06f1e..52ffc61799 100644 --- a/core-java/src/main/java/com/baeldung/streamApi/JoinerSplitter.java +++ b/core-java/src/main/java/com/baeldung/streamApi/JoinerSplitter.java @@ -7,30 +7,34 @@ import java.util.stream.Stream; public class JoinerSplitter { - public static String join ( String[] arrayOfString ) { - return Arrays.asList(arrayOfString) - .stream() - .map(x -> x) - .collect(Collectors.joining(",")); - } - - public static String joinWithPrefixPostFix ( String[] arrayOfString ) { - return Arrays.asList(arrayOfString) - .stream() - .map(x -> x) - .collect(Collectors.joining(",","[","]")); - } - - public static List split ( String str ) { - return Stream.of(str.split(",")) - .map (elem -> new String(elem)) - .collect(Collectors.toList()); - } - - public static List splitToListOfChar ( String str ) { - return str.chars() - .mapToObj(item -> (char) item) - .collect(Collectors.toList()); - } - + public static String join(String[] arrayOfString) { + return Arrays + .asList(arrayOfString) + .stream() + .map(x -> x) + .collect(Collectors.joining(",")); + } + + public static String joinWithPrefixPostFix(String[] arrayOfString) { + return Arrays + .asList(arrayOfString) + .stream() + .map(x -> x) + .collect(Collectors.joining(",", "[", "]")); + } + + public static List split(String str) { + return Stream + .of(str.split(",")) + .map(elem -> new String(elem)) + .collect(Collectors.toList()); + } + + public static List splitToListOfChar(String str) { + return str + .chars() + .mapToObj(item -> (char) item) + .collect(Collectors.toList()); + } + } From ec2bfa70141e4e1a27cae2ffcdbaeb2a510d524a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Soares?= Date: Sun, 5 Feb 2017 18:21:52 +0000 Subject: [PATCH 2/6] Test Serialize/Deserialize Optional with Jackson --- jackson/pom.xml | 14 +++- .../jackson/miscellaneous/mixin/Book.java | 25 +++++++ .../miscellaneous/mixin/OptionalTypeTest.java | 74 +++++++++++++++++++ 3 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 jackson/src/main/java/com/baeldung/jackson/miscellaneous/mixin/Book.java create mode 100644 jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java diff --git a/jackson/pom.xml b/jackson/pom.xml index 53fb82c61e..2300208605 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -67,6 +67,12 @@ ${jackson.version} + + com.fasterxml.jackson.datatype + jackson-datatype-jdk8 + ${jackson.version} + + joda-time joda-time @@ -128,8 +134,8 @@ ${mockito.version} test - - + + org.slf4j @@ -152,7 +158,7 @@ org.slf4j log4j-over-slf4j ${org.slf4j.version} - + @@ -198,7 +204,7 @@ 19.0 3.5 - 2.5 + 2.5 2.9.6 2.8.0 4.1 diff --git a/jackson/src/main/java/com/baeldung/jackson/miscellaneous/mixin/Book.java b/jackson/src/main/java/com/baeldung/jackson/miscellaneous/mixin/Book.java new file mode 100644 index 0000000000..fb961efe85 --- /dev/null +++ b/jackson/src/main/java/com/baeldung/jackson/miscellaneous/mixin/Book.java @@ -0,0 +1,25 @@ +package com.baeldung.jackson.miscellaneous.mixin; + +import java.util.Optional; + +public class Book { + + private String title; + private Optional subTitle; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Optional getSubTitle() { + return subTitle; + } + + public void setSubTitle(Optional subTitle) { + this.subTitle = subTitle; + } +} diff --git a/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java b/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java new file mode 100644 index 0000000000..035c65f846 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java @@ -0,0 +1,74 @@ +package com.baeldung.jackson.miscellaneous.mixin; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import static io.restassured.path.json.JsonPath.from; +import java.io.IOException; +import java.util.Optional; +import static org.assertj.core.api.Assertions.assertThat; +import org.junit.Test; + +public class OptionalTypeTest { + + ObjectMapper mapper = new ObjectMapper() + .registerModule(new Jdk8Module()); + + @Test + public void givenOptional_whenSerializing_thenValueInJson() throws JsonProcessingException { + + // arrange + String subTitle = "The Parish Boy's Progress"; + Book book = new Book(); + book.setTitle("Oliver Twist"); + book.setSubTitle(Optional.of(subTitle)); + + // act + String result = mapper.writeValueAsString(book); + + // assert + assertThat(from(result).getString("subTitle")).isEqualTo(subTitle); + } + + @Test + public void givenEmptyOptional_whenSerializing_thenNullValue() throws JsonProcessingException { + + // arrange + Book book = new Book(); + book.setTitle("Oliver Twist"); + book.setSubTitle(Optional.empty()); + + // act + String result = mapper.writeValueAsString(book); + + // assert + assertThat(from(result).getString("subTitle")).isNull(); + } + + @Test + public void givenField_whenDeserializing_thenOptionalWithValue() throws IOException { + + // arrange + String subTitle = "The Parish Boy's Progress"; + String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": \"" + subTitle + "\" }"; + + // act + Book result = mapper.readValue(book, Book.class); + + // assert + assertThat(result.getSubTitle()).isEqualTo(Optional.of(subTitle)); + } + + @Test + public void givenEmptyField_whenDeserializing_thenEmptyOptional() throws IOException { + + // arrange + String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": null }"; + + // act + Book result = mapper.readValue(book, Book.class); + + // assert + assertThat(result.getSubTitle()).isEmpty(); + } +} From b050db16cbd9dadf5da11587c1777e8f4fcd05d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Soares?= Date: Sun, 5 Feb 2017 18:22:11 +0000 Subject: [PATCH 3/6] Increase Jackson version --- jackson/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackson/pom.xml b/jackson/pom.xml index 2300208605..881ba8e24c 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -195,7 +195,7 @@ - 2.8.5 + 2.8.6 1.7.21 From bb6224d7712addbaeb15f2db5eaa80fec96aaf35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Soares?= Date: Sun, 5 Feb 2017 18:24:48 +0000 Subject: [PATCH 4/6] Make test pass in non-english computers where tests are run MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tested failed in my portuguese language OS because of: Ter(ça) is Tue(sday) Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Ter set 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]] Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]] Locale was enforced --- .../main/java/com/baeldung/jackson/entities/ActorJackson.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jackson/src/main/java/com/baeldung/jackson/entities/ActorJackson.java b/jackson/src/main/java/com/baeldung/jackson/entities/ActorJackson.java index f6a8b0cf61..76f87d80b3 100644 --- a/jackson/src/main/java/com/baeldung/jackson/entities/ActorJackson.java +++ b/jackson/src/main/java/com/baeldung/jackson/entities/ActorJackson.java @@ -4,6 +4,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.TimeZone; public class ActorJackson { @@ -53,7 +54,7 @@ public class ActorJackson { } private String formatDateOfBirth() { - final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); + final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy", Locale.US); formatter.setTimeZone(TimeZone.getTimeZone("GMT")); return formatter.format(dateOfBirth); } From 7c07b93def81a51a82bbdcc8c27a02f0336e080d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Soares?= Date: Sun, 5 Feb 2017 18:25:52 +0000 Subject: [PATCH 5/6] Improve order of passing arguments in assert Expected argument should come first. --- .../jackson/deserialization/JacksonDeserializeTest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/JacksonDeserializeTest.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/JacksonDeserializeTest.java index 7e91df5332..cb3bccb879 100644 --- a/jackson/src/test/java/com/baeldung/jackson/deserialization/JacksonDeserializeTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/JacksonDeserializeTest.java @@ -3,12 +3,10 @@ package com.baeldung.jackson.deserialization; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; - import com.baeldung.jackson.entities.Movie; -import org.junit.Assert; import org.junit.Test; - import com.fasterxml.jackson.databind.ObjectMapper; +import static org.junit.Assert.assertEquals; public class JacksonDeserializeTest { @@ -20,7 +18,7 @@ public class JacksonDeserializeTest { final Movie movie = mapper.readValue(jsonInput, Movie.class); final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - Assert.assertEquals(movie.toString(), expectedOutput); + assertEquals(expectedOutput, movie.toString()); } @Test @@ -35,7 +33,7 @@ public class JacksonDeserializeTest { final Movie movie = mapper.readValue(jsonInput, Movie.class); final String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; - Assert.assertEquals(movie.toString(), expectedOutput); + assertEquals(expectedOutput, movie.toString()); } } From b5985a586ca0020e013c2ea6b348740b88b6d8db Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Sat, 11 Feb 2017 18:23:25 +0000 Subject: [PATCH 6/6] Tidied up tests --- .../miscellaneous/mixin/OptionalTypeTest.java | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java b/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java index 035c65f846..c6d51cd57f 100644 --- a/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/miscellaneous/mixin/OptionalTypeTest.java @@ -11,64 +11,51 @@ import org.junit.Test; public class OptionalTypeTest { - ObjectMapper mapper = new ObjectMapper() - .registerModule(new Jdk8Module()); + ObjectMapper mapper = new ObjectMapper().registerModule(new Jdk8Module()); @Test - public void givenOptional_whenSerializing_thenValueInJson() throws JsonProcessingException { + public void givenPresentOptional_whenSerializing_thenValueInJson() throws JsonProcessingException { - // arrange String subTitle = "The Parish Boy's Progress"; Book book = new Book(); book.setTitle("Oliver Twist"); book.setSubTitle(Optional.of(subTitle)); - // act String result = mapper.writeValueAsString(book); - // assert assertThat(from(result).getString("subTitle")).isEqualTo(subTitle); } @Test public void givenEmptyOptional_whenSerializing_thenNullValue() throws JsonProcessingException { - // arrange Book book = new Book(); book.setTitle("Oliver Twist"); book.setSubTitle(Optional.empty()); - // act String result = mapper.writeValueAsString(book); - // assert assertThat(from(result).getString("subTitle")).isNull(); } @Test - public void givenField_whenDeserializing_thenOptionalWithValue() throws IOException { + public void givenField_whenDeserializingIntoOptional_thenIsPresentWithValue() throws IOException { - // arrange String subTitle = "The Parish Boy's Progress"; String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": \"" + subTitle + "\" }"; - // act Book result = mapper.readValue(book, Book.class); - // assert assertThat(result.getSubTitle()).isEqualTo(Optional.of(subTitle)); } @Test - public void givenEmptyField_whenDeserializing_thenEmptyOptional() throws IOException { + public void givenNullField_whenDeserializingIntoOptional_thenIsEmpty() throws IOException { - // arrange String book = "{ \"title\": \"Oliver Twist\", \"subTitle\": null }"; - // act Book result = mapper.readValue(book, Book.class); - // assert assertThat(result.getSubTitle()).isEmpty(); } }