001 /*
002 * Copyright 2002-2008 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.application.support;
017
018 import javax.swing.JComponent;
019 import javax.swing.JLabel;
020
021 import junit.framework.TestCase;
022
023 import org.springframework.richclient.application.ApplicationPage;
024
025 /**
026 * Abstract base testcase for {@link ApplicationPage} implementations.
027 *
028 * @author Peter De Bruycker
029 */
030 public abstract class AbstractApplicationPageTestCase extends TestCase {
031
032 private AbstractApplicationPage applicationPage;
033 private TestView testView1;
034 private TestView testView2;
035
036 @Override
037 protected void setUp() throws Exception {
038 setUpViews();
039
040 applicationPage = (AbstractApplicationPage) createApplicationPage();
041 assertNotNull("createApplicationPage returns null", applicationPage);
042
043 SimpleViewDescriptorRegistry viewDescriptorRegistry = new SimpleViewDescriptorRegistry();
044 viewDescriptorRegistry.addViewDescriptor(new SimpleViewDescriptor("testView1", testView1));
045 viewDescriptorRegistry.addViewDescriptor(new SimpleViewDescriptor("testView2", testView2));
046
047 applicationPage.setViewDescriptorRegistry(viewDescriptorRegistry);
048
049 applicationPage.setPageComponentPaneFactory(new SimplePageComponentPaneFactory());
050
051 applicationPage.setDescriptor(new EmptyPageDescriptor());
052
053 // trigger control creation
054 JComponent control = applicationPage.getControl();
055 assertNotNull("getControl cannot return null", control);
056 }
057
058 private void setUpViews() {
059 testView1 = new TestView("this is test view 1");
060 testView2 = new TestView("this is test view 2");
061 }
062
063 protected abstract ApplicationPage createApplicationPage();
064
065 public void testShowViewAndClose() {
066 assertNull(applicationPage.getView("testView1"));
067
068 applicationPage.showView("testView1");
069
070 TestView view = (TestView) applicationPage.getView("testView1");
071
072 assertNotNull(view);
073 assertEquals("testView1", view.getId());
074
075 applicationPage.close(view);
076 assertNull(applicationPage.getView("testView1"));
077 }
078
079 public void testShowViewWithInput() {
080 Object input = "the input";
081
082 applicationPage.showView("testView1", input);
083
084 TestView view = applicationPage.getView("testView1");
085 assertNotNull(view);
086
087 assertTrue(view.isSetInputCalled());
088 assertEquals(input, view.getInput());
089 }
090
091 public void testShowView() {
092 assertSame(testView1, applicationPage.showView("testView1"));
093 assertSame(testView1, applicationPage.getActiveComponent());
094
095 assertSame(testView2, applicationPage.showView("testView2"));
096 assertSame(testView2, applicationPage.getActiveComponent());
097 }
098
099 public void testShowViewWithoutInput() {
100 applicationPage.showView("testView1");
101
102 TestView view = applicationPage.getView("testView1");
103 assertNotNull(view);
104
105 assertFalse(view.isSetInputCalled());
106 }
107
108 public void testGetView() {
109 assertNull(applicationPage.getView("testView1"));
110
111 applicationPage.showView("testView1");
112
113 TestView view = applicationPage.getView("testView1");
114
115 assertNotNull(view);
116 assertEquals("testView1", view.getId());
117
118 applicationPage.close(view);
119 assertNull(applicationPage.getView("testView1"));
120 }
121
122 private static class TestView extends AbstractView {
123
124 private String label;
125 private Object input;
126 private boolean setInputCalled;
127
128 public TestView(String label) {
129 this.label = label;
130 }
131
132 @Override
133 protected JComponent createControl() {
134 return new JLabel(label);
135 }
136
137 @Override
138 public void setInput(Object input) {
139 this.input = input;
140 setInputCalled = true;
141 }
142
143 public Object getInput() {
144 return input;
145 }
146
147 public boolean isSetInputCalled() {
148 return setInputCalled;
149 }
150
151 }
152 }