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