1/*
2 * Copyright (c) 2010, 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  @bug 6467204
27  @summary Need to implement "extended" native FileDialog for JFileChooser
28  @author dmitry.cherepanov@sun.com area=awt.filedialog
29  @run applet/manual=yesno MultipleMode.html
30*/
31
32// Note there is no @ in front of test above.  This is so that the
33//  harness will not mistake this file as a test file.  It should
34//  only see the html file as a test file. (the harness runs all
35//  valid test files, so it would run this test twice if this file
36//  were valid as well as the html file.)
37// Also, note the area= after Your Name in the author tag.  Here, you
38//  should put which functional area the test falls in.  See the
39//  AWT-core home page -> test areas and/or -> AWT team  for a list of
40//  areas.
41// There are several places where ManualYesNoTest appear.  It is
42//  recommended that these be changed by a global search and replace,
43//  such as  ESC-%  in xemacs.
44
45
46
47/**
48 * MultipleMode.java
49 *
50 * summary:
51 */
52
53import java.applet.Applet;
54import java.awt.*;
55import java.awt.event.*;
56import java.io.File;
57
58
59//Manual tests should run as applet tests if possible because they
60// get their environments cleaned up, including AWT threads, any
61// test created threads, and any system resources used by the test
62// such as file descriptors.  (This is normally not a problem as
63// main tests usually run in a separate VM, however on some platforms
64// such as the Mac, separate VMs are not possible and non-applet
65// tests will cause problems).  Also, you don't have to worry about
66// synchronisation stuff in Applet tests the way you do in main
67// tests...
68
69
70public class MultipleMode extends Applet
71{
72    //Declare things used in the test, like buttons and labels here
73
74    public void init()
75    {
76        //Create instructions for the user here, as well as set up
77        // the environment -- set the layout manager, add buttons,
78        // etc.
79        this.setLayout (new BorderLayout ());
80
81        String[] instructions =
82        {
83            " 1. Turn the 'multiple' checkbox off and press the 'open' button ",
84            " 2. Verify that the file dialog doesn't allow the multiple file selection ",
85            " 3. Select any file and close the file dialog ",
86            " 4. The results will be displayed, verify the results ",
87            " 5. Turn the 'multiple' checkbox on and press the 'open' button ",
88            " 6. Verify that the file dialog allows the multiple file selection ",
89            " 7. Select several files and close the file dialog ",
90            " 8. The results will be displayed, verify the results "
91        };
92        Sysout.createDialogWithInstructions( instructions );
93
94    }//End  init()
95
96    public void start ()
97    {
98        final Checkbox mode = new Checkbox("multiple", true);
99        Button open = new Button("open");
100        open.addActionListener(new ActionListener() {
101            @Override
102            public void actionPerformed(ActionEvent e) {
103                FileDialog d = new FileDialog((Frame)null);
104                d.setMultipleMode(mode.getState());
105                d.setVisible(true);
106
107                // print the results
108                Sysout.println("DIR:");
109                Sysout.println(d.getDirectory());
110                Sysout.println("FILE:");
111                Sysout.println(d.getFile());
112                Sysout.println("FILES:");
113                File files[] = d.getFiles();
114                for (File f : files) {
115                    Sysout.println(String.valueOf(f));
116                }
117            }
118        });
119
120        setLayout(new FlowLayout());
121        add(mode);
122        add(open);
123
124        //Get things going.  Request focus, set size, et cetera
125        setSize (200,200);
126        setVisible(true);
127        validate();
128
129    }// start()
130
131    //The rest of this class is the actions which perform the test...
132
133    //Use Sysout.println to communicate with the user NOT System.out!!
134    //Sysout.println ("Something Happened!");
135
136}// class ManualYesNoTest
137
138/* Place other classes related to the test after this line */
139
140
141
142
143
144/****************************************************
145 Standard Test Machinery
146 DO NOT modify anything below -- it's a standard
147  chunk of code whose purpose is to make user
148  interaction uniform, and thereby make it simpler
149  to read and understand someone else's test.
150 ****************************************************/
151
152/**
153 This is part of the standard test machinery.
154 It creates a dialog (with the instructions), and is the interface
155  for sending text messages to the user.
156 To print the instructions, send an array of strings to Sysout.createDialog
157  WithInstructions method.  Put one line of instructions per array entry.
158 To display a message for the tester to see, simply call Sysout.println
159  with the string to be displayed.
160 This mimics System.out.println but works within the test harness as well
161  as standalone.
162 */
163
164class Sysout
165{
166    private static TestDialog dialog;
167    private static boolean numbering = false;
168    private static int messageNumber = 0;
169
170    public static void createDialogWithInstructions( String[] instructions )
171    {
172        dialog = new TestDialog( new Frame(), "Instructions" );
173        dialog.printInstructions( instructions );
174        dialog.setVisible(true);
175        println( "Any messages for the tester will display here." );
176    }
177
178    public static void createDialog( )
179    {
180        dialog = new TestDialog( new Frame(), "Instructions" );
181        String[] defInstr = { "Instructions will appear here. ", "" } ;
182        dialog.printInstructions( defInstr );
183        dialog.setVisible(true);
184        println( "Any messages for the tester will display here." );
185    }
186
187    /* Enables message counting for the tester. */
188    public static void enableNumbering(boolean enable){
189        numbering = enable;
190    }
191
192    public static void printInstructions( String[] instructions )
193    {
194        dialog.printInstructions( instructions );
195    }
196
197
198    public static void println( String messageIn )
199    {
200        if (numbering) {
201            messageIn = "" + messageNumber + " " + messageIn;
202            messageNumber++;
203        }
204        dialog.displayMessage( messageIn );
205    }
206
207}// Sysout  class
208
209/**
210  This is part of the standard test machinery.  It provides a place for the
211   test instructions to be displayed, and a place for interactive messages
212   to the user to be displayed.
213  To have the test instructions displayed, see Sysout.
214  To have a message to the user be displayed, see Sysout.
215  Do not call anything in this dialog directly.
216  */
217class TestDialog extends Dialog
218{
219
220    TextArea instructionsText;
221    TextArea messageText;
222    int maxStringLength = 80;
223
224    //DO NOT call this directly, go through Sysout
225    public TestDialog( Frame frame, String name )
226    {
227        super( frame, name );
228        int scrollBoth = TextArea.SCROLLBARS_BOTH;
229        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
230        add( "North", instructionsText );
231
232        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
233        add("Center", messageText);
234
235        pack();
236
237        setVisible(true);
238    }// TestDialog()
239
240    //DO NOT call this directly, go through Sysout
241    public void printInstructions( String[] instructions )
242    {
243        //Clear out any current instructions
244        instructionsText.setText( "" );
245
246        //Go down array of instruction strings
247
248        String printStr, remainingStr;
249        for( int i=0; i < instructions.length; i++ )
250        {
251            //chop up each into pieces maxSringLength long
252            remainingStr = instructions[ i ];
253            while( remainingStr.length() > 0 )
254            {
255                //if longer than max then chop off first max chars to print
256                if( remainingStr.length() >= maxStringLength )
257                {
258                    //Try to chop on a word boundary
259                    int posOfSpace = remainingStr.
260                        lastIndexOf( ' ', maxStringLength - 1 );
261
262                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
263
264                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
265                    remainingStr = remainingStr.substring( posOfSpace + 1 );
266                }
267                //else just print
268                else
269                {
270                    printStr = remainingStr;
271                    remainingStr = "";
272                }
273
274                instructionsText.append( printStr + "\n" );
275
276            }// while
277
278        }// for
279
280    }//printInstructions()
281
282    //DO NOT call this directly, go through Sysout
283    public void displayMessage( String messageIn )
284    {
285        messageText.append( messageIn + "\n" );
286        System.out.println(messageIn);
287    }
288
289}// TestDialog  class
290