assertFalse(itr.hasNext());
}
+ @Test
+ public void test_ReadNamesInSectionRecursive()
+ throws ConfigInvalidException {
+ String baseConfigString = "[core]\n" + "logAllRefUpdates = true\n";
+ String configString = "[core]\n" + "repositoryFormatVersion = 0\n"
+ + "filemode = false\n";
+ final Config c = parse(configString, parse(baseConfigString));
+ Set<String> names = c.getNames("core", true);
+ assertEquals("Core section size", 3, names.size());
+ assertTrue("Core section should contain \"filemode\"",
+ names.contains("filemode"));
+ assertTrue("Core section should contain \"repositoryFormatVersion\"",
+ names.contains("repositoryFormatVersion"));
+ assertTrue("Core section should contain \"logAllRefUpdates\"",
+ names.contains("logAllRefUpdates"));
+ assertTrue("Core section should contain \"logallrefupdates\"",
+ names.contains("logallrefupdates"));
+
+ Iterator<String> itr = names.iterator();
+ assertEquals("filemode", itr.next());
+ assertEquals("repositoryFormatVersion", itr.next());
+ assertEquals("logAllRefUpdates", itr.next());
+ assertFalse(itr.hasNext());
+ }
+
@Test
public void test010_readNamesInSubSection() throws ConfigInvalidException {
String configString = "[a \"sub1\"]\n"//
assertTrue("Subsection should contain \"b\"", names.contains("b"));
}
+ @Test
+ public void readNamesInSubSectionRecursive() throws ConfigInvalidException {
+ String baseConfigString = "[a \"sub1\"]\n"//
+ + "x = 0\n" //
+ + "y = false\n"//
+ + "[a \"sub2\"]\n"//
+ + "A=0\n";//
+ String configString = "[a \"sub1\"]\n"//
+ + "z = true\n"//
+ + "[a \"sub2\"]\n"//
+ + "B=1\n";
+ final Config c = parse(configString, parse(baseConfigString));
+ Set<String> names = c.getNames("a", "sub1", true);
+ assertEquals("Subsection size", 3, names.size());
+ assertTrue("Subsection should contain \"x\"", names.contains("x"));
+ assertTrue("Subsection should contain \"y\"", names.contains("y"));
+ assertTrue("Subsection should contain \"z\"", names.contains("z"));
+ names = c.getNames("a", "sub2", true);
+ assertEquals("Subsection size", 2, names.size());
+ assertTrue("Subsection should contain \"A\"", names.contains("A"));
+ assertTrue("Subsection should contain \"a\"", names.contains("a"));
+ assertTrue("Subsection should contain \"B\"", names.contains("B"));
+ }
+
@Test
public void testQuotingForSubSectionNames() {
String resultPattern = "[testsection \"{0}\"]\n\ttestname = testvalue\n";
private static Config parse(final String content)
throws ConfigInvalidException {
- final Config c = new Config(null);
+ return parse(content, null);
+ }
+
+ private static Config parse(final String content, Config baseConfig)
+ throws ConfigInvalidException {
+ final Config c = new Config(baseConfig);
c.fromText(content);
return c;
}
return getState().getNames(section, subsection);
}
+ /**
+ * @param section
+ * the section
+ * @param recursive
+ * if {@code true} recursively adds the names defined in all base
+ * configurations
+ * @return the list of names defined for this section
+ */
+ public Set<String> getNames(String section, boolean recursive) {
+ return getState().getNames(section, null, recursive);
+ }
+
+ /**
+ * @param section
+ * the section
+ * @param subsection
+ * the subsection
+ * @param recursive
+ * if {@code true} recursively adds the names defined in all base
+ * configurations
+ * @return the list of names defined for this subsection
+ */
+ public Set<String> getNames(String section, String subsection,
+ boolean recursive) {
+ return getState().getNames(section, subsection, recursive);
+ }
+
/**
* Obtain a handle to a parsed set of configuration values.
*
}
Set<String> getNames(String section, String subsection) {
+ return getNames(section, subsection, false);
+ }
+
+ Set<String> getNames(String section, String subsection, boolean recursive) {
+ Map<String, String> m = getNamesInternal(section, subsection, recursive);
+ return new CaseFoldingSet(m);
+ }
+
+ private Map<String, String> getNamesInternal(String section,
+ String subsection, boolean recursive) {
List<ConfigLine> s = sorted();
int idx = find(s, section, subsection, ""); //$NON-NLS-1$
if (idx < 0)
if (!m.containsKey(l))
m.put(l, e.name);
}
- return new CaseFoldingSet(m);
+ if (recursive && baseState != null)
+ m.putAll(baseState.getNamesInternal(section, subsection, recursive));
+ return m;
}
String[] get(String section, String subsection, String name) {