diff --git a/src/lua/zencode_array.lua b/src/lua/zencode_array.lua index 849fada3e..593867fd6 100644 --- a/src/lua/zencode_array.lua +++ b/src/lua/zencode_array.lua @@ -112,7 +112,13 @@ When("create the copy of element '' in array ''", function(pos, arr) ZEN.assert(num, "Argument is not a position number: "..pos) ZEN.assert(src[num], "No element found in: "..arr.."["..pos.."]") ACK.copy = src[num] - new_codec('copy', {encoding = src_codec.encoding}) + local n_codec = { encoding = src_codec.encoding } + -- table of schemas can only contain elements + if src_codec.schema then + n_codec.schema = src_codec.schema + n_codec.zentype = "e" + end + new_codec('copy', n_codec) end) local function _insert_in(what, dest) diff --git a/test/zencode/array.bats b/test/zencode/array.bats index 22b0deb14..dee839a9c 100755 --- a/test/zencode/array.bats +++ b/test/zencode/array.bats @@ -970,3 +970,29 @@ EOF save_output "copy_element.json" assert_output '{"dictionary_from_dictionary":{"paperino":"duck"},"string_from_array_1":"pluto","string_from_array_2":"paperino","string_from_array_3":"topolino","string_from_dictionary_1":"dog","string_from_dictionary_2":"mouse"}' } + +@test "copy element from schemas" { + cat << EOF | save_asset copy_from_schema_array.data +{ + "addresses_signatures": [ + { + "address": "0x2B8070975AF995Ef7eb949AE28ee7706B9039504", + "signature": "0xed8f36c71989f8660e8f5d4adbfd8f1c0288cca90d3a5330b7bf735d71ab52fe7ba0a7827dc4ba707431f1c10babd389f658f8e208b89390a9be3c097579a2ff1b", + }, + { + "address": "0x3028806AC293B5aC9b863B685c73813626311DaD", + "signature": "0x40d305373c648bb6b2bbadebe02ada256a9d0b3d3c37367c0a2795e367b22f7372e40dfc3497927764d1585783d058e4367bb4d24d2107777d7aa4ddcb6593c71b" + } + ] +} +EOF + + cat << EOF | zexe copy_from_schema_array.zen copy_from_schema_array.data +Scenario 'ethereum': copy element +Given I have a 'ethereum address signature pair array' named 'addresses_signatures' +When I create the copy of element '1' in array 'addresses_signatures' +Then print the 'copy' +EOF + save_output 'copy_from_schema_array.json' + assert_output '{"copy":{"address":"0x2B8070975AF995Ef7eb949AE28ee7706B9039504","signature":"0xed8f36c71989f8660e8f5d4adbfd8f1c0288cca90d3a5330b7bf735d71ab52fe7ba0a7827dc4ba707431f1c10babd389f658f8e208b89390a9be3c097579a2ff1b"}}' +}