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")