1/*
2 * Copyright (c) 2001, 2015, 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
24import java.awt.*;
25import javax.swing.*;
26import java.awt.event.*;
27
28/*
29 * test
30 * @bug  4644444 8076246
31*/
32
33public class bug4644444 extends JApplet {
34
35        JPanel panel;
36        JButton button;
37
38        public bug4644444() throws Exception {
39            java.awt.EventQueue.invokeLater( () -> {
40                panel = new JPanel();
41                button = new JButton("whooo");
42                button.setToolTipText("Somthing really long 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890");
43                panel.add(button);
44                getContentPane().add(panel);
45            });
46    }
47
48    public void init() {
49                String[][] instructionsSet =
50                {
51                        {
52                                " Note : Incase of Assertion failure,user can enter",
53                                " remarks by pressing 'Assertion Fail Remarks ' button",
54                                " ",
55                                " You would see a testframe with a Button",
56                        " ",
57                                " ON ALL PLATFORMS",
58                        "1. Move the mouse on the button, ",
59                        "   so that the tooltip attached to it comes up ",
60                        "2. Tool tip should get adjusted it-self to show ",
61                        "       its full length of text. ",
62                        "3. If tooltip  text gets cut, ",
63                        "   press 'Assertion Fail' else press 'Assertion Pass'",
64                        "4. Similarly, move the applet to different locations of the screen, ",
65                        "   & see if tooltip works properly everywhere. "
66                        }
67                };
68
69                String[] exceptionsSet =
70                {
71                        "JToolTip is shown partially when placed very close to screen boundaries",
72                };
73
74                Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
75
76        }
77
78        public void start (){}
79
80        public void destroy(){
81            if(Sysout.failStatus())    {
82                String failMsg = Sysout.getFailureMessages();
83                failMsg = failMsg.replace('\n',' ');
84                throw new RuntimeException(failMsg);
85            }// End destroy
86        }
87}
88
89
90/****************************************************
91 Standard Test Machinery
92 DO NOT modify anything below -- it's a standard
93  chunk of code whose purpose is to make user
94  interaction uniform, and thereby make it simpler
95  to read and understand someone else's test.
96 ****************************************************/
97
98/**
99 This is part of the standard test machinery.
100 It creates a dialog (with the instructions), and is the interface
101  for sending text messages to the user.
102 To print the instructions, send an array of strings to Sysout.createDialog
103  WithInstructions method.  Put one line of instructions per array entry.
104 To display a message for the tester to see, simply call Sysout.println
105  with the string to be displayed.
106 This mimics System.out.println but works within the test harness as well
107  as standalone.
108 */
109
110class Sysout
111 {
112   private static TestDialog dialog;
113
114   public static void createDialogWithInstructions( String[] instructions )
115    {
116      dialog = new TestDialog( new Frame(), "Instructions" );
117      dialog.printInstructions( instructions );
118      dialog.show();
119      println( "Any messages for the tester will display here." );
120    }
121
122   public static void createDialog( )
123    {
124      dialog = new TestDialog( new Frame(), "Instructions" );
125      String[] defInstr = { "Instructions will appear here. ", "" } ;
126      dialog.printInstructions( defInstr );
127      dialog.show();
128      println( "Any messages for the tester will display here." );
129    }
130
131
132   public static void printInstructions( String[] instructions )
133    {
134      dialog.printInstructions( instructions );
135    }
136
137
138   public static void println( String messageIn )
139    {
140      dialog.displayMessage( messageIn );
141    }
142
143   public static void setInstructionsWithExceptions(String instructionsSet[][],
144                                                    String exceptionsSet[]) {
145       createDialogWithInstructions(instructionsSet[0]);
146       dialog.setInstructions(instructionsSet);
147       dialog.setExceptionMessages(exceptionsSet);
148   }
149
150   public static String getFailureMessages()   {
151       return dialog.failureMessages;
152   }
153
154   public static boolean failStatus()  {
155       return dialog.failStatus;
156   }
157
158 }// Sysout  class
159
160/**
161  This is part of the standard test machinery.  It provides a place for the
162   test instructions to be displayed, and a place for interactive messages
163   to the user to be displayed.
164  To have the test instructions displayed, see Sysout.
165  To have a message to the user be displayed, see Sysout.
166  Do not call anything in this dialog directly.
167  */
168class TestDialog extends Dialog
169 {
170
171   TextArea instructionsText;
172   TextArea messageText;
173   int maxStringLength = 70;
174
175   Panel assertPanel;
176   Button assertPass,assertFail,remarks;
177   HandleAssert handleAssert;
178   boolean failStatus=false;
179   int instructionCounter=0;
180   String instructions[][];
181   int exceptionCounter=0;
182   String exceptionMessages[];
183   String failureMessages="<br>";
184   String remarksMessage=null;
185   RemarksDialog remarksDialog;
186
187   //DO NOT call this directly, go through Sysout
188   public TestDialog( Frame frame, String name )
189    {
190      super( frame, name );
191      int scrollBoth = TextArea.SCROLLBARS_BOTH;
192      instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
193      add( "North", instructionsText );
194
195      messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
196      add("Center", messageText);
197
198      assertPanel = new Panel(new FlowLayout());
199      assertPass=new Button("Assertion Pass");
200      assertPass.setName("Assertion Pass");
201      assertFail=new Button("Assertion Fail");
202      assertFail.setName("Assertion Fail");
203      remarks = new Button("Assertion Fail Remarks");
204      remarks.setEnabled(false);
205      remarks.setName("Assertion Remarks");
206      assertPanel.add(assertPass);
207      assertPanel.add(assertFail);
208      assertPanel.add(remarks);
209      handleAssert = new HandleAssert();
210      assertPass.addActionListener(handleAssert);
211      assertFail.addActionListener(handleAssert);
212      remarks.addActionListener(handleAssert);
213      add("South",assertPanel);
214      pack();
215
216      show();
217    }// TestDialog()
218
219   //DO NOT call this directly, go through Sysout
220   public void printInstructions( String[] instructions )
221    {
222      //Clear out any current instructions
223      instructionsText.setText( "" );
224
225      //Go down array of instruction strings
226
227      String printStr, remainingStr;
228      for( int i=0; i < instructions.length; i++ )
229       {
230     //chop up each into pieces maxSringLength long
231     remainingStr = instructions[ i ];
232     while( remainingStr.length() > 0 )
233      {
234        //if longer than max then chop off first max chars to print
235        if( remainingStr.length() >= maxStringLength )
236         {
237           //Try to chop on a word boundary
238           int posOfSpace = remainingStr.
239          lastIndexOf( ' ', maxStringLength - 1 );
240
241           if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
242
243           printStr = remainingStr.substring( 0, posOfSpace + 1 );
244           remainingStr = remainingStr.substring( posOfSpace + 1 );
245         }
246        //else just print
247        else
248         {
249           printStr = remainingStr;
250           remainingStr = "";
251         }
252
253            instructionsText.append( printStr + "\n" );
254
255      }// while
256
257       }// for
258
259    }//printInstructions()
260
261   //DO NOT call this directly, go through Sysout
262   public void displayMessage( String messageIn )
263    {
264      messageText.append( messageIn + "\n" );
265    }
266
267   public void emptyMessage()   {
268       messageText.setText("");
269   }
270
271   public void setInstructions(String insStr[][])    {
272       instructions=insStr;
273   }
274
275   public void setExceptionMessages(String exceptionMessages[])   {
276       this.exceptionMessages=exceptionMessages;
277   }
278
279   class HandleAssert implements ActionListener   {
280        public void actionPerformed(ActionEvent ae)    {
281           if(ae.getSource()==remarks)  {
282               remarksDialog = new RemarksDialog(TestDialog.this,
283                                        "Assertion Remarks Dialog",true);
284               remarks.setEnabled(false);
285               if(remarksMessage!=null)
286                    failureMessages+=". User Remarks : "+remarksMessage;
287           }
288           else {
289               if(instructionCounter<instructions.length-1) {
290                   emptyMessage();
291                   instructionCounter++;
292                   printInstructions(instructions[instructionCounter]);
293               }
294               else {
295                   emptyMessage();
296                   displayMessage("Testcase Completed");
297                   displayMessage("Press 'Done' button in the "+
298                                                    "BaseApplet to close");
299                   assertPass.setEnabled(false);
300                   assertFail.setEnabled(false);
301               }
302
303               if(ae.getSource()==assertPass)    {
304                   // anything to be done in future
305               }
306               else if(ae.getSource()==assertFail)   {
307                   remarks.setEnabled(true);
308                   if(!failStatus)
309                       failStatus=true;
310                   if(exceptionCounter<exceptionMessages.length)   {
311                        failureMessages = failureMessages + "<br>"+
312                                    exceptionMessages[exceptionCounter];
313                   }
314               }
315               exceptionCounter++;
316           }
317        }
318    }
319
320    class RemarksDialog extends Dialog  implements ActionListener{
321        Panel rootPanel,remarksPanel;
322        TextArea textarea;
323        Button addRemarks,cancelRemarks;
324        public RemarksDialog(Dialog owner,String title,boolean modal)  {
325            super(owner,title,modal);
326            rootPanel = new Panel(new BorderLayout());
327            remarksPanel = new Panel(new FlowLayout());
328            textarea = new TextArea(5,30);
329            addRemarks=new Button("Add Remarks");
330            addRemarks.addActionListener(this);
331            cancelRemarks = new Button("Cancel Remarks");
332            cancelRemarks.addActionListener(this);
333            remarksPanel.add(addRemarks);
334            remarksPanel.add(cancelRemarks);
335            rootPanel.add(textarea,"Center");
336            rootPanel.add(remarksPanel,"South");
337            add(rootPanel);
338            setBounds(150,150,400,200);
339            setVisible(true);
340        }
341
342        public void actionPerformed(ActionEvent ae) {
343            remarksMessage=null;
344            if(ae.getSource()==addRemarks)  {
345                String msg = textarea.getText().trim();
346                if (msg.length()>0)
347                    remarksMessage=msg;
348            }
349            dispose();
350        }
351
352    }
353
354}// TestDialog  class
355