Package javax.swing

Source Code of javax.swing.JSpinnerTest

/*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
/**
* @author Dennis Ushakov
*/
package javax.swing;

import java.beans.PropertyChangeEvent;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.JSpinner.DateEditor;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.JSpinner.ListEditor;
import javax.swing.JSpinner.NumberEditor;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.SpinnerUI;
import javax.swing.text.DateFormatter;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;
import org.apache.harmony.x.swing.StringConstants;
import org.apache.harmony.x.swing.Utilities;

public class JSpinnerTest extends BasicSwingTestCase {
    private JSpinner spinner;

    private SpinnerModel abstractModel;

    private ChangeController chl;

    @Override
    public void setUp() {
        spinner = new JSpinner();
        propertyChangeController = new PropertyChangeController();
        spinner.addPropertyChangeListener(propertyChangeController);
        chl = new ChangeController();
        spinner.addChangeListener(chl);
        abstractModel = new SpinnerModel() {
            public void addChangeListener(ChangeListener l) {
            }

            public Object getNextValue() {
                return null;
            }

            public Object getPreviousValue() {
                return null;
            }

            public Object getValue() {
                return null;
            }

            public void removeChangeListener(ChangeListener l) {
            }

            public void setValue(Object value) {
            }
        };
    }

    @Override
    public void tearDown() {
        spinner = null;
        abstractModel = null;
        propertyChangeController = null;
        chl = null;
    }

    public void testJSpinner() {
        assertTrue(spinner.getModel() instanceof SpinnerNumberModel);
        assertTrue(spinner.getEditor() instanceof JSpinner.NumberEditor);
        assertTrue(Arrays.asList(spinner.getChangeListeners()).contains(spinner.getEditor()));
    }

    public void testSetGetUpdateUI() {
        assertEquals(spinner.getUIClassID(), "SpinnerUI");
        SpinnerUI defaultUI = spinner.getUI();
        assertNotNull(defaultUI);
        SpinnerUI ui = new SpinnerUI() {
        };
        spinner.setUI(ui);
        assertEquals(ui, spinner.getUI());
        assertTrue(propertyChangeController.isChanged("UI"));
        propertyChangeController.reset();
        spinner.updateUI();
        assertNotSame(ui, spinner.getUI());
        assertTrue(propertyChangeController.isChanged("UI"));
    }

    public void testSetGetModel() {
        SpinnerNumberModel newModel = new SpinnerNumberModel(0, -1, 1, 1);
        spinner.setModel(newModel);
        assertSame(newModel, spinner.getModel());
        assertTrue(propertyChangeController.isChanged(StringConstants.MODEL_PROPERTY_CHANGED));
        assertTrue(propertyChangeController.isChanged(StringConstants.EDITOR_PROPERTY_CHANGED));
        assertEquals(1, newModel.getChangeListeners().length);
        spinner.setEditor(new JButton());
        propertyChangeController.reset();
        spinner.setModel(new SpinnerNumberModel(0, -2, 2, 1));
        assertFalse(propertyChangeController.isChanged(StringConstants.EDITOR_PROPERTY_CHANGED));
        testExceptionalCase(new IllegalArgumentCase() {
            @Override
            public void exceptionalAction() throws Exception {
                spinner.setModel(null);
            }
        });
        if (isHarmony()) {
            SpinnerNumberModel old = (SpinnerNumberModel) spinner.getModel();
            spinner.setModel(new SpinnerDateModel());
            assertEquals(old.getChangeListeners().length, 0);
        }
    }

    public void testSetGetValue() {
        spinner.setValue(new Integer(10));
        assertTrue(chl.isChanged());
        assertEquals(spinner.getModel().getValue(), spinner.getValue());
    }

    public void testGetPreviousNextValue() {
        assertEquals(spinner.getNextValue(), spinner.getModel().getNextValue());
        assertEquals(spinner.getPreviousValue(), spinner.getModel().getPreviousValue());
    }

