6979793: closed/javax/swing/JFileChooser/6396844/TwentyThousandTest fails due FileNotFound exc.
Reviewed-by: malenkov
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/6396844/TwentyThousandTest.java Thu Oct 07 12:48:16 2010 +0400
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6396844
+ * @summary Tests memory leak for 20000 files
+ * @author Sergey Malenkov
+ * @run main/othervm/timeout=1000 -mx256m TwentyThousandTest
+ */
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileWriter;
+
+public class TwentyThousandTest implements ActionListener, Runnable {
+
+ private static final int FILES = 20000;
+ private static final int ATTEMPTS = 100;
+ private static final int INTERVAL = 100;
+
+ private static final boolean ALWAYS_NEW_INSTANCE = false;
+ private static final boolean UPDATE_UI_EACH_INTERVAL = true;
+ private static final boolean AUTO_CLOSE_DIALOG = true;
+
+ private static JFileChooser CHOOSER;
+
+ private static String tmpDir;
+
+ public static void main(String[] args) throws Exception {
+ tmpDir = System.getProperty("java.io.tmpdir");
+
+ if (tmpDir.length() == 0) { //'java.io.tmpdir' isn't guaranteed to be defined
+ tmpDir = System.getProperty("user.home");
+ }
+
+ System.out.println("Temp directory: " + tmpDir);
+
+ System.out.println("Creating " + FILES + " files");
+
+ for (int i = 0; i < FILES; i++) {
+ File file = getTempFile(i);
+
+ FileWriter writer = new FileWriter(file);
+ writer.write("File " + i);
+ writer.close();
+ }
+
+ for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
+ if (laf.getClassName().contains("Motif")) {
+ continue;
+ }
+
+ UIManager.setLookAndFeel(laf.getClassName());
+
+ System.out.println("Do " + ATTEMPTS + " attempts for " + laf.getClassName());
+
+ for ( int i = 0; i < ATTEMPTS; i++ ) {
+ System.out.print(i + " ");
+
+ doAttempt();
+ }
+
+ System.out.println();
+
+ CHOOSER = null;
+ }
+
+ System.out.println("Removing " + FILES + " files");
+
+ for (int i = 0; i < FILES; i++) {
+ getTempFile(i).delete();
+ }
+
+ System.out.println( "Test passed successfully" );
+ }
+
+ private static File getTempFile(int i) {
+ return new File(tmpDir, "temp" + i + ".txt");
+ }
+
+ private static void doAttempt() throws Exception {
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ if ( ALWAYS_NEW_INSTANCE || ( CHOOSER == null ) )
+ CHOOSER = new JFileChooser(tmpDir);
+
+ if ( UPDATE_UI_EACH_INTERVAL )
+ CHOOSER.updateUI();
+
+ if ( AUTO_CLOSE_DIALOG ) {
+ Thread t = new Thread( new TwentyThousandTest( CHOOSER ) );
+ t.start();
+ CHOOSER.showOpenDialog( null );
+ } else {
+ CHOOSER.showOpenDialog( null );
+ }
+ }
+ });
+
+ // Allow to collect garbage by GC
+ Thread.sleep(1000);
+
+ System.gc();
+ }
+
+ private final JFileChooser chooser;
+
+ TwentyThousandTest( JFileChooser chooser ) {
+ this.chooser = chooser;
+ }
+
+ public void run() {
+ while ( !this.chooser.isShowing() ) {
+ try {
+ Thread.sleep( 30 );
+ } catch ( InterruptedException exception ) {
+ exception.printStackTrace();
+ }
+ }
+ Timer timer = new Timer( INTERVAL, this );
+ timer.setRepeats( false );
+ timer.start();
+ }
+
+ public void actionPerformed( ActionEvent event ) {
+ this.chooser.cancelSelection();
+ }
+}