#include <gst/gst.h>

/* this test checks that gst_pad_link takes into account all available 
 * information when trying to link two pads.
 * Because identity proxies caps, the caps in the first and second link 
 * must be compatible for this pipeline to work.
 * Since they are not, the second linkig attempt should fail.
 */

gint
main (int argc, gchar ** argv)
{
  GstElement *src, *identity, *sink;
  GstCaps *one, *two;

  gst_init (&argc, &argv);

  /* create incompatible caps */
  src = gst_element_factory_make ("fakesrc", NULL);
  g_assert (src);
  identity = gst_element_factory_make ("identity", NULL);
  g_assert (identity);
  sink = gst_element_factory_make ("fakesink", NULL);
  g_assert (sink);

  one = gst_caps_from_string ("some/mime");
  two = gst_caps_from_string ("other/mime");

  g_assert (GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
              (src, "src"), gst_element_get_pad (identity, "sink"), one)));
  g_assert (!GST_PAD_LINK_SUCCESSFUL (gst_pad_link_filtered (gst_element_get_pad
              (identity, "src"), gst_element_get_pad (sink, "sink"), two)));

  return 0;
}