1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
|
/*
* Copyright (C) 2024 GNOME Foundation Inc.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
* Author: Alice Mikhaylenko <alicem@gnome.org>
*/
#include <adwaita.h>
static void
increment (int *data)
{
(*data)++;
}
static void
test_adw_multi_layout_view_add_remove (void)
{
AdwMultiLayoutView *view = g_object_ref_sink (ADW_MULTI_LAYOUT_VIEW (adw_multi_layout_view_new ()));
GtkWidget *content1 = g_object_ref_sink (adw_bin_new ());
GtkWidget *content2 = g_object_ref_sink (adw_bin_new ());
AdwLayout *layout1 = adw_layout_new (content1);
AdwLayout *layout2 = adw_layout_new (content2);
g_assert_nonnull (view);
adw_multi_layout_view_add_layout (view, g_object_ref (layout1));
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
adw_multi_layout_view_add_layout (view, g_object_ref (layout2));
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
adw_multi_layout_view_remove_layout (view, layout1);
g_assert_true (adw_multi_layout_view_get_layout (view) == layout2);
g_assert_finalize_object (view);
g_assert_finalize_object (layout1);
g_assert_finalize_object (layout2);
g_assert_finalize_object (content1);
g_assert_finalize_object (content2);
}
static void
test_adw_multi_layout_view_layout (void)
{
AdwMultiLayoutView *view = g_object_ref_sink (ADW_MULTI_LAYOUT_VIEW (adw_multi_layout_view_new ()));
GtkWidget *content1 = g_object_ref_sink (adw_bin_new ());
GtkWidget *content2 = g_object_ref_sink (adw_bin_new ());
AdwLayout *layout1 = adw_layout_new (content1);
AdwLayout *layout2 = adw_layout_new (content2);
int notified = 0;
AdwLayout *layout;
g_assert_nonnull (view);
g_signal_connect_swapped (view, "notify::layout", G_CALLBACK (increment), ¬ified);
g_object_get (view, "layout", &layout, NULL);
g_assert_null (layout);
g_assert_cmpint (notified, ==, 0);
adw_multi_layout_view_add_layout (view, g_object_ref (layout1));
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
g_assert_cmpint (notified, ==, 1);
adw_multi_layout_view_add_layout (view, g_object_ref (layout2));
g_assert_cmpint (notified, ==, 1);
adw_multi_layout_view_set_layout (view, layout2);
g_assert_true (adw_multi_layout_view_get_layout (view) == layout2);
g_assert_cmpint (notified, ==, 2);
g_object_set (view, "layout", layout1, NULL);
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
g_assert_cmpint (notified, ==, 3);
g_assert_finalize_object (view);
g_assert_finalize_object (layout1);
g_assert_finalize_object (layout2);
g_assert_finalize_object (content1);
g_assert_finalize_object (content2);
}
static void
test_adw_multi_layout_view_layout_name (void)
{
AdwMultiLayoutView *view = g_object_ref_sink (ADW_MULTI_LAYOUT_VIEW (adw_multi_layout_view_new ()));
GtkWidget *content1 = g_object_ref_sink (adw_bin_new ());
GtkWidget *content2 = g_object_ref_sink (adw_bin_new ());
AdwLayout *layout1 = adw_layout_new (content1);
AdwLayout *layout2 = adw_layout_new (content2);
int notified = 0;
const char *layout_name;
g_assert_nonnull (view);
adw_layout_set_name (layout1, "layout1");
adw_layout_set_name (layout2, "layout2");
g_signal_connect_swapped (view, "notify::layout-name", G_CALLBACK (increment), ¬ified);
g_object_get (view, "layout-name", &layout_name, NULL);
g_assert_null (layout_name);
g_assert_cmpint (notified, ==, 0);
adw_multi_layout_view_add_layout (view, g_object_ref (layout1));
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
g_assert_cmpstr (adw_multi_layout_view_get_layout_name (view), ==, "layout1");
g_assert_cmpint (notified, ==, 1);
adw_multi_layout_view_add_layout (view, g_object_ref (layout2));
g_assert_cmpint (notified, ==, 1);
adw_multi_layout_view_set_layout_name (view, "layout2");
g_assert_true (adw_multi_layout_view_get_layout (view) == layout2);
g_assert_cmpstr (adw_multi_layout_view_get_layout_name (view), ==, "layout2");
g_assert_cmpint (notified, ==, 2);
g_object_set (view, "layout-name", "layout1", NULL);
g_assert_true (adw_multi_layout_view_get_layout (view) == layout1);
g_assert_cmpstr (adw_multi_layout_view_get_layout_name (view), ==, "layout1");
g_assert_cmpint (notified, ==, 3);
g_test_expect_message (ADW_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, "*not found*");
adw_multi_layout_view_set_layout_name (view, "layout3");
g_test_assert_expected_messages ();
g_assert_cmpint (notified, ==, 3);
adw_layout_set_name (layout1, "layout11");
g_assert_cmpstr (adw_multi_layout_view_get_layout_name (view), ==, "layout11");
g_assert_cmpint (notified, ==, 4);
adw_layout_set_name (layout2, "layout22");
g_assert_cmpint (notified, ==, 4);
g_assert_true (adw_multi_layout_view_get_layout_by_name (view, "layout11") == layout1);
g_assert_true (adw_multi_layout_view_get_layout_by_name (view, "layout22") == layout2);
g_assert_null (adw_multi_layout_view_get_layout_by_name (view, "layout1"));
g_assert_null (adw_multi_layout_view_get_layout_by_name (view, "layout2"));
g_assert_null (adw_multi_layout_view_get_layout_by_name (view, "layout3"));
g_assert_finalize_object (view);
g_assert_finalize_object (layout1);
g_assert_finalize_object (layout2);
g_assert_finalize_object (content1);
g_assert_finalize_object (content2);
}
static void
test_adw_multi_layout_view_children (void)
{
AdwMultiLayoutView *view = g_object_ref_sink (ADW_MULTI_LAYOUT_VIEW (adw_multi_layout_view_new ()));
GtkWidget *slot11 = g_object_ref_sink (adw_layout_slot_new ("slot1"));
GtkWidget *slot12 = g_object_ref_sink (adw_layout_slot_new ("slot1"));
GtkWidget *slot21 = g_object_ref_sink (adw_layout_slot_new ("slot2"));
GtkWidget *slot22 = g_object_ref_sink (adw_layout_slot_new ("slot2"));
GtkWidget *content1 = g_object_ref_sink (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0));
GtkWidget *content2 = g_object_ref_sink (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
GtkWidget *child1 = g_object_ref_sink (adw_bin_new ());
GtkWidget *child2 = g_object_ref_sink (adw_bin_new ());
AdwLayout *layout1, *layout2;
GtkWidget *window = adw_window_new ();
gtk_box_append (GTK_BOX (content1), slot11);
gtk_box_append (GTK_BOX (content1), slot21);
gtk_box_append (GTK_BOX (content2), slot12);
gtk_box_append (GTK_BOX (content2), slot22);
layout1 = adw_layout_new (content1);
layout2 = adw_layout_new (content2);
adw_window_set_content (ADW_WINDOW (window), GTK_WIDGET (view));
adw_multi_layout_view_set_child (view, "slot1", child1);
g_assert_true (adw_multi_layout_view_get_child (view, "slot1") == child1);
g_assert_null (gtk_widget_get_parent (child1));
g_assert_null (adw_multi_layout_view_get_child (view, "slot2"));
adw_multi_layout_view_add_layout (view, g_object_ref (layout1));
adw_multi_layout_view_add_layout (view, g_object_ref (layout2));
g_assert_true (gtk_widget_get_parent (child1) == slot11);
adw_multi_layout_view_set_child (view, "slot2", child2);
g_assert_true (gtk_widget_get_parent (child2) == slot21);
adw_multi_layout_view_set_layout (view, layout2);
g_assert_true (gtk_widget_get_parent (child1) == slot12);
g_assert_true (gtk_widget_get_parent (child2) == slot22);
g_assert_true (adw_multi_layout_view_get_child (view, "slot1") == child1);
g_assert_true (adw_multi_layout_view_get_child (view, "slot2") == child2);
g_assert_finalize_object (window);
g_assert_finalize_object (view);
g_assert_finalize_object (layout1);
g_assert_finalize_object (layout2);
g_assert_finalize_object (content1);
g_assert_finalize_object (content2);
g_assert_finalize_object (slot11);
g_assert_finalize_object (slot12);
g_assert_finalize_object (slot21);
g_assert_finalize_object (slot22);
}
int
main (int argc,
char *argv[])
{
gtk_test_init (&argc, &argv, NULL);
adw_init ();
g_test_add_func ("/Adwaita/MultiLayoutView/add-remove", test_adw_multi_layout_view_add_remove);
g_test_add_func ("/Adwaita/MultiLayoutView/layout", test_adw_multi_layout_view_layout);
g_test_add_func ("/Adwaita/MultiLayoutView/layout-name", test_adw_multi_layout_view_layout_name);
g_test_add_func ("/Adwaita/MultiLayoutView/children", test_adw_multi_layout_view_children);
return g_test_run ();
}
|