diff --git a/README.md b/README.md index 3fc33506..97557d07 100644 --- a/README.md +++ b/README.md @@ -775,6 +775,40 @@ _Also aliased as [`is_contained_in`](#is_contained_in)._ _Alias for [`in`](#in)._ +#### `is_array` + +Executes the functions if/unless the field value is an array. + +#### `is_empty` + +Executes the functions if/unless the field value is empty. + +#### `is_false` + +Executes the functions if/unless the field value equals `false` or `0`. + +#### `is_hash` + +_Alias for [`is_object`](#is_object)._ + +#### `is_number` + +Executes the functions if/unless the field value is a number. + +#### `is_object` + +Executes the functions if/unless the field value is a hash (object). + +_Also aliased as [`is_hash`](#is_hash)._ + +#### `is_string` + +Executes the functions if/unless the field value is a string (and not a number). + +#### `is_true` + +Executes the functions if/unless the field value equals `true` or `1`. + #### `match` ##### `all_match` diff --git a/metafix/src/main/java/org/metafacture/metafix/FixConditional.java b/metafix/src/main/java/org/metafacture/metafix/FixConditional.java index 3c8cff33..9b09dafb 100644 --- a/metafix/src/main/java/org/metafacture/metafix/FixConditional.java +++ b/metafix/src/main/java/org/metafacture/metafix/FixConditional.java @@ -108,6 +108,55 @@ public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testConditional(record, params, Value::isArray); + } + }, + is_empty { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testConditional(record, params, IS_EMPTY); + } + }, + is_false { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testStringConditional(record, params, IS_FALSE); // TODO: strict=false + } + }, + is_hash { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return is_object.test(metafix, record, params, options); + } + }, + is_number { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testStringConditional(record, params, IS_NUMBER); + } + }, + is_object { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testConditional(record, params, Value::isHash); + } + }, + is_string { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testConditional(record, params, Value::isString) && !is_number.test(metafix, record, params, options); + } + }, + is_true { + @Override + public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { + return testStringConditional(record, params, IS_TRUE); // TODO: strict=false + } + }, + all_match { @Override public boolean test(final Metafix metafix, final Record record, final List params, final Map options) { diff --git a/metafix/src/main/java/org/metafacture/metafix/Value.java b/metafix/src/main/java/org/metafacture/metafix/Value.java index bae75894..a71e141d 100644 --- a/metafix/src/main/java/org/metafacture/metafix/Value.java +++ b/metafix/src/main/java/org/metafacture/metafix/Value.java @@ -410,7 +410,7 @@ public void add(final Value value) { } } - private boolean isEmpty() { + public boolean isEmpty() { return list.isEmpty(); } diff --git a/metafix/src/main/java/org/metafacture/metafix/api/FixPredicate.java b/metafix/src/main/java/org/metafacture/metafix/api/FixPredicate.java index dc201463..201ee920 100644 --- a/metafix/src/main/java/org/metafacture/metafix/api/FixPredicate.java +++ b/metafix/src/main/java/org/metafacture/metafix/api/FixPredicate.java @@ -20,6 +20,7 @@ import org.metafacture.metafix.Record; import org.metafacture.metafix.Value; +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.function.BiPredicate; @@ -36,6 +37,26 @@ public interface FixPredicate { BiPredicate EQUALS = String::equals; BiPredicate MATCHES = String::matches; + Predicate IS_TRUE = s -> "true".equals(s) || "1".equals(s); + Predicate IS_FALSE = s -> "false".equals(s) || "0".equals(s); + + Predicate IS_NUMBER = s -> { + try { + new BigDecimal(s); + return true; + } + catch (final NumberFormatException e) { + return false; + } + }; + + Predicate IS_EMPTY = v -> v.extractType((m, c) -> m + .ifArray(a -> c.accept(a.isEmpty())) + .ifHash(h -> c.accept(h.isEmpty())) + // TODO: Catmandu considers whitespace-only strings empty (`$v !~ /\S/`) + .ifString(s -> c.accept(s.isEmpty())) + ); + boolean test(Metafix metafix, Record record, List params, Map options); default boolean testConditional(final Record record, final List params, final BiPredicate, Predicate> qualifier, final BiPredicate conditional) { @@ -49,8 +70,22 @@ default boolean testConditional(final Record record, final List params, )); } + default boolean testConditional(final Record record, final List params, final Predicate conditional) { + final String field = params.get(0); + + final Value value = record.get(field); + return value != null && conditional.test(value); + } + default boolean testConditional(final List params, final BiPredicate conditional) { return conditional.test(params.get(0), params.get(1)); } + default boolean testStringConditional(final Record record, final List params, final Predicate conditional) { + return testConditional(record, params, v -> v.extractType((m, c) -> m + .ifString(s -> c.accept(conditional.test(s))) + .orElse(w -> c.accept(false)) + )); + } + } diff --git a/metafix/src/test/java/org/metafacture/metafix/MetafixIfTest.java b/metafix/src/test/java/org/metafacture/metafix/MetafixIfTest.java index 74a265b8..4dd74d09 100644 --- a/metafix/src/test/java/org/metafacture/metafix/MetafixIfTest.java +++ b/metafix/src/test/java/org/metafacture/metafix/MetafixIfTest.java @@ -31,7 +31,7 @@ * * @author Fabian Steeg */ -@ExtendWith(MockitoExtension.class) +@ExtendWith(MockitoExtension.class) // checkstyle-disable-line JavaNCSS public class MetafixIfTest { @Mock @@ -1430,6 +1430,863 @@ public void shouldContainHashInHash() { ); } + @Test + public void shouldReportArrayAsArray() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_array(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "bar"); + o.get().literal("foo", "1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportArrayEntityAsArray() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_array('foo[]')", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.startEntity("foo[]"); + i.literal("1", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("2"); + i.startEntity("foo[]"); + i.endEntity(); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.endEntity(); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().startEntity("foo[]"); + o.get().literal("1", "bar"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().startEntity("foo[]"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportEmptyArrayAsArray() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "set_array(foo)", + "if is_array(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().literal("test", "ok"); + o.get().endRecord(); + } + ); + } + + @Test // checkstyle-disable-line JavaNCSS + public void shouldReportEmptyValueAsEmpty() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_empty(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", ""); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "bar"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", " "); + i.endRecord(); + i.startRecord("4"); + i.literal("foo", "bar"); + i.literal("foo", ""); + i.endRecord(); + i.startRecord("5"); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("6"); + i.startEntity("foo"); + i.literal("foo", ""); + i.endEntity(); + i.endRecord(); + i.startRecord("7"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", ""); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "bar"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", " "); + //o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().literal("foo", "bar"); + o.get().literal("foo", ""); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().startEntity("foo"); + o.get().literal("foo", ""); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("7"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportEmptyArrayEntityAsEmpty() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_empty('foo[]')", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.startEntity("foo[]"); + i.endEntity(); + i.endRecord(); + i.startRecord("2"); + i.startEntity("foo[]"); + i.literal("1", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("3"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().startEntity("foo[]"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().startEntity("foo[]"); + o.get().literal("1", "bar"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportEmptyArrayAsEmpty() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "set_array(foo)", + "if is_empty(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().literal("test", "ok"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportFalseStringAsFalse() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_false(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "false"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "true"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "bar"); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.literal("foo", "false"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "true"); + i.literal("foo", "false"); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "false"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "true"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "bar"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().literal("foo", "false"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "true"); + o.get().literal("foo", "false"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportFalseNumberAsFalse() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_false(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "42"); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.literal("foo", "0"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "1"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "0"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "42"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().literal("foo", "0"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "1"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + + @Test // checkstyle-disable-line JavaNCSS + public void shouldReportHashAsHash() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_hash(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "bar"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + + @Test // checkstyle-disable-line JavaNCSS + public void shouldReportNumberStringAsNumber() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_number(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "-1"); + i.endRecord(); + i.startRecord("4"); + i.literal("foo", "1.1"); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "-1.1"); + i.endRecord(); + i.startRecord("6"); + i.literal("foo", "1.1x"); + i.endRecord(); + i.startRecord("7"); + i.startEntity("foo"); + i.literal("foo", "1"); + i.endEntity(); + i.endRecord(); + i.startRecord("8"); + i.literal("foo", "1"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("9"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "0"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "-1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().literal("foo", "1.1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "-1.1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().literal("foo", "1.1x"); + o.get().endRecord(); + o.get().startRecord("7"); + o.get().startEntity("foo"); + o.get().literal("foo", "1"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("8"); + o.get().literal("foo", "1"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("9"); + o.get().endRecord(); + } + ); + } + + @Test // checkstyle-disable-line JavaNCSS + public void shouldReportHashAsObject() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_object(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.startEntity("foo"); + i.endEntity(); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "bar"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportEmptyHashAsObject() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "set_hash(foo)", + "if is_object(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "bar"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("3"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("4"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().endEntity(); + o.get().literal("test", "ok"); + o.get().endRecord(); + } + ); + } + + @Test // checkstyle-disable-line JavaNCSS + public void shouldReportStringAsString() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_string(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "-1"); + i.endRecord(); + i.startRecord("4"); + i.literal("foo", "1.1"); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "-1.1"); + i.endRecord(); + i.startRecord("6"); + i.literal("foo", "1.1x"); + i.endRecord(); + i.startRecord("7"); + i.literal("foo", "bar"); + i.endRecord(); + i.startRecord("8"); + i.literal("foo", ""); + i.endRecord(); + i.startRecord("9"); + i.startEntity("foo"); + i.literal("foo", "bar"); + i.endEntity(); + i.endRecord(); + i.startRecord("10"); + i.literal("foo", "bar"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("11"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "1"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "-1"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().literal("foo", "1.1"); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "-1.1"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().literal("foo", "1.1x"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("7"); + o.get().literal("foo", "bar"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("8"); + o.get().literal("foo", ""); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("9"); + o.get().startEntity("foo"); + o.get().literal("foo", "bar"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("10"); + o.get().literal("foo", "bar"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("11"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportTrueStringAsTrue() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_true(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "true"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "false"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "bar"); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.literal("foo", "true"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "true"); + i.literal("foo", "false"); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "true"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "false"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "bar"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().literal("foo", "true"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "true"); + o.get().literal("foo", "false"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + + @Test + public void shouldReportTrueNumberAsTrue() { + MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( + "if is_true(foo)", + " add_field(test,ok)", + "end" + ), + i -> { + i.startRecord("1"); + i.literal("foo", "1"); + i.endRecord(); + i.startRecord("2"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("3"); + i.literal("foo", "42"); + i.endRecord(); + i.startRecord("4"); + i.startEntity("foo"); + i.literal("foo", "1"); + i.endEntity(); + i.endRecord(); + i.startRecord("5"); + i.literal("foo", "1"); + i.literal("foo", "0"); + i.endRecord(); + i.startRecord("6"); + i.endRecord(); + }, + o -> { + o.get().startRecord("1"); + o.get().literal("foo", "1"); + o.get().literal("test", "ok"); + o.get().endRecord(); + o.get().startRecord("2"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("3"); + o.get().literal("foo", "42"); + o.get().endRecord(); + o.get().startRecord("4"); + o.get().startEntity("foo"); + o.get().literal("foo", "1"); + o.get().endEntity(); + o.get().endRecord(); + o.get().startRecord("5"); + o.get().literal("foo", "1"); + o.get().literal("foo", "0"); + o.get().endRecord(); + o.get().startRecord("6"); + o.get().endRecord(); + } + ); + } + @Test public void shouldContainString() { MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList( diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/expected.json new file mode 100644 index 00000000..05719d37 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/expected.json @@ -0,0 +1,12 @@ +{ + "elementA" : "test", + "elementA" : "Another Test", + "elementB" : "Hello" +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ], + "elementB" : "Hello" +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/input.json new file mode 100644 index 00000000..951c13c3 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/input.json @@ -0,0 +1,11 @@ +{ + "elementA" : "test", + "elementA" : "Another Test" +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.fix new file mode 100644 index 00000000..8159ff02 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.fix @@ -0,0 +1,3 @@ +if is_array("elementA|elementA[]") + add_field("elementB", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsArraySimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/expected.json new file mode 100644 index 00000000..82d9dc3b --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/expected.json @@ -0,0 +1,13 @@ +{ + "elementA" : { + "test" : "element" + }, + "elementB" : "Hello", + "elementC" : "World" +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/input.json new file mode 100644 index 00000000..a2edfc1c --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/input.json @@ -0,0 +1,12 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.fix new file mode 100644 index 00000000..983b07f9 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.fix @@ -0,0 +1,7 @@ +if is_object("elementA|elementA[]") + add_field("elementB", "Hello") +end + +if is_hash("elementA|elementA[]") + add_field("elementC", "World") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsObjectSimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/expected.json new file mode 100644 index 00000000..0fc52545 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/expected.json @@ -0,0 +1,12 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test", + "elementB" : "Hello" +} +{ + "elementA" : [ "Test", "Another Test" ] +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/input.json new file mode 100644 index 00000000..a2edfc1c --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/input.json @@ -0,0 +1,12 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.fix new file mode 100644 index 00000000..9949663c --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.fix @@ -0,0 +1,3 @@ +if is_string("elementA|elementA[]") + add_field("elementB", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringSimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/expected.json new file mode 100644 index 00000000..a02550ea --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/expected.json @@ -0,0 +1,4 @@ +{ + "elementA" : "123", + "elementB" : "Hello" +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/input.json new file mode 100644 index 00000000..6b81e245 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/input.json @@ -0,0 +1,5 @@ +{ + "elementA" : "123" +} + + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.fix new file mode 100644 index 00000000..2ee95c1d --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.fix @@ -0,0 +1,3 @@ +if is_string("elementA") + add_field("elementB", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/todo.txt b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/todo.txt new file mode 100644 index 00000000..cca72167 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/ifIsStringsButNumbers/todo.txt @@ -0,0 +1 @@ +See issue LibreCat/Catmandu#393 diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/expected.json new file mode 100644 index 00000000..12f4ddc8 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/expected.json @@ -0,0 +1,11 @@ +{ + "elementA" : "test", + "elementA" : "Another Test" +} +{ + "elementA" : "test", + "elementB" : "Hello" +} +{ + "elementA" : [ "Test", "Another Test" ] +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/input.json new file mode 100644 index 00000000..951c13c3 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/input.json @@ -0,0 +1,11 @@ +{ + "elementA" : "test", + "elementA" : "Another Test" +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.fix new file mode 100644 index 00000000..f047da65 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.fix @@ -0,0 +1,3 @@ +unless is_array("elementA|elementA[]") + add_field("elementB", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsArraySimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/expected.json new file mode 100644 index 00000000..52ff922a --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/expected.json @@ -0,0 +1,15 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test", + "elementB" : "Hello", + "elementC" : "World" +} +{ + "elementA" : [ "Test", "Another Test" ], + "elementB" : "Hello", + "elementC" : "World" +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/input.json new file mode 100644 index 00000000..a2edfc1c --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/input.json @@ -0,0 +1,12 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.fix new file mode 100644 index 00000000..ced4195e --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.fix @@ -0,0 +1,7 @@ +unless is_object("elementA|elementA[]") + add_field("elementB", "Hello") +end + +unless is_hash("elementA|elementA[]") + add_field("elementC", "World") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsObjectSimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/expected.json new file mode 100644 index 00000000..6d1441e4 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/expected.json @@ -0,0 +1,13 @@ +{ + "elementA" : { + "test" : "element" + }, + "elementB" : "Hello" +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ], + "elementB" : "Hello" +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/input.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/input.json new file mode 100644 index 00000000..a2edfc1c --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/input.json @@ -0,0 +1,12 @@ +{ + "elementA" : { + "test" : "element" + } +} +{ + "elementA" : "test" +} +{ + "elementA" : [ "Test", "Another Test" ] +} + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.fix new file mode 100644 index 00000000..da7f8bdd --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.fix @@ -0,0 +1,3 @@ +unless is_string("elementA|elementA[]") + add_field("elementB", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.flux new file mode 100644 index 00000000..7c3575fa --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromJson/toJson/unlessIsStringSimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.json" +|open-file +|as-records +|decode-json +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +; diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/expected.json b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/expected.json new file mode 100644 index 00000000..8746a8e7 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/expected.json @@ -0,0 +1,8 @@ +{ + "123" : "Test" +} +{ + "123" : "Test", + "123" : "Another Test", + "test" : "Hello" +} diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/input.xml b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/input.xml new file mode 100644 index 00000000..e818d4d1 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/input.xml @@ -0,0 +1,10 @@ + + + + Test + + + Test + Another Test + + diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.fix b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.fix new file mode 100644 index 00000000..e1dc4406 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.fix @@ -0,0 +1,3 @@ +if is_array("123") + add_field("test", "Hello") +end diff --git a/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.flux b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.flux new file mode 100644 index 00000000..1d8c3df8 --- /dev/null +++ b/metafix/src/test/resources/org/metafacture/metafix/integration/conditional/fromXml/toJson/ifIsArraySimple/test.flux @@ -0,0 +1,8 @@ +FLUX_DIR + "input.xml" +|open-file +|decode-xml +|handle-marcxml +|fix(FLUX_DIR + "test.fix") +|encode-json(prettyPrinting="true") +|write(FLUX_DIR + "output-metafix.json") +;