From f47e5b163f6638c40559fbed2c43ecd401919135 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Tue, 15 Dec 2020 18:18:29 -0300 Subject: validate: Allow using the new nested structure syntax And port the deeply nested tests we have Part-of: --- validate/gst/validate/gst-validate-scenario.c | 3 +- validate/gst/validate/validate.c | 39 ++++++++++ validate/tests/launcher_tests/foreach.validatetest | 42 +++++----- .../tests/launcher_tests/foreach_deep.validatetest | 89 ++++++++++++++-------- 4 files changed, 122 insertions(+), 51 deletions(-) diff --git a/validate/gst/validate/gst-validate-scenario.c b/validate/gst/validate/gst-validate-scenario.c index b7832b0..bc7586b 100644 --- a/validate/gst/validate/gst-validate-scenario.c +++ b/validate/gst/validate/gst-validate-scenario.c @@ -4129,7 +4129,8 @@ handle_bus_message (MessageData * d) GST_DEBUG_OBJECT (scenario, "Got EOS; generate 'stop' action"); stop_action_type = _find_action_type ("stop"); - s = gst_structure_from_string ("stop, generated-after-eos=true;", NULL); + s = gst_structure_new ("stop", "generated-after-eos", G_TYPE_BOOLEAN, + !is_error, "generated-after-error", G_TYPE_BOOLEAN, is_error, NULL); stop_action = gst_validate_action_new (scenario, stop_action_type, s, FALSE); gst_structure_free (s); diff --git a/validate/gst/validate/validate.c b/validate/gst/validate/validate.c index 875fbcb..4097b92 100644 --- a/validate/gst/validate/validate.c +++ b/validate/gst/validate/validate.c @@ -216,6 +216,41 @@ create_config (const gchar * config) g_list_free (structures); } +static GList * +get_structures_from_array (GstStructure * structure, const gchar * fieldname) +{ + const GValue *value; + GList *res = NULL; + guint i, size; + + value = gst_structure_get_value (structure, fieldname); + if (!value) + return NULL; + + if (GST_VALUE_HOLDS_STRUCTURE (value)) { + return g_list_append (res, + gst_structure_copy (gst_value_get_structure (value))); + } + + if (!GST_VALUE_HOLDS_LIST (value)) { + return NULL; + } + + size = gst_value_list_get_size (value); + for (i = 0; i < size; i++) { + const GValue *v1 = gst_value_list_get_value (value, i); + + if (!GST_VALUE_HOLDS_STRUCTURE (v1)) + break; + + res = + g_list_append (res, gst_structure_copy (gst_value_get_structure (v1))); + } + + + return res; +} + static GList * get_structures_from_array_in_meta (const gchar * fieldname) { @@ -227,6 +262,10 @@ get_structures_from_array_in_meta (const gchar * fieldname) if (!meta) return NULL; + res = get_structures_from_array (meta, fieldname); + if (res) + return res; + gst_structure_get (meta, "__lineno__", G_TYPE_INT, ¤t_lineno, "__debug__", G_TYPE_STRING, &debug, diff --git a/validate/tests/launcher_tests/foreach.validatetest b/validate/tests/launcher_tests/foreach.validatetest index 1ecc9f3..a5201ff 100644 --- a/validate/tests/launcher_tests/foreach.validatetest +++ b/validate/tests/launcher_tests/foreach.validatetest @@ -4,42 +4,44 @@ meta, "videotestsrc pattern=ball animation-mode=frames num-buffers=30 ! video/x-raw,framerate=10/1 ! $(videosink) name=sink sync=true", }, expected-issues = { - "expected-issue, - level=critical, - issue-id=scenario::execution-error, - details=\"Pipeline position doesn.t match expectations got 0:00:00.100000000 instead of.*\"", - "expected-issue, - level=critical, - issue-id=scenario::execution-error, - details=\"Pipeline position doesn.t match expectations got 0:00:00.200000000 instead of.*\"", + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Pipeline position doesn.t match expectations got 0:00:00.100000000 instead of.*", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Pipeline position doesn.t match expectations got 0:00:00.200000000 instead of.*", + ], } pause; foreach, n=[0, 2], actions = { - "seek, start=\"$(position)+0.1\", flags=\"accurate+flush\"", - "check-position, expected-position=\"expr($(n)*0.01)\"", # expected to fail + [seek, start="$(position)+0.1", flags="accurate+flush"], + [check-position, expected-position="expr($(n)*0.01)"], # expected to fail } priv_check-action-type-calls, type=seek, n=2 priv_check-action-type-calls, type=check-position, n=2 -foreach, n=[0, 6], - actions = { - "seek, start=\"$(position)+0.1\", flags=\"accurate+flush\"", - "check-position, expected-position=\"expr((3 + $(n)) * 0.1)\"", - } +foreach, n=[0, 6], actions = { + [seek, start="$(position)+0.1", flags="accurate+flush"], + [check-position, expected-position="expr((3 + $(n)) * 0.1)"], +} priv_check-action-type-calls, type=seek, n=8 priv_check-action-type-calls, type=check-position, n=8 check-position, expected-position=0.8 -foreach, n=[9, 11], - actions = { - "seek, start=\"$(position)+0.1\", flags=\"accurate+flush\"", - "check-position, expected-position=\"expr($(n)*0.1)\"", - } +foreach, n=[9, 11], actions = { + [seek, start="$(position)+0.1", flags="accurate+flush"], + [check-position, expected-position="expr($(n)*0.1)"], +} priv_check-action-type-calls, type=seek, n=10 # We called it once manually priv_check-action-type-calls, type=check-position, n=11 diff --git a/validate/tests/launcher_tests/foreach_deep.validatetest b/validate/tests/launcher_tests/foreach_deep.validatetest index 3fa9f52..b54ea0b 100644 --- a/validate/tests/launcher_tests/foreach_deep.validatetest +++ b/validate/tests/launcher_tests/foreach_deep.validatetest @@ -4,48 +4,77 @@ meta, "videotestsrc pattern=ball animation-mode=frames num-buffers=30 ! video/x-raw,framerate=10/1 ! $(videosink) name=sink sync=true", }, expected-issues = { - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Pipeline position doesn.t match expectations got 0:00:00.100000000 instead of.*\"", - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Pipeline position doesn.t match expectations got 0:00:00.200000000 instead of.*\"", - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Expected subaction level 4, got 3\"", - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Expected subaction level 4, got 3\"", - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Expected subaction level 5, got 4\"", - "expected-issue, level=critical, issue-id=scenario::execution-error, - details=\"Expected subaction level 5, got 4\"", + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Pipeline position doesn.t match expectations got 0:00:00.100000000 instead of.*", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Pipeline position doesn.t match expectations got 0:00:00.200000000 instead of.*", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Expected subaction level 4, got 3", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Expected subaction level 4, got 3", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Expected subaction level 5, got 4", + ], + [ + expected-issue, + level=critical, + issue-id=scenario::execution-error, + details="Expected subaction level 5, got 4", + ], } pause; foreach, n=[0, 2], - actions = { - "seek, start=\"$(position)+0.1\", flags=\"accurate+flush\"", - "check-position, expected-position=\"expr($(n)*0.01)\"", # Expected failling subaction! + actions={ + [seek, start="$(position)+0.1", flags="accurate+flush"], + [check-position, expected-position="expr($(n)*0.01)"], # Expected failling subaction! } priv_check-action-type-calls, type=seek, n=2 priv_check-action-type-calls, type=check-position, n=2 -foreach, n=[0, 2], - actions = { - "seek, start=\"$(position)+0.1\", flags=\"accurate+flush\"", - "priv_check-subaction-level, level=1", - "foreach, n=[0, 1], +foreach, i=[0, 2], + actions={ + [seek, start="$(position)+0.1", flags="accurate+flush"], + [priv_check-subaction-level, level=1], + [foreach, j=[0, 1], actions={ - \"priv_check-subaction-level, level=2\", - \"foreach, j=[0, 1], actions={ - \\\"priv_check-subaction-level, level=4\\\", # Failling... twice - \\\"priv_check-subaction-level, level=3\\\", - \\\"foreach, j=[0, 1], actions={ - \\\\\\\"priv_check-subaction-level, level=4\\\\\\\", - \\\\\\\"priv_check-subaction-level, level=5\\\\\\\", # Failling... twice - }\\\", - }\", - }", + [priv_check-subaction-level, level=2], + [foreach, k=[0, 1], + actions={ + [priv_check-subaction-level, level=4], # Failling... twice + [priv_check-subaction-level, level=3], + [foreach, l=[0, 1], + actions={ + [priv_check-subaction-level, level=4], + [priv_check-subaction-level, level=5], # Failling... twice + }, + ], + }, + ], + }, + ], } priv_check-action-type-calls, type=seek, n=4 stop -- cgit v1.2.3