metafacture / metafacture-fix

Work in progress towards an implementation of the Fix language for Metafacture
Apache License 2.0
6 stars 2 forks source link

`copy_field` of array/repeated field into newly created array of objects/repeated object with $first/$last creates wrong multiple output #132

Open TobiasNx opened 2 years ago

TobiasNx commented 2 years ago

Spotted while testing #106: https://github.com/TobiasNx/fix-FunctionalReview-Testing/blob/dfcf4fac13e4deab0606a9131ea846175170cfbc/data/testing/repeatedFieldsArrayToXML

Perhaps this is also a problem for add_field and move_field. Should be dealt with after: #102

copy_field("animal_string_Array[]", "animals_repeated_SimpleField")
copy_field("animal_object_Array[]", "animals_repeated_ObjectField")
copy_field("animal_object_Array[]", "test_animals_repeated_ObjectField")
copy_field("animal_object_Array[]", "test_animal_object_Array[]")

#This creates trouble - writes into every first object in array
copy_field("animal_string_Array[]", "test_animals_repeated_ObjectField.$first.animalsString_1")
#This creates trouble - writes into every last object in array
copy_field("animal_string_Array[]", "test_animals_repeated_ObjectField.$last.animalsObject_1[]")

#This creates trouble - writes into every first object in array
copy_field("animal_string_Array[]", "test_animal_object_Array[].$first.animalsString_2")
#This creates trouble - writes into every last object in array
copy_field("animal_string_Array[]", "test_animal_object_Array[].$last.animalsObject_2[]")

expected:

{
  "animal_string_Array" : [ "dog", "elefant" ],
  "animal_object_Array" : [ {
    "name" : "dog"
  }, {
    "name" : "elefant"
  } ],
  "animals_repeated_SimpleField" : "dog",
  "animals_repeated_SimpleField" : "elefant",
  "animals_repeated_ObjectField" : {
    "name" : "dog"
  },
  "animals_repeated_ObjectField" : {
    "name" : "elefant"
  },
  "test_animals_repeated_ObjectField" : {
    "name" : "dog",
    "animalsString_1" : "dog",
    "animalsString_1" : "elefant"
  },
  "test_animals_repeated_ObjectField" : {
    "name" : "elefant",
    "animalsObject_1" : [ "dog", "elefant" ]
  },
  "test_animal_object_Array" : [ {
    "name" : "dog",
    "animalsString_2" : "dog",
    "animalsString_2" : "elefant"
  }, {
    "name" : "elefant",
    "animalsObject_2" : [ "dog", "elefant" ]
  } ]
}
{
  "animal_string_Array" : [ "dog", "elefant" ],
  "animal_object_Array" : [ {
    "name" : "dog",
    "animalsString_1" : "dog",
    "animalsString_1" : "elefant",
    "animalsString_2" : "dog",
    "animalsString_2" : "elefant"
  }, {
    "name" : "elefant",
    "animalsObject_1" : [ "dog", "elefant" ],
    "animalsObject_2" : [ "dog", "elefant" ]
  } ],
  "animals_repeated_SimpleField" : "dog",
  "animals_repeated_SimpleField" : "elefant",
  "animals_repeated_ObjectField" : {
    "name" : "dog",
    "animalsString_1" : "dog",
    "animalsString_1" : "elefant",
    "animalsString_2" : "dog",
    "animalsString_2" : "elefant"
  },
  "animals_repeated_ObjectField" : {
    "name" : "elefant",
    "animalsObject_1" : [ "dog", "elefant" ],
    "animalsObject_2" : [ "dog", "elefant" ]
  },
  "test_animals_repeated_ObjectField" : {
    "name" : "dog",
    "animalsString_1" : "dog",
    "animalsString_1" : "elefant",
    "animalsString_2" : "dog",
    "animalsString_2" : "elefant"
  },
  "test_animals_repeated_ObjectField" : {
    "name" : "elefant",
    "animalsObject_1" : [ "dog", "elefant" ],
    "animalsObject_2" : [ "dog", "elefant" ]
  },
  "test_animal_object_Array" : [ {
    "name" : "dog",
    "animalsString_1" : "dog",
    "animalsString_1" : "elefant",
    "animalsString_2" : "dog",
    "animalsString_2" : "elefant"
  }, {
    "name" : "elefant",
    "animalsObject_1" : [ "dog", "elefant" ],
    "animalsObject_2" : [ "dog", "elefant" ]
  } ]
}
TobiasNx commented 2 years ago

I tested it with and without the underscore in the name, this seems not to be the problem.

fsteeg commented 2 years ago

Revisit after https://github.com/metafacture/metafacture-fix/issues/102 and https://github.com/metafacture/metafacture-fix/issues/160.

TobiasNx commented 2 years ago

The problem seems to result from the created array not the input arrays.

blackwinter commented 11 months ago

Integration test: