From 4243db850c7d89199a9d44d32a96b75dad62fd57 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Sun, 7 Jun 2015 15:59:59 +0200 Subject: [PATCH] zbar: split test Lets not cram everything into a single test - this would render the test name useless for quick diagnosis. Having separate tests for the optional feature is also verifying the behaviour when the feature is off. --- tests/check/elements/zbar.c | 76 ++++++++++++++++++++++++++++++------- 1 file changed, 63 insertions(+), 13 deletions(-) diff --git a/tests/check/elements/zbar.c b/tests/check/elements/zbar.c index 9c8284d654..bb906b8a42 100644 --- a/tests/check/elements/zbar.c +++ b/tests/check/elements/zbar.c @@ -20,26 +20,20 @@ #include -GST_START_TEST (test_still_image) +static GstElement * +setup_pipeline (void) { - GstMessage *zbar_msg = NULL; - const GstStructure *s; GstElement *pipeline, *src, *dec, *csp, *zbar, *sink; - GstSample *sample; - const gchar *type, *symbol; gchar *path; - int qual; pipeline = gst_pipeline_new ("pipeline"); src = gst_element_factory_make ("filesrc", NULL); dec = gst_element_factory_make ("pngdec", NULL); csp = gst_element_factory_make ("videoconvert", NULL); - zbar = gst_element_factory_make ("zbar", NULL); + zbar = gst_element_factory_make ("zbar", "zbar"); sink = gst_element_factory_make ("fakesink", NULL); - g_object_set (zbar, "attach-frame", TRUE, NULL); - path = g_build_filename (GST_TEST_FILES_PATH, "barcode.png", NULL); GST_LOG ("reading file '%s'", path); g_object_set (src, "location", path, NULL); @@ -48,8 +42,13 @@ GST_START_TEST (test_still_image) gst_bin_add_many (GST_BIN (pipeline), src, dec, csp, zbar, sink, NULL); fail_unless (gst_element_link_many (src, dec, csp, zbar, sink, NULL)); - fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING), - GST_STATE_CHANGE_ASYNC); + return pipeline; +} + +static GstMessage * +get_zbar_msg_until_eos (GstElement * pipeline) +{ + GstMessage *zbar_msg = NULL; do { GstMessage *msg; @@ -66,14 +65,33 @@ GST_START_TEST (test_still_image) break; } - if (GST_MESSAGE_SRC (msg) == GST_OBJECT_CAST (zbar) && zbar_msg == NULL) { + if (!g_strcmp0 (GST_OBJECT_NAME (GST_MESSAGE_SRC (msg)), "zbar") + && zbar_msg == NULL) { zbar_msg = msg; } else { gst_message_unref (msg); } } while (1); + return zbar_msg; +} + +GST_START_TEST (test_still_image) +{ + GstMessage *zbar_msg; + const GstStructure *s; + GstElement *pipeline; + const gchar *type, *symbol; + int qual; + + pipeline = setup_pipeline (); + + fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING), + GST_STATE_CHANGE_ASYNC); + + zbar_msg = get_zbar_msg_until_eos (pipeline); fail_unless (zbar_msg != NULL); + s = gst_message_get_structure (zbar_msg); fail_unless (s != NULL); @@ -82,7 +100,6 @@ GST_START_TEST (test_still_image) fail_unless (gst_structure_has_field (s, "type")); fail_unless (gst_structure_has_field (s, "symbol")); fail_unless (gst_structure_has_field (s, "quality")); - fail_unless (gst_structure_has_field (s, "frame")); fail_unless (gst_structure_get_int (s, "quality", &qual)); fail_unless (qual >= 90); type = gst_structure_get_string (s, "type"); @@ -90,6 +107,38 @@ GST_START_TEST (test_still_image) symbol = gst_structure_get_string (s, "symbol"); fail_unless_equals_string (symbol, "9876543210128"); + fail_if (gst_structure_has_field (s, "frame")); + + fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL), + GST_STATE_CHANGE_SUCCESS); + + gst_object_unref (pipeline); + gst_message_unref (zbar_msg); +} + +GST_END_TEST; + +GST_START_TEST (test_still_image_with_sample) +{ + GstMessage *zbar_msg = NULL; + const GstStructure *s; + GstElement *pipeline; + GstSample *sample; + + pipeline = setup_pipeline (); + gst_child_proxy_set ((GstChildProxy *) pipeline, "zbar::attach-frame", TRUE, + NULL); + + + fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_PLAYING), + GST_STATE_CHANGE_ASYNC); + + zbar_msg = get_zbar_msg_until_eos (pipeline); + fail_unless (zbar_msg != NULL); + + s = gst_message_get_structure (zbar_msg); + fail_unless (s != NULL); + fail_unless (gst_structure_get (s, "frame", GST_TYPE_SAMPLE, &sample, NULL)); fail_unless (gst_sample_get_buffer (sample)); fail_unless (gst_sample_get_caps (sample)); @@ -117,6 +166,7 @@ zbar_suite (void) GST_INFO ("Skipping test, pngdec either not available or too old"); } else { tcase_add_test (tc_chain, test_still_image); + tcase_add_test (tc_chain, test_still_image_with_sample); } return s;