void test_001(Fixture *fixture, G_GNUC_UNUSED gconstpointer data) { GType type = g_type_from_name("Log4gRegexFilter"); g_assert(type); Log4gFilter *filter = g_object_new(type, NULL); g_assert(filter); log4g_filter_activate_options(filter); g_assert_cmpint(LOG4G_FILTER_NEUTRAL, ==, log4g_filter_decide(filter, fixture->event)); g_object_set(filter, "regex", "bar", NULL); log4g_filter_activate_options(filter); g_assert_cmpint(LOG4G_FILTER_ACCEPT, ==, log4g_filter_decide(filter, fixture->event)); g_object_set(filter, "regex", "bork", NULL); log4g_filter_activate_options(filter); g_assert_cmpint(LOG4G_FILTER_DENY, ==, log4g_filter_decide(filter, fixture->event)); g_object_unref(filter); }
static Log4gFilter * parse_filter(Log4gConfigurator *base, xmlNodePtr node) { Log4gFilter *filter = NULL; xmlChar *type = xmlGetProp(node, (const xmlChar *)"type"); if (!type) { log4g_log_error(Q_("filters must have a `type'")); goto exit; } GType gtype = g_type_from_name((const gchar *)type); if (!gtype) { log4g_log_error(Q_("%s: invalid `type'"), type); goto exit; } if (!G_TYPE_IS_INSTANTIATABLE(gtype)) { log4g_log_error(Q_("%s: is a non-instantiable type"), type); goto exit; } filter = g_object_new(gtype, NULL); if (!filter) { log4g_log_error(Q_("%s: g_object_new() returned NULL"), type); goto exit; } if (!LOG4G_IS_FILTER(filter)) { log4g_log_error(Q_("%s: not an instance of Log4gFilter"), type); g_object_unref(filter); filter = NULL; goto exit; } node = node->xmlChildrenNode; while (node) { if (!xmlStrcmp(node->name, (const xmlChar *)"property")) { parse_property(base, node, filter); } else if (!xmlStrcmp(node->name, (const xmlChar *)"text")) { log4g_log_warn(Q_("invalid text element")); } else if (!xmlStrcmp(node->name, (const xmlChar *)"comment")) { /* do nothing */ } else { log4g_log_warn(Q_("%s: invalid element"), node->name); } node = node->next; } log4g_filter_activate_options(filter); exit: if (type) { xmlFree(type); } return filter; }