The function introduced in previous patch relaxes JSON syntax in parsing selected properties which usually contain an array as value to also accept a string representing the only array element. The test asserting correct parsing of such properties exposed JSON printer's limitation in some properties to not reduce the array value when possible. To make things consistent, This series enhances the JSON printer by support for array reduction where missing (patches 2-4), then introduces a shared routine to combine the common idiom in patch 5. Patch 6 finally adds the actual shell test case. Patch 1 is merely fallout, a trivial fix identified when working on the test implementation. Phil Sutter (6): doc: Fix typo in nat statement 'prefix' description json: Print single set flag as non-array json: Print single fib flag as non-array json: Print single synproxy flags as non-array json: Introduce json_add_array_new() tests: shell: Add test case for JSON 'flags' arrays doc/statements.txt | 2 +- src/json.c | 89 +++------ .../cache/dumps/0002_interval_0.json-nft | 4 +- .../json/dumps/0001set_statements_0.json-nft | 4 +- tests/shell/testcases/json/single_flag | 189 ++++++++++++++++++ .../listing/dumps/0010sets_0.json-nft | 8 +- .../listing/dumps/0012sets_0.json-nft | 8 +- .../listing/dumps/0022terse_0.json-nft | 4 +- ...5interval_map_add_many_elements_0.json-nft | 4 +- .../dumps/0006interval_map_overlap_0.json-nft | 4 +- .../dumps/0008interval_map_delete_0.json-nft | 4 +- .../maps/dumps/0012map_concat_0.json-nft | 4 +- .../testcases/maps/dumps/0013map_0.json-nft | 4 +- .../maps/dumps/map_with_flags_0.json-nft | 4 +- .../maps/dumps/named_limits.json-nft | 8 +- .../maps/dumps/pipapo_double_flush.json-nft | 4 +- .../dumps/typeof_maps_add_delete.json-nft | 4 +- .../maps/dumps/typeof_maps_update_0.json-nft | 8 +- .../maps/dumps/vmap_timeout.json-nft | 8 +- .../nft-f/dumps/0025empty_dynset_0.json-nft | 12 +- .../optimizations/dumps/merge_vmaps.json-nft | 4 +- .../dumps/skip_unsupported.json-nft | 4 +- .../packetpath/dumps/set_lookups.json-nft | 8 +- .../dumps/0004replace_0.json-nft | 4 +- .../dumps/0011reset_0.json-nft | 4 +- .../sets/dumps/0001named_interval_0.json-nft | 16 +- .../0002named_interval_automerging_0.json-nft | 4 +- .../0004named_interval_shadow_0.json-nft | 4 +- .../0005named_interval_shadow_0.json-nft | 4 +- .../dumps/0008comments_interval_0.json-nft | 4 +- .../dumps/0009comments_timeout_0.json-nft | 4 +- .../sets/dumps/0015rulesetflush_0.json-nft | 4 +- .../dumps/0022type_selective_flush_0.json-nft | 4 +- .../sets/dumps/0024synproxy_0.json-nft | 4 +- .../sets/dumps/0027ipv6_maps_ipv4_0.json-nft | 4 +- .../sets/dumps/0028autoselect_0.json-nft | 12 +- .../sets/dumps/0028delete_handle_0.json-nft | 4 +- .../dumps/0032restore_set_simple_0.json-nft | 8 +- .../dumps/0033add_set_simple_flat_0.json-nft | 8 +- .../sets/dumps/0034get_element_0.json-nft | 12 +- .../0035add_set_elements_flat_0.json-nft | 4 +- .../sets/dumps/0038meter_list_0.json-nft | 4 +- .../sets/dumps/0039delete_interval_0.json-nft | 4 +- .../0040get_host_endian_elements_0.json-nft | 4 +- .../sets/dumps/0041interval_0.json-nft | 4 +- .../sets/dumps/0042update_set_0.json-nft | 4 +- .../dumps/0043concatenated_ranges_1.json-nft | 8 +- .../dumps/0044interval_overlap_1.json-nft | 4 +- .../sets/dumps/0049set_define_0.json-nft | 4 +- .../dumps/0051set_interval_counter_0.json-nft | 4 +- .../sets/dumps/0052overlap_0.json-nft | 4 +- .../sets/dumps/0054comments_set_0.json-nft | 8 +- .../sets/dumps/0055tcpflags_0.json-nft | 4 +- .../sets/dumps/0060set_multistmt_1.json-nft | 4 +- .../sets/dumps/0062set_connlimit_0.json-nft | 8 +- .../sets/dumps/0063set_catchall_0.json-nft | 4 +- .../sets/dumps/0064map_catchall_0.json-nft | 4 +- .../sets/dumps/0069interval_merge_0.json-nft | 4 +- .../0071unclosed_prefix_interval_0.json-nft | 8 +- .../sets/dumps/0073flat_interval_set.json-nft | 4 +- .../dumps/0074nested_interval_set.json-nft | 4 +- .../sets/dumps/concat_interval_0.json-nft | 8 +- .../sets/dumps/dynset_missing.json-nft | 4 +- .../sets/dumps/exact_overlap_0.json-nft | 4 +- .../testcases/sets/dumps/inner_0.json-nft | 4 +- .../sets/dumps/meter_set_reuse.json-nft | 4 +- .../dumps/range_with_same_start_end.json-nft | 4 +- .../set_element_timeout_updates.json-nft | 4 +- .../testcases/sets/dumps/set_eval_0.json-nft | 4 +- .../sets/dumps/sets_with_ifnames.json-nft | 12 +- .../transactions/dumps/0037set_0.json-nft | 4 +- .../transactions/dumps/0038set_0.json-nft | 4 +- .../transactions/dumps/0039set_0.json-nft | 4 +- .../transactions/dumps/0047set_0.json-nft | 4 +- .../transactions/dumps/doubled-set.json-nft | 4 +- 75 files changed, 311 insertions(+), 353 deletions(-) create mode 100755 tests/shell/testcases/json/single_flag -- 2.49.0