1/*
2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @key headful
27 * @bug 6421058
28 * @summary Verify font of the text field is changed to the font of
29 *          JSpinner if the font of text field was NOT set by the user
30 * @run main bug6421058
31 */
32
33import java.awt.Font;
34import javax.swing.JFrame;
35import javax.swing.JSpinner;
36import javax.swing.JSpinner.DefaultEditor;
37import javax.swing.SwingUtilities;
38import javax.swing.UIManager;
39import javax.swing.UnsupportedLookAndFeelException;
40import javax.swing.plaf.UIResource;
41import static javax.swing.UIManager.getInstalledLookAndFeels;
42
43public class bug6421058 implements Runnable {
44
45    public static void main(final String[] args) throws Exception {
46        for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) {
47            SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf));
48            SwingUtilities.invokeAndWait(new bug6421058());
49        }
50    }
51
52    @Override
53    public void run() {
54        final JFrame mainFrame = new JFrame();
55        try {
56            testDefaultFont(mainFrame);
57        } finally {
58            mainFrame.dispose();
59        }
60    }
61
62    private static void testDefaultFont(final JFrame frame) {
63        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
64
65        JSpinner spinner = new JSpinner();
66        frame.add(spinner);
67        frame.setSize(300, 100);
68        frame.setVisible(true);
69
70        final DefaultEditor editor = (DefaultEditor) spinner.getEditor();
71        final Font editorFont = editor.getTextField().getFont();
72
73        /*
74         * Validate that the font of the text field is changed to the
75         * font of JSpinner if the font of text field was not set by the
76         * user.
77         */
78
79        if (!(editorFont instanceof UIResource)) {
80            throw new RuntimeException("Font must be UIResource");
81        }
82        if (!editorFont.equals(spinner.getFont())) {
83            throw new RuntimeException("Wrong FONT");
84        }
85    }
86
87    private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) {
88        try {
89            UIManager.setLookAndFeel(laf.getClassName());
90        } catch (ClassNotFoundException | InstantiationException |
91                UnsupportedLookAndFeelException | IllegalAccessException e) {
92            throw new RuntimeException(e);
93        }
94    }
95}
96