File tree Expand file tree Collapse file tree
main/java/com/baeldung/autovalue
test/java/com/baeldung/autovalue Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .baeldung .autovalue ;
2+
3+ import java .util .ArrayList ;
4+ import java .util .Collections ;
5+ import java .util .List ;
6+
7+ import com .google .auto .value .AutoValue ;
8+
9+ @ AutoValue
10+ public abstract class Person {
11+
12+ public abstract String name ();
13+
14+ public abstract List <String > favoriteMovies ();
15+
16+ public static Builder builder () {
17+ return new AutoValue_Person .Builder ();
18+ }
19+
20+ @ AutoValue .Builder
21+ public static abstract class Builder {
22+
23+ public abstract Builder name (String value );
24+
25+ public abstract Builder favoriteMovies (List <String > value );
26+
27+ abstract List <String > favoriteMovies ();
28+
29+ abstract Person autoBuild ();
30+
31+ public Person build () {
32+ List <String > favoriteMovies = favoriteMovies ();
33+ List <String > copy = Collections .unmodifiableList (new ArrayList <>(favoriteMovies ));
34+ favoriteMovies (copy );
35+ return autoBuild ();
36+ }
37+ }
38+ }
Original file line number Diff line number Diff line change 1+ package com .baeldung .autovalue ;
2+
3+ import static org .junit .Assert .assertEquals ;
4+ import static org .junit .Assert .assertFalse ;
5+
6+ import java .util .ArrayList ;
7+ import java .util .List ;
8+
9+ import org .junit .Test ;
10+
11+ /**
12+ * Unit Test which verifies that the {@link Person} value object creates defensive copies of its favoriteMovies list.
13+ */
14+ public class PersonUnitTest {
15+
16+ @ Test
17+ public void givenNewPerson_whenModifyOriginalList_thenValueObjectIsNotAlsoModified () {
18+ // GIVEN new Person
19+ List <String > originalFavoriteMoviesList = new ArrayList <String >();
20+ originalFavoriteMoviesList .add ("Training Day" );
21+ originalFavoriteMoviesList .add ("Fast and the Furious" );
22+ Person person = Person .builder ()
23+ .name ("Dan" )
24+ .favoriteMovies (originalFavoriteMoviesList )
25+ .build ();
26+
27+ // WHEN modify original list
28+ originalFavoriteMoviesList .add ("Friday" );
29+
30+ // THEN Person remains unaffected
31+ assertFalse (person .favoriteMovies ()
32+ .contains ("Friday" ));
33+ assertEquals (2 , person .favoriteMovies ()
34+ .size ());
35+ }
36+
37+ }
You can’t perform that action at this time.
0 commit comments