~ubuntu-branches/ubuntu/natty/libchamplain/natty

« back to all changes in this revision

Viewing changes to bindings/perl/Champlain/t/ChamplainSelectionLayer.t

  • Committer: Bazaar Package Importer
  • Author(s): Sjoerd Simons, Laurent Bigonville, Sjoerd Simons
  • Date: 2009-09-15 00:01:41 UTC
  • mfrom: (1.1.3 upstream) (2.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090915000141-i8fg5n1t02zxo79m
Tags: 0.4.0-1
[ Laurent Bigonville ]
* debian/control: Add libchamplain-0.3-dev dependency to
  libchamplain-gtk-0.3-dev

[ Sjoerd Simons ]
* New upstream release (0.4.0)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
use strict;
 
4
use warnings;
 
5
 
 
6
use Clutter::TestHelper tests => 76;
 
7
 
 
8
use Champlain;
 
9
use Data::Dumper;
 
10
 
 
11
exit tests();
 
12
 
 
13
sub tests {
 
14
        test_empty_multiple();
 
15
        test_empty_single();
 
16
 
 
17
        test_markers_multiple();
 
18
        test_markers_single();
 
19
 
 
20
        test_selection_mode_change();
 
21
        return 0;
 
22
}
 
23
 
 
24
 
 
25
sub test_empty_multiple {
 
26
        my $layer = Champlain::SelectionLayer->new();
 
27
        isa_ok($layer, 'Champlain::Layer');
 
28
 
 
29
        is($layer->get_selection_mode, 'multiple');
 
30
        is($layer->get('selection_mode'), 'multiple');
 
31
 
 
32
        is($layer->get_selected, undef, "[empty] get_selected()");
 
33
 
 
34
        # In single mode get_selected_markers doesn't work
 
35
        is_deeply(
 
36
                [$layer->get_selected_markers],
 
37
                [],
 
38
                "[empty] get_selected_markers()"
 
39
        );
 
40
 
 
41
        my $count = $layer->count_selected_markers;
 
42
        is($count, 0, "[empty] count_selected_markers()");
 
43
 
 
44
        my $marker = Champlain::BaseMarker->new();
 
45
        ok(!$layer->marker_is_selected($marker), "[empty] marker_is_selected()");
 
46
 
 
47
        # Can't be tested but at least they are invoked
 
48
        $layer->select($marker);
 
49
        $layer->unselect($marker);
 
50
        $layer->select_all();
 
51
        $layer->unselect_all();
 
52
 
 
53
        # Change the selection mode
 
54
        $layer->set_selection_mode('single');
 
55
        is($layer->get_selection_mode, 'single');
 
56
 
 
57
        $layer->set('selection_mode', 'multiple');
 
58
        is($layer->get('selection_mode'), 'multiple');
 
59
}
 
60
 
 
61
 
 
62
sub test_empty_single {
 
63
        my $layer = Champlain::SelectionLayer->new();
 
64
        isa_ok($layer, 'Champlain::Layer');
 
65
 
 
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');
 
71
 
 
72
        is($layer->get_selected, undef, "[empty] get_selected()");
 
73
 
 
74
        # In single mode get_selected_markers doesn't work
 
75
        is_deeply(
 
76
                [$layer->get_selected_markers],
 
77
                [],
 
78
                "[empty] get_selected_markers()"
 
79
        );
 
80
 
 
81
        my $count = $layer->count_selected_markers;
 
82
        is($count, 0, "[empty] count_selected_markers()");
 
83
 
 
84
        my $marker = Champlain::BaseMarker->new();
 
85
        ok(!$layer->marker_is_selected($marker), "[empty] marker_is_selected()");
 
86
 
 
87
        # Can't be tested but at least they are invoked
 
88
        $layer->select($marker);
 
89
        $layer->unselect($marker);
 
90
        $layer->select_all();
 
91
        $layer->unselect_all();
 
92
 
 
93
        # Change the selection mode
 
94
        $layer->set_selection_mode('multiple');
 
95
        is($layer->get_selection_mode, 'multiple');
 
96
 
 
97
        $layer->set('selection_mode', 'single');
 
98
        is($layer->get('selection_mode'), 'single');
 
99
}
 
100
 
 
101
 
 
102
sub test_markers_multiple {
 
103
        my $layer = Champlain::SelectionLayer->new();
 
104
        isa_ok($layer, 'Champlain::Layer');
 
105
 
 
106
 
 
107
        my @layer_markers = (
 
108
                Champlain::BaseMarker->new(),
 
109
                Champlain::BaseMarker->new(),
 
110
                Champlain::BaseMarker->new(),
 
111
                Champlain::BaseMarker->new(),
 
112
        );
 
113
 
 
114
        # Add the markers and select a few markers
 
115
        foreach my $marker (@layer_markers) {
 
116
                $layer->add($marker);
 
117
        }
 
118
        $layer->select($layer_markers[1]);
 
119
        $layer->select($layer_markers[3]);
 
120
 
 
121
 
 
122
        # This doesn't work in multiple mode
 
123
        is($layer->get_selected, undef, "[multiple] get_selected()");
 
124
 
 
125
 
 
126
        my @markers;
 
127
        @markers = $layer->get_selected_markers;
 
128
        is_deeply(\@markers, [$layer_markers[1], $layer_markers[3]], "[multiple] get_selected_markers()");
 
129
 
 
130
        my $count = $layer->count_selected_markers;
 
131
        is($count, 2, "[multiple] count_selected_markers()");
 
132
 
 
133
        my $marker = Champlain::BaseMarker->new();
 
134
 
 
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");
 
141
 
 
142
 
 
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");
 
148
        is_deeply(
 
149
                [ $layer->get_selected_markers ],
 
150
                [$layer_markers[1], $layer_markers[3], $marker],
 
151
                "[multiple] get_selected_markers()"
 
152
        );
 
153
 
 
154
 
 
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");
 
160
        is_deeply(
 
161
                [ $layer->get_selected_markers ],
 
162
                [$layer_markers[1], $layer_markers[3], $marker],
 
163
                "[multiple] get_selected_markers()"
 
164
        );
 
165
 
 
166
        # Remove a marker
 
167
        $layer->unselect($layer_markers[1]);
 
168
        $count = $layer->count_selected_markers;
 
169
        is($count, 2, "[multiple] count_selected_markers() after unselect()");
 
170
        is_deeply(
 
171
                [ $layer->get_selected_markers ],
 
172
                [$layer_markers[3], $marker],
 
173
                "[multiple] get_selected_markers()"
 
174
        );
 
175
 
 
176
        # Remove all markers
 
177
        $layer->unselect_all();
 
178
        $count = $layer->count_selected_markers;
 
179
        is($count, 0, "[multiple] count_selected_markers() after count_selected_markers()");
 
180
        is_deeply(
 
181
                [ $layer->get_selected_markers ],
 
182
                [],
 
183
                "[multiple] get_selected_markers()"
 
184
        );
 
185
 
 
186
 
 
187
        # Select all markers
 
188
        $layer->select_all();
 
189
        $count = $layer->count_selected_markers;
 
190
        is($count, 4, "[multiple] select_all()");
 
191
 
 
192
        $layer->select_all();
 
193
        $count = $layer->count_selected_markers;
 
194
        is($count, 4, "[multiple] select_all()");
 
195
}
 
196
 
 
197
 
 
198
sub test_markers_single {
 
199
        my $layer = Champlain::SelectionLayer->new();
 
200
        isa_ok($layer, 'Champlain::Layer');
 
201
        $layer->set_selection_mode('single');
 
202
 
 
203
 
 
204
        my @layer_markers = (
 
205
                Champlain::BaseMarker->new(),
 
206
                Champlain::BaseMarker->new(),
 
207
                Champlain::BaseMarker->new(),
 
208
                Champlain::BaseMarker->new(),
 
209
        );
 
210
 
 
211
        # Add the markers
 
212
        foreach my $marker (@layer_markers) {
 
213
                $layer->add($marker);
 
214
        }
 
215
 
 
216
        is($layer->count_selected_markers, 0, "[single] count_selected_markers() empty");
 
217
 
 
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");
 
222
 
 
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");
 
228
 
 
229
        is($layer->count_selected_markers, 1, "[single] count_selected_markers()");
 
230
 
 
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");
 
234
 
 
235
        is_deeply(
 
236
                [ $layer->get_selected_markers ],
 
237
                [$layer_markers[3]],
 
238
                "[single] get_selected_markers()"
 
239
        );
 
240
}
 
241
 
 
242
 
 
243
sub test_selection_mode_change {
 
244
        my $layer = Champlain::SelectionLayer->new();
 
245
        isa_ok($layer, 'Champlain::Layer');
 
246
 
 
247
        my $notify = 0;
 
248
        $layer->signal_connect('notify::selection-mode', sub {
 
249
                ++$notify;
 
250
        });
 
251
 
 
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');
 
258
 
 
259
 
 
260
        my @markers = (
 
261
                Champlain::BaseMarker->new(),
 
262
                Champlain::BaseMarker->new(),
 
263
                Champlain::BaseMarker->new(),
 
264
        );
 
265
 
 
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);
 
271
        
 
272
 
 
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);
 
278
 
 
279
 
 
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);
 
285
 
 
286
        
 
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);
 
291
        
 
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);
 
299
        
 
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);
 
307
}