1 | #include <gtk/gtk.h> |
2 | |
3 | static int value_changed_count; |
4 | |
5 | static void |
6 | value_changed_cb (GtkSpinButton *spin) |
7 | { |
8 | value_changed_count++; |
9 | } |
10 | |
11 | static void |
12 | test_value_changed (void) |
13 | { |
14 | GtkWidget *spin; |
15 | GtkAdjustment *adj; |
16 | |
17 | spin = gtk_spin_button_new_with_range (min: 0.0, max: 10.0, step: 1.0); |
18 | |
19 | g_signal_connect (spin, "value-changed" , G_CALLBACK (value_changed_cb), NULL); |
20 | |
21 | value_changed_count = 0; |
22 | gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), value: 1.0); |
23 | g_assert_cmpint (value_changed_count, ==, 1); |
24 | gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), value: 2.0); |
25 | g_assert_cmpint (value_changed_count, ==, 2); |
26 | gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin), value: 2.0); |
27 | g_assert_cmpint (value_changed_count, ==, 2); |
28 | |
29 | gtk_spin_button_spin (GTK_SPIN_BUTTON (spin), direction: GTK_SPIN_STEP_FORWARD, increment: 0.5); |
30 | g_assert_cmpint (value_changed_count, ==, 3); |
31 | |
32 | gtk_spin_button_configure (GTK_SPIN_BUTTON (spin), NULL, climb_rate: 1.0, digits: 0); |
33 | g_assert_cmpint (value_changed_count, ==, 4); |
34 | |
35 | adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); |
36 | gtk_adjustment_set_value (adjustment: adj, value: 0.0); |
37 | g_assert_cmpint (value_changed_count, ==, 5); |
38 | } |
39 | |
40 | static int adjustment_changed_count; |
41 | |
42 | static void |
43 | adjustment_changed_cb (GObject *object, GParamSpec *pspec) |
44 | { |
45 | adjustment_changed_count++; |
46 | } |
47 | |
48 | static void |
49 | test_adjustment_changed (void) |
50 | { |
51 | GtkWidget *spin; |
52 | GtkAdjustment *adj; |
53 | |
54 | spin = gtk_spin_button_new_with_range (min: 0.0, max: 10.0, step: 1.0); |
55 | |
56 | g_signal_connect (spin, "notify::adjustment" , G_CALLBACK (adjustment_changed_cb), NULL); |
57 | |
58 | adjustment_changed_count = 0; |
59 | adj = gtk_adjustment_new (value: 50.0, lower: 0.0, upper: 100.0, step_increment: 1.0, page_increment: 1.0, page_size: 0.0); |
60 | gtk_spin_button_configure (GTK_SPIN_BUTTON (spin), adjustment: adj, climb_rate: 1.0, digits: 0); |
61 | g_assert_cmpint (adjustment_changed_count, ==, 1); |
62 | |
63 | adj = gtk_adjustment_new (value: 51.0, lower: 1.0, upper: 101.0, step_increment: 1.0, page_increment: 1.0, page_size: 0.0); |
64 | gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (spin), adjustment: adj); |
65 | g_assert_cmpint (adjustment_changed_count, ==, 2); |
66 | |
67 | gtk_spin_button_set_range (GTK_SPIN_BUTTON (spin), min: 2.0, max: 102.0); |
68 | g_assert_cmpint (adjustment_changed_count, ==, 2); |
69 | } |
70 | |
71 | static void |
72 | test_adjustment_null (void) |
73 | { |
74 | GtkWidget *spin; |
75 | GtkAdjustment *adj; |
76 | |
77 | spin = gtk_spin_button_new_with_range (min: 0.0, max: 10.0, step: 1.0); |
78 | |
79 | adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); |
80 | gtk_spin_button_configure (GTK_SPIN_BUTTON (spin), NULL, climb_rate: 1.0, digits: 0); |
81 | g_assert_true (adj == gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin))); |
82 | |
83 | gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (spin), NULL); |
84 | adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spin)); |
85 | g_assert_cmpfloat (gtk_adjustment_get_lower (adj), ==, 0.0); |
86 | g_assert_cmpfloat (gtk_adjustment_get_value (adj), ==, 0.0); |
87 | g_assert_cmpfloat (gtk_adjustment_get_upper (adj), ==, 0.0); |
88 | } |
89 | |
90 | int |
91 | main (int argc, char *argv[]) |
92 | { |
93 | gtk_test_init (argcp: &argc, argvp: &argv); |
94 | |
95 | g_test_add_func (testpath: "/spinbutton/value-changed" , test_func: test_value_changed); |
96 | g_test_add_func (testpath: "/spinbutton/adjustment-changed" , test_func: test_adjustment_changed); |
97 | g_test_add_func (testpath: "/spinbutton/adjustment-null" , test_func: test_adjustment_null); |
98 | |
99 | return g_test_run (); |
100 | } |
101 | |