mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
More complete unit tests. Fix handling of empty taglists (they were not merged before).
Original commit message from CVS: * gst/gsttaglist.c: * tests/check/gst/gsttag.c: More complete unit tests. Fix handling of empty taglists (they were not merged before).
This commit is contained in:
parent
f085768807
commit
f28a2a6cfc
3 changed files with 119 additions and 16 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2008-12-16 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
|
* gst/gsttaglist.c:
|
||||||
|
* tests/check/gst/gsttag.c:
|
||||||
|
More complete unit tests. Fix handling of empty taglists (they were
|
||||||
|
not merged before).
|
||||||
|
|
||||||
2008-12-15 Stefan Kost <ensonic@users.sf.net>
|
2008-12-15 Stefan Kost <ensonic@users.sf.net>
|
||||||
|
|
||||||
* gst/gsttaglist.h:
|
* gst/gsttaglist.h:
|
||||||
|
|
|
@ -640,7 +640,7 @@ gst_tag_list_copy_foreach (GQuark tag, const GValue * value, gpointer user_data)
|
||||||
* @from: list to merge from
|
* @from: list to merge from
|
||||||
* @mode: the mode to use
|
* @mode: the mode to use
|
||||||
*
|
*
|
||||||
* Inserts the tags of the second list into the first list using the given mode.
|
* Inserts the tags of the @from list into the first list using the given mode.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
gst_tag_list_insert (GstTagList * into, const GstTagList * from,
|
gst_tag_list_insert (GstTagList * into, const GstTagList * from,
|
||||||
|
@ -692,23 +692,31 @@ GstTagList *
|
||||||
gst_tag_list_merge (const GstTagList * list1, const GstTagList * list2,
|
gst_tag_list_merge (const GstTagList * list1, const GstTagList * list2,
|
||||||
GstTagMergeMode mode)
|
GstTagMergeMode mode)
|
||||||
{
|
{
|
||||||
|
const GstTagList *list1_cp, *list2_cp;
|
||||||
|
GstTagList *ret;
|
||||||
|
|
||||||
g_return_val_if_fail (list1 == NULL || GST_IS_TAG_LIST (list1), NULL);
|
g_return_val_if_fail (list1 == NULL || GST_IS_TAG_LIST (list1), NULL);
|
||||||
g_return_val_if_fail (list2 == NULL || GST_IS_TAG_LIST (list2), NULL);
|
g_return_val_if_fail (list2 == NULL || GST_IS_TAG_LIST (list2), NULL);
|
||||||
g_return_val_if_fail (GST_TAG_MODE_IS_VALID (mode), NULL);
|
g_return_val_if_fail (GST_TAG_MODE_IS_VALID (mode), NULL);
|
||||||
|
|
||||||
|
/* nothing to merge */
|
||||||
if (!list1 && !list2) {
|
if (!list1 && !list2) {
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (!list1) {
|
|
||||||
return gst_tag_list_copy (list2);
|
|
||||||
} else if (!list2) {
|
|
||||||
return gst_tag_list_copy (list1);
|
|
||||||
} else {
|
|
||||||
GstTagList *ret;
|
|
||||||
|
|
||||||
ret = gst_tag_list_copy (list1);
|
|
||||||
gst_tag_list_insert (ret, list2, mode);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* create empty list, we need to do this to correctly handling merge modes */
|
||||||
|
list1_cp = (list1) ? list1 : gst_tag_list_new ();
|
||||||
|
list2_cp = (list2) ? list2 : gst_tag_list_new ();
|
||||||
|
|
||||||
|
ret = gst_tag_list_copy (list1_cp);
|
||||||
|
gst_tag_list_insert (ret, list2_cp, mode);
|
||||||
|
|
||||||
|
if (!list1)
|
||||||
|
gst_tag_list_free ((GstTagList *) list1_cp);
|
||||||
|
if (!list2)
|
||||||
|
gst_tag_list_free ((GstTagList *) list2_cp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -818,6 +826,10 @@ gst_tag_list_add_valist (GstTagList * list, GstTagMergeMode mode,
|
||||||
g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));
|
g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));
|
||||||
g_return_if_fail (tag != NULL);
|
g_return_if_fail (tag != NULL);
|
||||||
|
|
||||||
|
if (mode == GST_TAG_MERGE_REPLACE_ALL) {
|
||||||
|
gst_structure_remove_all_fields (list);
|
||||||
|
}
|
||||||
|
|
||||||
while (tag != NULL) {
|
while (tag != NULL) {
|
||||||
GValue value = { 0, };
|
GValue value = { 0, };
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
/* multiple artists are possible */
|
/* multiple artists are possible (unfixed) */
|
||||||
#define UTAG GST_TAG_ARTIST
|
#define UTAG GST_TAG_ARTIST
|
||||||
#define UNFIXED1 "Britney Spears"
|
#define UNFIXED1 "Britney Spears"
|
||||||
#define UNFIXED2 "Evanescence"
|
#define UNFIXED2 "Evanescence"
|
||||||
|
@ -56,12 +56,20 @@ check_tags (const GstTagList * list, const gchar * tag, gchar * value, ...)
|
||||||
va_end (args);
|
va_end (args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_tags_empty (const GstTagList * list)
|
||||||
|
{
|
||||||
|
GST_DEBUG ("taglist: %" GST_PTR_FORMAT, list);
|
||||||
|
fail_unless ((list == NULL) || (gst_tag_list_is_empty (list)));
|
||||||
|
}
|
||||||
|
|
||||||
#define NEW_LIST_FIXED(mode) \
|
#define NEW_LIST_FIXED(mode) \
|
||||||
G_STMT_START { \
|
G_STMT_START { \
|
||||||
if (list) gst_tag_list_free (list); \
|
if (list) gst_tag_list_free (list); \
|
||||||
list = gst_tag_list_new (); \
|
list = gst_tag_list_new (); \
|
||||||
gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \
|
gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \
|
||||||
FTAG, FIXED3, FTAG, FIXED4, NULL); \
|
FTAG, FIXED3, FTAG, FIXED4, NULL); \
|
||||||
|
mark_point(); \
|
||||||
} G_STMT_END;
|
} G_STMT_END;
|
||||||
|
|
||||||
#define NEW_LIST_UNFIXED(mode) \
|
#define NEW_LIST_UNFIXED(mode) \
|
||||||
|
@ -70,6 +78,7 @@ G_STMT_START { \
|
||||||
list = gst_tag_list_new (); \
|
list = gst_tag_list_new (); \
|
||||||
gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \
|
gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \
|
||||||
UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \
|
UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \
|
||||||
|
mark_point(); \
|
||||||
} G_STMT_END;
|
} G_STMT_END;
|
||||||
|
|
||||||
#define NEW_LISTS_FIXED(mode) \
|
#define NEW_LISTS_FIXED(mode) \
|
||||||
|
@ -84,6 +93,7 @@ G_STMT_START { \
|
||||||
FTAG, FIXED4, NULL); \
|
FTAG, FIXED4, NULL); \
|
||||||
if (merge) gst_tag_list_free (merge); \
|
if (merge) gst_tag_list_free (merge); \
|
||||||
merge = gst_tag_list_merge (list, list2, mode); \
|
merge = gst_tag_list_merge (list, list2, mode); \
|
||||||
|
mark_point(); \
|
||||||
} G_STMT_END;
|
} G_STMT_END;
|
||||||
|
|
||||||
#define NEW_LISTS_UNFIXED(mode) \
|
#define NEW_LISTS_UNFIXED(mode) \
|
||||||
|
@ -98,22 +108,52 @@ G_STMT_START { \
|
||||||
UTAG, UNFIXED4, NULL); \
|
UTAG, UNFIXED4, NULL); \
|
||||||
if (merge) gst_tag_list_free (merge); \
|
if (merge) gst_tag_list_free (merge); \
|
||||||
merge = gst_tag_list_merge (list, list2, mode); \
|
merge = gst_tag_list_merge (list, list2, mode); \
|
||||||
|
mark_point(); \
|
||||||
|
} G_STMT_END;
|
||||||
|
|
||||||
|
#define NEW_LISTS_EMPTY1(mode) \
|
||||||
|
G_STMT_START { \
|
||||||
|
if (list) gst_tag_list_free (list); \
|
||||||
|
list = NULL; \
|
||||||
|
if (list2) gst_tag_list_free (list2); \
|
||||||
|
list2 = gst_tag_list_new (); \
|
||||||
|
gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, FTAG, FIXED3, \
|
||||||
|
FTAG, FIXED4, NULL); \
|
||||||
|
if (merge) gst_tag_list_free (merge); \
|
||||||
|
merge = gst_tag_list_merge (list, list2, mode); \
|
||||||
|
mark_point(); \
|
||||||
|
} G_STMT_END;
|
||||||
|
|
||||||
|
#define NEW_LISTS_EMPTY2(mode) \
|
||||||
|
G_STMT_START { \
|
||||||
|
if (list) gst_tag_list_free (list); \
|
||||||
|
list = gst_tag_list_new (); \
|
||||||
|
gst_tag_list_add (list, GST_TAG_MERGE_APPEND, FTAG, FIXED1, \
|
||||||
|
FTAG, FIXED2, NULL); \
|
||||||
|
if (list2) gst_tag_list_free (list2); \
|
||||||
|
list2 = NULL; \
|
||||||
|
if (merge) gst_tag_list_free (merge); \
|
||||||
|
merge = gst_tag_list_merge (list, list2, mode); \
|
||||||
|
mark_point(); \
|
||||||
} G_STMT_END;
|
} G_STMT_END;
|
||||||
|
|
||||||
|
|
||||||
GST_START_TEST (test_merge)
|
GST_START_TEST (test_basics)
|
||||||
{
|
{
|
||||||
GstTagList *list = NULL, *list2 = NULL, *merge = NULL;
|
|
||||||
|
|
||||||
/* make sure the assumptions work */
|
/* make sure the assumptions work */
|
||||||
fail_unless (gst_tag_is_fixed (FTAG));
|
fail_unless (gst_tag_is_fixed (FTAG));
|
||||||
fail_unless (!gst_tag_is_fixed (UTAG));
|
fail_unless (!gst_tag_is_fixed (UTAG));
|
||||||
/* we check string here only */
|
/* we check string here only */
|
||||||
fail_unless (gst_tag_get_type (FTAG) == G_TYPE_STRING);
|
fail_unless (gst_tag_get_type (FTAG) == G_TYPE_STRING);
|
||||||
fail_unless (gst_tag_get_type (UTAG) == G_TYPE_STRING);
|
fail_unless (gst_tag_get_type (UTAG) == G_TYPE_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST
|
||||||
|
GST_START_TEST (test_add)
|
||||||
|
{
|
||||||
|
GstTagList *list = NULL;
|
||||||
|
|
||||||
/* check additions */
|
/* check additions */
|
||||||
|
|
||||||
/* unfixed */
|
/* unfixed */
|
||||||
NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE_ALL);
|
NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE_ALL);
|
||||||
check_tags (list, UTAG, UNFIXED4, NULL);
|
check_tags (list, UTAG, UNFIXED4, NULL);
|
||||||
|
@ -142,8 +182,19 @@ GST_START_TEST (test_merge)
|
||||||
NEW_LIST_FIXED (GST_TAG_MERGE_KEEP_ALL);
|
NEW_LIST_FIXED (GST_TAG_MERGE_KEEP_ALL);
|
||||||
check_tags (list, FTAG, NULL);
|
check_tags (list, FTAG, NULL);
|
||||||
|
|
||||||
|
/* clean up */
|
||||||
|
if (list)
|
||||||
|
gst_tag_list_free (list);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST
|
||||||
|
GST_START_TEST (test_merge)
|
||||||
|
{
|
||||||
|
GstTagList *list = NULL, *list2 = NULL, *merge = NULL;
|
||||||
|
|
||||||
/* check merging */
|
/* check merging */
|
||||||
/* unfixed */
|
/* unfixed */
|
||||||
|
GST_DEBUG ("unfixed");
|
||||||
NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE_ALL);
|
NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE_ALL);
|
||||||
check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL);
|
check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL);
|
||||||
NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE);
|
NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE);
|
||||||
|
@ -158,6 +209,7 @@ GST_START_TEST (test_merge)
|
||||||
check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL);
|
check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL);
|
||||||
|
|
||||||
/* fixed */
|
/* fixed */
|
||||||
|
GST_DEBUG ("fixed");
|
||||||
NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE_ALL);
|
NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE_ALL);
|
||||||
check_tags (merge, FTAG, FIXED3, NULL);
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE);
|
NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE);
|
||||||
|
@ -171,6 +223,36 @@ GST_START_TEST (test_merge)
|
||||||
NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP_ALL);
|
NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP_ALL);
|
||||||
check_tags (merge, FTAG, FIXED1, NULL);
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
|
||||||
|
/* first list empty */
|
||||||
|
GST_DEBUG ("first empty");
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_REPLACE_ALL);
|
||||||
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_REPLACE);
|
||||||
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_PREPEND);
|
||||||
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_APPEND);
|
||||||
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_KEEP);
|
||||||
|
check_tags (merge, FTAG, FIXED3, NULL);
|
||||||
|
NEW_LISTS_EMPTY1 (GST_TAG_MERGE_KEEP_ALL);
|
||||||
|
check_tags_empty (merge);
|
||||||
|
|
||||||
|
/* second list empty */
|
||||||
|
GST_DEBUG ("second empty");
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_REPLACE_ALL);
|
||||||
|
check_tags_empty (merge);
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_REPLACE);
|
||||||
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_PREPEND);
|
||||||
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_APPEND);
|
||||||
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_KEEP);
|
||||||
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
NEW_LISTS_EMPTY2 (GST_TAG_MERGE_KEEP_ALL);
|
||||||
|
check_tags (merge, FTAG, FIXED1, NULL);
|
||||||
|
|
||||||
/* clean up */
|
/* clean up */
|
||||||
if (list)
|
if (list)
|
||||||
gst_tag_list_free (list);
|
gst_tag_list_free (list);
|
||||||
|
@ -268,6 +350,8 @@ gst_tag_suite (void)
|
||||||
TCase *tc_chain = tcase_create ("general");
|
TCase *tc_chain = tcase_create ("general");
|
||||||
|
|
||||||
suite_add_tcase (s, tc_chain);
|
suite_add_tcase (s, tc_chain);
|
||||||
|
tcase_add_test (tc_chain, test_basics);
|
||||||
|
tcase_add_test (tc_chain, test_add);
|
||||||
tcase_add_test (tc_chain, test_merge);
|
tcase_add_test (tc_chain, test_merge);
|
||||||
tcase_add_test (tc_chain, test_date_tags);
|
tcase_add_test (tc_chain, test_date_tags);
|
||||||
tcase_add_test (tc_chain, test_type);
|
tcase_add_test (tc_chain, test_type);
|
||||||
|
|
Loading…
Reference in a new issue