~ubuntu-branches/debian/sid/gscan2pdf/sid

« back to all changes in this revision

Viewing changes to t/0611_Dialog_Scan_Sane.t

  • Committer: Package Import Robot
  • Author(s): Jeffrey Ratcliffe
  • Date: 2014-05-17 13:59:19 UTC
  • mfrom: (1.3.15)
  • Revision ID: package-import@ubuntu.com-20140517135919-dtqedyizchmd7mx1
Tags: 1.2.5-1
New upstream release
Closes: #742233 (wrong resolution)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
use warnings;
 
2
use strict;
 
3
use Test::More tests => 45;
 
4
use Glib qw(TRUE FALSE);    # To get TRUE and FALSE
 
5
use Gtk2 -init;             # Could just call init separately
 
6
use Sane 0.05;              # To get SANE_* enums
 
7
 
 
8
BEGIN {
 
9
 use_ok('Gscan2pdf::Dialog::Scan::Sane');
 
10
}
 
11
 
 
12
#########################
 
13
 
 
14
my $window = Gtk2::Window->new;
 
15
 
 
16
Glib::set_application_name('gscan2pdf');
 
17
use Log::Log4perl qw(:easy);
 
18
Log::Log4perl->easy_init($WARN);
 
19
my $logger = Log::Log4perl::get_logger;
 
20
Gscan2pdf::Frontend::Sane->setup($logger);
 
21
 
 
22
ok(
 
23
 my $dialog = Gscan2pdf::Dialog::Scan::Sane->new(
 
24
  title           => 'title',
 
25
  'transient-for' => $window,
 
26
  'logger'        => $logger
 
27
 ),
 
28
 'Created dialog'
 
29
);
 
30
isa_ok( $dialog, 'Gscan2pdf::Dialog::Scan::Sane' );
 
31
 
 
32
is( $dialog->get('device'),                '',       'device' );
 
33
is( $dialog->get('device-list'),           undef,    'device-list' );
 
34
is( $dialog->get('dir'),                   undef,    'dir' );
 
35
is( $dialog->get('num-pages'),             1,        'num-pages' );
 
36
is( $dialog->get('max-pages'),             0,        'max-pages' );
 
37
is( $dialog->get('page-number-start'),     1,        'page-number-start' );
 
38
is( $dialog->get('page-number-increment'), 1,        'page-number-increment' );
 
39
is( $dialog->get('side-to-scan'),          'facing', 'side-to-scan' );
 
40
is( $dialog->get('available-scan-options'), undef, 'available-scan-options' );
 
41
 
 
42
$dialog->{signal} = $dialog->signal_connect(
 
43
 'changed-num-pages' => sub {
 
44
  my ( $widget, $n, $signal ) = @_;
 
45
  $dialog->signal_handler_disconnect( $dialog->{signal} );
 
46
  is( $n, 0, 'changed-num-pages' );
 
47
 }
 
48
);
 
49
$dialog->set( 'num-pages', 0 );
 
50
 
 
51
$dialog->{signal} = $dialog->signal_connect(
 
52
 'changed-page-number-start' => sub {
 
53
  my ( $widget, $n ) = @_;
 
54
  $dialog->signal_handler_disconnect( $dialog->{signal} );
 
55
  is( $n, 2, 'changed-page-number-start' );
 
56
 }
 
57
);
 
58
$dialog->set( 'page-number-start', 2 );
 
59
 
 
60
$dialog->{signal} = $dialog->signal_connect(
 
61
 'changed-page-number-increment' => sub {
 
62
  my ( $widget, $n ) = @_;
 
63
  $dialog->signal_handler_disconnect( $dialog->{signal} );
 
64
  is( $n, 2, 'changed-page-number-increment' );
 
65
 
 
66
  $dialog->{signal} = $dialog->signal_connect(
 
67
   'changed-side-to-scan' => sub {
 
68
    my ( $widget, $side ) = @_;
 
69
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
70
    is( $side, 'reverse', 'changed-side-to-scan' );
 
71
    is( $dialog->get('page-number-increment'),
 
72
     -2, 'reverse side gives increment -2' );
 
73
   }
 
74
  );
 
75
  $dialog->set( 'side-to-scan', 'reverse' );
 
76
 
 
77
 }
 
78
);
 
79
$dialog->set( 'page-number-increment', 2 );
 
