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.dialog.control;
017    
018    import javax.swing.JLabel;
019    import javax.swing.JTabbedPane;
020    import javax.swing.event.ChangeEvent;
021    import javax.swing.event.ChangeListener;
022    
023    import org.springframework.richclient.util.EventListenerListHelper.EventBroadcastException;
024    
025    import junit.framework.TestCase;
026    
027    /**
028     * 
029     * @author Peter De Bruycker
030     */
031    public class ExtTabbedPaneTests extends TestCase {
032        // testcase for RCP-528
033        public void testGetTabInsideChangeHandlerThrowsIndexOutOfBoundsException() {
034            final ExtTabbedPane extTabbedPane = new ExtTabbedPane();
035    
036            // when the changelistener performs a getTab(index) call, an IndexOutOfBoundsException
037            extTabbedPane.addChangeListener(new ChangeListener() {
038                public void stateChanged(ChangeEvent e) {
039                    JTabbedPane tabbedPane = (JTabbedPane) extTabbedPane.getControl();
040                    int index = tabbedPane.getSelectedIndex();
041    
042                    if (index >= 0) {
043                        index = extTabbedPane.convertUIIndexToModelIndex(index);
044                        Tab tab = extTabbedPane.getTab(index);
045                        assertNotNull(tab);
046                    }
047                }
048            });
049    
050            Tab tab1 = new Tab("test1", new JLabel("test1"));
051            Tab tab2 = new Tab("test2", new JLabel("test2"));
052            
053            try {
054                extTabbedPane.addTab(tab1);
055            }
056            catch (EventBroadcastException e) {
057                fail(e.getMessage());
058            }
059    
060    
061            try {
062                extTabbedPane.addTab(0, tab2);
063            }
064            catch (EventBroadcastException e) {
065                fail(e.getMessage());
066            }
067            
068            extTabbedPane.selectTab(tab1);
069    
070            try {
071                extTabbedPane.removeTab(tab1);
072            }
073            catch (EventBroadcastException e) {
074                fail(e.getMessage());
075            }
076    }
077    }