1 /*
   2  * Copyright (c) 2013, 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.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javafx.stage;
  27 
  28 import com.sun.glass.ui.CommonDialogs.FileChooserResult;
  29 import com.sun.javafx.pgstub.StubToolkit;
  30 import com.sun.javafx.pgstub.StubToolkit.CommonDialogsSupport;
  31 import com.sun.javafx.tk.FileChooserType;
  32 import com.sun.javafx.tk.TKStage;
  33 import com.sun.javafx.tk.Toolkit;
  34 import java.io.File;
  35 import java.util.List;
  36 import javafx.stage.FileChooser.ExtensionFilter;
  37 import org.junit.After;
  38 import org.junit.Assert;
  39 import org.junit.Before;
  40 import org.junit.Test;
  41 
  42 public final class CommonDialogsTest {
  43     private StubToolkit toolkit;
  44     private StubCommonDialogs stubDialogs;
  45 
  46     @Before
  47     public void setUp() {
  48         toolkit = (StubToolkit) Toolkit.getToolkit();
  49         stubDialogs = new StubCommonDialogs();
  50 
  51         toolkit.setCommonDialogsSupport(stubDialogs);
  52     }
  53 
  54     @After
  55     public void tearDown() {
  56         toolkit.setCommonDialogsSupport(null);
  57     }
  58 
  59     @Test
  60     public void testFileChooser_showOpenDialog() {
  61         final FileChooser fileChooser = new FileChooser();
  62         final ExtensionFilter txtFiles =
  63                 new ExtensionFilter("Text Files", "*.txt");
  64         final ExtensionFilter jpgFiles =
  65                 new ExtensionFilter("JPEG Files", "*.jpg");
  66         final File initialDirectory = new File(".");
  67 
  68         fileChooser.setTitle("Open Single");
  69         fileChooser.setInitialDirectory(initialDirectory);
  70         fileChooser.setInitialFileName("open.txt");
  71         fileChooser.getExtensionFilters().addAll(txtFiles, jpgFiles);
  72         fileChooser.setSelectedExtensionFilter(txtFiles);
  73 
  74         Assert.assertEquals(
  75                 null, fileChooser.showOpenDialog(null));
  76         Assert.assertEquals(FileChooserType.OPEN,
  77                             stubDialogs.getFileChooserType());
  78         Assert.assertEquals(null, stubDialogs.getOwnerWindow());
  79         Assert.assertEquals("Open Single", stubDialogs.getTitle());
  80         Assert.assertEquals(initialDirectory,
  81                             stubDialogs.getInitialDirectory());
  82         Assert.assertEquals("open.txt", stubDialogs.getInitialFileName());
  83         Assert.assertArrayEquals(
  84                 new Object[] { txtFiles, jpgFiles },
  85                 stubDialogs.getExtensionFilters().toArray());
  86         Assert.assertEquals(txtFiles, stubDialogs.getSelectedExtensionFilter());
  87     }
  88 
  89     @Test
  90     public void testFileChooser_showOpenMultipleDialog() {
  91         final FileChooser fileChooser = new FileChooser();
  92         final ExtensionFilter allFiles =
  93                 new ExtensionFilter("All Files", "*.*");
  94 
  95         fileChooser.setTitle("Open Multiple");
  96         fileChooser.getExtensionFilters().addAll(allFiles);
  97 
  98         Assert.assertEquals(
  99                 null, fileChooser.showOpenMultipleDialog(null));
 100         Assert.assertEquals(FileChooserType.OPEN_MULTIPLE,
 101                             stubDialogs.getFileChooserType());
 102         Assert.assertEquals(null, stubDialogs.getOwnerWindow());
 103         Assert.assertEquals("Open Multiple", stubDialogs.getTitle());
 104         Assert.assertEquals(null, stubDialogs.getInitialDirectory());
 105         Assert.assertEquals(null, stubDialogs.getInitialFileName());
 106         Assert.assertArrayEquals(
 107                 new Object[] { allFiles },
 108                 stubDialogs.getExtensionFilters().toArray());
 109         Assert.assertEquals(null, stubDialogs.getSelectedExtensionFilter());
 110     }
 111 
 112     @Test
 113     public void testFileChooser_showSaveDialog() {
 114         final FileChooser fileChooser = new FileChooser();
 115         final File initialDirectory = new File(".");
 116 
 117         fileChooser.setTitle("Save");
 118         fileChooser.setInitialDirectory(initialDirectory);
 119         fileChooser.setInitialFileName("save.txt");
 120 
 121         Assert.assertEquals(
 122                 null, fileChooser.showSaveDialog(null));
 123         Assert.assertEquals(FileChooserType.SAVE,
 124                             stubDialogs.getFileChooserType());
 125         Assert.assertEquals(null, stubDialogs.getOwnerWindow());
 126         Assert.assertEquals("Save", stubDialogs.getTitle());
 127         Assert.assertEquals(initialDirectory,
 128                             stubDialogs.getInitialDirectory());
 129         Assert.assertEquals("save.txt", stubDialogs.getInitialFileName());
 130         Assert.assertEquals(0, stubDialogs.getExtensionFilters().size());
 131         Assert.assertEquals(null, stubDialogs.getSelectedExtensionFilter());
 132     }
 133 
 134     @Test
 135     public void testDirectoryChooser_showDialog() {
 136         final DirectoryChooser directoryChooser = new DirectoryChooser();
 137         final File initialDirectory = new File(".");
 138 
 139         directoryChooser.setTitle("Open");
 140         directoryChooser.setInitialDirectory(initialDirectory);
 141 
 142         Assert.assertEquals(
 143                 null, directoryChooser.showDialog(null));
 144         Assert.assertEquals(null, stubDialogs.getOwnerWindow());
 145         Assert.assertEquals("Open", stubDialogs.getTitle());
 146         Assert.assertEquals(initialDirectory,
 147                             stubDialogs.getInitialDirectory());
 148     }
 149 
 150     private static final class StubCommonDialogs
 151             implements CommonDialogsSupport {
 152         private FileChooserType fileChooserType;
 153         private TKStage ownerWindow;
 154         private String title;
 155         private File initialDirectory;
 156         private String initialFileName;
 157         private List<ExtensionFilter> extensionFilters;
 158         private ExtensionFilter selectedExtensionFilter;
 159 
 160         public FileChooserType getFileChooserType() {
 161             return fileChooserType;
 162         }
 163 
 164         public TKStage getOwnerWindow() {
 165             return ownerWindow;
 166         }
 167 
 168         public String getTitle() {
 169             return title;
 170         }
 171 
 172         public File getInitialDirectory() {
 173             return initialDirectory;
 174         }
 175 
 176         public String getInitialFileName() {
 177             return initialFileName;
 178         }
 179 
 180         public List<ExtensionFilter> getExtensionFilters() {
 181             return extensionFilters;
 182         }
 183 
 184         public ExtensionFilter getSelectedExtensionFilter() {
 185             return selectedExtensionFilter;
 186         }
 187 
 188         @Override
 189         public FileChooserResult showFileChooser(
 190                               final TKStage ownerWindow,
 191                               final String title,
 192                               final File initialDirectory,
 193                               final String initialFileName,
 194                               final FileChooserType fileChooserType,
 195                               final List<ExtensionFilter> extensionFilters,
 196                               final ExtensionFilter selectedFilter) {
 197             this.ownerWindow = ownerWindow;
 198             this.title = title;
 199             this.initialDirectory = initialDirectory;
 200             this.initialFileName = initialFileName;
 201             this.fileChooserType = fileChooserType;
 202             this.extensionFilters = extensionFilters;
 203             this.selectedExtensionFilter = selectedFilter;
 204 
 205             return null;
 206         }
 207 
 208         @Override
 209         public File showDirectoryChooser(final TKStage ownerWindow,
 210                                          final String title,
 211                                          final File initialDirectory) {
 212             this.ownerWindow = ownerWindow;
 213             this.title = title;
 214             this.initialDirectory = initialDirectory;
 215 
 216             return null;
 217         }
 218     }
 219 }