80
 
 
81
$dialog->{reloaded_signal} = $dialog->signal_connect(
 
82
 'reloaded-scan-options' => sub {
 
83
  $dialog->signal_handler_disconnect( $dialog->{reloaded_signal} );
 
84
  ok( 1, 'reloaded-scan-options' );
 
85
 
 
86
  # So that it can be used in hash
 
87
  my $resolution = SANE_NAME_SCAN_RESOLUTION;
 
88
 
 
89
  $dialog->{signal} = $dialog->signal_connect(
 
90
   'added-profile' => sub {
 
91
    my ( $widget, $name, $profile ) = @_;
 
92
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
93
    is( $name, 'my profile', 'added-profile name' );
 
94
    is_deeply(
 
95
     $profile,
 
96
     [ { $resolution => 52 }, { mode => 'Color' } ],
 
97
     'added-profile profile'
 
98
    );
 
99
   }
 
100
  );
 
101
  $dialog->add_profile( 'my profile',
 
102
   [ { $resolution => 52 }, { mode => 'Color' } ] );
 
103
 
 
104
  ######################################
 
105
 
 
106
  $dialog->{signal} = $dialog->signal_connect(
 
107
   'added-profile' => sub {
 
108
    my ( $widget, $name, $profile ) = @_;
 
109
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
110
    is( $name, 'old profile', 'added-profile old name' );
 
111
    is_deeply(
 
112
     $profile,
 
113
     [ { mode => 'Gray' }, { $resolution => 51 } ],
 
114
     'added-profile profile as hash'
 
115
    );
 
116
   }
 
117
  );
 
118
  $dialog->add_profile( 'old profile', { $resolution => 51, mode => 'Gray' } );
 
119
 
 
120
  ######################################
 
121
 
 
122
  $dialog->signal_connect(
 
123
   'removed-profile' => sub {
 
124
    my ( $widget, $profile ) = @_;
 
125
    is( $profile, 'old profile', 'removed-profile' );
 
126
   }
 
127
  );
 
128
  $dialog->remove_profile('old profile');
 
129
 
 
130
  ######################################
 
131
 
 
132
  # need a new main loop because of the timeout
 
133
  my $loop = Glib::MainLoop->new;
 
134
  my $flag = FALSE;
 
135
  $dialog->{signal} = $dialog->signal_connect(
 
136
   'changed-profile' => sub {
 
137
    my ( $widget, $profile ) = @_;
 
138
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
139
    is( $profile, 'my profile', 'changed-profile' );
 
140
    is_deeply(
 
141
     $dialog->get('current-scan-options'),
 
142
     [ { $resolution => 52 }, { mode => 'Color' } ],
 
143
     'current-scan-options with profile'
 
144
    );
 
145
    $flag = TRUE;
 
146
    $loop->quit;
 
147
   }
 
148
  );
 
149
  $dialog->set( 'profile', 'my profile' );
 
150
  $loop->run unless ($flag);
 
151
 
 
152
  ######################################
 
153
 
 
154
  $dialog->add_profile( 'my profile2',
 
155
   [ { $resolution => 52 }, { mode => 'Color' } ] );
 
156
 
 
157
  # need a new main loop because of the timeout
 
158
  $loop             = Glib::MainLoop->new;
 
159
  $flag             = FALSE;
 
160
  $dialog->{signal} = $dialog->signal_connect(
 
161
   'changed-profile' => sub {
 
162
    my ( $widget, $profile ) = @_;
 
163
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
164
    is( $profile, 'my profile2', 'set profile with identical options' );
 
165
    $flag = TRUE;
 
166
    $loop->quit;
 
167
   }
 
168
  );
 
169
  $dialog->set( 'profile', 'my profile2' );
 
170
  $loop->run unless ($flag);
 
171
 
 
172
  ######################################
 
173
 
 
174
  # need a new main loop because of the timeout
 
175
  $loop             = Glib::MainLoop->new;
 
176
  $flag             = FALSE;
 
177
  $dialog->{signal} = $dialog->signal_connect(
 
178
   'changed-scan-option' => sub {
 
179
    my ( $widget, $option, $value ) = @_;
 
180
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
181
    is( $dialog->get('profile'),
 
182
     undef, 'changing an option deselects the current profile' );
 
183
    is_deeply(
 
184
     $dialog->get('current-scan-options'),
 
185
     [ { mode => 'Color' }, { $resolution => 51 } ],
 
186
     'current-scan-options without profile'
 
187
    );
 
188
    $flag = TRUE;
 
189
    $loop->quit;
 
190
   }
 
191
  );
 
192
  my $options = $dialog->get('available-scan-options');
 
193
  $dialog->set_option( $options->by_name($resolution), 51 );
 
194
  $loop->run unless ($flag);
 
195
  my @geometry_widgets = keys %{ $options->{box} };
 
196
  cmp_ok(
 
197
   $#geometry_widgets == 3,
 
198
   '||',
 
199
   $#geometry_widgets == 5,
 
200
   'Only 4 or 6 options should be flagged as geometry'
 
201
  );
 
202
 
 
203
  ######################################
 
204
 
 
205
  # need a new main loop because of the timeout
 
206
  $loop = Glib::MainLoop->new;
 
207
  $flag = FALSE;
 
208
 
 
209
  # Reset profile for next test
 
210
  $dialog->{signal} = $dialog->signal_connect(
 
211
   'changed-profile' => sub {
 
212
    my ( $widget, $profile ) = @_;
 
213
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
214
    is( $profile, 'my profile', 'reset profile' );
 
215
    $flag = TRUE;
 
216
    $loop->quit;
 
217
   }
 
218
  );
 
219
  $dialog->set( 'profile', 'my profile' );
 
220
  $loop->run unless ($flag);
 
221
 
 
222
  ######################################
 
223
 
 
224
  # need a new main loop because of the timeout
 
225
  $loop             = Glib::MainLoop->new;
 
226
  $flag             = FALSE;
 
227
  $dialog->{signal} = $dialog->signal_connect(
 
228
   'changed-profile' => sub {
 
229
    my ( $widget, $profile ) = @_;
 
230
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
231
    is( $profile, undef,
 
232
     'changing an option fires the changed-profile signal if a profile is set'
 
233
    );
 
234
    is_deeply(
 
235
     $dialog->get('current-scan-options'),
 
236
     [ { mode => 'Color' }, { $resolution => 51 } ],
 
237
     'current-scan-options without profile (again)'
 
238
    );
 
239
    my $reloaded_options = $dialog->get('available-scan-options');
 
240
    is( $reloaded_options->by_name($resolution)->{val},
 
241
     51, 'option value updated when reloaded' );
 
242
    $flag = TRUE;
 
243
    $loop->quit;
 
244
   }
 
245
  );
 
246
  $options = $dialog->get('available-scan-options');
 
247
  $dialog->set_option( $options->by_name($resolution), 51 );
 
248
  $loop->run unless ($flag);
 
249
 
 
250
  ######################################
 
251
 
 
252
  $dialog->set(
 
253
   'paper-formats',
 
254
   {
 
255
    new => {
 
256
     l => 1,
 
257
     y => 50,
 
258
     x => 50,
 
259
     t => 2,
 
260
    }
 
261
   }
 
262
  );
 
263
 
 
264
  $dialog->add_profile( 'cli geometry',
 
265
   [ { 'Paper size' => 'new' }, { $resolution => 50 } ] );
 
266
 
 
267
  # need a new main loop because of the timeout
 
268
  $loop             = Glib::MainLoop->new;
 
269
  $flag             = FALSE;
 
270
  $dialog->{signal} = $dialog->signal_connect(
 
271
   'changed-profile' => sub {
 
272
    my ( $widget, $profile ) = @_;
 
273
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
274
    my $options = $dialog->get('available-scan-options');
 
275
    my $expected = [ { 'Paper size' => 'new' } ];
 
276
    push @$expected, { scalar(SANE_NAME_PAGE_HEIGHT) => 52 }
 
277
      if ( defined $options->by_name(SANE_NAME_PAGE_HEIGHT) );
 
278
    push @$expected, { scalar(SANE_NAME_PAGE_WIDTH) => 51 }
 
279
      if ( defined $options->by_name(SANE_NAME_PAGE_WIDTH) );
 
280
    push @$expected, { scalar(SANE_NAME_SCAN_TL_X) => 1 },
 
281
      { scalar(SANE_NAME_SCAN_TL_Y) => 2 },
 
282
      { scalar(SANE_NAME_SCAN_BR_X) => 51 },
 
283
      { scalar(SANE_NAME_SCAN_BR_Y) => 52 },
 
284
      { $resolution                 => 50 };
 
285
    is_deeply( $dialog->get('current-scan-options'),
 
286
     $expected, 'CLI geometry option names' );
 
287
    $flag = TRUE;
 
288
    $loop->quit;
 
289
   }
 
290
  );
 
291
  $dialog->set( 'profile', 'cli geometry' );
 
292
  $loop->run unless ($flag);
 
293
 
 
294
  ######################################
 
295
 
 
296
  $dialog->signal_connect(
 
297
   'changed-paper-formats' => sub {
 
298
    my ( $widget, $formats ) = @_;
 
299
    ok( 1, 'changed-paper-formats' );
 
300
   }
 
301
  );
 
302
  $dialog->set(
 
303
   'paper-formats',
 
304
   {
 
305
    new2 => {
 
306
     l => 0,
 
307
     y => 10,
 
308
     x => 10,
 
309
     t => 0,
 
310
    }
 
311
   }
 
312
  );
 
313
 
 
314
  $dialog->signal_connect(
 
315
   'changed-paper' => sub {
 
316
    my ( $widget, $paper ) = @_;
 
317
    is( $paper, 'new2', 'changed-paper' );
 
318
   }
 
319
  );
 
320
  $dialog->set( 'paper', 'new2' );
 
321
 
 
322
  my $s_signal;
 
323
  $s_signal = $dialog->signal_connect(
 
324
   'started-process' => sub {
 
325
    $dialog->signal_handler_disconnect($s_signal);
 
326
    ok( 1, 'started-process' );
 
327
   }
 
328
  );
 
329
  my $c_signal;
 
330
  $c_signal = $dialog->signal_connect(
 
331
   'changed-progress' => sub {
 
332
    $dialog->signal_handler_disconnect($c_signal);
 
333
    ok( 1, 'changed-progress' );
 
334
   }
 
335
  );
 
336
  my $f_signal;
 
337
  $f_signal = $dialog->signal_connect(
 
338
   'finished-process' => sub {
 
339
    my ( $widget, $process ) = @_;
 
340
    $dialog->signal_handler_disconnect($f_signal);
 
341
    is( $process, 'set_option', 'finished-process set_option' );
 
342
   }
 
343
  );
 
344
  my $n;
 
345
  $dialog->signal_connect(
 
346
   'new-scan' => sub {
 
347
    ( my $widget, $n ) = @_;
 
348
   }
 
349
  );
 
350
  $dialog->signal_connect(
 
351
   'finished-process' => sub {
 
352
    my ( $widget, $process ) = @_;
 
353
    if ( $process eq 'scan_pages' ) {
 
354
     is( $n, 1, 'new-scan emitted once' );
 
355
 
 
356
     # changing device via the combobox should really change the device!
 
357
     $dialog->{signal} = $dialog->signal_connect(
 
358
      'changed-device' => sub {
 
359
       my ( $widget, $name ) = @_;
 
360
       $dialog->signal_handler_disconnect( $dialog->{signal} );
 
361
       is( $name, 'test:1', 'changed-device via combobox' );
 
362
 
 
363
       my $e_signal;
 
364
       $e_signal = $dialog->signal_connect(
 
365
        'process-error' => sub {
 
366
         my ( $widget, $process, $message ) = @_;
 
367
         $dialog->signal_handler_disconnect($e_signal);
 
368
         is( $process, 'open_device', 'caught error opening device' );
 
369
         Gtk2->main_quit;
 
370
        }
 
371
       );
 
372
 
 
373
       # setting an unknown device should throw an error
 
374
       $dialog->set( 'device', 'error' );
 
375
 
 
376
      }
 
377
     );
 
378
     $dialog->{combobd}->set_active(1);
 
379
    }
 
380
   }
 
381
  );
 
382
  $dialog->set( 'num-pages',         1 );
 
383
  $dialog->set( 'page-number-start', 1 );
 
384
  $dialog->set( 'side-to-scan',      'facing' );
 
385
  $dialog->scan;
 
386
 }
 
387
);
 
