1/*
2 * Copyright (c) 2012, 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 7107099
28   @summary JScrollBar does not show up even if there are enough lebgth of textstring in textField
29   @author Pavel Porvatov
30*/
31
32import javax.swing.*;
33import java.awt.*;
34
35public class bug7107099 {
36    private static JFrame frame;
37    private static JTextArea textarea;
38    private static JScrollPane scrollPane;
39
40    private static int value;
41    private static int min;
42    private static int max;
43    private static int extent;
44
45    public static void main(String[] args) throws Exception {
46
47        java.awt.Robot robot = new java.awt.Robot();
48
49        SwingUtilities.invokeAndWait(new Runnable() {
50            @Override
51            public void run() {
52                textarea = new JTextArea("before###1###\nbefore###2###\nbefore###3###\nbefore###4###\nbefore###5###\n");
53
54                scrollPane = new JScrollPane(textarea);
55                scrollPane.setPreferredSize(new Dimension(100, 50));
56
57                frame = new JFrame();
58                frame.setLayout(new BorderLayout());
59                frame.setSize(200, 200);
60                frame.add(scrollPane, BorderLayout.SOUTH);
61                frame.setVisible(true);
62            }
63        });
64
65        robot.waitForIdle();
66
67        SwingUtilities.invokeAndWait(new Runnable() {
68            @Override
69            public void run() {
70                BoundedRangeModel model = scrollPane.getVerticalScrollBar().getModel();
71
72                value = model.getValue();
73                min = model.getMinimum();
74                max = model.getMaximum();
75                extent = model.getExtent();
76
77                // Do tricky manipulation for testing purpose
78                textarea.setText(null);
79                scrollPane.setViewportView(textarea);
80                textarea.setText("after###1###\nafter###1###\nafter###1###\nafter###1###\nafter###1###\n");
81                textarea.setCaretPosition(0);
82            }
83        });
84
85        robot.waitForIdle();
86
87        SwingUtilities.invokeAndWait(new Runnable() {
88            @Override
89            public void run() {
90                BoundedRangeModel model = scrollPane.getVerticalScrollBar().getModel();
91
92                if (value != model.getValue() ||
93                        min != model.getMinimum() ||
94                        max != model.getMaximum() ||
95                        extent != model.getExtent()) {
96                    throw new RuntimeException("Test bug7107099 failed");
97                }
98
99                System.out.println("Test bug7107099 passed");
100
101                frame.dispose();
102            }
103        });
104    }
105}
106