1   /*
2    * Copyright 2002-2005 the original author or authors.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.springframework.binding.validation;
17  
18  import java.util.Set;
19  
20  import org.springframework.binding.validation.support.DefaultValidationMessage;
21  import org.springframework.binding.validation.support.DefaultValidationResults;
22  import org.springframework.richclient.core.Severity;
23  
24  import junit.framework.TestCase;
25  
26  public class DefaultValidationResultsTests extends TestCase {
27      private DefaultValidationResults vr = new DefaultValidationResults();
28  
29      public void testAddAndGetMessages() {
30          assertEquals(0, vr.getMessageCount());
31          assertEquals(0, vr.getMessageCount(Severity.INFO));
32          assertEquals(0, vr.getMessageCount("field1"));
33          assertEquals(false, vr.getHasErrors());
34          assertEquals(false, vr.getHasWarnings());
35          assertEquals(false, vr.getHasInfo());
36  
37          vr.addMessage("field1", Severity.INFO, "message");
38          assertEquals(1, vr.getMessageCount());
39          assertEquals(1, vr.getMessageCount(Severity.INFO));
40          assertEquals(1, vr.getMessageCount("field1"));
41          ValidationMessage vm = (ValidationMessage)vr.getMessages().iterator().next();
42          assertEquals("field1", vm.getProperty());
43          assertEquals(Severity.INFO, vm.getSeverity());
44          assertEquals("message", vm.getMessage());
45          assertContainsMessage(vm, vr.getMessages("field1"));
46          assertContainsMessage(vm, vr.getMessages(Severity.INFO));
47          assertEquals(false, vr.getHasErrors());
48          assertEquals(false, vr.getHasWarnings());
49          assertEquals(true, vr.getHasInfo());
50  
51          vm = new DefaultValidationMessage("field2", Severity.WARNING, "message");
52          vr.addMessage(vm);
53          assertEquals(2, vr.getMessageCount());
54          assertEquals(1, vr.getMessageCount(Severity.WARNING));
55          assertEquals(1, vr.getMessageCount("field2"));
56          assertContainsMessage(vm, vr.getMessages());
57          assertContainsMessage(vm, vr.getMessages("field2"));
58          assertContainsMessage(vm, vr.getMessages(Severity.WARNING));
59          assertEquals(false, vr.getHasErrors());
60          assertEquals(true, vr.getHasWarnings());
61          assertEquals(true, vr.getHasInfo());
62  
63          vm = new DefaultValidationMessage(ValidationMessage.GLOBAL_PROPERTY, Severity.ERROR, "message");
64          vr.addMessage(vm);
65          assertEquals(3, vr.getMessageCount());
66          assertEquals(1, vr.getMessageCount(Severity.ERROR));
67          assertEquals(1, vr.getMessageCount(ValidationMessage.GLOBAL_PROPERTY));
68          assertContainsMessage(vm, vr.getMessages());
69          assertContainsMessage(vm, vr.getMessages(ValidationMessage.GLOBAL_PROPERTY));
70          assertContainsMessage(vm, vr.getMessages(Severity.ERROR));
71          assertEquals(true, vr.getHasErrors());
72          assertEquals(true, vr.getHasWarnings());
73          assertEquals(true, vr.getHasInfo());
74  
75          vm = new DefaultValidationMessage("field1", Severity.ERROR, "message");
76          vr.addMessage(vm);
77          assertEquals(4, vr.getMessageCount());
78          assertEquals(2, vr.getMessageCount(Severity.ERROR));
79          assertEquals(2, vr.getMessageCount("field1"));
80          assertContainsMessage(vm, vr.getMessages());
81          assertContainsMessage(vm, vr.getMessages("field1"));
82          assertContainsMessage(vm, vr.getMessages(Severity.ERROR));
83  
84          DefaultValidationResults vr2 = new DefaultValidationResults();
85          vm = new DefaultValidationMessage("newField", Severity.INFO, "message");
86          vr2.addMessage(vm);
87          ValidationMessage vm2 = new DefaultValidationMessage("newField", Severity.ERROR, "message");
88          vr2.addMessage(vm2);
89  
90          vr.addAllMessages(vr2.getMessages());
91          assertEquals(6, vr.getMessageCount());
92          assertEquals(3, vr.getMessageCount(Severity.ERROR));
93          assertEquals(2, vr.getMessageCount(Severity.INFO));
94          assertEquals(2, vr.getMessageCount("newField"));
95          assertContainsMessage(vm, vr.getMessages());
96          assertContainsMessage(vm2, vr.getMessages());
97          assertContainsMessage(vm, vr.getMessages("newField"));
98          assertContainsMessage(vm2, vr.getMessages("newField"));
99          assertContainsMessage(vm, vr.getMessages(Severity.INFO));
100         assertContainsMessage(vm2, vr.getMessages(Severity.ERROR));
101     }
102 
103     public void testCanNotAddSameMessage() {
104         ValidationMessage vm = new DefaultValidationMessage("field2", Severity.WARNING, "message");
105         vr.addMessage(vm);
106         assertEquals(1, vr.getMessageCount());
107         assertEquals(1, vr.getMessageCount(Severity.WARNING));
108         assertEquals(1, vr.getMessageCount("field2"));
109 
110         vr.addMessage(vm);
111         assertEquals(1, vr.getMessageCount());
112         assertEquals(1, vr.getMessageCount(Severity.WARNING));
113         assertEquals(1, vr.getMessageCount("field2"));
114 
115         vm = new DefaultValidationMessage("field2", Severity.WARNING, "message");
116         vr.addMessage(vm);
117         assertEquals(1, vr.getMessageCount());
118         assertEquals(1, vr.getMessageCount(Severity.WARNING));
119         assertEquals(1, vr.getMessageCount("field2"));
120 
121         DefaultValidationResults vr2 = new DefaultValidationResults();
122         vr2.addMessage(vm);
123         vr.addAllMessages(vr2);
124         assertEquals(1, vr.getMessageCount());
125         assertEquals(1, vr.getMessageCount(Severity.WARNING));
126         assertEquals(1, vr.getMessageCount("field2"));
127     }
128 
129     private void assertContainsMessage(ValidationMessage vm, Set messages) {
130         assertTrue("Set of messages does not contain expected message '" + vm + "'", messages.contains(vm));
131     }
132 
133     public void testReturnedListsAreNotModifiable() {
134         vr.addMessage("field1", Severity.ERROR, "what ever!");
135         try {
136             vr.getMessages().clear();
137             fail();
138         }
139         catch (UnsupportedOperationException e) {
140             // expected
141         }
142         try {
143             vr.getMessages("field1").clear();
144             fail();
145         }
146         catch (UnsupportedOperationException e) {
147             // expected
148         }
149         try {
150             vr.getMessages(Severity.ERROR).clear();
151             fail();
152         }
153         catch (UnsupportedOperationException e) {
154             // expected
155         }
156     }
157 }