001    /*
002     * Copyright 2002-2006 the original author or authors.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * 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, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.command;
017    
018    import junit.framework.TestCase;
019    
020    import java.beans.PropertyChangeEvent;
021    import java.beans.PropertyChangeListener;
022    
023    /**
024     * @author Mathias Broekelmann
025     * 
026     */
027    public abstract class AbstractCommandTests extends TestCase {
028    
029        private TestListener testListener;
030    
031        protected void setUp() throws Exception {
032            testListener = new TestListener();
033        }
034    
035        public void testEnabledState() throws Exception {
036            TestAbstractCommand command = new TestAbstractCommand();
037            command.addEnabledListener(testListener);
038            // test initial value
039            command.secondaryEnabledState = false;
040            assertFalse(command.isEnabled());
041            command.setSecondaryEnabledState(false);
042            assertEquals(0, testListener.eventCount);
043            assertFalse(command.isEnabled());
044    
045            // test state change
046            testListener.eventCount = 0;
047            command.setSecondaryEnabledState(true);
048            assertEquals(1, testListener.eventCount);
049            assertTrue(command.isEnabled());
050    
051            // test initial value
052            command = new TestAbstractCommand();
053            command.addEnabledListener(testListener);
054            testListener.eventCount = 0;
055            command.secondaryEnabledState = true;
056            assertTrue(command.isEnabled());
057            command.setSecondaryEnabledState(false);
058            assertEquals(1, testListener.eventCount);
059            assertFalse(command.isEnabled());
060        }
061    
062        public void testVisibleState() throws Exception {
063            TestAbstractCommand command = new TestAbstractCommand();
064            command.addPropertyChangeListener("visible", testListener);
065            // test initial value
066            command.secondaryVisibleState = false;
067            command.setSecondaryVisibleState(false);
068            assertEquals(0, testListener.eventCount);
069            assertFalse(command.isVisible());
070    
071            // test state change
072            testListener.eventCount = 0;
073            command.setSecondaryVisibleState(true);
074            assertEquals(1, testListener.eventCount);
075            assertTrue(command.isVisible());
076    
077            // test initial value
078            command = new TestAbstractCommand();
079            command.addPropertyChangeListener("visible", testListener);
080            testListener.eventCount = 0;
081            command.secondaryVisibleState = true;
082            assertTrue(command.isVisible());
083            command.setSecondaryVisibleState(false);
084            assertEquals(1, testListener.eventCount);
085            assertFalse(command.isVisible());
086        }
087    
088        protected class TestListener implements PropertyChangeListener {
089    
090            int eventCount = 0;
091    
092            public void propertyChange(PropertyChangeEvent evt) {
093                eventCount++;
094            }
095    
096        }
097    
098        protected class TestAbstractCommand extends AbstractCommand {
099    
100            boolean secondaryEnabledState;
101    
102            boolean secondaryVisibleState;
103    
104            public boolean isEnabled() {
105                return super.isEnabled() && secondaryEnabledState;
106            }
107    
108            public boolean isVisible() {
109                return super.isVisible() && secondaryVisibleState;
110            }
111    
112            public void setSecondaryEnabledState(boolean secondaryEnabledState) {
113                if (secondaryEnabledState != this.secondaryEnabledState) {
114                    this.secondaryEnabledState = secondaryEnabledState;
115                    updatedEnabledState();
116                }
117            }
118    
119            public void setSecondaryVisibleState(boolean secondaryVisibleState) {
120                if (secondaryVisibleState != this.secondaryVisibleState) {
121                    this.secondaryVisibleState = secondaryVisibleState;
122                    updatedVisibleState();
123                }
124            }
125    
126            public void execute() {
127            }
128        }
129    }