[gtk/wip/otte/listview: 2/4] Add some tests for expression binding
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/listview: 2/4] Add some tests for expression binding
- Date: Sun, 15 Dec 2019 16:38:49 +0000 (UTC)
commit d543b6730ec73b3c147d06b665eabbb936e09990
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Dec 14 15:36:34 2019 -0500
Add some tests for expression binding
In particular, test that expressios can deal with object == this.
testsuite/gtk/expression.c | 160 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 160 insertions(+)
---
diff --git a/testsuite/gtk/expression.c b/testsuite/gtk/expression.c
index 663e0fcbaf..c6a2fa9371 100644
--- a/testsuite/gtk/expression.c
+++ b/testsuite/gtk/expression.c
@@ -414,6 +414,162 @@ test_constant_watch_this_destroyed (void)
g_assert_cmpint (counter, ==, 1);
}
+/* Basic test of gtk_expression_bind */
+static void
+test_bind (void)
+{
+ GtkFilter *target;
+ GtkFilter *source;
+ GtkExpression *expr;
+ GtkExpressionWatch *watch;
+ GValue value = G_VALUE_INIT;
+ gboolean res;
+
+ expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, NULL, "search");
+
+ target = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (target), "word");
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (target)), ==, "word");
+
+ source = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (source), "sausage");
+
+ watch = gtk_expression_bind (expr, target, "search", source);
+ gtk_expression_watch_ref (watch);
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (target)), ==, "sausage");
+
+ gtk_string_filter_set_search (GTK_STRING_FILTER (source), "salad");
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (target)), ==, "salad");
+ res = gtk_expression_watch_evaluate (watch, &value);
+ g_assert_true (res);
+ g_assert_cmpstr (g_value_get_string (&value), ==, "salad");
+ g_value_unset (&value);
+
+ g_object_unref (source);
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (target)), ==, "salad");
+ res = gtk_expression_watch_evaluate (watch, &value);
+ g_assert_false (res);
+ g_assert_false (G_IS_VALUE (&value));
+
+ g_object_unref (target);
+ gtk_expression_watch_unref (watch);
+}
+
+/* Another test of bind, this time we watch ourselves */
+static void
+test_bind_self (void)
+{
+ GtkFilter *filter;
+ GtkExpression *expr;
+
+ expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER,
+ NULL,
+ "ignore-case");
+
+ filter = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word");
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "word");
+
+ gtk_expression_bind (expr, filter, "search", filter);
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "TRUE");
+
+ g_object_unref (filter);
+}
+
+/* Test bind does the right memory management if the target's
+ * dispose() kills the source */
+static void
+test_bind_child (void)
+{
+ GtkFilter *filter;
+ GtkFilterListModel *child, *target;
+ GtkExpression *expr;
+
+ expr = gtk_property_expression_new (GTK_TYPE_FILTER_LIST_MODEL,
+ NULL,
+ "filter");
+
+ filter = gtk_string_filter_new ();
+ child = gtk_filter_list_model_new_for_type (G_TYPE_OBJECT);
+ gtk_filter_list_model_set_filter (child, filter);
+ target = gtk_filter_list_model_new (G_LIST_MODEL (child), NULL);
+ g_object_unref (child);
+ g_object_unref (filter);
+
+ gtk_expression_bind (expr, target, "filter", child);
+ g_assert_true (gtk_filter_list_model_get_filter (child) == gtk_filter_list_model_get_filter (target));
+
+ filter = gtk_string_filter_new ();
+ gtk_filter_list_model_set_filter (child, filter);
+ g_assert_true (filter == gtk_filter_list_model_get_filter (target));
+ g_assert_true (gtk_filter_list_model_get_filter (child) == gtk_filter_list_model_get_filter (target));
+ g_object_unref (filter);
+
+ g_object_unref (target);
+}
+
+/* Another test of gtk_expression_bind that exercises the subwatch code paths */
+static void
+test_nested_bind (void)
+{
+ GtkFilter *filter;
+ GtkFilter *filter2;
+ GtkFilter *filter3;
+ GListModel *list;
+ GtkFilterListModel *filtered;
+ GtkExpression *expr;
+ GtkExpression *filter_expr;
+ gboolean res;
+ GValue value = G_VALUE_INIT;
+
+ filter2 = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter2), "sausage");
+
+ list = G_LIST_MODEL (g_list_store_new (G_TYPE_OBJECT));
+ filtered = gtk_filter_list_model_new (list, filter2);
+
+ filter_expr = gtk_property_expression_new (GTK_TYPE_FILTER_LIST_MODEL,
+ gtk_object_expression_new (G_OBJECT (filtered)),
+ "filter");
+ expr = gtk_property_expression_new (GTK_TYPE_STRING_FILTER, gtk_expression_ref (filter_expr), "search");
+
+ filter = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter), "word");
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "word");
+
+ gtk_expression_bind (gtk_expression_ref (expr), filter, "search", NULL);
+
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter2), "sausage");
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "sausage");
+
+ filter3 = gtk_string_filter_new ();
+ gtk_string_filter_set_search (GTK_STRING_FILTER (filter3), "banana");
+ gtk_filter_list_model_set_filter (filtered, filter3);
+
+ /* check that the expressions evaluate correctly */
+ res = gtk_expression_evaluate (filter_expr, NULL, &value);
+ g_assert_true (res);
+ g_assert (g_value_get_object (&value) == filter3);
+ g_value_unset (&value);
+
+ res = gtk_expression_evaluate (expr, NULL, &value);
+ g_assert_true (res);
+ g_assert_cmpstr (g_value_get_string (&value), ==, "banana");
+ g_value_unset (&value);
+
+ /* and the bind too */
+ g_assert_cmpstr (gtk_string_filter_get_search (GTK_STRING_FILTER (filter)), ==, "banana");
+
+ g_object_unref (filter);
+ g_object_unref (filter2);
+ g_object_unref (filter3);
+ g_object_unref (filtered);
+ g_object_unref (list);
+
+ gtk_expression_unref (expr);
+ gtk_expression_unref (filter_expr);
+}
+
int
main (int argc, char *argv[])
{
@@ -429,6 +585,10 @@ main (int argc, char *argv[])
g_test_add_func ("/expression/nested-this-destroyed", test_nested_this_destroyed);
g_test_add_func ("/expression/type-mismatch", test_type_mismatch);
g_test_add_func ("/expression/this", test_this);
+ g_test_add_func ("/expression/bind", test_bind);
+ g_test_add_func ("/expression/bind-self", test_bind_self);
+ g_test_add_func ("/expression/bind-child", test_bind_child);
+ g_test_add_func ("/expression/nested-bind", test_nested_bind);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]