import java.io.Reader;
import java.net.URL;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Properties;
+import java.util.Set;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
return (isJS() ? jsutil.getJSContext("jssingletons") : null);
}
+ /**
+ * By designating initialCapacity and loadFactor, we tell SwingJS to use a
+ * standard (slower) Java HashMap to back this HashSet, thus providing exactly
+ * the same iterator order (until a new Java version changes it!)
+ *
+ * @return a standard Java HashSet
+ */
+ public static Set<String> getJavaOrderedHashSet()
+ {
+ return new HashSet<>(16, 0.75f);
+ }
+
+ /**
+ * Switch the flag in SwingJS to use or not use the JavaScript Map object in
+ * any Hashtable, HashMap, or HashSet. Default is enabled.
+ *
+ * For testing purposes only.
+ *
+ */
+ public static boolean setJavaScriptMapObjectEnabled(boolean enabled)
+ {
+ if (!isJS())
+ {
+ return false;
+ }
+ jsutil.setJavaScriptMapObjectEnabled(enabled);
+ HashSet<String> hs = new HashSet<>();
+ // Java hash table iterator in HashMap will return "one" before "two"
+ // because of its hash code;
+ // JavaScript Map object will return "two" first because it was added first.
+ hs.add("two");
+ hs.add("one");
+ return (hs.iterator().next() == (enabled ? "two" : "one"));
+ }
}