001    /*
002     * Copyright 2002-2005 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.springframework.binding.validation;
017    
018    import java.util.Set;
019    
020    import org.springframework.binding.validation.support.DefaultValidationMessage;
021    import org.springframework.binding.validation.support.DefaultValidationResults;
022    import org.springframework.richclient.core.Severity;
023    
024    import junit.framework.TestCase;
025    
026    public class DefaultValidationResultsTests extends TestCase {
027        private DefaultValidationResults vr = new DefaultValidationResults();
028    
029        public void testAddAndGetMessages() {
030            assertEquals(0, vr.getMessageCount());
031            assertEquals(0, vr.getMessageCount(Severity.INFO));
032            assertEquals(0, vr.getMessageCount("field1"));
033            assertEquals(false, vr.getHasErrors());
034            assertEquals(false, vr.getHasWarnings());
035            assertEquals(false, vr.getHasInfo());
036    
037            vr.addMessage("field1", Severity.INFO, "message");
038            assertEquals(1, vr.getMessageCount());
039            assertEquals(1, vr.getMessageCount(Severity.INFO));
040            assertEquals(1, vr.getMessageCount("field1"));
041            ValidationMessage vm = (ValidationMessage)vr.getMessages().iterator().next();
042            assertEquals("field1", vm.getProperty());
043            assertEquals(Severity.INFO, vm.getSeverity());
044            assertEquals("message", vm.getMessage());
045            assertContainsMessage(vm, vr.getMessages("field1"));
046            assertContainsMessage(vm, vr.getMessages(Severity.INFO));
047            assertEquals(false, vr.getHasErrors());
048            assertEquals(false, vr.getHasWarnings());
049            assertEquals(true, vr.getHasInfo());
050    
051            vm = new DefaultValidationMessage("field2", Severity.WARNING, "message");
052            vr.addMessage(vm);
053            assertEquals(2, vr.getMessageCount());
054            assertEquals(1, vr.getMessageCount(Severity.WARNING));
055            assertEquals(1, vr.getMessageCount("field2"));
056            assertContainsMessage(vm, vr.getMessages());
057            assertContainsMessage(vm, vr.getMessages("field2"));
058            assertContainsMessage(vm, vr.getMessages(Severity.WARNING));
059            assertEquals(false, vr.getHasErrors());
060            assertEquals(true, vr.getHasWarnings());
061            assertEquals(true, vr.getHasInfo());
062    
063            vm = new DefaultValidationMessage(ValidationMessage.GLOBAL_PROPERTY, Severity.ERROR, "message");
064            vr.addMessage(vm);
065            assertEquals(3, vr.getMessageCount());
066            assertEquals(1, vr.getMessageCount(Severity.ERROR));
067            assertEquals(1, vr.getMessageCount(ValidationMessage.GLOBAL_PROPERTY));
068            assertContainsMessage(vm, vr.getMessages());
069            assertContainsMessage(vm, vr.getMessages(ValidationMessage.GLOBAL_PROPERTY));
070            assertContainsMessage(vm, vr.getMessages(Severity.ERROR));
071            assertEquals(true, vr.getHasErrors());
072            assertEquals(true, vr.getHasWarnings());
073            assertEquals(true, vr.getHasInfo());
074    
075            vm = new DefaultValidationMessage("field1", Severity.ERROR, "message");
076            vr.addMessage(vm);
077            assertEquals(4, vr.getMessageCount());
078            assertEquals(2, vr.getMessageCount(Severity.ERROR));
079            assertEquals(2, vr.getMessageCount("field1"));
080            assertContainsMessage(vm, vr.getMessages());
081            assertContainsMessage(vm, vr.getMessages("field1"));
082            assertContainsMessage(vm, vr.getMessages(Severity.ERROR));
083    
084            DefaultValidationResults vr2 = new DefaultValidationResults();
085            vm = new DefaultValidationMessage("newField", Severity.INFO, "message");
086            vr2.addMessage(vm);
087            ValidationMessage vm2 = new DefaultValidationMessage("newField", Severity.ERROR, "message");
088            vr2.addMessage(vm2);
089    
090            vr.addAllMessages(vr2.getMessages());
091            assertEquals(6, vr.getMessageCount());
092            assertEquals(3, vr.getMessageCount(Severity.ERROR));
093            assertEquals(2, vr.getMessageCount(Severity.INFO));
094            assertEquals(2, vr.getMessageCount("newField"));
095            assertContainsMessage(vm, vr.getMessages());
096            assertContainsMessage(vm2, vr.getMessages());
097            assertContainsMessage(vm, vr.getMessages("newField"));
098            assertContainsMessage(vm2, vr.getMessages("newField"));
099            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    }