# HG changeset patch # User psadhukhan # Date 1519281375 -19800 # Node ID ef6d5152a5ae7d379e8bad55c7669179ec028e8c # Parent eaef201ec301941019f08e84360b6414fe2891e8 8198005: javax/swing/JFileChooser/7199708/bug7199708.java throws error Reviewed-by: serb, jdv diff -r eaef201ec301 -r ef6d5152a5ae test/jdk/javax/swing/JFileChooser/7199708/bug7199708.java --- a/test/jdk/javax/swing/JFileChooser/7199708/bug7199708.java Wed Feb 21 12:49:00 2018 -0800 +++ b/test/jdk/javax/swing/JFileChooser/7199708/bug7199708.java Thu Feb 22 12:06:15 2018 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2018, 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 @@ -41,10 +41,10 @@ /** * @test * @key headful - * @bug 7199708 8159587 + * @bug 7199708 8159587 8198005 * @author Alexander Scherbatiy * @summary FileChooser crashs when opening large folder - * @run main bug7199708 + * @run main/timeout=240 bug7199708 */ public class bug7199708 { @@ -53,72 +53,88 @@ private static volatile int locationX; private static volatile int locationY; private static volatile int width; + private static File largeFolder; + private static File files[] = new File[FILE_NUMBER]; public static void main(String[] args) throws Exception { Robot robot = new Robot(); robot.setAutoDelay(50); - final File folder = createLargeFolder(); - UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + try { + final File folder = createLargeFolder(); + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - fileChooser = new JFileChooser(folder); - fileChooser.showSaveDialog(null); - } - }); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + fileChooser = new JFileChooser(folder); + fileChooser.showSaveDialog(null); + } + }); - robot.waitForIdle(); + robot.waitForIdle(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - final String detailsTooltip = UIManager.getString("FileChooser." - + "detailsViewButtonToolTipText", fileChooser.getLocale()); + SwingUtilities.invokeLater(new Runnable() { + public void run() { + final String detailsTooltip = + UIManager.getString("FileChooser." + + "detailsViewButtonToolTipText", + fileChooser.getLocale()); - doAction(fileChooser, new ComponentAction() { - @Override - public boolean accept(Component component) { - return (component instanceof AbstractButton) + doAction(fileChooser, new ComponentAction() { + @Override + public boolean accept(Component component) { + return (component instanceof AbstractButton) && detailsTooltip.equals( ((AbstractButton) component).getToolTipText()); - } + } - @Override - public void perform(Component component) { - ((AbstractButton) component).doClick(); - } - }); + @Override + public void perform(Component component) { + ((AbstractButton) component).doClick(); + } + }); - doAction(fileChooser, new ComponentAction() { - @Override - public boolean accept(Component component) { - return (component instanceof JTable); - } + doAction(fileChooser, new ComponentAction() { + @Override + public boolean accept(Component component) { + return (component instanceof JTable); + } - @Override - public void perform(Component component) { - Point tableLocation = component.getLocationOnScreen(); - locationX = (int) tableLocation.getX(); - locationY = (int) tableLocation.getY(); - width = (int) fileChooser.getBounds().getWidth(); - } - }); - } - }); + @Override + public void perform(Component component) { + Point tableLocation = component.getLocationOnScreen(); + locationX = (int) tableLocation.getX(); + locationY = (int) tableLocation.getY(); + width = (int) fileChooser.getBounds().getWidth(); + } + }); + } + }); + + robot.waitForIdle(); - robot.waitForIdle(); + int d = 25; + for (int i = 0; i < width / d; i++) { + robot.mouseMove(locationX + i * d, locationY + 5); + robot.waitForIdle(); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.waitForIdle(); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.waitForIdle(); + } - int d = 25; - for (int i = 0; i < width / d; i++) { - robot.mouseMove(locationX + i * d, locationY + 5); - robot.mousePress(InputEvent.BUTTON1_MASK); - robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.waitForIdle(); + robot.keyRelease(KeyEvent.VK_ESCAPE); robot.waitForIdle(); + + } finally { + for (int i = 0; i < FILE_NUMBER; i++) { + Files.delete(files[i].toPath()); + } + Files.delete(largeFolder.toPath()); } - - robot.keyPress(KeyEvent.VK_ESCAPE); - robot.keyRelease(KeyEvent.VK_ESCAPE); } static void doAction(Component component, ComponentAction action) { @@ -134,13 +150,11 @@ private static File createLargeFolder() { try { - File largeFolder = Files.createTempDirectory("large_folder").toFile(); - largeFolder.deleteOnExit(); + largeFolder = Files.createTempDirectory("large_folder").toFile(); for (int i = 0; i < FILE_NUMBER; i++) { - File file = new File(largeFolder, "File_" + i + ".txt"); - file.createNewFile(); - file.deleteOnExit(); + files[i] = new File(largeFolder, "File_" + i + ".txt"); + files[i].createNewFile(); } return largeFolder; } catch (IOException ex) {