File Coverage

blib/lib/Parse/HTTP/UserAgent/Constants.pm
Criterion Covered Total %
statement 26 26 100.0
branch 2 4 50.0
condition 1 3 33.3
subroutine 6 6 100.0
pod n/a
total 35 39 89.7


line stmt bran cond sub pod time code
1             package Parse::HTTP::UserAgent::Constants;
2             $Parse::HTTP::UserAgent::Constants::VERSION = '0.40_02'; # TRIAL
3              
4 2     2   12 $Parse::HTTP::UserAgent::Constants::VERSION = '0.4002';use strict;
  2         4  
  2         45  
5 2     2   8 use warnings;
  2         4  
  2         61  
6 2     2   13 use base qw( Exporter );
  2         4  
  2         235  
7              
8             our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
9              
10 2         1124 use constant LIST_ROBOTS => qw(
11             Wget
12             curl
13             libwww-perl
14             GetRight
15             Googlebot
16             Baiduspider+
17             msnbot
18             bingbot
19 2     2   13 ), 'Yahoo! Slurp';
  2         4  
20              
21             BEGIN {
22 2     2   13 my @fields = (
23             'IS_EXTENDED',
24             'IS_MAXTHON', # Is this the dumb IE faker?
25             'IS_PARSED', # _parse() happened or not
26             'IS_TRIDENT', # Thanks to Microsoft, this now has a meaning
27             'UA_DEVICE', # the name of the mobile device
28             'UA_DOTNET', # [MSIE] List of .NET CLR versions
29             'UA_EXTRAS', # Extra stuff (Toolbars?) non parsable junk
30             'UA_GENERIC', # parsed with a generic parser.
31             'UA_LANG', # the language of the ua interface
32             'UA_MOBILE', # partially implemented
33             'UA_MOZILLA', # [Firefox] Mozilla revision
34             'UA_NAME', # The identifier of the ua
35             'UA_ORIGINAL_NAME', # original name if this is some variation
36             'UA_ORIGINAL_VERSION', # original version if this is some variation
37             'UA_OS', # Operating system
38             'UA_PARSER', # the parser name
39             'UA_ROBOT', # Is this a robot?
40             'UA_STRENGTH', # [MSIE] List of .NET CLR versions
41             'UA_STRING', # just for information
42             'UA_STRING_ORIGINAL', # just for information
43             'UA_TABLET', # partially implemented
44             'UA_TOOLKIT', # [Opera] ua toolkit
45             'UA_TOUCH', # windows only?
46             'UA_UNKNOWN', # failed to detect?
47             'UA_VERSION', # used for numerical ops. via qv()
48             'UA_VERSION_RAW', # the parsed version
49             'UA_WAP', # unimplemented
50             );
51              
52 2         3 my $oid = -1;
53 2         5 my %field = map { $_ => ++$oid } @fields;
  54         99  
54 2         79 my %const = (
55             %field,
56             LAST_ELEMENT => -1,
57             MAXID => $oid,
58             NO_IMATCH => -1, # for index()
59              
60             RE_CHAR_SLASH_WS => qr{ [/\s] }xms,
61             RE_COMMA => qr{ [,] }xms,
62             RE_DIGIT => qr{ [0-9] }xms,
63             RE_DIGIT_DOT_DIGIT => qr{ \d+ [.]? \d }xms,
64             RE_DOTNET => qr{ \A [.]NET (?: \s+ CLR \s+ )? (.+?) \z }xms,
65             RE_EPIPHANY_GECKO => qr{ \A (Epiphany) / (.+?) \z }xmsi,
66             RE_FIREFOX_NAMES => qr{ Firefox|Iceweasel|Firebird|Phoenix }xms,
67             RE_HTTP => qr{ http:// }xms,
68             RE_IX86 => qr{ \s i\d86 }xms,
69             RE_OBJECT_ID => qr{ \A UA_ }xms,
70             RE_OPERA_MINI => qr{ \A (Opera \s+ Mini) / (.+?) \z }xms,
71             RE_SC_WS => qr{ ; \s? }xms,
72             RE_SC_WS_MULTI => qr{ ; \s+? }xms,
73             RE_SLASH => qr{ / }xms,
74             RE_SPLIT_PARSE => qr{ \s? ([()]) \s? }xms,
75             RE_TWO_LETTER_LANG => qr{ \A [a-z]{2} \z }xms,
76             RE_WARN_INVALID => qr{ \QVersion string\E .+? \Qcontains invalid data; ignoring:\E}xms,
77             RE_WARN_OVERFLOW => qr{ \QInteger overflow in version\E }xms,
78             RE_WHITESPACE => qr{ \s+ }xms,
79             RE_WINDOWS_OS => qr{ \A Win(dows|NT|[0-9]+)? }xmsi,
80              
81             ERROR_MAXTHON_MSIE => 'Unable to extract MSIE from Maxthon UA-string',
82             ERROR_MAXTHON_VERSION => 'Unable to extract Maxthon version from Maxthon UA-string',
83              
84             OPERA9 => 9,
85             OPERA_FAKER_EXTRA_SIZE => 4,
86             OPERA_TK_LENGTH => 5,
87              
88             TK_NAME => 0,
89             TK_ORIGINAL_VERSION => 1,
90             TK_VERSION => 2,
91             );
92              
93 2 50       14 $const{INSIDE_UNIT_TEST} = $ENV{PARSE_HTTP_USERAGENT_TEST_SUITE} ? 1 : 0;
94             $const{INSIDE_VERBOSE_TEST} = $const{INSIDE_UNIT_TEST}
95 2 50 33     16 && $ENV{HARNESS_IS_VERBOSE} ? 1 : 0;
96              
97 2         16 require constant;
98 2         1690 constant->import( \%const );
99             }
100              
101             BEGIN {
102 2     2   54 %EXPORT_TAGS = (
103             object_ids => [qw(
104             IS_PARSED
105             IS_MAXTHON
106             IS_TRIDENT
107             IS_EXTENDED
108             UA_STRING
109             UA_STRING_ORIGINAL
110             UA_UNKNOWN
111             UA_GENERIC
112             UA_NAME
113             UA_VERSION_RAW
114             UA_VERSION
115             UA_OS
116             UA_LANG
117             UA_TOOLKIT
118             UA_EXTRAS
119             UA_DOTNET
120             UA_MOZILLA
121             UA_STRENGTH
122             UA_ROBOT
123             UA_WAP
124             UA_MOBILE
125             UA_TABLET
126             UA_TOUCH
127             UA_PARSER
128             UA_DEVICE
129             UA_ORIGINAL_NAME
130             UA_ORIGINAL_VERSION
131             MAXID
132             )],
133             re => [qw(
134             RE_FIREFOX_NAMES
135             RE_DOTNET
136             RE_WINDOWS_OS
137             RE_SLASH
138             RE_SPLIT_PARSE
139             RE_OPERA_MINI
140             RE_EPIPHANY_GECKO
141             RE_WHITESPACE
142             RE_SC_WS
143             RE_SC_WS_MULTI
144             RE_HTTP
145             RE_DIGIT
146             RE_IX86
147             RE_OBJECT_ID
148             RE_CHAR_SLASH_WS
149             RE_COMMA
150             RE_TWO_LETTER_LANG
151             RE_DIGIT_DOT_DIGIT
152             RE_WARN_OVERFLOW
153             RE_WARN_INVALID
154             )],
155             list => [qw(
156             LIST_ROBOTS
157             )],
158             tk => [qw(
159             TK_NAME
160             TK_ORIGINAL_VERSION
161             TK_VERSION
162             )],
163             etc => [qw(
164             NO_IMATCH
165             LAST_ELEMENT
166             INSIDE_UNIT_TEST
167             INSIDE_VERBOSE_TEST
168             )],
169             error => [qw(
170             ERROR_MAXTHON_VERSION
171             ERROR_MAXTHON_MSIE
172             )],
173             opera => [qw(
174             OPERA9
175             OPERA_TK_LENGTH
176             OPERA_FAKER_EXTRA_SIZE
177             )],
178             );
179              
180 2         8 @EXPORT_OK = map { @{ $_ } } values %EXPORT_TAGS;
  14         22  
  14         43  
181 2         64 $EXPORT_TAGS{all} = [ @EXPORT_OK ];
182             }
183              
184             1;
185              
186             __END__