22
33import static org .assertj .core .api .Assertions .assertThat ;
44import static org .junit .Assert .assertNotNull ;
5+ import static org .junit .jupiter .api .Assertions .assertThrows ;
56
67import java .util .ArrayList ;
8+ import java .util .Arrays ;
9+ import java .util .Collections ;
710import java .util .List ;
811import java .util .Locale ;
912
@@ -17,12 +20,19 @@ class ListDemoUnitTest {
1720 Passenger passenger1 ;
1821 Passenger passenger2 ;
1922 Passenger passenger3 ;
23+ Passenger passenger4 ;
24+ Passenger passenger5 ;
25+ Passenger passenger6 ;
2026
2127 @ BeforeEach
2228 protected void setUp () {
2329 passenger1 = new Passenger ("Anna" , 25 , "London" , "New York" );
2430 passenger2 = new Passenger ("Binny" , 35 , "New York" , "London" );
2531 passenger3 = new Passenger ("Chandra" , 8 , "Paris" , "New Delhi" );
32+ passenger4 = new Passenger ("Amanda" , 32 , "Paris" , "Hamburg" );
33+ passenger5 = new Passenger ("Dora" , 8 , "Paris" , "Hamburg" );
34+ passenger6 = new Passenger ("Kent" , 48 , "Paris" , "Munich" );
35+
2636 application .addPassenger (passenger1 );
2737 application .addPassenger (passenger2 );
2838 application .addPassenger (passenger3 );
@@ -89,4 +99,94 @@ public void givenCurrentLocale_whenUsingStreams_thenReturnsListType() {
8999 assertThat (servicedCountries ).hasSize (Locale .getISOCountries ().length );
90100 }
91101
92- }
102+ @ Test
103+ void whenUsingSingletonListUtilMethod_thenGetExpectedResult () {
104+ List <Passenger > singletonList = Collections .singletonList (passenger1 );
105+
106+ assertThat (singletonList ).hasSize (1 );
107+ assertThat (singletonList .get (0 )).isEqualTo (passenger1 );
108+ assertThrows (UnsupportedOperationException .class , () -> singletonList .add (passenger2 ));
109+ }
110+
111+ @ Test
112+ void whenUsingUnmodifiableListUtilMethod_thenGetExpectedResult () {
113+ List <Passenger > originalList = new ArrayList <>();
114+ originalList .add (passenger1 );
115+ originalList .add (passenger2 );
116+
117+ List <Passenger > unmodifiableList = Collections .unmodifiableList (originalList );
118+ assertThat (unmodifiableList ).isEqualTo (originalList );
119+
120+ assertThrows (UnsupportedOperationException .class , () -> unmodifiableList .add (passenger3 ));
121+ assertThrows (UnsupportedOperationException .class , () -> unmodifiableList .remove (passenger2 ));
122+
123+ originalList .add (passenger3 );
124+ assertThat (unmodifiableList ).hasSize (3 );
125+ }
126+
127+ @ Test
128+ void whenUsingArraysAsList_thenGetExpectedResult () {
129+ Passenger [] array = { passenger1 , passenger2 };
130+ List <Passenger > list = Arrays .asList (array );
131+
132+ assertThat (list ).hasSize (2 );
133+ assertThat (list .get (0 )).isEqualTo (passenger1 );
134+ assertThat (list .get (1 )).isEqualTo (passenger2 );
135+
136+ // We can update elements (reflected in the array too)
137+ list .set (1 , passenger3 );
138+ assertThat (array [1 ]).isEqualTo (passenger3 );
139+
140+ // Verify immutability of size: adding/removing throws UnsupportedOperationException
141+ assertThrows (UnsupportedOperationException .class , () -> list .add (passenger2 ));
142+ assertThrows (UnsupportedOperationException .class , () -> list .remove (passenger1 ));
143+ }
144+
145+ @ Test
146+ void whenUsingArraysSubList_thenGetExpectedResult () {
147+ List <Passenger > originalList = Arrays .asList (passenger1 , passenger2 , passenger3 , passenger4 , passenger5 );
148+
149+ List <Passenger > subList = originalList .subList (1 , 3 );
150+
151+ assertThat (subList ).isEqualTo (Arrays .asList (passenger2 , passenger3 ));
152+
153+ // Changes in sublist reflect in the original list
154+ subList .set (1 , passenger6 );
155+ assertThat (originalList .get (2 )).isEqualTo (passenger6 );
156+
157+ // immutability of size: adding/removing throws UnsupportedOperationException
158+ assertThrows (UnsupportedOperationException .class , () -> subList .add (passenger4 ));
159+ assertThrows (UnsupportedOperationException .class , () -> subList .remove (passenger2 ));
160+ }
161+
162+ @ Test
163+ void whenUsingListOf_thenGetExpectedResult () {
164+ List <Passenger > list = List .of (passenger1 , passenger2 , passenger3 );
165+
166+ assertThat (list ).isEqualTo (Arrays .asList (passenger1 , passenger2 , passenger3 ));
167+
168+ assertThrows (UnsupportedOperationException .class , () -> list .add (passenger4 ));
169+ assertThrows (UnsupportedOperationException .class , () -> list .set (0 , passenger4 ));
170+ assertThrows (UnsupportedOperationException .class , () -> list .remove (passenger2 ));
171+ }
172+
173+ @ Test
174+ void whenUsingListCopyOf_thenGetExpectedResult () {
175+ List <Passenger > originalList = new ArrayList <>();
176+ originalList .add (passenger1 );
177+ originalList .add (passenger2 );
178+ originalList .add (passenger3 );
179+
180+ List <Passenger > copy = List .copyOf (originalList );
181+
182+ assertThat (copy ).isEqualTo (originalList );
183+
184+ assertThrows (UnsupportedOperationException .class , () -> copy .add (passenger4 ));
185+ assertThrows (UnsupportedOperationException .class , () -> copy .set (0 , passenger4 ));
186+ assertThrows (UnsupportedOperationException .class , () -> copy .remove (passenger2 ));
187+
188+ // Changes to the original list do NOT affect the copy
189+ originalList .add (passenger6 );
190+ assertThat (copy ).hasSize (3 );
191+ }
192+ }
0 commit comments