📄 gsttag.c
字号:
/* * Copyright (C) 2003 Benjamin Otte <in7y118@public.uni-hamburg.de> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <gst/check/gstcheck.h>#include <string.h>/* multiple artists are possible */#define UTAG GST_TAG_ARTIST#define UNFIXED1 "Britney Spears"#define UNFIXED2 "Evanescence"#define UNFIXED3 "AC/DC"#define UNFIXED4 "The Prodigy"/* license is fixed */#define FTAG GST_TAG_LICENSE#define FIXED1 "Lesser General Public License"#define FIXED2 "Microsoft End User License Agreement"#define FIXED3 "Mozilla Public License"#define FIXED4 "Public Domain"/* checks that a tag contains the given values and not more values */static voidcheck_tags (const GstTagList * list, const gchar * tag, gchar * value, ...){ va_list args; gchar *str; guint i = 0; va_start (args, value); while (value != NULL) { fail_unless (gst_tag_list_get_string_index (list, tag, i, &str)); fail_unless (strcmp (value, str) == 0); g_free (str); value = va_arg (args, gchar *); i++; } fail_unless (i == gst_tag_list_get_tag_size (list, tag)); va_end (args);}#define NEW_LIST_FIXED(mode) \G_STMT_START { \ if (list) gst_tag_list_free (list); \ list = gst_tag_list_new (); \ gst_tag_list_add (list, mode, FTAG, FIXED1, FTAG, FIXED2, \ FTAG, FIXED3, FTAG, FIXED4, NULL); \} G_STMT_END;#define NEW_LIST_UNFIXED(mode) \G_STMT_START { \ if (list) gst_tag_list_free (list); \ list = gst_tag_list_new (); \ gst_tag_list_add (list, mode, UTAG, UNFIXED1, UTAG, UNFIXED2, \ UTAG, UNFIXED3, UTAG, UNFIXED4, NULL); \} G_STMT_END;#define NEW_LISTS_FIXED(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 = 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); \} G_STMT_END;#define NEW_LISTS_UNFIXED(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, UTAG, UNFIXED1, \ UTAG, UNFIXED2, NULL); \ if (list2) gst_tag_list_free (list2); \ list2 = gst_tag_list_new (); \ gst_tag_list_add (list2, GST_TAG_MERGE_APPEND, UTAG, UNFIXED3,\ UTAG, UNFIXED4, NULL); \ if (merge) gst_tag_list_free (merge); \ merge = gst_tag_list_merge (list, list2, mode); \} G_STMT_END;GST_START_TEST (test_merge){ GstTagList *list = NULL, *list2 = NULL, *merge = NULL; /* make sure the assumptions work */ fail_unless (gst_tag_is_fixed (FTAG)); fail_unless (!gst_tag_is_fixed (UTAG)); /* we check string here only */ fail_unless (gst_tag_get_type (FTAG) == G_TYPE_STRING); fail_unless (gst_tag_get_type (UTAG) == G_TYPE_STRING); /* check additions */ /* unfixed */ NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE_ALL); check_tags (list, UTAG, UNFIXED4, NULL); NEW_LIST_UNFIXED (GST_TAG_MERGE_REPLACE); check_tags (list, UTAG, UNFIXED4, NULL); NEW_LIST_UNFIXED (GST_TAG_MERGE_PREPEND); check_tags (list, UTAG, UNFIXED4, UNFIXED3, UNFIXED2, UNFIXED1, NULL); NEW_LIST_UNFIXED (GST_TAG_MERGE_APPEND); check_tags (list, UTAG, UNFIXED1, UNFIXED2, UNFIXED3, UNFIXED4, NULL); NEW_LIST_UNFIXED (GST_TAG_MERGE_KEEP); check_tags (list, UTAG, UNFIXED1, NULL); NEW_LIST_UNFIXED (GST_TAG_MERGE_KEEP_ALL); check_tags (list, UTAG, NULL); /* fixed */ NEW_LIST_FIXED (GST_TAG_MERGE_REPLACE_ALL); check_tags (list, FTAG, FIXED4, NULL); NEW_LIST_FIXED (GST_TAG_MERGE_REPLACE); check_tags (list, FTAG, FIXED4, NULL); NEW_LIST_FIXED (GST_TAG_MERGE_PREPEND); check_tags (list, FTAG, FIXED4, NULL); NEW_LIST_FIXED (GST_TAG_MERGE_APPEND); check_tags (list, FTAG, FIXED1, NULL); NEW_LIST_FIXED (GST_TAG_MERGE_KEEP); check_tags (list, FTAG, FIXED1, NULL); NEW_LIST_FIXED (GST_TAG_MERGE_KEEP_ALL); check_tags (list, FTAG, NULL); /* check merging */ /* unfixed */ NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE_ALL); check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL); NEW_LISTS_UNFIXED (GST_TAG_MERGE_REPLACE); check_tags (merge, UTAG, UNFIXED3, UNFIXED4, NULL); NEW_LISTS_UNFIXED (GST_TAG_MERGE_PREPEND); check_tags (merge, UTAG, UNFIXED3, UNFIXED4, UNFIXED1, UNFIXED2, NULL); NEW_LISTS_UNFIXED (GST_TAG_MERGE_APPEND); check_tags (merge, UTAG, UNFIXED1, UNFIXED2, UNFIXED3, UNFIXED4, NULL); NEW_LISTS_UNFIXED (GST_TAG_MERGE_KEEP); check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL); NEW_LISTS_UNFIXED (GST_TAG_MERGE_KEEP_ALL); check_tags (merge, UTAG, UNFIXED1, UNFIXED2, NULL); /* fixed */ NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE_ALL); check_tags (merge, FTAG, FIXED3, NULL); NEW_LISTS_FIXED (GST_TAG_MERGE_REPLACE); check_tags (merge, FTAG, FIXED3, NULL); NEW_LISTS_FIXED (GST_TAG_MERGE_PREPEND); check_tags (merge, FTAG, FIXED3, NULL); NEW_LISTS_FIXED (GST_TAG_MERGE_APPEND); check_tags (merge, FTAG, FIXED1, NULL); NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP); check_tags (merge, FTAG, FIXED1, NULL); NEW_LISTS_FIXED (GST_TAG_MERGE_KEEP_ALL); check_tags (merge, FTAG, FIXED1, NULL); /* clean up */ if (list) gst_tag_list_free (list); if (list2) gst_tag_list_free (list2); if (merge) gst_tag_list_free (merge);}GST_END_TESTGST_START_TEST (test_date_tags){ GstTagList *tag_list, *tag_list2; GDate *date, *date2; gchar *str; date = g_date_new_dmy (14, 10, 2005); tag_list = gst_tag_list_new (); gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, GST_TAG_DATE, date, NULL); str = gst_structure_to_string (tag_list); fail_if (str == NULL); fail_if (strstr (str, "2005-10-14") == NULL); tag_list2 = gst_structure_from_string (str, NULL); fail_if (tag_list2 == NULL); fail_if (!gst_tag_list_get_date (tag_list2, GST_TAG_DATE, &date2)); gst_tag_list_free (tag_list2); g_free (str); fail_if (g_date_compare (date, date2) != 0); fail_if (g_date_get_day (date) != 14); fail_if (g_date_get_month (date) != 10); fail_if (g_date_get_year (date) != 2005); fail_if (g_date_get_day (date2) != 14); fail_if (g_date_get_month (date2) != 10); fail_if (g_date_get_year (date2) != 2005); g_date_free (date2); gst_tag_list_free (tag_list); g_date_free (date);}GST_END_TEST;GST_START_TEST (test_type){ GstTagList *taglist; taglist = gst_tag_list_new (); fail_unless (GST_IS_TAG_LIST (taglist)); fail_unless (gst_is_tag_list (taglist)); gst_tag_list_free (taglist); /* this isn't okay */ ASSERT_CRITICAL (fail_if (gst_is_tag_list (NULL))); /* this however should be fine */ fail_if (GST_IS_TAG_LIST (NULL)); /* check gst_tag_list_is_empty */ ASSERT_CRITICAL (gst_tag_list_is_empty (NULL)); taglist = gst_tag_list_new (); fail_unless (gst_tag_list_is_empty (taglist)); gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, "JD", NULL); fail_if (gst_tag_list_is_empty (taglist)); gst_tag_list_free (taglist);}GST_END_TEST;GST_START_TEST (test_set_non_utf8_string){ GstTagList *taglist; guint8 foobar[2] = { 0xff, 0x00 }; /* not UTF-8 */ taglist = gst_tag_list_new (); fail_unless (taglist != NULL); ASSERT_WARNING (gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, GST_TAG_ARTIST, (gchar *) foobar, NULL)); /* That string field with a non-UTF8 string should not have been added */ fail_unless (gst_tag_list_is_empty (taglist)); gst_tag_list_free (taglist);}GST_END_TEST;static Suite *gst_tag_suite (void){ Suite *s = suite_create ("GstTag"); TCase *tc_chain = tcase_create ("general"); suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_merge); tcase_add_test (tc_chain, test_date_tags); tcase_add_test (tc_chain, test_type); tcase_add_test (tc_chain, test_set_non_utf8_string); return s;}GST_CHECK_MAIN (gst_tag);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -