OptionsHelper implements Customizable { public String[] getOptionNames() { List<String> keys = new ArrayList<String>(); for (Map.Entry<String, Map<Environment, List<String>>> entry : options.entrySet()) { String key = entry.getKey(); Map<Environment, List<String>> environments = entry.getValue(); if (environments.get(environment) != null) { keys.add(key); } else if (environments.keySet().size() == 1 && environments.containsKey(Environment.Any)) { keys.add(key); } } return keys.toArray(new String[keys.size()]); }  void setOption(String name, String value); void setOption(String name, String value, Environment environment); void removeOption(String name); boolean hasOption(String name); String[] getOptionNames(); String getOptionValue(String name); String getOptionValue(String name, String defaultValue); String[] getOptionValues(String name); Map<String, Map<Environment, List<String>>> getOptions(); static OptionsHelper fromXml(Node config); void setEnvironment(Environment environment); static OptionsHelper fromXml(Node config, XPath xpathProcessor); static void fromXml(Node config, Customizable customizable,
      XPath xpathProcessor); String toXml();  }
@Test public void testGetOptionNames() { assertEquals(2, options.getOptionNames().length); options.setEnvironment(Environment.Staging); assertEquals(2, options.getOptionNames().length); options.setEnvironment(Environment.Production); assertEquals(3, options.getOptionNames().length); options.setEnvironment(Environment.Development); assertEquals(3, options.getOptionNames().length); }