diff --git a/nb-api/src/main/java/io/nosqlbench/nb/api/content/NBIO.java b/nb-api/src/main/java/io/nosqlbench/nb/api/content/NBIO.java
index 8060a3c9e..88eff8e1d 100644
--- a/nb-api/src/main/java/io/nosqlbench/nb/api/content/NBIO.java
+++ b/nb-api/src/main/java/io/nosqlbench/nb/api/content/NBIO.java
@@ -264,7 +264,16 @@ public class NBIO implements NBPathsAPI.Facets {
}
- // for testing
+ /**
+ * Given names and suffixes, expand a list of names which may be valid.
+ * If no name is given, then
{@code .*}
is used.
+ * If suffixes are given, then all returned results must include at least
+ * one of the suffixes. If the name includes one of the suffixes given,
+ * then additional names are expanded to match the additional suffixes.
+ * @param _names base filenames or path fragment, possibly fully-qualified
+ * @param _suffixes zero or more suffixes, which, if given, imply that one of them must match
+ * @return Expanded names of valid filename fragments according to the above rules
+ */
public LinkedHashSet expandNamesAndSuffixes(
List _names,
Set _suffixes) {
@@ -279,20 +288,20 @@ public class NBIO implements NBPathsAPI.Facets {
_suffixes.stream().map(s -> ".*" + s).forEach(searches::add);
} else {
for (String name : _names) {
- if (!name.equals(".*")) {
- searches.add(name);
- }
+// if (!name.equals(".*")) {
+// searches.add(name);
+// }
+ String basename = name;
boolean suffixed = false;
for (String suffix : _suffixes) {
if (name.endsWith(suffix)) {
suffixed = true;
+ basename = name.substring(0,name.length()-suffix.length());
break;
}
}
- if (!suffixed) {
- for (String suffix : _suffixes) {
- searches.add(name + suffix);
- }
+ for (String suffix : _suffixes) {
+ searches.add(basename + suffix);
}
}
}
diff --git a/nb-api/src/test/java/io/nosqlbench/nb/api/content/NBIOTest.java b/nb-api/src/test/java/io/nosqlbench/nb/api/content/NBIOTest.java
index a97dca6f4..97eba30a9 100644
--- a/nb-api/src/test/java/io/nosqlbench/nb/api/content/NBIOTest.java
+++ b/nb-api/src/test/java/io/nosqlbench/nb/api/content/NBIOTest.java
@@ -28,10 +28,10 @@ public class NBIOTest {
}
@Test
- public void testExpandNameOnly() {
- NBIO extensions = (NBIO) NBIO.all().name("foo.bar").extension();
+ public void testExpandNameAndAllSuffixesOnly() {
+ NBIO extensions = (NBIO) NBIO.all().name("foo.bar").extension("test1","test2");
LinkedHashSet searches = extensions.expandNamesAndSuffixes();
- assertThat(searches).containsExactly("foo.bar");
+ assertThat(searches).containsExactly("foo.bar.test1","foo.bar.test2");
}
@Test
@@ -43,9 +43,9 @@ public class NBIOTest {
@Test
public void testExpandNamesAndExtensionsAvoidsExtendedAlreadyExtended() {
- NBIO extensions = (NBIO) NBIO.all().name("foo.bar").extension("baz","beez");
+ NBIO extensions = (NBIO) NBIO.all().name("foo.baz").extension("baz","beez");
LinkedHashSet searches = extensions.expandNamesAndSuffixes();
- assertThat(searches).contains("foo.bar");
+ assertThat(searches).contains("foo.baz","foo.beez");
}
@Test
@@ -69,10 +69,10 @@ public class NBIOTest {
public void testExpandAddExtensionNeeded() {
NBIO extensions = (NBIO) NBIO.all().name("foo").extension("bar");
LinkedHashSet searches = extensions.expandNamesAndSuffixes();
- assertThat(searches).containsExactly("foo","foo.bar");
+ assertThat(searches).containsExactly("foo.bar");
NBIO extensionsDot = (NBIO) NBIO.all().name("foo").extension(".bar");
LinkedHashSet searchesDot = extensionsDot.expandNamesAndSuffixes();
- assertThat(searchesDot).containsExactly("foo","foo.bar");
+ assertThat(searchesDot).containsExactly("foo.bar");
}
@Test
@@ -166,8 +166,8 @@ public class NBIOTest {
@Test
public void testLoadNamedFileAsYmlExtension() {
List> list = NBIO.classpath()
- .name("nesteddir1/nesteddir2/testworkload1.yml")
- .extension("abc")
+ .name("nesteddir1/nesteddir2/testworkload1")
+ .extension("yml")
.list();
assertThat(list).hasSize(1);
@@ -229,4 +229,32 @@ public class NBIOTest {
assertThat(gammas).hasSize(1);
}
+ @Test
+ public void onlyMatchExtensionFilesWhenExtensionsProvided() {
+
+ // This search is invalid because by providing extensions, all results
+ // are required to match one of the extensions, thus the only valid
+ // match here would be alpha-gamma.yaml.js
+ NBPathsAPI.DoSearch invalidSearch = NBIO.all()
+ .prefix(Paths.get("target/test-classes/").toString())
+ .name("alpha-gamma.yaml")
+ .extension("js");
+
+ NBPathsAPI.DoSearch validSearch1 = NBIO.all()
+ .prefix(Paths.get("target/test-classes/").toString())
+ .name("alpha-gamma")
+ .extension("js");
+
+ NBPathsAPI.DoSearch validSearch2 = NBIO.all()
+ .prefix(Paths.get("target/test-classes/").toString())
+ .name("alpha-gamma.js")
+ .extension();
+
+
+ assertThat(invalidSearch.list()).hasSize(0);
+ assertThat(validSearch1.list()).hasSize(1);
+ assertThat(validSearch2.list()).hasSize(1);
+
+ }
+
}
diff --git a/nb-api/src/test/resources/nesteddir1/nesteddir2/alpha-gamma.js b/nb-api/src/test/resources/nesteddir1/nesteddir2/alpha-gamma.js
new file mode 100644
index 000000000..8e669c381
--- /dev/null
+++ b/nb-api/src/test/resources/nesteddir1/nesteddir2/alpha-gamma.js
@@ -0,0 +1 @@
+println("test of alpha-gamma.js")