1#!/usr/bin/perl -wT
2
3use strict;
4use Test::More tests => 773;
5use_ok('Data::Page');
6
7my $name;
8
9foreach my $line (<DATA>) {
10  chomp $line;
11  next unless $line;
12
13  if ($line =~ /^# ?(.+)/) {
14    $name = $1;
15    next;
16  }
17
18  print "Line is: $line\n";
19  my @vals = map { /^undef$/ ? undef : /^''$/ ? '' : $_ } split /\s+/, $line;
20
21  my $page = Data::Page->new(@vals[ 0, 1, 2 ]);
22  print "Old style\n";
23  check($page, $name, @vals);
24
25  $page = Data::Page->new();
26  $page->total_entries($vals[0]);
27  $page->entries_per_page($vals[1]);
28  $page->current_page($vals[2]);
29  print "New style\n";
30  check($page, $name, @vals);
31}
32
33my $page = Data::Page->new(0, 10);
34isa_ok($page, 'Data::Page');
35my @empty;
36my @spliced = $page->splice(\@empty);
37is(scalar(@spliced), 0, "Splice on empty is empty");
38
39sub check {
40  my ($page, $name, @vals) = @_;
41  isa_ok($page, 'Data::Page');
42
43  is($page->first_page,    $vals[3], "$name: first page");
44  is($page->last_page,     $vals[4], "$name: last page");
45  is($page->first,         $vals[5], "$name: first");
46  is($page->last,          $vals[6], "$name: last");
47  is($page->previous_page, $vals[7], "$name: previous_page");
48  is($page->current_page,  $vals[8], "$name: current_page");
49  is($page->next_page,     $vals[9], "$name: next_page");
50
51  my @integers = (0 .. $vals[0] - 1);
52  @integers = $page->splice(\@integers);
53  my $integers = join ',', @integers;
54  is($integers, $vals[10], "$name: splice");
55  is($page->entries_on_this_page, $vals[11], "$name: entries_on_this_page");
56
57  my $skipped = $vals[5] - 1;
58  $skipped = 0 if $skipped < 0;
59  is($page->skipped, $skipped, "$name: skipped");
60}
61
62# Format of test data: 0=number of entries, 1=entries per page, 2=current page,
63# 3=first page, 4=last page, 5=first entry on page, 6=last entry on page,
64# 7=previous page, 8=current page, 9=next page, 10=current entries, 11=current number of entries
65
66__DATA__
67# Initial test
6850 10 1    1 5 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10
6950 10 2    1 5 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19     10
7050 10 3    1 5 21 30 2 3 4 20,21,22,23,24,25,26,27,28,29     10
7150 10 4    1 5 31 40 3 4 5 30,31,32,33,34,35,36,37,38,39     10
7250 10 5    1 5 41 50 4 5 undef 40,41,42,43,44,45,46,47,48,49 10
73
74# Under 10
751 10 1    1 1 1 1 undef 1 undef 0                     1
762 10 1    1 1 1 2 undef 1 undef 0,1                   2
773 10 1    1 1 1 3 undef 1 undef 0,1,2                 3
784 10 1    1 1 1 4 undef 1 undef 0,1,2,3               4
795 10 1    1 1 1 5 undef 1 undef 0,1,2,3,4             5
806 10 1    1 1 1 6 undef 1 undef 0,1,2,3,4,5           6
817 10 1    1 1 1 7 undef 1 undef 0,1,2,3,4,5,6         7
828 10 1    1 1 1 8 undef 1 undef 0,1,2,3,4,5,6,7       8
839 10 1    1 1 1 9 undef 1 undef 0,1,2,3,4,5,6,7,8     9
8410 10 1   1 1 1 10 undef 1 undef 0,1,2,3,4,5,6,7,8,9  10
85
86# Over 10
8711 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10
8811 10 2    1 2 11 11 1 2 undef 10                     1
8912 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10
9012 10 2    1 2 11 12 1 2 undef 10,11                  2
9113 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9     10
9213 10 2    1 2 11 13 1 2 undef 10,11,12               3
93
94# Under 20
9519 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10
9619 10 2    1 2 11 19 1 2 undef 10,11,12,13,14,15,16,17,18    9
9720 10 1    1 2 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9            10
9820 10 2    1 2 11 20 1 2 undef 10,11,12,13,14,15,16,17,18,19 10
99
100# Over 20
10121 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10
10221 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10
10321 10 3    1 3 21 21 2 3 undef 20                        1
10422 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10
10522 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10
10622 10 3    1 3 21 22 2 3 undef 20,21                     2
10723 10 1    1 3 1 10 undef 1 2 0,1,2,3,4,5,6,7,8,9        10
10823 10 2    1 3 11 20 1 2 3 10,11,12,13,14,15,16,17,18,19 10
10923 10 3    1 3 21 23 2 3 undef 20,21,22                  3
110
111# Zero test
1120 10 1    1 1 0 0 undef 1 undef '' 0
113