    public void testAddRemoveGetChangeListener() {
        assertEquals(2, spinner.getChangeListeners().length);
        assertTrue(Arrays.asList(spinner.getChangeListeners()).contains(chl));
        ChangeListener listener = new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
            }
        };
        spinner.addChangeListener(listener);
        assertTrue(Arrays.asList(spinner.getChangeListeners()).contains(listener));
        spinner.removeChangeListener(chl);
        spinner.removeChangeListener(listener);
        assertEquals(1, spinner.getChangeListeners().length);
    }

    public void testFireStateChanged() {
        spinner.getModel().setValue(new Integer(10));
        assertTrue(chl.isChanged());
    }

    public void testSetGetEditor() throws Exception {
        JComponent oldEditor = spinner.getEditor();
        assertNotNull(oldEditor);
        JComponent editor = new JProgressBar();
        spinner.setEditor(editor);
        assertFalse(Arrays.asList(spinner.getChangeListeners()).contains(editor));
        assertTrue(propertyChangeController.isChanged(StringConstants.EDITOR_PROPERTY_CHANGED));
        assertSame(editor, spinner.getEditor());
        editor = new JSpinner.NumberEditor(spinner);
        spinner.setEditor(editor);
        assertTrue(Arrays.asList(spinner.getChangeListeners()).contains(editor));
        assertTrue(propertyChangeController.isChanged(StringConstants.EDITOR_PROPERTY_CHANGED));
        assertSame(editor, spinner.getEditor());
        testExceptionalCase(new IllegalArgumentCase() {
            @Override
            public void exceptionalAction() throws Exception {
                spinner.setEditor(null);
            }
        });
        spinner = new JSpinner();
        spinner.setEditor(oldEditor);
        assertFalse(Arrays.asList(spinner.getChangeListeners()).contains(oldEditor));
        spinner = new JSpinner();
        oldEditor = spinner.getEditor();
        spinner.setEditor(oldEditor);
        spinner.setModel(new SpinnerDateModel());
        assertNotSame(spinner.getEditor(), oldEditor);
        spinner = new JSpinner();
        oldEditor = spinner.getEditor();
        spinner.setEditor(oldEditor);
        spinner.setModel(new SpinnerDateModel());
        assertNotSame(spinner.getEditor(), oldEditor);
    }

    public void testCreateEditor() {
        SpinnerModel model = new SpinnerNumberModel();
        spinner.setModel(model);
        assertTrue(spinner.createEditor(model) instanceof JSpinner.NumberEditor);
        model = new SpinnerDateModel();
        spinner.setModel(model);
        assertTrue(spinner.createEditor(model) instanceof JSpinner.DateEditor);
        model = new SpinnerListModel();
        spinner.setModel(model);
        assertTrue(spinner.createEditor(model) instanceof JSpinner.ListEditor);
        assertTrue(spinner.createEditor(abstractModel) instanceof JSpinner.DefaultEditor);
    }

    public void testGetAccessibleContext() {
    }

    public void testDefaultEditor_DefaultEditor() {
        DefaultEditor defaultEditor = (DefaultEditor) spinner.createEditor(abstractModel);
        spinner.setEditor(defaultEditor);
        assertTrue(Arrays.asList(defaultEditor.getTextField().getPropertyChangeListeners())
                .contains(defaultEditor));
        assertFalse(defaultEditor.getTextField().isEditable());
        assertSame(defaultEditor.getTextField(), defaultEditor.getComponent(0));
        JFormattedTextField textField = ((DefaultEditor) spinner.getEditor()).getTextField();
        assertSame(textField.getActionForKeyStroke(KeyStroke.getKeyStroke("DOWN")), textField
                .getActionForKeyStroke(KeyStroke.getKeyStroke("UP")));
        textField.setFormatterFactory(new DefaultFormatterFactory(null));
        textField.setValue("TEST");
        assertEquals(new Integer(0), textField.getValue());
    }

    public void testDefaultEditor_propertyChange() throws Exception {
        DefaultEditor defaultEditor = (DefaultEditor) spinner.getEditor();
        PropertyChangeController pcc = new PropertyChangeController();
        ChangeController modelController = new ChangeController();
        defaultEditor.getTextField().addPropertyChangeListener(pcc);
        spinner.getModel().addChangeListener(modelController);
        defaultEditor.getTextField().setText("15");
        defaultEditor.commitEdit();
        assertTrue(pcc.isChanged());
        assertTrue(modelController.isChanged());
        modelController.reset();
        defaultEditor.getTextField().removePropertyChangeListener(defaultEditor);
        defaultEditor.getTextField().setText("18");
        defaultEditor.commitEdit();
        defaultEditor.getTextField().addPropertyChangeListener(defaultEditor);
        defaultEditor.propertyChange(new PropertyChangeEvent(defaultEditor.getTextField(),
                "value", defaultEditor.getTextField().getValue(), new Integer(10)));
        assertTrue(modelController.isChanged());
        modelController.reset();
        defaultEditor.getTextField().removePropertyChangeListener(defaultEditor);
        defaultEditor.getTextField().setText("58");
        defaultEditor.commitEdit();
        defaultEditor.getTextField().addPropertyChangeListener(defaultEditor);
        defaultEditor.propertyChange(new PropertyChangeEvent(new Integer(10), "value",
                new Integer(13), new Integer(10)));
        assertFalse(modelController.isChanged());
    }

    public void testDefaultEditor_stateChange() {
        DefaultEditor defaultEditor = (DefaultEditor) spinner.getEditor();
        PropertyChangeController pcc = new PropertyChangeController();
        defaultEditor.getTextField().addPropertyChangeListener(pcc);
        spinner.setValue(new Integer(159));
        assertTrue(pcc.isChanged());
    }

    public void testDefaultEditor_LayoutSizes() {
        DefaultEditor defaultEditor = (DefaultEditor) spinner.createEditor(abstractModel);
        spinner.setEditor(defaultEditor);
        assertEquals(defaultEditor.minimumLayoutSize(spinner), Utilities.addInsets(
                defaultEditor.getTextField().getMinimumSize(), spinner.getInsets()));
        assertEquals(defaultEditor.preferredLayoutSize(spinner), Utilities.addInsets(
                defaultEditor.getTextField().getPreferredSize(), spinner.getInsets()));
    }

    public void testNumberEditor_NumberEditor() {
        spinner.getModel().setValue(new Integer(5));
        NumberEditor numEditor = new NumberEditor(spinner);
        spinner.setEditor(numEditor);
        assertTrue(numEditor.getTextField().isEditable());
        assertTrue(numEditor.getTextField().getFormatter() instanceof NumberFormatter);
        assertEquals(numEditor.getTextField().getValue(), new Integer(5));
        assertSame(((NumberFormatter) numEditor.getTextField().getFormatter()).getValueClass(),
                Integer.class);
        assertNull(((NumberFormatter) numEditor.getTextField().getFormatter()).getMinimum());
        assertNull(((NumberFormatter) numEditor.getTextField().getFormatter()).getMaximum());
        assertTrue(numEditor.getFormat().equals(new DecimalFormat()));
        spinner.setModel(abstractModel);
        testExceptionalCase(new IllegalArgumentCase() {
            @Override
            public void exceptionalAction() throws Exception {
                new JSpinner.NumberEditor(spinner);
            }
        });
    }

    public void testNumberEditor_formatter() {
        NumberEditor numEditor = new NumberEditor(spinner);
        spinner.setEditor(numEditor);
        final Integer max1 = new Integer(777);
        NumberFormatter numberFormatter = ((NumberFormatter) numEditor.getTextField()
                .getFormatter());
        numberFormatter.setMaximum(max1);
        assertSame(numberFormatter.getMaximum(), max1);
        assertSame(numEditor.getModel().getMaximum(), max1);
        final Integer max2 = new Integer(555);
        numEditor.getModel().setMaximum(max2);
        assertSame(numberFormatter.getMaximum(), max2);
        assertSame(numEditor.getModel().getMaximum(), max2);
        SpinnerNumberModel old = (SpinnerNumberModel) spinner.getModel();
        spinner.setModel(abstractModel);
        final Integer max3 = new Integer(333);
        old.setMaximum(max3);
        assertSame(((NumberFormatter) ((NumberEditor) spinner.getEditor()).getTextField()
                .getFormatter()).getMaximum(), max3);
    }

    public void testNumberEditor_getModel() {
        NumberEditor numEditor = new NumberEditor(spinner);
        spinner.setEditor(numEditor);
        assertSame(numEditor.getModel(), spinner.getModel());
        spinner.setModel(abstractModel);
        testExceptionalCase(new ExceptionalCase(null, ClassCastException.class) {
            @Override
            public void exceptionalAction() throws Exception {
                ((NumberEditor) spinner.getEditor()).getModel();
            }
        });
    }

    public void testDateEditor_DateEditor() {
        spinner.setModel(new SpinnerDateModel());
        DateEditor dateEditor = (DateEditor) spinner.getEditor();
        spinner.setEditor(dateEditor);
        assertTrue(dateEditor.getTextField().isEditable());
        assertTrue(dateEditor.getTextField().getFormatter() instanceof DateFormatter);
        assertNull(((DateFormatter) dateEditor.getTextField().getFormatter()).getMinimum());
        assertNull(((DateFormatter) dateEditor.getTextField().getFormatter()).getMaximum());
        assertTrue(dateEditor.getFormat().equals(new SimpleDateFormat()));
        spinner.setModel(abstractModel);
        testExceptionalCase(new IllegalArgumentCase() {
            @Override
            public void exceptionalAction() throws Exception {
                new JSpinner.DateEditor(spinner);
            }
        });
    }

    public void testDateEditor_formatter() {
        spinner.setModel(new SpinnerDateModel());
        DateEditor dateEditor = new DateEditor(spinner);
        spinner.setEditor(dateEditor);
        final Date date1 = new Date(777);
        DateFormatter dateFormatter = ((DateFormatter) dateEditor.getTextField().getFormatter());
        dateFormatter.setMaximum(date1);
        assertSame(dateFormatter.getMaximum(), date1);
        assertSame(dateEditor.getModel().getEnd(), date1);
        final Date date2 = new Date(555);
        dateEditor.getModel().setEnd(date2);
        assertSame(dateFormatter.getMaximum(), date2);
        assertSame(dateEditor.getModel().getEnd(), date2);
        SpinnerDateModel old = (SpinnerDateModel) spinner.getModel();
        spinner.setModel(abstractModel);
        final Date date3 = new Date(555);
        old.setEnd(date3);
        assertEquals(((DateFormatter) ((DateEditor) spinner.getEditor()).getTextField()
                .getFormatter()).getMaximum(), date3);
    }

    public void testListEditor_ListEditor() {
        Object[] values = { "arrline1", "arrline2", "text", new Integer(33), spinner };
        spinner.setModel(new SpinnerListModel(values));
        ListEditor listEditor = new ListEditor(spinner);
        spinner.setEditor(listEditor);
        assertTrue(listEditor.getTextField().isEditable());
        spinner.setModel(abstractModel);
        testExceptionalCase(new IllegalArgumentCase() {
            @Override
            public void exceptionalAction() throws Exception {
                new JSpinner.ListEditor(spinner);
            }
        });
    }

    public void testListEditor_formatter() throws Exception {
        JComponent comp = new JButton();
        Object[] values = { "arrline1", "arrline2", "text", new Integer(33), comp };
        spinner.setModel(new SpinnerListModel(values));
        ListEditor listEditor = new ListEditor(spinner);
        spinner.setEditor(listEditor);
        AbstractFormatter formatter = ((ListEditor) spinner.getEditor()).getTextField()
                .getFormatter();
        assertEquals(formatter.valueToString(null), "");
        assertEquals(formatter.valueToString(new Integer(33)), "33");
        assertEquals(formatter.stringToValue("text"), "text");
    }
}
TOP

Related Classes of javax.swing.JSpinnerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.