tests/structure: add some more is_subset checks
authorMatthew Waters <matthew@centricular.com>
Thu, 8 Dec 2016 04:41:40 +0000 (15:41 +1100)
committerMatthew Waters <matthew@centricular.com>
Thu, 15 Dec 2016 02:07:08 +0000 (13:07 +1100)
Explicitly testing extra/missing fields and name differences

tests/check/gst/gststructure.c

index 20f423a..de30e57 100644 (file)
@@ -464,7 +464,7 @@ GST_START_TEST (test_fixate_frac_list)
 
 GST_END_TEST;
 
-GST_START_TEST (test_is_subset)
+GST_START_TEST (test_is_subset_equal_array_list)
 {
   GstStructure *s1, *s2;
 
@@ -481,6 +481,78 @@ GST_START_TEST (test_is_subset)
 
 GST_END_TEST;
 
+GST_START_TEST (test_is_subset_different_name)
+{
+  GstStructure *s1, *s2;
+
+  s1 = gst_structure_from_string ("test/test, channels=(int)1", NULL);
+  fail_if (s1 == NULL);
+  s2 = gst_structure_from_string ("test/baz, channels=(int)1", NULL);
+  fail_if (s2 == NULL);
+
+  fail_unless (!gst_structure_is_subset (s1, s2));
+
+  gst_structure_free (s1);
+  gst_structure_free (s2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_is_subset_superset_missing_fields)
+{
+  GstStructure *s1, *s2;
+
+  /* a missing field is equivalent to any value */
+  s1 = gst_structure_from_string ("test/test, channels=(int)1, rate=(int)1",
+      NULL);
+  fail_if (s1 == NULL);
+  s2 = gst_structure_from_string ("test/test, channels=(int)1", NULL);
+  fail_if (s2 == NULL);
+
+  fail_unless (gst_structure_is_subset (s1, s2));
+
+  gst_structure_free (s1);
+  gst_structure_free (s2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_is_subset_superset_extra_fields)
+{
+  GstStructure *s1, *s2;
+
+  /* a missing field is equivalent to any value */
+  s1 = gst_structure_from_string ("test/test, channels=(int)1", NULL);
+  fail_if (s1 == NULL);
+  s2 = gst_structure_from_string ("test/test, channels=(int)1, rate=(int)1",
+      NULL);
+  fail_if (s2 == NULL);
+
+  fail_unless (!gst_structure_is_subset (s1, s2));
+
+  gst_structure_free (s1);
+  gst_structure_free (s2);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_is_subset_superset_extra_values)
+{
+  GstStructure *s1, *s2;
+
+  s1 = gst_structure_from_string ("test/test, channels=(int)1", NULL);
+  fail_if (s1 == NULL);
+  s2 = gst_structure_from_string ("test/test, channels=(int)[ 1, 2 ]", NULL);
+  fail_if (s2 == NULL);
+
+  fail_unless (gst_structure_is_subset (s1, s2));
+
+  gst_structure_free (s1);
+  gst_structure_free (s2);
+}
+
+GST_END_TEST;
+
 
 GST_START_TEST (test_structure_nested)
 {
@@ -792,7 +864,11 @@ gst_structure_suite (void)
   tcase_add_test (tc_chain, test_structure_new);
   tcase_add_test (tc_chain, test_fixate);
   tcase_add_test (tc_chain, test_fixate_frac_list);
-  tcase_add_test (tc_chain, test_is_subset);
+  tcase_add_test (tc_chain, test_is_subset_equal_array_list);
+  tcase_add_test (tc_chain, test_is_subset_different_name);
+  tcase_add_test (tc_chain, test_is_subset_superset_missing_fields);
+  tcase_add_test (tc_chain, test_is_subset_superset_extra_fields);
+  tcase_add_test (tc_chain, test_is_subset_superset_extra_values);
   tcase_add_test (tc_chain, test_structure_nested);
   tcase_add_test (tc_chain, test_structure_nested_from_and_to_string);
   tcase_add_test (tc_chain, test_vararg_getters);