]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/blob - t/60-version.t
Add a few more version tests
[perl/modules/Test-Valgrind.git] / t / 60-version.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 6 + 5 + 4 * 9 + 2 * 23 + 2 * 14;
7
8 use Test::Valgrind::Version;
9
10 sub TVV () { 'Test::Valgrind::Version' }
11
12 sub sanitize {
13  my $str = shift;
14
15  $str = '(undef)' unless defined $str;
16  1 while chomp $str;
17  $str =~ s/\n/\\n/g;
18
19  $str;
20 }
21
22 my @command_failures = (
23  undef,
24  'valgrind',
25  '1.2.3',
26  'valgrin-1.2.3',
27  'VALGRIND-1.2.3',
28  "doo dah doo\nvalgrind-1.2.3",
29 );
30
31 for my $failure (@command_failures) {
32  my $desc = sanitize $failure;
33  local $@;
34  eval { TVV->new(command_output => $failure) };
35  like $@, qr/^Invalid argument/,
36           "\"$desc\" correctly failed to parse as command_output";
37 }
38
39 my @string_failures = (
40  undef,
41  'valgrind',
42  'valgrind-1.2.3',
43  'abc',
44  'd.e.f',
45 );
46
47 for my $failure (@string_failures) {
48  my $desc = sanitize $failure;
49  local $@;
50  eval { TVV->new(string => $failure) };
51  like $@, qr/^Invalid argument/,
52           "\"$desc\" correctly failed to parse as string";
53 }
54
55 my @command_valid = (
56  'valgrind-1'          => '1.0.0',
57  'valgrind-1.2'        => '1.2.0',
58  'valgrind-1.2.3'      => '1.2.3',
59  'valgrind-1.2.4-rc5'  => '1.2.4',
60  'valgrind-1.2.6a'     => '1.2.6',
61  'valgrind-1.2.7.'     => '1.2.7',
62  'valgrind-1.2.x.8'    => '1.2.0',
63  'valgrind-1.10.'      => '1.10.0',
64  'valgrind-3.12.0.SVN' => '3.12.0',
65 );
66
67 my @string_valid = map { my $s = $_; $s =~ s/^valgrind-//; $s }
68                     @command_valid;
69
70 while (@command_valid) {
71  my ($output, $exp) = splice @command_valid, 0, 2;
72  my $desc = sanitize $output;
73  local $@;
74  my $res = eval { TVV->new(command_output => $output)->_stringify };
75  is $@,   '',   "\"$desc\" is parseable as command_output";
76  is $res, $exp, "\"$desc\" parses correctly as command_output";
77 }
78
79 while (@string_valid) {
80  my ($str, $exp) = splice @string_valid, 0, 2;
81  my $desc = sanitize $str;
82  local $@;
83  my $res = eval { TVV->new(string => $str)->_stringify };
84  is $@,   '',   "\"$desc\" is parseable as string";
85  is $res, $exp, "\"$desc\" parses correctly as string";
86 }
87
88 sub tvv_s {
89  my ($string) = @_;
90  local $@;
91  eval { TVV->new(string => $string) };
92 }
93
94 my @compare = (
95  '1',       '1',      0,
96  '1',       '1.0',    0,
97  '1',       '1.0.0',  0,
98  '1.1',     '1',      1,
99  '1.1',     '1.0',    1,
100  '1.1',     '1.0.0',  1,
101  '1',       '1.1',    -1,
102  '1.0',     '1.1',    -1,
103  '1.0.0',   '1.1',    -1,
104  '1.1',     '1.2',    -1,
105  '1.1.0',   '1.2',    -1,
106  '1.1',     '1.2.0',  -1,
107  '1.1.0',   '1.2.0',  -1,
108  '1',       '1',      0,
109  '1.0.1',   '1',      1,
110  '1.0.1.0', '1',      1,
111  '1.0.0.1', '1',      1,
112  '1.0.0.1', '1.0.1',  -1,
113  '1.0.0.2', '1.0.1',  -1,
114  '3.4.0',   '3.4.1',  -1,
115  '3.5.2',   '3.5.1',  1,
116  '3.12.0',  '3.1.0',  1,
117  '3.1.0',   '3.12.0', -1,
118 );
119
120 while (@compare) {
121  my ($left, $right, $exp) = splice @compare, 0, 3;
122
123  my $desc = sanitize($left) . ' <=> ' . sanitize($right);
124
125  $left  = tvv_s($left);
126  $right = tvv_s($right);
127
128  my ($err, $res) = '';
129  if (defined $left and defined $right) {
130   local $@;
131   $res = eval { $left <=> $right };
132   $err = $@;
133  } elsif (defined $right) {
134   $res = -2;
135  } elsif (defined $left) {
136   $res = 2;
137  }
138
139  is $err, '',   "\"$desc\" compared without croaking";
140  is $res, $exp, "\"$desc\" compared correctly";
141 }
142
143 my @stringify = (
144  '1',         '1.0.0',
145  '1.0',       '1.0.0',
146  '1.0.0',     '1.0.0',
147  '1.0.0.0',   '1.0.0',
148  '1.2',       '1.2.0',
149  '1.2.0',     '1.2.0',
150  '1.2.0.0',   '1.2.0',
151  '1.2.3',     '1.2.3',
152  '1.2.3.0',   '1.2.3',
153  '1.2.3.4',   '1.2.3.4',
154  '1.2.3.4.0', '1.2.3.4',
155  '1.0.3',     '1.0.3',
156  '1.0.0.4',   '1.0.0.4',
157  '1.2.0.4',   '1.2.0.4',
158 );
159
160 while (@stringify) {
161  my ($str, $exp) = splice @stringify, 0, 2;
162  my $desc = sanitize($str);
163  local $@;
164  my $res = eval { my $v = TVV->new(string => $str); "$v" };
165  is $@,   '',   "\"$desc\" stringification did not croak";
166  is $res, $exp, "\"$desc\" stringified correctly";
167 }