Blame gio/tests/fileattributematcher.c

Packit ae235b
#include <gio/gio.h>
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_exact (void)
Packit ae235b
{
Packit ae235b
  char *exact_matches[] = {
Packit ae235b
    "*",
Packit ae235b
    "a::*",
Packit ae235b
    "a::*,b::*",
Packit ae235b
    "a::a,a::b",
Packit ae235b
    "a::a,a::b,b::*"
Packit ae235b
  };
Packit ae235b
Packit ae235b
  GFileAttributeMatcher *matcher;
Packit ae235b
  char *s;
Packit ae235b
  guint i;
Packit ae235b
Packit ae235b
  for (i = 0; i < G_N_ELEMENTS (exact_matches); i++)
Packit ae235b
    {
Packit ae235b
      matcher = g_file_attribute_matcher_new (exact_matches[i]);
Packit ae235b
      s = g_file_attribute_matcher_to_string (matcher);
Packit ae235b
      g_assert_cmpstr (exact_matches[i], ==, s);
Packit ae235b
      g_free (s);
Packit ae235b
      g_file_attribute_matcher_unref (matcher);
Packit ae235b
    }
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_equality (void)
Packit ae235b
{
Packit ae235b
  struct {
Packit ae235b
    char *expected;
Packit ae235b
    char *actual;
Packit ae235b
  } equals[] = {
Packit ae235b
    /* star makes everything else go away */
Packit ae235b
    { "*", "*,*" },
Packit ae235b
    { "*", "*,a::*" },
Packit ae235b
    { "*", "*,a::b" },
Packit ae235b
    { "*", "a::*,*" },
Packit ae235b
    { "*", "a::b,*" },
Packit ae235b
    { "*", "a::b,*,a::*" },
Packit ae235b
    /* a::* makes a::<anything> go away */
Packit ae235b
    { "a::*", "a::*,a::*" },
Packit ae235b
    { "a::*", "a::*,a::b" },
Packit ae235b
    { "a::*", "a::b,a::*" },
Packit ae235b
    { "a::*", "a::b,a::*,a::c" },
Packit ae235b
    /* a::b does not allow duplicates */
Packit ae235b
    { "a::b", "a::b,a::b" },
Packit ae235b
    { "a::b,a::c", "a::b,a::c,a::b" },
Packit ae235b
    /* stuff gets ordered in registration order */
Packit ae235b
    { "a::b,a::c", "a::c,a::b" },
Packit ae235b
    { "a::*,b::*", "b::*,a::*" },
Packit ae235b
  };
Packit ae235b
Packit ae235b
  GFileAttributeMatcher *matcher;
Packit ae235b
  char *s;
Packit ae235b
  guint i;
Packit ae235b
Packit ae235b
  for (i = 0; i < G_N_ELEMENTS (equals); i++)
Packit ae235b
    {
Packit ae235b
      matcher = g_file_attribute_matcher_new (equals[i].actual);
Packit ae235b
      s = g_file_attribute_matcher_to_string (matcher);
Packit ae235b
      g_assert_cmpstr (equals[i].expected, ==, s);
Packit ae235b
      g_free (s);
Packit ae235b
      g_file_attribute_matcher_unref (matcher);
Packit ae235b
    }
Packit ae235b
}
Packit ae235b
Packit ae235b
static void
Packit ae235b
test_subtract (void)
Packit ae235b
{
Packit ae235b
  struct {
Packit ae235b
    char *attributes;
Packit ae235b
    char *subtract;
Packit ae235b
    char *result;
Packit ae235b
  } subtractions[] = {
Packit ae235b
    /* * subtracts everything */
Packit ae235b
    { "*", "*", NULL },
Packit ae235b
    { "a::*", "*", NULL },
Packit ae235b
    { "a::b", "*", NULL },
Packit ae235b
    { "a::b,a::c", "*", NULL },
Packit ae235b
    { "a::*,b::*", "*", NULL },
Packit ae235b
    { "a::*,b::c", "*", NULL },
Packit ae235b
    { "a::b,b::*", "*", NULL },
Packit ae235b
    { "a::b,b::c", "*", NULL },
Packit ae235b
    { "a::b,a::c,b::*", "*", NULL },
Packit ae235b
    { "a::b,a::c,b::c", "*", NULL },
Packit ae235b
    /* a::* subtracts all a's */
Packit ae235b
    { "*", "a::*", "*" },
Packit ae235b
    { "a::*", "a::*", NULL },
Packit ae235b
    { "a::b", "a::*", NULL },
Packit ae235b
    { "a::b,a::c", "a::*", NULL },
Packit ae235b
    { "a::*,b::*", "a::*", "b::*" },
Packit ae235b
    { "a::*,b::c", "a::*", "b::c" },
Packit ae235b
    { "a::b,b::*", "a::*", "b::*" },
Packit ae235b
    { "a::b,b::c", "a::*", "b::c" },
Packit ae235b
    { "a::b,a::c,b::*", "a::*", "b::*" },
Packit ae235b
    { "a::b,a::c,b::c", "a::*", "b::c" },
Packit ae235b
    /* a::b subtracts exactly that */
Packit ae235b
    { "*", "a::b", "*" },
Packit ae235b
    { "a::*", "a::b", "a::*" },
Packit ae235b
    { "a::b", "a::b", NULL },
Packit ae235b
    { "a::b,a::c", "a::b", "a::c" },
Packit ae235b
    { "a::*,b::*", "a::b", "a::*,b::*" },
Packit ae235b
    { "a::*,b::c", "a::b", "a::*,b::c" },
Packit ae235b
    { "a::b,b::*", "a::b", "b::*" },
Packit ae235b
    { "a::b,b::c", "a::b", "b::c" },
Packit ae235b
    { "a::b,a::c,b::*", "a::b", "a::c,b::*" },
Packit ae235b
    { "a::b,a::c,b::c", "a::b", "a::c,b::c" },
Packit ae235b
    /* a::b,b::* subtracts both of those */
Packit ae235b
    { "*", "a::b,b::*", "*" },
Packit ae235b
    { "a::*", "a::b,b::*", "a::*" },
Packit ae235b
    { "a::b", "a::b,b::*", NULL },
Packit ae235b
    { "a::b,a::c", "a::b,b::*", "a::c" },
Packit ae235b
    { "a::*,b::*", "a::b,b::*", "a::*" },
Packit ae235b
    { "a::*,b::c", "a::b,b::*", "a::*" },
Packit ae235b
    { "a::b,b::*", "a::b,b::*", NULL },
Packit ae235b
    { "a::b,b::c", "a::b,b::*", NULL },
Packit ae235b
    { "a::b,a::c,b::*", "a::b,b::*", "a::c" },
Packit ae235b
    { "a::b,a::c,b::c", "a::b,b::*", "a::c" },
Packit ae235b
    /* a::b,b::c should work, too */
Packit ae235b
    { "*", "a::b,b::c", "*" },
Packit ae235b
    { "a::*", "a::b,b::c", "a::*" },
Packit ae235b
    { "a::b", "a::b,b::c", NULL },
Packit ae235b
    { "a::b,a::c", "a::b,b::c", "a::c" },
Packit ae235b
    { "a::*,b::*", "a::b,b::c", "a::*,b::*" },
Packit ae235b
    { "a::*,b::c", "a::b,b::c", "a::*" },
Packit ae235b
    { "a::b,b::*", "a::b,b::c", "b::*" },
Packit ae235b
    { "a::b,b::c", "a::b,b::c", NULL },
Packit ae235b
    { "a::b,a::c,b::*", "a::b,b::c", "a::c,b::*" },
Packit ae235b
    { "a::b,a::c,b::c", "a::b,b::c", "a::c" },
Packit ae235b
  };
Packit ae235b
Packit ae235b
  GFileAttributeMatcher *matcher, *subtract, *result;
Packit ae235b
  char *s;
Packit ae235b
  guint i;
Packit ae235b
Packit ae235b
  for (i = 0; i < G_N_ELEMENTS (subtractions); i++)
Packit ae235b
    {
Packit ae235b
      matcher = g_file_attribute_matcher_new (subtractions[i].attributes);
Packit ae235b
      subtract = g_file_attribute_matcher_new (subtractions[i].subtract);
Packit ae235b
      result = g_file_attribute_matcher_subtract (matcher, subtract);
Packit ae235b
      s = g_file_attribute_matcher_to_string (result);
Packit ae235b
      g_assert_cmpstr (subtractions[i].result, ==, s);
Packit ae235b
      g_free (s);
Packit ae235b
      g_file_attribute_matcher_unref (matcher);
Packit ae235b
      g_file_attribute_matcher_unref (subtract);
Packit ae235b
      g_file_attribute_matcher_unref (result);
Packit ae235b
    }
Packit ae235b
}
Packit ae235b
Packit ae235b
int
Packit ae235b
main (int argc, char *argv[])
Packit ae235b
{
Packit ae235b
  g_test_init (&argc, &argv, NULL);
Packit ae235b
Packit ae235b
  g_test_add_func ("/fileattributematcher/exact", test_exact);
Packit ae235b
  g_test_add_func ("/fileattributematcher/equality", test_equality);
Packit ae235b
  g_test_add_func ("/fileattributematcher/subtract", test_subtract);
Packit ae235b
Packit ae235b
  return g_test_run ();
Packit ae235b
}