388
$dialog->{signal} = $dialog->signal_connect(
 
389
 'changed-device-list' => sub {
 
390
  $dialog->signal_handler_disconnect( $dialog->{signal} );
 
391
  ok( 1, 'changed-device-list' );
 
392
 
 
393
  is_deeply(
 
394
   $dialog->get('device-list'),
 
395
   [
 
396
    { 'name' => 'test:0', 'model' => 'test:0', 'label' => 'test:0' },
 
397
    { 'name' => 'test:1', 'model' => 'test:1', 'label' => 'test:1' }
 
398
   ],
 
399
   'add model field if missing'
 
400
  );
 
401
 
 
402
  $dialog->{signal} = $dialog->signal_connect(
 
403
   'changed-device' => sub {
 
404
    my ( $widget, $name ) = @_;
 
405
    $dialog->signal_handler_disconnect( $dialog->{signal} );
 
406
    is( $name, 'test:0', 'changed-device' );
 
407
   }
 
408
  );
 
409
  $dialog->set( 'device', 'test:0' );
 
410
 }
 
411
);
 
412
$dialog->set( 'device-list',
 
413
 [ { 'name' => 'test:0' }, { 'name' => 'test:1' } ] );
 
414
Gtk2->main;
 
415
 
 
416
Gscan2pdf::Frontend::Sane->quit;
 
417
__END__