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.  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 import java.awt.datatransfer.DataFlavor;
  27 import java.awt.datatransfer.SystemFlavorMap;
  28 import java.util.Enumeration;
  29 import java.util.Hashtable;
  30 import java.util.Map;
  31 import java.util.Vector;
  32 
  33 /*
  34  * @test
  35  * @summary To test SystemFlavorMap method:
  36  *          setFlavorsForNative(String nat, DataFlavors[] flavors)
  37  *          with valid natives and DataFlavors. This stress test will
  38  *          define numerous mappings of valid String natives and
  39  *          DataFlavors.  The mappings will be verified by examining
  40  *          that all entries are present, and order is maintained.
  41  * @author Rick Reynaga (rick.reynaga@eng.sun.com) area=Clipboard
  42  * @modules java.datatransfer
  43  * @run main SetNativesTest
  44  */
  45 
  46 public class SetNativesTest {
  47 
  48     SystemFlavorMap flavorMap;
  49     Hashtable hashVerify;
  50 
  51     Map mapFlavors;
  52     Map mapNatives;
  53 
  54     Hashtable hashFlavors;
  55     Hashtable hashNatives;
  56 
  57     public static void main (String[] args){
  58         new SetNativesTest().doTest();
  59     }
  60 
  61     public void doTest() {
  62         flavorMap = (SystemFlavorMap)SystemFlavorMap.getDefaultFlavorMap();
  63 
  64         // Get SystemFlavorMap Maps of String Natives and DataFlavors
  65         mapFlavors = flavorMap.getNativesForFlavors(null);
  66         mapNatives = flavorMap.getFlavorsForNatives(null);
  67 
  68         hashFlavors = new Hashtable(mapFlavors);
  69         hashNatives = new Hashtable(mapNatives);
  70 
  71 
  72         // Test setFlavorsForNative(String nat, DataFlavors[] flavors);
  73         //
  74         // Enumerate through all the system defined String natives,
  75         // and for each String native, define it again to the SystemFlavorMap
  76         // with a slightly modified String native (name).
  77         //
  78         // For verification, a seperate Hashtable will be maintained of the additions.
  79         String key;
  80         hashVerify = new Hashtable();
  81 
  82         for (Enumeration e = hashNatives.keys() ; e.hasMoreElements() ;) {
  83             key = (String)e.nextElement();
  84 
  85             java.util.List listFlavors = flavorMap.getFlavorsForNative(key);
  86             Vector vectorFlavors = new Vector(listFlavors);
  87             DataFlavor[] arrayFlavors = (DataFlavor[])vectorFlavors.toArray(new DataFlavor[0]);
  88 
  89             key = key.concat("TEST");   // construct a unique String native
  90                                         // define the new String native entry
  91             flavorMap.setFlavorsForNative(key, arrayFlavors);
  92                                         // keep track of this new native entry
  93             hashVerify.put(key, vectorFlavors);
  94         }
  95 
  96         // After establishing "new" mappings, verify that the defined
  97         // DataFlavors can be retrieved and that the List (order) is preserved.
  98         verifyNewMappings();
  99     }
 100 
 101     // Verify getFlavorsForNative(String nat) is returning the correct list
 102     // of DataFlavors (for the new mappings).
 103     public void verifyNewMappings() {
 104         // Enumerate through all natives
 105         for (Enumeration e = hashVerify.keys() ; e.hasMoreElements() ;) {
 106             String key = (String)e.nextElement();
 107 
 108             java.util.List listFlavors = flavorMap.getFlavorsForNative(key);
 109             Vector vectorFlavors = new Vector(listFlavors);
 110 
 111             // Compare the list of DataFlavors
 112             if ( !vectorFlavors.equals((Vector)hashVerify.get(key))) {
 113                 throw new RuntimeException("\n*** Error in verifyNewMappings()" +
 114                     "\nmethod1: setFlavorsForNative(String nat, DataFlavors[] flavors)" +
 115                     "\nmethod2: List getFlavorsForNative(String nat)" +
 116                     "\nString native: " + key +
 117                     "\nThe Returned List did not match the original set of DataFlavors.");
 118             }
 119         }
 120         System.out.println("*** native size = " + hashVerify.size());
 121     }
 122 }
 123