Skip to content

Commit 6779544

Browse files
committed
Improve * wildcard behavior, additional tests (#102, #170)
1 parent 540f43f commit 6779544

File tree

2 files changed

+131
-5
lines changed

2 files changed

+131
-5
lines changed

metafix/src/main/java/org/metafacture/metafix/FixPath.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ private FixPath(final String[] path) {
5151
/*package-private*/ Value findIn(final Hash hash, final boolean enforceStringValue) {
5252
final String currentSegment = path[0];
5353
final FixPath remainingPath = new FixPath(tail(path));
54-
if (currentSegment.equals(ASTERISK)) {
55-
// TODO: search in all elements of value.asHash()?
54+
if (currentSegment.equals(ASTERISK) && remainingPath.size() > 0) {
55+
// TODO: search in all elements of hash?
5656
return remainingPath.findIn(hash, enforceStringValue);
5757
}
5858
final Value value = hash.get(currentSegment, enforceStringValue && path.length == 1);
@@ -147,7 +147,7 @@ private String[] replaceInPath(final String find, final int i) {
147147
}
148148

149149
private boolean hasWildcard() {
150-
return Arrays.asList(path).stream().filter(s -> s.equals("*") || s.contains("?") || s.contains("|") || s.matches(".*?\\[.+?\\].*?")).findAny().isPresent();
150+
return Arrays.asList(path).stream().filter(s -> s.contains("*") || s.contains("?") || s.contains("|") || s.matches(".*?\\[.+?\\].*?")).findAny().isPresent();
151151
}
152152

153153
private long countAsterisks() {

metafix/src/test/java/org/metafacture/metafix/MetafixMethodTest.java

Lines changed: 128 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ public void alternation() {
544544
}
545545

546546
@Test
547-
public void wildcard() {
547+
public void wildcardSingleChar() {
548548
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
549549
"trim('title-?')"),
550550
i -> {
@@ -573,7 +573,36 @@ public void wildcard() {
573573
}
574574

575575
@Test
576-
public void wildcardNested() {
576+
public void wildcardMultiChar() {
577+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
578+
"trim('title*')"),
579+
i -> {
580+
i.startRecord("1");
581+
i.endRecord();
582+
583+
i.startRecord("2");
584+
i.literal("title-1", " marc ");
585+
i.literal("title-2", " json ");
586+
i.endRecord();
587+
588+
i.startRecord("3");
589+
i.endRecord();
590+
}, o -> {
591+
o.get().startRecord("1");
592+
o.get().endRecord();
593+
594+
o.get().startRecord("2");
595+
o.get().literal("title-1", "marc");
596+
o.get().literal("title-2", "json");
597+
o.get().endRecord();
598+
599+
o.get().startRecord("3");
600+
o.get().endRecord();
601+
});
602+
}
603+
604+
@Test
605+
public void wildcardNestedPartialSingle() {
577606
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
578607
"trim('work.title-?')"),
579608
i -> {
@@ -605,6 +634,103 @@ public void wildcardNested() {
605634
});
606635
}
607636

637+
@Test
638+
public void wildcardNestedPartialMulti() {
639+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
640+
"trim('work.title*')"),
641+
i -> {
642+
i.startRecord("1");
643+
i.endRecord();
644+
645+
i.startRecord("2");
646+
i.startEntity("work");
647+
i.literal("title-1", " marc ");
648+
i.literal("title-2", " json ");
649+
i.endEntity();
650+
i.endRecord();
651+
652+
i.startRecord("3");
653+
i.endRecord();
654+
}, o -> {
655+
o.get().startRecord("1");
656+
o.get().endRecord();
657+
658+
o.get().startRecord("2");
659+
o.get().startEntity("work");
660+
o.get().literal("title-1", "marc");
661+
o.get().literal("title-2", "json");
662+
o.get().endEntity();
663+
o.get().endRecord();
664+
665+
o.get().startRecord("3");
666+
o.get().endRecord();
667+
});
668+
}
669+
670+
@Test
671+
@MetafixToDo("See https://github.com/metafacture/metafacture-fix/issues/121")
672+
public void wildcardFullFieldNonIndex() {
673+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
674+
"trim('*')"),
675+
i -> {
676+
i.startRecord("1");
677+
i.endRecord();
678+
679+
i.startRecord("2");
680+
i.literal("title-1", " marc ");
681+
i.literal("title-2", " json ");
682+
i.endRecord();
683+
684+
i.startRecord("3");
685+
i.endRecord();
686+
}, o -> {
687+
o.get().startRecord("1");
688+
o.get().endRecord();
689+
690+
o.get().startRecord("2");
691+
o.get().literal("title-1", "marc");
692+
o.get().literal("title-2", "json");
693+
o.get().endRecord();
694+
695+
o.get().startRecord("3");
696+
o.get().endRecord();
697+
});
698+
}
699+
700+
@Test
701+
@MetafixToDo("See https://github.com/metafacture/metafacture-fix/issues/121")
702+
public void wildcardNestedFullFieldNonIndex() {
703+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
704+
"trim('work.*')"),
705+
i -> {
706+
i.startRecord("1");
707+
i.endRecord();
708+
709+
i.startRecord("2");
710+
i.startEntity("work");
711+
i.literal("title-1", " marc ");
712+
i.literal("title-2", " json ");
713+
i.endEntity();
714+
i.endRecord();
715+
716+
i.startRecord("3");
717+
i.endRecord();
718+
}, o -> {
719+
o.get().startRecord("1");
720+
o.get().endRecord();
721+
722+
o.get().startRecord("2");
723+
o.get().startEntity("work");
724+
o.get().literal("title-1", "marc");
725+
o.get().literal("title-2", "json");
726+
o.get().endEntity();
727+
o.get().endRecord();
728+
729+
o.get().startRecord("3");
730+
o.get().endRecord();
731+
});
732+
}
733+
608734
@Test
609735
public void characterClass() {
610736
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(

0 commit comments

Comments
 (0)