6
use Clutter::TestHelper tests => 76;
14
test_empty_multiple();
17
test_markers_multiple();
18
test_markers_single();
20
test_selection_mode_change();
25
sub test_empty_multiple {
26
my $layer = Champlain::SelectionLayer->new();
27
isa_ok($layer, 'Champlain::Layer');
29
is($layer->get_selection_mode, 'multiple');
30
is($layer->get('selection_mode'), 'multiple');
32
is($layer->get_selected, undef, "[empty] get_selected()");
34
# In single mode get_selected_markers doesn't work
36
[$layer->get_selected_markers],
38
"[empty] get_selected_markers()"
41
my $count = $layer->count_selected_markers;
42
is($count, 0, "[empty] count_selected_markers()");
44
my $marker = Champlain::BaseMarker->new();
45
ok(!$layer->marker_is_selected($marker), "[empty] marker_is_selected()");
47
# Can't be tested but at least they are invoked
48
$layer->select($marker);
49
$layer->unselect($marker);
51
$layer->unselect_all();
53
# Change the selection mode
54
$layer->set_selection_mode('single');
55
is($layer->get_selection_mode, 'single');
57
$layer->set('selection_mode', 'multiple');
58
is($layer->get('selection_mode'), 'multiple');
62
sub test_empty_single {
63
my $layer = Champlain::SelectionLayer->new();
64
isa_ok($layer, 'Champlain::Layer');
66
is($layer->get_selection_mode, 'multiple');
67
is($layer->get('selection_mode'), 'multiple');
68
$layer->set_selection_mode('single');
69
is($layer->get_selection_mode, 'single');
70
is($layer->get('selection_mode'), 'single');
72
is($layer->get_selected, undef, "[empty] get_selected()");
74
# In single mode get_selected_markers doesn't work
76
[$layer->get_selected_markers],
78
"[empty] get_selected_markers()"
81
my $count = $layer->count_selected_markers;
82
is($count, 0, "[empty] count_selected_markers()");
84
my $marker = Champlain::BaseMarker->new();
85
ok(!$layer->marker_is_selected($marker), "[empty] marker_is_selected()");
87
# Can't be tested but at least they are invoked
88
$layer->select($marker);
89
$layer->unselect($marker);
91
$layer->unselect_all();
93
# Change the selection mode
94
$layer->set_selection_mode('multiple');
95
is($layer->get_selection_mode, 'multiple');
97
$layer->set('selection_mode', 'single');
98
is($layer->get('selection_mode'), 'single');
102
sub test_markers_multiple {
103
my $layer = Champlain::SelectionLayer->new();
104
isa_ok($layer, 'Champlain::Layer');
107
my @layer_markers = (
108
Champlain::BaseMarker->new(),
109
Champlain::BaseMarker->new(),
110
Champlain::BaseMarker->new(),
111
Champlain::BaseMarker->new(),
114
# Add the markers and select a few markers
115
foreach my $marker (@layer_markers) {
116
$layer->add($marker);
118
$layer->select($layer_markers[1]);
119
$layer->select($layer_markers[3]);
122
# This doesn't work in multiple mode
123
is($layer->get_selected, undef, "[multiple] get_selected()");
127
@markers = $layer->get_selected_markers;
128
is_deeply(\@markers, [$layer_markers[1], $layer_markers[3]], "[multiple] get_selected_markers()");
130
my $count = $layer->count_selected_markers;
131
is($count, 2, "[multiple] count_selected_markers()");
133
my $marker = Champlain::BaseMarker->new();
135
# Check wich markers are selected
136
ok(!$layer->marker_is_selected($marker), "[multiple] marker_is_selected() maker not in set");
137
ok(!$layer->marker_is_selected($layer_markers[0]), "[multiple] marker_is_selected() maker not selected");
138
ok(!$layer->marker_is_selected($layer_markers[2]), "[multiple] marker_is_selected() maker not selected");
139
ok($layer->marker_is_selected($layer_markers[1]), "[multiple] marker_is_selected() selected");
140
ok($layer->marker_is_selected($layer_markers[3]), "[multiple] marker_is_selected() selected");
143
# Select a new marker
144
$layer->select($marker);
145
ok($layer->marker_is_selected($marker), "[multiple] select() maker not in set");
146
$count = $layer->count_selected_markers;
147
is($count, 3, "[multiple] count_selected_markers() with a new marker");
149
[ $layer->get_selected_markers ],
150
[$layer_markers[1], $layer_markers[3], $marker],
151
"[multiple] get_selected_markers()"
155
# Select again one of the selected markers, should still be selected
156
$layer->select($marker);
157
ok($layer->marker_is_selected($marker), "[multiple] select() an already selected marker");
158
$count = $layer->count_selected_markers;
159
is($count, 3, "[multiple] count_selected_markers() with an already selected marker");
161
[ $layer->get_selected_markers ],
162
[$layer_markers[1], $layer_markers[3], $marker],
163
"[multiple] get_selected_markers()"
167
$layer->unselect($layer_markers[1]);
168
$count = $layer->count_selected_markers;
169
is($count, 2, "[multiple] count_selected_markers() after unselect()");
171
[ $layer->get_selected_markers ],
172
[$layer_markers[3], $marker],
173
"[multiple] get_selected_markers()"
177
$layer->unselect_all();
178
$count = $layer->count_selected_markers;
179
is($count, 0, "[multiple] count_selected_markers() after count_selected_markers()");
181
[ $layer->get_selected_markers ],
183
"[multiple] get_selected_markers()"
188
$layer->select_all();
189
$count = $layer->count_selected_markers;
190
is($count, 4, "[multiple] select_all()");
192
$layer->select_all();
193
$count = $layer->count_selected_markers;
194
is($count, 4, "[multiple] select_all()");
198
sub test_markers_single {
199
my $layer = Champlain::SelectionLayer->new();
200
isa_ok($layer, 'Champlain::Layer');
201
$layer->set_selection_mode('single');
204
my @layer_markers = (
205
Champlain::BaseMarker->new(),
206
Champlain::BaseMarker->new(),
207
Champlain::BaseMarker->new(),
208
Champlain::BaseMarker->new(),
212
foreach my $marker (@layer_markers) {
213
$layer->add($marker);
216
is($layer->count_selected_markers, 0, "[single] count_selected_markers() empty");
218
# Select the first marker
219
$layer->select($layer_markers[1]);
220
is($layer->get_selected, $layer_markers[1], "[single] get_selected()");
221
ok($layer->marker_is_selected($layer_markers[1]), "[single] marker_is_selected() selected");
223
# Select another marker
224
$layer->select($layer_markers[3]);
225
is($layer->get_selected, $layer_markers[3], "[single] get_selected() after change");
226
ok(!$layer->marker_is_selected($layer_markers[1]), "[single] marker_is_selected() selected");
227
ok($layer->marker_is_selected($layer_markers[3]), "[single] marker_is_selected() selected");
229
is($layer->count_selected_markers, 1, "[single] count_selected_markers()");
231
# Reselect the marker once more
232
$layer->select($layer_markers[3]);
233
is($layer->get_selected, $layer_markers[3], "[single] reselected the selected marker");
236
[ $layer->get_selected_markers ],
238
"[single] get_selected_markers()"
243
sub test_selection_mode_change {
244
my $layer = Champlain::SelectionLayer->new();
245
isa_ok($layer, 'Champlain::Layer');
248
$layer->signal_connect('notify::selection-mode', sub {
252
is($layer->get_selection_mode, 'multiple');
253
is($layer->get('selection_mode'), 'multiple');
254
$layer->set_selection_mode('single');
255
is($notify, 1, "signal notify::selection-mode emitted");
256
is($layer->get_selection_mode, 'single');
257
is($layer->get('selection_mode'), 'single');
261
Champlain::BaseMarker->new(),
262
Champlain::BaseMarker->new(),
263
Champlain::BaseMarker->new(),
266
# We're now in single mode, lets add a marker and select it
267
my $marker = Champlain::BaseMarker->new();
268
$layer->select($markers[1]);
269
ok($layer->marker_is_selected($markers[1]));
270
is($layer->count_selected_markers, 1);
273
# Change the selection mode to multiple, the marker is still selected
274
$layer->set_selection_mode('multiple');
275
is($notify, 2, "signal notify::selection-mode emitted");
276
ok($layer->marker_is_selected($markers[1]));
277
is($layer->count_selected_markers, 1);
280
# Go back to single selection mode, the marker is no longer selected
281
$layer->set_selection_mode('single');
282
is($notify, 3, "signal notify::selection-mode emitted");
283
ok(!$layer->marker_is_selected($markers[1]));
284
is($layer->count_selected_markers, 0);
287
# Once more to mutiple selection mode
288
$layer->set_selection_mode('multiple');
289
is($notify, 4, "signal notify::selection-mode emitted");
290
is($layer->count_selected_markers, 0);
292
# Select a few markers
293
$layer->select($markers[0]);
294
$layer->select($markers[2]);
295
ok($layer->marker_is_selected($markers[0]));
296
ok(!$layer->marker_is_selected($markers[1]));
297
ok($layer->marker_is_selected($markers[2]));
298
is($layer->count_selected_markers, 2);
300
# Switch to single mode (the markers should be unselected
301
$layer->set_selection_mode('single');
302
is($notify, 5, "signal notify::selection-mode emitted");
303
ok(!$layer->marker_is_selected($markers[0]));
304
ok(!$layer->marker_is_selected($markers[1]));
305
ok(!$layer->marker_is_selected($markers[2]));
306
is($layer->count_selected_markers, 0);