1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared.context.flash;
20
21 import java.util.Arrays;
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.Map;
26
27 import javax.faces.application.FacesMessage;
28 import javax.faces.event.PhaseId;
29 import javax.servlet.ServletContext;
30 import javax.servlet.http.Cookie;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
33 import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
34
35 import org.apache.myfaces.test.mock.MockExternalContext20;
36 import org.apache.myfaces.test.mock.MockFacesContext20;
37 import org.apache.myfaces.test.mock.MockHttpServletRequest;
38 import org.apache.myfaces.test.mock.MockHttpServletResponse;
39 import org.junit.Assert;
40 import org.junit.Test;
41
42
43
44
45 public class FlashImplTest extends AbstractJsfTestCase
46 {
47
48 private FlashImpl _flash;
49
50 public FlashImplTest()
51 {
52 }
53
54 @Override
55 protected void setUpFacesContext() throws Exception
56 {
57 super.setUpFacesContext();
58
59
60 externalContext = new MockExternalContext21(servletContext, request, response);
61 facesContext.setExternalContext(externalContext);
62 }
63
64 @Override
65 public void setUp() throws Exception
66 {
67 super.setUp();
68
69 _flash = (FlashImpl) FlashImpl.getCurrentInstance(externalContext);
70 }
71
72 @Override
73 public void tearDown() throws Exception
74 {
75 _flash = null;
76
77 super.tearDown();
78 }
79
80
81
82
83
84
85 @Test
86 public void testSessionMapWrapperSubKeyMap() throws Exception
87 {
88
89 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
90 _flash.doPrePhaseActions(facesContext);
91
92
93 _flash.putNow("testkey1", "testvalue1");
94 _flash.keep("testkey1");
95
96
97 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
98
99
100 final String renderToken = (String) externalContext
101 .getRequestMap().get(FlashImpl.FLASH_RENDER_MAP_TOKEN);
102 final String sessionMapKey = FlashImpl.FLASH_SESSION_MAP_SUBKEY_PREFIX +
103 FlashImpl.SEPARATOR_CHAR + renderToken + FlashImpl.SEPARATOR_CHAR + "testkey1";
104
105
106 Assert.assertEquals("The render FlashMap must use the session Map to store the values.",
107 "testvalue1", session.getAttribute(sessionMapKey));
108 }
109
110
111
112
113
114 @SuppressWarnings("unchecked")
115 @Test
116 public void testKeepValueNormalPostback() throws Exception
117 {
118
119
120
121
122
123
124
125 ((MockFacesContext20) facesContext).setPostback(false);
126
127
128 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
129 _flash.doPrePhaseActions(facesContext);
130
131
132 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
133 _flash.doPostPhaseActions(facesContext);
134
135
136
137
138 _simulateNewRequest();
139
140
141 ((MockFacesContext20) facesContext).setPostback(true);
142
143
144 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
145 _flash.doPrePhaseActions(facesContext);
146
147
148 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
149
150
151 _flash.putNow("flashkey", "flashvalue");
152 _flash.keep("flashkey");
153
154
155 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
156 _flash.doPostPhaseActions(facesContext);
157
158
159
160
161 _simulateNewRequest();
162
163
164 ((MockFacesContext20) facesContext).setPostback(true);
165
166
167 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
168 _flash.doPrePhaseActions(facesContext);
169
170
171 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
172
173
174
175
176 Assert.assertEquals("flashvalue", _flash.get("flashkey"));
177
178
179 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
180 _flash.doPostPhaseActions(facesContext);
181
182
183
184 Assert.assertNull("Execute FlashMap must have been cleared", _flash.get("flashkey"));
185
186
187 Map<String, Object> executeMap = (Map<String, Object>) externalContext
188 .getRequestMap().get(FlashImpl.FLASH_EXECUTE_MAP);
189
190
191 Assert.assertTrue("The execute Map of the second postback must have been cleared",
192 executeMap.isEmpty());
193 }
194
195
196
197
198
199 @SuppressWarnings("unchecked")
200 @Test
201 public void testKeepValuePostRedirectGet() throws Exception
202 {
203
204
205
206
207
208
209
210 ((MockFacesContext20) facesContext).setPostback(false);
211
212
213 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
214 _flash.doPrePhaseActions(facesContext);
215
216
217 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
218 _flash.doPostPhaseActions(facesContext);
219
220
221
222
223 _simulateNewRequest();
224
225
226 ((MockFacesContext20) facesContext).setPostback(true);
227
228
229 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
230 _flash.doPrePhaseActions(facesContext);
231
232
233 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
234
235
236 _flash.put("flashkey", "flashvalue");
237 _flash.keep("flashkey");
238
239
240 _flash.setRedirect(true);
241
242 Assert.assertTrue("setRedirect(true) was just called, thus isRedirect() must be true",
243 _flash.isRedirect());
244
245
246
247 _flash.doPostPhaseActions(facesContext);
248
249
250
251
252 _simulateNewRequest();
253
254
255 ((MockFacesContext20) facesContext).setPostback(false);
256
257
258
259
260 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
261 _flash.doPrePhaseActions(facesContext);
262
263
264 Assert.assertTrue("setRedirect(true) was called on the previous request, "
265 + " and we are in the execute portion of the lifecycle, "
266 + " thus isRedirect() must be true.",
267 _flash.isRedirect());
268
269
270 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
271
272
273 Assert.assertFalse("setRedirect(true) was called on the previous request, "
274 + " but we are already in the render portion of the lifecycle, "
275 + " thus isRedirect() must be false.",
276 _flash.isRedirect());
277
278
279
280 Assert.assertEquals("flashvalue", _flash.get("flashkey"));
281
282 _flash.doPostPhaseActions(facesContext);
283
284
285
286
287 _simulateNewRequest();
288
289
290 ((MockFacesContext20) facesContext).setPostback(true);
291
292
293 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
294 _flash.doPrePhaseActions(facesContext);
295
296
297 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
298
299
300 Assert.assertFalse("setRedirect(true) was called on the pre-previous request, "
301 + " thus isRedirect() must be false again.",
302 _flash.isRedirect());
303
304
305
306
307
308
309 Assert.assertNull(_flash.get("flashkey"));
310
311
312 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
313 _flash.doPostPhaseActions(facesContext);
314
315
316 Map<String, Object> executeMap = (Map<String, Object>) externalContext
317 .getRequestMap().get(FlashImpl.FLASH_EXECUTE_MAP);
318
319
320 Assert.assertTrue("The execute Map of the second postback must have been cleared",
321 executeMap.isEmpty());
322 }
323
324
325
326
327
328 @Test
329 public void testKeepMessagesNormalPostback() throws Exception
330 {
331
332
333
334
335
336
337
338 ((MockFacesContext20) facesContext).setPostback(false);
339
340
341 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
342 _flash.doPrePhaseActions(facesContext);
343
344
345 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
346 _flash.doPostPhaseActions(facesContext);
347
348
349
350
351 _simulateNewRequest();
352
353
354 ((MockFacesContext20) facesContext).setPostback(true);
355
356
357 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
358 _flash.doPrePhaseActions(facesContext);
359
360
361 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
362
363
364 FacesMessage messageClientId = new FacesMessage("message for clientId");
365 facesContext.addMessage("clientId", messageClientId);
366 FacesMessage messageNoClientId = new FacesMessage("message without clientId");
367 facesContext.addMessage(null, messageNoClientId);
368
369
370 Assert.assertEquals(2, facesContext.getMessageList().size());
371
372
373 _flash.setKeepMessages(true);
374
375 Assert.assertTrue("setKeepMessages(true) was just called, thus isKeepMessages() "
376 + "must be true.", _flash.isKeepMessages());
377
378
379 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
380 _flash.doPostPhaseActions(facesContext);
381
382
383
384
385 _simulateNewRequest();
386
387
388 ((MockFacesContext20) facesContext).setPostback(true);
389
390
391 Assert.assertEquals(0, facesContext.getMessageList().size());
392
393
394 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
395 _flash.doPrePhaseActions(facesContext);
396
397
398 Assert.assertEquals(2, facesContext.getMessageList().size());
399 Assert.assertEquals(Arrays.asList(messageClientId), facesContext.getMessageList("clientId"));
400 Assert.assertEquals(Arrays.asList(messageNoClientId), facesContext.getMessageList(null));
401
402 Assert.assertFalse("setKeepMessages(true) was not called on this request, thus "
403 + "isKeepMessages() must be false.", _flash.isKeepMessages());
404
405
406 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
407 _flash.doPostPhaseActions(facesContext);
408
409
410
411
412 _simulateNewRequest();
413
414
415 ((MockFacesContext20) facesContext).setPostback(true);
416
417
418 Assert.assertEquals(0, facesContext.getMessageList().size());
419
420
421 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
422 _flash.doPrePhaseActions(facesContext);
423
424
425
426 Assert.assertEquals(0, facesContext.getMessageList().size());
427
428
429 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
430 _flash.doPostPhaseActions(facesContext);
431 }
432
433
434
435
436
437
438
439 @Test
440 public void testKeepMessagesPostRedirectGet() throws Exception
441 {
442
443
444
445
446
447
448
449 ((MockFacesContext20) facesContext).setPostback(false);
450
451
452 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
453 _flash.doPrePhaseActions(facesContext);
454
455
456 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
457 _flash.doPostPhaseActions(facesContext);
458
459
460
461
462 _simulateNewRequest();
463
464
465 ((MockFacesContext20) facesContext).setPostback(true);
466
467
468 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
469 _flash.doPrePhaseActions(facesContext);
470
471
472 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
473
474
475 FacesMessage messageClientId = new FacesMessage("message for clientId");
476 facesContext.addMessage("clientId", messageClientId);
477 FacesMessage messageNoClientId = new FacesMessage("message without clientId");
478 facesContext.addMessage(null, messageNoClientId);
479
480
481 Assert.assertEquals(2, facesContext.getMessageList().size());
482
483
484 _flash.setKeepMessages(true);
485 Assert.assertTrue("setKeepMessages(true) was just called, thus isKeepMessages() "
486 + "must be true.", _flash.isKeepMessages());
487
488
489 _flash.setRedirect(true);
490 Assert.assertTrue("setRedirect(true) was just called, thus isRedirect() must be true",
491 _flash.isRedirect());
492
493 facesContext.responseComplete();
494
495
496 _flash.doPostPhaseActions(facesContext);
497
498
499
500
501 _simulateNewRequest();
502
503
504 ((MockFacesContext20) facesContext).setPostback(false);
505
506
507 Assert.assertEquals(0, facesContext.getMessageList().size());
508
509
510
511
512 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
513 _flash.doPrePhaseActions(facesContext);
514
515
516 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
517
518
519 Assert.assertEquals(2, facesContext.getMessageList().size());
520 Assert.assertEquals(Arrays.asList(messageClientId), facesContext.getMessageList("clientId"));
521 Assert.assertEquals(Arrays.asList(messageNoClientId), facesContext.getMessageList(null));
522
523
524 Assert.assertFalse("setKeepMessages(true) was not called on this request, thus "
525 + "isKeepMessages() must be false.", _flash.isKeepMessages());
526
527 _flash.doPostPhaseActions(facesContext);
528
529
530
531
532 _simulateNewRequest();
533
534
535 ((MockFacesContext20) facesContext).setPostback(true);
536
537
538 Assert.assertEquals(0, facesContext.getMessageList().size());
539
540
541 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
542 _flash.doPrePhaseActions(facesContext);
543
544
545 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
546
547
548
549 Assert.assertEquals(0, facesContext.getMessageList().size());
550
551
552 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
553 _flash.doPostPhaseActions(facesContext);
554 }
555
556
557
558
559
560
561
562 @Test
563 public void testKeepMessagesPostRedirectGetTwoTimes() throws Exception
564 {
565
566
567
568
569
570
571
572 ((MockFacesContext20) facesContext).setPostback(false);
573
574
575 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
576 _flash.doPrePhaseActions(facesContext);
577
578
579 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
580 _flash.doPostPhaseActions(facesContext);
581
582
583
584
585 _simulateNewRequest();
586
587
588 ((MockFacesContext20) facesContext).setPostback(true);
589
590
591 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
592 _flash.doPrePhaseActions(facesContext);
593
594
595 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
596
597
598 FacesMessage messageClientId = new FacesMessage("message for clientId");
599 facesContext.addMessage("clientId", messageClientId);
600 FacesMessage messageNoClientId = new FacesMessage("message without clientId");
601 facesContext.addMessage(null, messageNoClientId);
602
603
604 Assert.assertEquals(2, facesContext.getMessageList().size());
605
606
607 _flash.setKeepMessages(true);
608 Assert.assertTrue("setKeepMessages(true) was just called, thus isKeepMessages() "
609 + "must be true.", _flash.isKeepMessages());
610
611
612 _flash.setRedirect(true);
613 Assert.assertTrue("setRedirect(true) was just called, thus isRedirect() must be true",
614 _flash.isRedirect());
615
616 facesContext.responseComplete();
617
618
619
620 _flash.doPostPhaseActions(facesContext);
621
622
623
624
625 _simulateNewRequest();
626
627
628 ((MockFacesContext20) facesContext).setPostback(false);
629
630
631 Assert.assertEquals(0, facesContext.getMessageList().size());
632
633
634
635
636 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
637 _flash.doPrePhaseActions(facesContext);
638
639
640 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
641
642
643 Assert.assertEquals(2, facesContext.getMessageList().size());
644 Assert.assertEquals(Arrays.asList(messageClientId), facesContext.getMessageList("clientId"));
645 Assert.assertEquals(Arrays.asList(messageNoClientId), facesContext.getMessageList(null));
646
647
648 Assert.assertFalse("setKeepMessages(true) was not called on this request, thus "
649 + "isKeepMessages() must be false.", _flash.isKeepMessages());
650
651
652 _flash.setKeepMessages(true);
653 Assert.assertTrue("setKeepMessages(true) was just called, thus isKeepMessages() "
654 + "must be true.", _flash.isKeepMessages());
655
656 facesContext.responseComplete();
657
658 _flash.doPostPhaseActions(facesContext);
659
660
661
662
663 _simulateNewRequest();
664
665
666 ((MockFacesContext20) facesContext).setPostback(true);
667
668
669 Assert.assertEquals(0, facesContext.getMessageList().size());
670
671
672 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
673 _flash.doPrePhaseActions(facesContext);
674
675
676 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
677
678
679 Assert.assertEquals(2, facesContext.getMessageList().size());
680 Assert.assertEquals(Arrays.asList(messageClientId), facesContext.getMessageList("clientId"));
681 Assert.assertEquals(Arrays.asList(messageNoClientId), facesContext.getMessageList(null));
682
683
684 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
685 _flash.doPostPhaseActions(facesContext);
686
687
688
689
690 _simulateNewRequest();
691
692
693 ((MockFacesContext20) facesContext).setPostback(true);
694
695
696 Assert.assertEquals(0, facesContext.getMessageList().size());
697
698
699 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
700 _flash.doPrePhaseActions(facesContext);
701
702
703 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
704
705
706
707 Assert.assertEquals(0, facesContext.getMessageList().size());
708
709
710 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
711 _flash.doPostPhaseActions(facesContext);
712 }
713
714
715
716
717
718 @Test
719 public void testSetRedirect()
720 {
721 Assert.assertFalse(_flash.isRedirect());
722 Assert.assertFalse((Boolean) _flash.get("redirect"));
723
724 _flash.put("redirect", true);
725
726 Assert.assertTrue(_flash.isRedirect());
727 Assert.assertTrue((Boolean) _flash.get("redirect"));
728 }
729
730
731
732
733
734 @Test
735 public void testSetKeepMessages()
736 {
737 Assert.assertFalse(_flash.isKeepMessages());
738 Assert.assertFalse((Boolean) _flash.get("keepMessages"));
739
740 _flash.put("keepMessages", true);
741
742 Assert.assertTrue(_flash.isKeepMessages());
743 Assert.assertTrue((Boolean) _flash.get("keepMessages"));
744 }
745
746
747
748
749 @SuppressWarnings("unchecked")
750 @Test
751 public void testPutNow()
752 {
753 Map<String, Object> requestMap = externalContext.getRequestMap();
754
755
756 Assert.assertNull(requestMap.get("flashkey"));
757
758 _flash.putNow("flashkey", "flashvalue");
759
760
761 Assert.assertEquals("flashvalue", requestMap.get("flashkey"));
762 }
763
764
765
766
767
768 @Test
769 public void testKeep() throws Exception
770 {
771
772
773
774
775
776
777
778 ((MockFacesContext20) facesContext).setPostback(false);
779
780
781 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
782 _flash.doPrePhaseActions(facesContext);
783
784
785 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
786 _flash.doPostPhaseActions(facesContext);
787
788
789
790
791 _simulateNewRequest();
792
793
794 ((MockFacesContext20) facesContext).setPostback(true);
795
796
797 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
798 _flash.doPrePhaseActions(facesContext);
799
800
801 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
802
803
804 _flash.putNow("flashkey", "flashvalue");
805
806
807 _flash.keep("flashkey");
808
809
810 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
811
812
813 _flash.doPostPhaseActions(facesContext);
814
815
816
817
818 _simulateNewRequest();
819
820
821 ((MockFacesContext20) facesContext).setPostback(true);
822
823
824 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
825 _flash.doPrePhaseActions(facesContext);
826
827
828 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
829
830
831 Assert.assertEquals("flashvalue", _flash.get("flashkey"));
832
833
834 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
835
836
837 _flash.doPostPhaseActions(facesContext);
838 }
839
840
841
842
843
844 @Test
845 public void testNotKeep() throws Exception
846 {
847
848
849
850
851
852
853
854 ((MockFacesContext20) facesContext).setPostback(false);
855
856
857 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
858 _flash.doPrePhaseActions(facesContext);
859
860
861 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
862 _flash.doPostPhaseActions(facesContext);
863
864
865
866
867 _simulateNewRequest();
868
869
870 ((MockFacesContext20) facesContext).setPostback(true);
871
872
873 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
874 _flash.doPrePhaseActions(facesContext);
875
876
877 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
878
879
880 _flash.putNow("flashkey", "flashvalue");
881
882
883
884
885 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
886
887 _flash.doPostPhaseActions(facesContext);
888
889
890
891
892 _simulateNewRequest();
893
894
895 ((MockFacesContext20) facesContext).setPostback(true);
896
897
898 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
899 _flash.doPrePhaseActions(facesContext);
900
901
902 facesContext.setCurrentPhaseId(PhaseId.INVOKE_APPLICATION);
903
904
905 Assert.assertNull(_flash.get("flashkey"));
906
907
908 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
909
910
911 _flash.doPostPhaseActions(facesContext);
912 }
913
914
915
916
917
918 @Test
919 public void testMapMethodsUseDifferentMaps() throws Exception
920 {
921
922
923
924
925
926
927
928 ((MockFacesContext20) facesContext).setPostback(false);
929
930
931 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
932 _flash.doPrePhaseActions(facesContext);
933
934
935 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
936 _flash.doPostPhaseActions(facesContext);
937
938
939
940
941 _simulateNewRequest();
942
943
944 ((MockFacesContext20) facesContext).setPostback(true);
945
946
947 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
948 _flash.doPrePhaseActions(facesContext);
949
950
951 facesContext.setCurrentPhaseId(PhaseId.RENDER_RESPONSE);
952
953
954
955
956 Assert.assertNull(_flash.get("flashkey"));
957
958
959
960 _flash.put("flashkey", "flashvalue");
961
962
963
964 Assert.assertNull(_flash.get("flashkey"));
965
966 _flash.doPostPhaseActions(facesContext);
967 }
968
969
970
971
972 @Test
973 public void testMapMethods()
974 {
975
976 facesContext.setCurrentPhaseId(PhaseId.RESTORE_VIEW);
977
978
979 _noElementAssertions();
980
981
982 _flash.put("flashkey", "flashvalue");
983
984
985 _oneElementAssertions();
986
987
988 _flash.remove("flashkey");
989
990 _noElementAssertions();
991
992
993 Map<String, Object> map = new HashMap<String, Object>();
994 map.put("flashkey", "flashvalue");
995 _flash.putAll(map);
996
997 _oneElementAssertions();
998
999
1000 _flash.clear();
1001
1002 _noElementAssertions();
1003
1004
1005 _flash.put("flashkey", "flashvalue");
1006
1007 _oneElementAssertions();
1008
1009
1010 _flash.keySet().clear();
1011
1012 _noElementAssertions();
1013 }
1014
1015
1016
1017
1018 private void _noElementAssertions()
1019 {
1020 Assert.assertTrue(_flash.isEmpty());
1021 Assert.assertEquals(0, _flash.size());
1022 Assert.assertFalse(_flash.containsKey("flashkey"));
1023 Assert.assertFalse(_flash.containsValue("flashvalue"));
1024 Assert.assertEquals(Collections.emptySet(), _flash.keySet());
1025 Assert.assertNull(_flash.get("flashkey"));
1026 Assert.assertTrue(_flash.values().isEmpty());
1027 }
1028
1029
1030
1031
1032 private void _oneElementAssertions()
1033 {
1034 Assert.assertFalse(_flash.isEmpty());
1035 Assert.assertEquals(1, _flash.size());
1036 Assert.assertTrue(_flash.containsKey("flashkey"));
1037 Assert.assertTrue(_flash.containsValue("flashvalue"));
1038 Assert.assertEquals(new HashSet<String>(Arrays.asList("flashkey")), _flash.keySet());
1039 Assert.assertEquals("flashvalue", _flash.get("flashkey"));
1040 Assert.assertTrue(_flash.values().contains("flashvalue"));
1041 }
1042
1043
1044
1045
1046
1047
1048
1049
1050 private void _simulateNewRequest() throws Exception
1051 {
1052
1053 Cookie renderTokenCookie = response.getCookie(FlashImpl.FLASH_RENDER_MAP_TOKEN);
1054
1055
1056 Assert.assertNotNull(renderTokenCookie);
1057
1058
1059 Cookie redirectCookie = response.getCookie(FlashImpl.FLASH_REDIRECT);
1060
1061
1062
1063 request = new MockHttpServletRequest(session);
1064 request.setServletContext(servletContext);
1065 response = new MockHttpServletResponse();
1066 setUpExternalContext();
1067 setUpFacesContext();
1068
1069 facesContext.setApplication(application);
1070
1071
1072 request.addCookie(renderTokenCookie);
1073
1074
1075 if (redirectCookie != null)
1076 {
1077
1078 if (redirectCookie.getMaxAge() != 0)
1079 {
1080 request.addCookie(redirectCookie);
1081 }
1082 }
1083 }
1084
1085
1086
1087
1088
1089
1090 private static class MockExternalContext21 extends MockExternalContext20
1091 {
1092
1093 private boolean secure = false;
1094
1095 private MockExternalContext21(ServletContext context, HttpServletRequest request, HttpServletResponse response)
1096 {
1097 super(context, request, response);
1098 }
1099
1100 @Override
1101 public boolean isSecure()
1102 {
1103 return secure;
1104 }
1105
1106 public void setSecure(boolean secure)
1107 {
1108 this.secure = secure;
1109 }
1110 }
1111
1112 }