2626import org .junit .Test ;
2727
2828import java .util .Collection ;
29+ import java .util .Collections ;
2930import java .util .List ;
3031import java .util .NoSuchElementException ;
3132
3233import static java .util .Arrays .asList ;
3334import static org .junit .Assert .assertArrayEquals ;
3435import static org .junit .Assert .assertEquals ;
36+ import static org .junit .Assert .assertNull ;
3537
3638/**
3739 * Underscore library unit test.
@@ -58,6 +60,50 @@ public void first() {
5860 assertEquals ("[5, 4]" , resultList .toString ());
5961 final int resultInt = $ .first (new Integer [] {5 , 4 , 3 , 2 , 1 });
6062 assertEquals (5 , resultInt );
63+ final int resultPred = $ .first (asList (5 , 4 , 3 , 2 , 1 ), new Predicate <Integer >() {
64+ public Boolean apply (Integer item ) {
65+ return item % 2 == 0 ;
66+ }
67+ });
68+ assertEquals (4 , resultPred );
69+ final int resultPredObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).first (new Predicate <Integer >() {
70+ public Boolean apply (Integer item ) {
71+ return item % 2 == 0 ;
72+ }
73+ });
74+ assertEquals (4 , resultPredObj );
75+ }
76+
77+ @ Test
78+ public void firstOrNull () {
79+ final Integer result = $ .firstOrNull (asList (5 , 4 , 3 , 2 , 1 ));
80+ assertEquals ("5" , result .toString ());
81+ final Integer resultObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).firstOrNull ();
82+ assertEquals ("5" , resultObj .toString ());
83+ assertNull ($ .firstOrNull (Collections .emptyList ()));
84+ assertNull (new $ <Integer >(Collections .<Integer >emptyList ()).firstOrNull ());
85+ final int resultPred = $ .firstOrNull (asList (5 , 4 , 3 , 2 , 1 ), new Predicate <Integer >() {
86+ public Boolean apply (Integer item ) {
87+ return item % 2 == 0 ;
88+ }
89+ });
90+ assertEquals (4 , resultPred );
91+ assertNull ($ .firstOrNull (Collections .<Integer >emptyList (), new Predicate <Integer >() {
92+ public Boolean apply (Integer item ) {
93+ return item % 2 == 0 ;
94+ }
95+ }));
96+ final int resultPredObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).firstOrNull (new Predicate <Integer >() {
97+ public Boolean apply (Integer item ) {
98+ return item % 2 == 0 ;
99+ }
100+ });
101+ assertEquals (4 , resultPredObj );
102+ assertNull (new $ <Integer >(Collections .<Integer >emptyList ()).firstOrNull (new Predicate <Integer >() {
103+ public Boolean apply (Integer item ) {
104+ return item % 2 == 0 ;
105+ }
106+ }));
61107 }
62108
63109 @ Test (expected = NoSuchElementException .class )
@@ -213,8 +259,51 @@ public void last() {
213259 assertEquals ("last one item did not work" , 5 , res .intValue ());
214260 List <Integer > resList = new $ (asList (1 , 2 , 3 , 4 , 5 )).last (3 );
215261 assertEquals ("last multi item did not wok" , asList (3 , 4 , 5 ), resList );
262+ final int resultPred = $ .last (asList (5 , 4 , 3 , 2 , 1 ), new Predicate <Integer >() {
263+ public Boolean apply (Integer item ) {
264+ return item % 2 == 0 ;
265+ }
266+ });
267+ assertEquals (2 , resultPred );
268+ final int resultPredObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).last (new Predicate <Integer >() {
269+ public Boolean apply (Integer item ) {
270+ return item % 2 == 0 ;
271+ }
272+ });
273+ assertEquals (2 , resultPredObj );
216274 }
217275
276+ @ Test
277+ public void lastOrNull () {
278+ final Integer result = $ .lastOrNull (asList (5 , 4 , 3 , 2 , 1 ));
279+ assertEquals ("1" , result .toString ());
280+ final Integer resultObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).lastOrNull ();
281+ assertEquals ("1" , resultObj .toString ());
282+ assertNull ($ .lastOrNull (Collections .emptyList ()));
283+ assertNull (new $ <Integer >(Collections .<Integer >emptyList ()).lastOrNull ());
284+ final int resultPred = $ .lastOrNull (asList (5 , 4 , 3 , 2 , 1 ), new Predicate <Integer >() {
285+ public Boolean apply (Integer item ) {
286+ return item % 2 == 0 ;
287+ }
288+ });
289+ assertEquals (2 , resultPred );
290+ assertNull ($ .lastOrNull (Collections .<Integer >emptyList (), new Predicate <Integer >() {
291+ public Boolean apply (Integer item ) {
292+ return item % 2 == 0 ;
293+ }
294+ }));
295+ final int resultPredObj = new $ <Integer >(asList (5 , 4 , 3 , 2 , 1 )).lastOrNull (new Predicate <Integer >() {
296+ public Boolean apply (Integer item ) {
297+ return item % 2 == 0 ;
298+ }
299+ });
300+ assertEquals (2 , resultPredObj );
301+ assertNull (new $ <Integer >(Collections .<Integer >emptyList ()).lastOrNull (new Predicate <Integer >() {
302+ public Boolean apply (Integer item ) {
303+ return item % 2 == 0 ;
304+ }
305+ }));
306+ }
218307/*
219308_.compact([0, 1, false, 2, '', 3]);
220309=> [1, 2, 3]
0 commit comments