1package main;
2
3use strict;
4use warnings;
5
6use lib qw{ inc };
7
8use Test::More 0.88;
9
10require_ok( 'My::Module::Mock_Tokenizer' ) or BAIL_OUT;
11
12require_ok( 'PPI::Document' )
13    or BAIL_OUT(
14    q{PPI::Document is a prerequisite. Without it, we're hosed.} );
15
16require_ok( 'PPIx::Regexp::Util' ) or BAIL_OUT;
17
18can_ok( 'PPIx::Regexp::Util', 'is_ppi_regexp_element' ) or BAIL_OUT;
19
20require_ok( 'PPIx::Regexp' ) or BAIL_OUT;
21class_isa_ok( 'PPIx::Regexp', 'PPIx::Regexp::Node' ) or BAIL_OUT;
22
23require_ok( 'PPIx::Regexp::Constant' );
24class_isa_ok( 'PPIx::Regexp::Constant', 'Exporter' );
25
26require_ok( 'PPIx::Regexp::Dumper' ) or BAIL_OUT;
27class_isa_ok( 'PPIx::Regexp::Dumper', 'PPIx::Regexp::Support' );
28isa_ok( PPIx::Regexp::Dumper->new( 'xyzzy' ), 'PPIx::Regexp::Dumper' );
29
30require_ok( 'PPIx::Regexp::Element' );
31
32require_ok( 'PPIx::Regexp::Lexer' );
33class_isa_ok( 'PPIx::Regexp::Lexer', 'PPIx::Regexp::Support' );
34
35require_ok( 'PPIx::Regexp::Node' );
36class_isa_ok( 'PPIx::Regexp::Node', 'PPIx::Regexp::Element' );
37
38require_ok( 'PPIx::Regexp::Node::Range' );
39class_isa_ok( 'PPIx::Regexp::Node::Range', 'PPIx::Regexp::Node' );
40
41require_ok( 'PPIx::Regexp::Node::Unknown' );
42class_isa_ok( 'PPIx::Regexp::Node::Unknown', 'PPIx::Regexp::Node' );
43
44require_ok( 'PPIx::Regexp::Structure' );
45class_isa_ok( 'PPIx::Regexp::Structure', 'PPIx::Regexp::Node' );
46
47require_ok( 'PPIx::Regexp::Structure::Assertion' );
48class_isa_ok( 'PPIx::Regexp::Structure::Assertion',
49    'PPIx::Regexp::Structure' );
50
51require_ok( 'PPIx::Regexp::Structure::Atomic_Script_Run' );
52class_isa_ok( 'PPIx::Regexp::Structure::Atomic_Script_Run',
53    'PPIx::Regexp::Structure' );
54
55require_ok( 'PPIx::Regexp::Structure::BranchReset' );
56class_isa_ok( 'PPIx::Regexp::Structure::BranchReset',
57    'PPIx::Regexp::Structure' );
58
59require_ok( 'PPIx::Regexp::Structure::Capture' );
60class_isa_ok( 'PPIx::Regexp::Structure::Capture',
61    'PPIx::Regexp::Structure' );
62
63require_ok( 'PPIx::Regexp::Structure::CharClass' );
64class_isa_ok( 'PPIx::Regexp::Structure::CharClass',
65    'PPIx::Regexp::Structure' );
66
67require_ok( 'PPIx::Regexp::Structure::Code' );
68class_isa_ok( 'PPIx::Regexp::Structure::Code',
69    'PPIx::Regexp::Structure' );
70
71require_ok( 'PPIx::Regexp::Structure::Main' );
72class_isa_ok( 'PPIx::Regexp::Structure::Main',
73    'PPIx::Regexp::Structure' );
74
75require_ok( 'PPIx::Regexp::Structure::Modifier' );
76class_isa_ok( 'PPIx::Regexp::Structure::Modifier',
77    'PPIx::Regexp::Structure' );
78
79require_ok( 'PPIx::Regexp::Structure::NamedCapture' );
80class_isa_ok( 'PPIx::Regexp::Structure::NamedCapture',
81    'PPIx::Regexp::Structure::Capture' );
82
83require_ok( 'PPIx::Regexp::Structure::Quantifier' );
84class_isa_ok( 'PPIx::Regexp::Structure::Quantifier',
85    'PPIx::Regexp::Structure' );
86
87require_ok( 'PPIx::Regexp::Structure::Regexp' );
88class_isa_ok( 'PPIx::Regexp::Structure::Regexp',
89    'PPIx::Regexp::Structure::Main' );
90
91require_ok( 'PPIx::Regexp::Structure::Replacement' );
92class_isa_ok( 'PPIx::Regexp::Structure::Replacement',
93    'PPIx::Regexp::Structure::Main' );
94
95require_ok( 'PPIx::Regexp::Structure::Script_Run' );
96class_isa_ok( 'PPIx::Regexp::Structure::Script_Run',
97    'PPIx::Regexp::Structure' );
98
99require_ok( 'PPIx::Regexp::Structure::Subexpression' );
100class_isa_ok( 'PPIx::Regexp::Structure::Subexpression',
101    'PPIx::Regexp::Structure' );
102
103require_ok( 'PPIx::Regexp::Structure::Switch' );
104class_isa_ok( 'PPIx::Regexp::Structure::Switch',
105    'PPIx::Regexp::Structure' );
106
107require_ok( 'PPIx::Regexp::Structure::Unknown' );
108class_isa_ok( 'PPIx::Regexp::Structure::Unknown',
109    'PPIx::Regexp::Structure' );
110
111require_ok( 'PPIx::Regexp::Support' );
112
113require_ok( 'PPIx::Regexp::Token' );
114class_isa_ok( 'PPIx::Regexp::Token', 'PPIx::Regexp::Element' );
115isa_ok( PPIx::Regexp::Token->__new( 'xyzzy' ), 'PPIx::Regexp::Token' );
116
117require_ok( 'PPIx::Regexp::Token::Assertion' );
118class_isa_ok( 'PPIx::Regexp::Token::Assertion', 'PPIx::Regexp::Token'
119    );
120isa_ok( PPIx::Regexp::Token::Assertion->__new( 'xyzzy' ),
121    'PPIx::Regexp::Token::Assertion' );
122
123require_ok( 'PPIx::Regexp::Token::Backreference' );
124class_isa_ok( 'PPIx::Regexp::Token::Backreference',
125    'PPIx::Regexp::Token::Reference' );
126isa_ok( PPIx::Regexp::Token::Backreference->__new( '\\1' ),
127    'PPIx::Regexp::Token::Backreference' );
128
129require_ok( 'PPIx::Regexp::Token::Backtrack' );
130class_isa_ok( 'PPIx::Regexp::Token::Backtrack', 'PPIx::Regexp::Token'
131    );
132isa_ok( PPIx::Regexp::Token::Backtrack->__new( 'xyzzy' ),
133    'PPIx::Regexp::Token::Backtrack' );
134
135require_ok( 'PPIx::Regexp::Token::CharClass' );
136class_isa_ok( 'PPIx::Regexp::Token::CharClass', 'PPIx::Regexp::Token'
137    );
138isa_ok( PPIx::Regexp::Token::CharClass->__new( 'xyzzy' ),
139    'PPIx::Regexp::Token::CharClass' );
140
141require_ok( 'PPIx::Regexp::Token::CharClass::POSIX' );
142class_isa_ok( 'PPIx::Regexp::Token::CharClass::POSIX',
143    'PPIx::Regexp::Token::CharClass' );
144isa_ok( PPIx::Regexp::Token::CharClass::POSIX->__new( 'xyzzy' ),
145    'PPIx::Regexp::Token::CharClass::POSIX' );
146
147require_ok( 'PPIx::Regexp::Token::CharClass::Simple' );
148class_isa_ok( 'PPIx::Regexp::Token::CharClass::Simple',
149    'PPIx::Regexp::Token::CharClass' );
150isa_ok( PPIx::Regexp::Token::CharClass::Simple->__new( 'xyzzy' ),
151    'PPIx::Regexp::Token::CharClass::Simple' );
152
153require_ok( 'PPIx::Regexp::Token::Code' );
154class_isa_ok( 'PPIx::Regexp::Token::Code', 'PPIx::Regexp::Token' );
155isa_ok( PPIx::Regexp::Token::Code->__new( 'xyzzy',
156	tokenizer => My::Module::Mock_Tokenizer->new(),
157    ),
158    'PPIx::Regexp::Token::Code' );
159
160require_ok( 'PPIx::Regexp::Token::Comment' );
161class_isa_ok( 'PPIx::Regexp::Token::Comment', 'PPIx::Regexp::Token' );
162isa_ok( PPIx::Regexp::Token::Comment->__new( 'xyzzy' ),
163    'PPIx::Regexp::Token::Comment' );
164
165require_ok( 'PPIx::Regexp::Token::Condition' );
166class_isa_ok( 'PPIx::Regexp::Token::Condition',
167    'PPIx::Regexp::Token::Reference' );
168isa_ok( PPIx::Regexp::Token::Condition->__new( '(1)' ),
169    'PPIx::Regexp::Token::Condition' );
170
171require_ok( 'PPIx::Regexp::Token::Control' );
172class_isa_ok( 'PPIx::Regexp::Token::Control', 'PPIx::Regexp::Token' );
173isa_ok( PPIx::Regexp::Token::Control->__new( 'xyzzy' ),
174    'PPIx::Regexp::Token::Control' );
175
176require_ok( 'PPIx::Regexp::Token::Delimiter' );
177class_isa_ok( 'PPIx::Regexp::Token::Delimiter', 'PPIx::Regexp::Token'
178    );
179isa_ok( PPIx::Regexp::Token::Delimiter->__new( 'xyzzy' ),
180    'PPIx::Regexp::Token::Delimiter' );
181
182require_ok( 'PPIx::Regexp::Token::Greediness' );
183class_isa_ok( 'PPIx::Regexp::Token::Greediness', 'PPIx::Regexp::Token'
184    );
185isa_ok( PPIx::Regexp::Token::Greediness->__new( 'xyzzy' ),
186    'PPIx::Regexp::Token::Greediness' );
187
188require_ok( 'PPIx::Regexp::Token::GroupType' );
189class_isa_ok( 'PPIx::Regexp::Token::GroupType', 'PPIx::Regexp::Token'
190    );
191isa_ok( PPIx::Regexp::Token::GroupType->__new( 'xyzzy' ),
192    'PPIx::Regexp::Token::GroupType' );
193
194require_ok( 'PPIx::Regexp::Token::GroupType::Assertion' );
195class_isa_ok( 'PPIx::Regexp::Token::GroupType::Assertion',
196    'PPIx::Regexp::Token::GroupType' );
197isa_ok( PPIx::Regexp::Token::GroupType::Assertion->__new( 'xyzzy' ),
198    'PPIx::Regexp::Token::GroupType::Assertion' );
199
200require_ok( 'PPIx::Regexp::Token::GroupType::Atomic_Script_Run' );
201class_isa_ok( 'PPIx::Regexp::Token::GroupType::Atomic_Script_Run',
202    'PPIx::Regexp::Token::GroupType' );
203isa_ok( PPIx::Regexp::Token::GroupType::Atomic_Script_Run->__new( 'xyzzy' ),
204    'PPIx::Regexp::Token::GroupType::Atomic_Script_Run' );
205
206require_ok( 'PPIx::Regexp::Token::GroupType::BranchReset' );
207class_isa_ok( 'PPIx::Regexp::Token::GroupType::BranchReset',
208    'PPIx::Regexp::Token::GroupType' );
209isa_ok( PPIx::Regexp::Token::GroupType::BranchReset->__new( 'xyzzy' ),
210    'PPIx::Regexp::Token::GroupType::BranchReset' );
211
212require_ok( 'PPIx::Regexp::Token::GroupType::Code' );
213class_isa_ok( 'PPIx::Regexp::Token::GroupType::Code',
214    'PPIx::Regexp::Token::GroupType' );
215isa_ok( PPIx::Regexp::Token::GroupType::Code->__new( 'xyzzy',
216	tokenizer => My::Module::Mock_Tokenizer->new(),
217    ),
218    'PPIx::Regexp::Token::GroupType::Code' );
219
220require_ok( 'PPIx::Regexp::Token::GroupType::Modifier' );
221class_isa_ok( 'PPIx::Regexp::Token::GroupType::Modifier',
222    'PPIx::Regexp::Token::GroupType' );
223class_isa_ok( 'PPIx::Regexp::Token::GroupType::Modifier',
224    'PPIx::Regexp::Token::Modifier' );
225isa_ok( PPIx::Regexp::Token::GroupType::Modifier->__new( 'xyzzy',
226	tokenizer => My::Module::Mock_Tokenizer->new(),
227    ),
228    'PPIx::Regexp::Token::GroupType::Modifier' );
229
230require_ok( 'PPIx::Regexp::Token::GroupType::NamedCapture' );
231class_isa_ok( 'PPIx::Regexp::Token::GroupType::NamedCapture',
232    'PPIx::Regexp::Token::GroupType' );
233isa_ok( PPIx::Regexp::Token::GroupType::NamedCapture->__new( 'xyzzy',
234	tokenizer => My::Module::Mock_Tokenizer->new(
235	    capture => [ 'foo' ],
236	),
237     ),
238    'PPIx::Regexp::Token::GroupType::NamedCapture' );
239
240require_ok( 'PPIx::Regexp::Token::GroupType::Subexpression' );
241class_isa_ok( 'PPIx::Regexp::Token::GroupType::Subexpression',
242    'PPIx::Regexp::Token::GroupType' );
243isa_ok( PPIx::Regexp::Token::GroupType::Subexpression->__new( 'xyzzy' ),
244    'PPIx::Regexp::Token::GroupType::Subexpression' );
245
246require_ok( 'PPIx::Regexp::Token::GroupType::Script_Run' );
247class_isa_ok( 'PPIx::Regexp::Token::GroupType::Script_Run',
248    'PPIx::Regexp::Token::GroupType' );
249isa_ok( PPIx::Regexp::Token::GroupType::Script_Run->__new( 'xyzzy' ),
250    'PPIx::Regexp::Token::GroupType::Script_Run' );
251
252require_ok( 'PPIx::Regexp::Token::GroupType::Switch' );
253class_isa_ok( 'PPIx::Regexp::Token::GroupType::Switch',
254    'PPIx::Regexp::Token::GroupType' );
255isa_ok( PPIx::Regexp::Token::GroupType::Switch->__new( 'xyzzy' ),
256    'PPIx::Regexp::Token::GroupType::Switch' );
257
258require_ok( 'PPIx::Regexp::Token::Interpolation' );
259class_isa_ok( 'PPIx::Regexp::Token::Interpolation',
260    'PPIx::Regexp::Token::Code' );
261isa_ok( PPIx::Regexp::Token::Interpolation->__new( 'xyzzy',
262	tokenizer => My::Module::Mock_Tokenizer->new(),
263    ),
264    'PPIx::Regexp::Token::Interpolation' );
265
266require_ok( 'PPIx::Regexp::Token::Literal' );
267class_isa_ok( 'PPIx::Regexp::Token::Literal', 'PPIx::Regexp::Token' );
268isa_ok( PPIx::Regexp::Token::Literal->__new( 'xyzzy' ),
269    'PPIx::Regexp::Token::Literal' );
270
271require_ok( 'PPIx::Regexp::Token::Modifier' );
272class_isa_ok( 'PPIx::Regexp::Token::Modifier', 'PPIx::Regexp::Token' );
273isa_ok( PPIx::Regexp::Token::Modifier->__new( 'xyzzy',
274	tokenizer => My::Module::Mock_Tokenizer->new(),
275    ),
276    'PPIx::Regexp::Token::Modifier' );
277
278require_ok( 'PPIx::Regexp::Token::NoOp' );
279class_isa_ok( 'PPIx::Regexp::Token::NoOp',
280    'PPIx::Regexp::Token' );
281isa_ok( PPIx::Regexp::Token::NoOp->__new( 'xyzzy' ),
282    'PPIx::Regexp::Token::NoOp' );
283
284require_ok( 'PPIx::Regexp::Token::Operator' );
285class_isa_ok( 'PPIx::Regexp::Token::Operator', 'PPIx::Regexp::Token' );
286isa_ok( PPIx::Regexp::Token::Operator->__new( 'xyzzy',
287	tokenizer => My::Module::Mock_Tokenizer->new(),
288    ),
289    'PPIx::Regexp::Token::Operator' );
290
291require_ok( 'PPIx::Regexp::Token::Quantifier' );
292class_isa_ok( 'PPIx::Regexp::Token::Quantifier', 'PPIx::Regexp::Token'
293    );
294isa_ok( PPIx::Regexp::Token::Quantifier->__new( 'xyzzy' ),
295    'PPIx::Regexp::Token::Quantifier' );
296
297require_ok( 'PPIx::Regexp::Token::Recursion' );
298class_isa_ok( 'PPIx::Regexp::Token::Recursion',
299    'PPIx::Regexp::Token::Reference' );
300isa_ok( PPIx::Regexp::Token::Recursion->__new( '(?1)' ),
301    'PPIx::Regexp::Token::Recursion' );
302
303require_ok( 'PPIx::Regexp::Token::Reference' );
304class_isa_ok( 'PPIx::Regexp::Token::Reference', 'PPIx::Regexp::Token'
305    );
306# This is an abstract class and should never be instantiated in the
307# first place.
308# isa_ok( PPIx::Regexp::Token::Reference->__new( 'xyzzy' ),
309#     'PPIx::Regexp::Token::Reference' );
310
311require_ok( 'PPIx::Regexp::Token::Structure' );
312class_isa_ok( 'PPIx::Regexp::Token::Structure', 'PPIx::Regexp::Token'
313    );
314isa_ok( PPIx::Regexp::Token::Structure->__new( 'xyzzy' ),
315    'PPIx::Regexp::Token::Structure' );
316
317require_ok( 'PPIx::Regexp::Token::Unknown' );
318class_isa_ok( 'PPIx::Regexp::Token::Unknown', 'PPIx::Regexp::Token' );
319isa_ok( PPIx::Regexp::Token::Unknown->__new( 'xyzzy', error => 'bogus' ),
320    'PPIx::Regexp::Token::Unknown' );
321
322require_ok( 'PPIx::Regexp::Token::Unmatched' );
323class_isa_ok( 'PPIx::Regexp::Token::Unmatched', 'PPIx::Regexp::Token'
324    );
325isa_ok( PPIx::Regexp::Token::Unmatched->__new( 'xyzzy' ),
326    'PPIx::Regexp::Token::Unmatched' );
327
328require_ok( 'PPIx::Regexp::Token::Whitespace' );
329class_isa_ok( 'PPIx::Regexp::Token::Whitespace',
330    'PPIx::Regexp::Token::NoOp' );
331isa_ok( PPIx::Regexp::Token::Whitespace->__new( 'xyzzy' ),
332    'PPIx::Regexp::Token::Whitespace' );
333
334require_ok( 'PPIx::Regexp::Tokenizer' );
335class_isa_ok( 'PPIx::Regexp::Tokenizer', 'PPIx::Regexp::Support' );
336isa_ok( PPIx::Regexp::Tokenizer->new( 'xyzzy' ),
337    'PPIx::Regexp::Tokenizer' );
338
339done_testing;
340
341sub class_isa_ok {
342    my ( $class, $isa ) = @_;
343    @_ = (
344	eval { $class->isa( $isa ) },
345	"$class isa $isa",
346    );
347    goto &ok,
348}
349
3501;
351
352__END__
353
354# ex: set textwidth=72 :
355