1package Test2::API; 2use strict; 3use warnings; 4 5use Time::HiRes qw/time/; 6use Test2::Util qw/USE_THREADS/; 7 8BEGIN { 9 $ENV{TEST_ACTIVE} ||= 1; 10 $ENV{TEST2_ACTIVE} = 1; 11} 12 13our $VERSION = '1.302199'; 14 15 16my $INST; 17my $ENDING = 0; 18sub test2_unset_is_end { $ENDING = 0 } 19sub test2_get_is_end { $ENDING } 20 21sub test2_set_is_end { 22 my $before = $ENDING; 23 ($ENDING) = @_ ? @_ : (1); 24 25 # Only send the event in a transition from false to true 26 return if $before; 27 return unless $ENDING; 28 29 return unless $INST; 30 my $stack = $INST->stack or return; 31 my $root = $stack->root or return; 32 33 return unless $root->count; 34 35 return unless $$ == $INST->pid; 36 return unless get_tid() == $INST->tid; 37 38 my $trace = Test2::EventFacet::Trace->new( 39 frame => [__PACKAGE__, __FILE__, __LINE__, __PACKAGE__ . '::test2_set_is_end'], 40 ); 41 my $ctx = Test2::API::Context->new( 42 trace => $trace, 43 hub => $root, 44 ); 45 46 $ctx->send_ev2(control => { phase => 'END', details => 'Transition to END phase' }); 47 48 1; 49} 50 51use Test2::API::Instance(\$INST); 52 53# Set the exit status 54END { 55 test2_set_is_end(); # See gh #16 56 $INST->set_exit(); 57} 58 59sub CLONE { 60 my $init = test2_init_done(); 61 my $load = test2_load_done(); 62 63 return if $init && $load; 64 65 require Carp; 66 Carp::croak "Test2 must be fully loaded before you start a new thread!\n"; 67} 68 69# See gh #16 70{ 71 no warnings; 72 INIT { eval 'END { test2_set_is_end() }; 1' or die $@ } 73} 74 75BEGIN { 76 no warnings 'once'; 77 if($] ge '5.014' || $ENV{T2_CHECK_DEPTH} || $Test2::API::DO_DEPTH_CHECK) { 78 *DO_DEPTH_CHECK = sub() { 1 }; 79 } 80 else { 81 *DO_DEPTH_CHECK = sub() { 0 }; 82 } 83} 84 85use Test2::EventFacet::Trace(); 86use Test2::Util::Trace(); # Legacy 87 88use Test2::Hub::Subtest(); 89use Test2::Hub::Interceptor(); 90use Test2::Hub::Interceptor::Terminator(); 91 92use Test2::Event::Ok(); 93use Test2::Event::Diag(); 94use Test2::Event::Note(); 95use Test2::Event::Plan(); 96use Test2::Event::Bail(); 97use Test2::Event::Exception(); 98use Test2::Event::Waiting(); 99use Test2::Event::Skip(); 100use Test2::Event::Subtest(); 101 102use Carp qw/carp croak confess/; 103use Scalar::Util qw/blessed weaken/; 104use Test2::Util qw/get_tid clone_io pkg_to_file gen_uid/; 105 106our @EXPORT_OK = qw{ 107 context release 108 context_do 109 no_context 110 intercept intercept_deep 111 run_subtest 112 113 test2_init_done 114 test2_load_done 115 test2_load 116 test2_start_preload 117 test2_stop_preload 118 test2_in_preload 119 test2_is_testing_done 120 121 test2_set_is_end 122 test2_unset_is_end 123 test2_get_is_end 124 125 test2_pid 126 test2_tid 127 test2_stack 128 test2_no_wait 129 test2_ipc_wait_enable 130 test2_ipc_wait_disable 131 test2_ipc_wait_enabled 132 133 test2_add_uuid_via 134 135 test2_add_callback_testing_done 136 137 test2_add_callback_context_aquire 138 test2_add_callback_context_acquire 139 test2_add_callback_context_init 140 test2_add_callback_context_release 141 test2_add_callback_exit 142 test2_add_callback_post_load 143 test2_add_callback_pre_subtest 144 test2_list_context_aquire_callbacks 145 test2_list_context_acquire_callbacks 146 test2_list_context_init_callbacks 147 test2_list_context_release_callbacks 148 test2_list_exit_callbacks 149 test2_list_post_load_callbacks 150 test2_list_pre_subtest_callbacks 151 152 test2_ipc 153 test2_has_ipc 154 test2_ipc_disable 155 test2_ipc_disabled 156 test2_ipc_drivers 157 test2_ipc_add_driver 158 test2_ipc_polling 159 test2_ipc_disable_polling 160 test2_ipc_enable_polling 161 test2_ipc_get_pending 162 test2_ipc_set_pending 163 test2_ipc_get_timeout 164 test2_ipc_set_timeout 165 166 test2_formatter 167 test2_formatters 168 test2_formatter_add 169 test2_formatter_set 170 171 test2_stdout 172 test2_stderr 173 test2_reset_io 174 175 test2_enable_trace_stamps 176 test2_disable_trace_stamps 177 test2_trace_stamps_enabled 178}; 179BEGIN { require Exporter; our @ISA = qw(Exporter) } 180 181my $STACK = $INST->stack; 182my $CONTEXTS = $INST->contexts; 183my $INIT_CBS = $INST->context_init_callbacks; 184my $ACQUIRE_CBS = $INST->context_acquire_callbacks; 185 186my $STDOUT = clone_io(\*STDOUT); 187my $STDERR = clone_io(\*STDERR); 188sub test2_stdout { $STDOUT ||= clone_io(\*STDOUT) } 189sub test2_stderr { $STDERR ||= clone_io(\*STDERR) } 190 191sub test2_post_preload_reset { 192 test2_reset_io(); 193 $INST->post_preload_reset; 194} 195 196sub test2_reset_io { 197 $STDOUT = clone_io(\*STDOUT); 198 $STDERR = clone_io(\*STDERR); 199} 200 201sub test2_init_done { $INST->finalized } 202sub test2_load_done { $INST->loaded } 203 204sub test2_load { $INST->load } 205sub test2_start_preload { $ENV{T2_IN_PRELOAD} = 1; $INST->start_preload } 206sub test2_stop_preload { $ENV{T2_IN_PRELOAD} = 0; $INST->stop_preload } 207sub test2_in_preload { $INST->preload } 208 209sub test2_pid { $INST->pid } 210sub test2_tid { $INST->tid } 211sub test2_stack { $INST->stack } 212sub test2_ipc_wait_enable { $INST->set_no_wait(0) } 213sub test2_ipc_wait_disable { $INST->set_no_wait(1) } 214sub test2_ipc_wait_enabled { !$INST->no_wait } 215 216sub test2_enable_trace_stamps { $INST->test2_enable_trace_stamps } 217sub test2_disable_trace_stamps { $INST->test2_disable_trace_stamps } 218sub test2_trace_stamps_enabled { $INST->test2_trace_stamps_enabled } 219 220sub test2_is_testing_done { 221 # No instance? VERY DONE! 222 return 1 unless $INST; 223 224 # No stack? tests must be done, it is created pretty early 225 my $stack = $INST->stack or return 1; 226 227 # Nothing on the stack, no root hub yet, likely have not started testing 228 return 0 unless @$stack; 229 230 # Stack has a slot for the root hub (see above) but it is undefined, likely 231 # garbage collected, test is done 232 my $root_hub = $stack->[0] or return 1; 233 234 # If the root hub is ended than testing is done. 235 return 1 if $root_hub->ended; 236 237 # Looks like we are still testing! 238 return 0; 239} 240 241sub test2_no_wait { 242 $INST->set_no_wait(@_) if @_; 243 $INST->no_wait; 244} 245 246sub test2_add_callback_testing_done { 247 my $cb = shift; 248 249 test2_add_callback_post_load(sub { 250 my $stack = test2_stack(); 251 $stack->top; # Ensure we have a hub 252 my ($hub) = Test2::API::test2_stack->all; 253 254 $hub->set_active(1); 255 256 $hub->follow_up($cb); 257 }); 258 259 return; 260} 261 262sub test2_add_callback_context_acquire { $INST->add_context_acquire_callback(@_) } 263sub test2_add_callback_context_aquire { $INST->add_context_acquire_callback(@_) } 264sub test2_add_callback_context_init { $INST->add_context_init_callback(@_) } 265sub test2_add_callback_context_release { $INST->add_context_release_callback(@_) } 266sub test2_add_callback_exit { $INST->add_exit_callback(@_) } 267sub test2_add_callback_post_load { $INST->add_post_load_callback(@_) } 268sub test2_add_callback_pre_subtest { $INST->add_pre_subtest_callback(@_) } 269sub test2_list_context_aquire_callbacks { @{$INST->context_acquire_callbacks} } 270sub test2_list_context_acquire_callbacks { @{$INST->context_acquire_callbacks} } 271sub test2_list_context_init_callbacks { @{$INST->context_init_callbacks} } 272sub test2_list_context_release_callbacks { @{$INST->context_release_callbacks} } 273sub test2_list_exit_callbacks { @{$INST->exit_callbacks} } 274sub test2_list_post_load_callbacks { @{$INST->post_load_callbacks} } 275sub test2_list_pre_subtest_callbacks { @{$INST->pre_subtest_callbacks} } 276 277sub test2_add_uuid_via { 278 $INST->set_add_uuid_via(@_) if @_; 279 $INST->add_uuid_via(); 280} 281 282sub test2_ipc { $INST->ipc } 283sub test2_has_ipc { $INST->has_ipc } 284sub test2_ipc_disable { $INST->ipc_disable } 285sub test2_ipc_disabled { $INST->ipc_disabled } 286sub test2_ipc_add_driver { $INST->add_ipc_driver(@_) } 287sub test2_ipc_drivers { @{$INST->ipc_drivers} } 288sub test2_ipc_polling { $INST->ipc_polling } 289sub test2_ipc_enable_polling { $INST->enable_ipc_polling } 290sub test2_ipc_disable_polling { $INST->disable_ipc_polling } 291sub test2_ipc_get_pending { $INST->get_ipc_pending } 292sub test2_ipc_set_pending { $INST->set_ipc_pending(@_) } 293sub test2_ipc_set_timeout { $INST->set_ipc_timeout(@_) } 294sub test2_ipc_get_timeout { $INST->ipc_timeout() } 295sub test2_ipc_enable_shm { 0 } 296 297sub test2_formatter { 298 if ($ENV{T2_FORMATTER} && $ENV{T2_FORMATTER} =~ m/^(\+)?(.*)$/) { 299 my $formatter = $1 ? $2 : "Test2::Formatter::$2"; 300 my $file = pkg_to_file($formatter); 301 require $file; 302 return $formatter; 303 } 304 305 return $INST->formatter; 306} 307 308sub test2_formatters { @{$INST->formatters} } 309sub test2_formatter_add { $INST->add_formatter(@_) } 310sub test2_formatter_set { 311 my ($formatter) = @_; 312 croak "No formatter specified" unless $formatter; 313 croak "Global Formatter already set" if $INST->formatter_set; 314 $INST->set_formatter($formatter); 315} 316 317# Private, for use in Test2::API::Context 318sub _contexts_ref { $INST->contexts } 319sub _context_acquire_callbacks_ref { $INST->context_acquire_callbacks } 320sub _context_init_callbacks_ref { $INST->context_init_callbacks } 321sub _context_release_callbacks_ref { $INST->context_release_callbacks } 322sub _add_uuid_via_ref { \($INST->{Test2::API::Instance::ADD_UUID_VIA()}) } 323 324# Private, for use in Test2::IPC 325sub _set_ipc { $INST->set_ipc(@_) } 326 327sub context_do(&;@) { 328 my $code = shift; 329 my @args = @_; 330 331 my $ctx = context(level => 1); 332 333 my $want = wantarray; 334 335 my @out; 336 my $ok = eval { 337 $want ? @out = $code->($ctx, @args) : 338 defined($want) ? $out[0] = $code->($ctx, @args) : 339 $code->($ctx, @args) ; 340 1; 341 }; 342 my $err = $@; 343 344 $ctx->release; 345 346 die $err unless $ok; 347 348 return @out if $want; 349 return $out[0] if defined $want; 350 return; 351} 352 353sub no_context(&;$) { 354 my ($code, $hid) = @_; 355 $hid ||= $STACK->top->hid; 356 357 my $ctx = $CONTEXTS->{$hid}; 358 delete $CONTEXTS->{$hid}; 359 my $ok = eval { $code->(); 1 }; 360 my $err = $@; 361 362 $CONTEXTS->{$hid} = $ctx; 363 weaken($CONTEXTS->{$hid}); 364 365 die $err unless $ok; 366 367 return; 368}; 369 370my $UUID_VIA = _add_uuid_via_ref(); 371sub context { 372 # We need to grab these before anything else to ensure they are not 373 # changed. 374 my ($errno, $eval_error, $child_error, $extended_error) = (0 + $!, $@, $?, $^E); 375 376 my %params = (level => 0, wrapped => 0, @_); 377 378 # If something is getting a context then the sync system needs to be 379 # considered loaded... 380 $INST->load unless $INST->{loaded}; 381 382 croak "context() called, but return value is ignored" 383 unless defined wantarray; 384 385 my $stack = $params{stack} || $STACK; 386 my $hub = $params{hub} || (@$stack ? $stack->[-1] : $stack->top); 387 388 # Catch an edge case where we try to get context after the root hub has 389 # been garbage collected resulting in a stack that has a single undef 390 # hub 391 if (!($hub && $hub->{hid}) && !exists($params{hub}) && @$stack) { 392 my $msg; 393 394 if ($hub && !$hub->{hid}) { 395 $msg = Carp::longmess("$hub has no hid! (did you attempt a testing event after done_testing?). You may be relying on a tool or plugin that was based off an old Test2 that did not require hids."); 396 } 397 else { 398 $msg = Carp::longmess("Attempt to get Test2 context after testing has completed (did you attempt a testing event after done_testing?)"); 399 } 400 401 # The error message is usually masked by the global destruction, so we have to print to STDER 402 print STDERR $msg; 403 404 # Make sure this is a failure, we are probably already in END, so set $? to change the exit code 405 $? = 1; 406 407 # Now we actually die to interrupt the program flow and avoid undefined his warnings 408 die $msg; 409 } 410 411 my $hid = $hub->{hid}; 412 my $current = $CONTEXTS->{$hid}; 413 414 $_->(\%params) for @$ACQUIRE_CBS; 415 map $_->(\%params), @{$hub->{_context_acquire}} if $hub->{_context_acquire}; 416 417 # This is for https://github.com/Test-More/test-more/issues/16 418 # and https://rt.perl.org/Public/Bug/Display.html?id=127774 419 my $phase = ${^GLOBAL_PHASE} || 'NA'; 420 my $end_phase = $ENDING || $phase eq 'END' || $phase eq 'DESTRUCT'; 421 422 my $level = 1 + $params{level}; 423 my ($pkg, $file, $line, $sub, @other) = $end_phase ? caller(0) : caller($level); 424 unless ($pkg || $end_phase) { 425 confess "Could not find context at depth $level" unless $params{fudge}; 426 ($pkg, $file, $line, $sub, @other) = caller(--$level) while ($level >= 0 && !$pkg); 427 } 428 429 my $depth = $level; 430 $depth++ while DO_DEPTH_CHECK && !$end_phase && (!$current || $depth <= $current->{_depth} + $params{wrapped}) && caller($depth + 1); 431 $depth -= $params{wrapped}; 432 my $depth_ok = !DO_DEPTH_CHECK || $end_phase || !$current || $current->{_depth} < $depth; 433 434 if ($current && $params{on_release} && $depth_ok) { 435 $current->{_on_release} ||= []; 436 push @{$current->{_on_release}} => $params{on_release}; 437 } 438 439 # I know this is ugly.... 440 ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error) and return bless( 441 { 442 %$current, 443 _is_canon => undef, 444 errno => $errno, 445 eval_error => $eval_error, 446 child_error => $child_error, 447 _is_spawn => [$pkg, $file, $line, $sub], 448 }, 449 'Test2::API::Context' 450 ) if $current && $depth_ok; 451 452 # Handle error condition of bad level 453 if ($current) { 454 unless (${$current->{_aborted}}) { 455 _canon_error($current, [$pkg, $file, $line, $sub, $depth]) 456 unless $current->{_is_canon}; 457 458 _depth_error($current, [$pkg, $file, $line, $sub, $depth]) 459 unless $depth_ok; 460 } 461 462 $current->release if $current->{_is_canon}; 463 464 delete $CONTEXTS->{$hid}; 465 } 466 467 # Directly bless the object here, calling new is a noticeable performance 468 # hit with how often this needs to be called. 469 my $trace = bless( 470 { 471 frame => [$pkg, $file, $line, $sub], 472 pid => $$, 473 tid => get_tid(), 474 cid => gen_uid(), 475 hid => $hid, 476 nested => $hub->{nested}, 477 buffered => $hub->{buffered}, 478 479 full_caller => [$pkg, $file, $line, $sub, @other], 480 481 $INST->{trace_stamps} ? (stamp => time()) : (), 482 483 $$UUID_VIA ? ( 484 huuid => $hub->{uuid}, 485 uuid => ${$UUID_VIA}->('context'), 486 ) : (), 487 }, 488 'Test2::EventFacet::Trace' 489 ); 490 491 # Directly bless the object here, calling new is a noticeable performance 492 # hit with how often this needs to be called. 493 my $aborted = 0; 494 $current = bless( 495 { 496 _aborted => \$aborted, 497 stack => $stack, 498 hub => $hub, 499 trace => $trace, 500 _is_canon => 1, 501 _depth => $depth, 502 errno => $errno, 503 eval_error => $eval_error, 504 child_error => $child_error, 505 $params{on_release} ? (_on_release => [$params{on_release}]) : (), 506 }, 507 'Test2::API::Context' 508 ); 509 510 $CONTEXTS->{$hid} = $current; 511 weaken($CONTEXTS->{$hid}); 512 513 $_->($current) for @$INIT_CBS; 514 map $_->($current), @{$hub->{_context_init}} if $hub->{_context_init}; 515 516 $params{on_init}->($current) if $params{on_init}; 517 518 ($!, $@, $?, $^E) = ($errno, $eval_error, $child_error, $extended_error); 519 520 return $current; 521} 522 523sub _depth_error { 524 _existing_error(@_, <<" EOT"); 525context() was called to retrieve an existing context, however the existing 526context was created in a stack frame at the same, or deeper level. This usually 527means that a tool failed to release the context when it was finished. 528 EOT 529} 530 531sub _canon_error { 532 _existing_error(@_, <<" EOT"); 533context() was called to retrieve an existing context, however the existing 534context has an invalid internal state (!_canon_count). This should not normally 535happen unless something is mucking about with internals... 536 EOT 537} 538 539sub _existing_error { 540 my ($ctx, $details, $msg) = @_; 541 my ($pkg, $file, $line, $sub, $depth) = @$details; 542 543 my $oldframe = $ctx->{trace}->frame; 544 my $olddepth = $ctx->{_depth}; 545 546 # Older versions of Carp do not export longmess() function, so it needs to be called with package name 547 my $mess = Carp::longmess(); 548 549 warn <<" EOT"; 550$msg 551Old context details: 552 File: $oldframe->[1] 553 Line: $oldframe->[2] 554 Tool: $oldframe->[3] 555 Depth: $olddepth 556 557New context details: 558 File: $file 559 Line: $line 560 Tool: $sub 561 Depth: $depth 562 563Trace: $mess 564 565Removing the old context and creating a new one... 566 EOT 567} 568 569sub release($;$) { 570 $_[0]->release; 571 return $_[1]; 572} 573 574sub intercept(&) { 575 my $code = shift; 576 my $ctx = context(); 577 578 my $events = _intercept($code, deep => 0); 579 580 $ctx->release; 581 582 return $events; 583} 584 585sub intercept_deep(&) { 586 my $code = shift; 587 my $ctx = context(); 588 589 my $events = _intercept($code, deep => 1); 590 591 $ctx->release; 592 593 return $events; 594} 595 596sub _intercept { 597 my $code = shift; 598 my %params = @_; 599 my $ctx = context(); 600 601 my $ipc; 602 if (my $global_ipc = test2_ipc()) { 603 my $driver = blessed($global_ipc); 604 $ipc = $driver->new; 605 } 606 607 my $hub = Test2::Hub::Interceptor->new( 608 ipc => $ipc, 609 no_ending => 1, 610 ); 611 612 my @events; 613 $hub->listen(sub { push @events => $_[1] }, inherit => $params{deep}); 614 615 $ctx->stack->top; # Make sure there is a top hub before we begin. 616 $ctx->stack->push($hub); 617 618 my $trace = $ctx->trace; 619 my $state = {}; 620 $hub->clean_inherited(trace => $trace, state => $state); 621 622 my ($ok, $err) = (1, undef); 623 T2_SUBTEST_WRAPPER: { 624 # Do not use 'try' cause it localizes __DIE__ 625 $ok = eval { $code->(hub => $hub, context => $ctx->snapshot); 1 }; 626 $err = $@; 627 628 # They might have done 'BEGIN { skip_all => "whatever" }' 629 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && $err->isa('Test2::Hub::Interceptor::Terminator'))) { 630 $ok = 1; 631 $err = undef; 632 } 633 } 634 635 $hub->cull; 636 $ctx->stack->pop($hub); 637 638 $hub->restore_inherited(trace => $trace, state => $state); 639 640 $ctx->release; 641 642 die $err unless $ok; 643 644 $hub->finalize($trace, 1) 645 if $ok 646 && !$hub->no_ending 647 && !$hub->ended; 648 649 require Test2::API::InterceptResult; 650 return Test2::API::InterceptResult->new_from_ref(\@events); 651} 652 653sub run_subtest { 654 my ($name, $code, $params, @args) = @_; 655 656 $_->($name,$code,@args) 657 for Test2::API::test2_list_pre_subtest_callbacks(); 658 659 $params = {buffered => $params} unless ref $params; 660 my $inherit_trace = delete $params->{inherit_trace}; 661 662 my $ctx = context(); 663 664 my $parent = $ctx->hub; 665 666 # If a parent is buffered then the child must be as well. 667 my $buffered = $params->{buffered} || $parent->{buffered}; 668 669 $ctx->note($name) unless $buffered; 670 671 my $stack = $ctx->stack || $STACK; 672 my $hub = $stack->new_hub( 673 class => 'Test2::Hub::Subtest', 674 %$params, 675 buffered => $buffered, 676 ); 677 678 my @events; 679 $hub->listen(sub { push @events => $_[1] }); 680 681 if ($buffered) { 682 if (my $format = $hub->format) { 683 my $hide = $format->can('hide_buffered') ? $format->hide_buffered : 1; 684 $hub->format(undef) if $hide; 685 } 686 } 687 688 if ($inherit_trace) { 689 my $orig = $code; 690 $code = sub { 691 my $base_trace = $ctx->trace; 692 my $trace = $base_trace->snapshot(nested => 1 + $base_trace->nested); 693 my $st_ctx = Test2::API::Context->new( 694 trace => $trace, 695 hub => $hub, 696 ); 697 $st_ctx->do_in_context($orig, @args); 698 }; 699 } 700 701 my $start_stamp = time; 702 703 my ($ok, $err, $finished); 704 T2_SUBTEST_WRAPPER: { 705 # Do not use 'try' cause it localizes __DIE__ 706 $ok = eval { $code->(@args); 1 }; 707 $err = $@; 708 709 # They might have done 'BEGIN { skip_all => "whatever" }' 710 if (!$ok && $err =~ m/Label not found for "last T2_SUBTEST_WRAPPER"/ || (blessed($err) && blessed($err) eq 'Test::Builder::Exception')) { 711 $ok = undef; 712 $err = undef; 713 } 714 else { 715 $finished = 1; 716 } 717 } 718 719 my $stop_stamp = time; 720 721 if ($params->{no_fork}) { 722 if ($$ != $ctx->trace->pid) { 723 warn $ok ? "Forked inside subtest, but subtest never finished!\n" : $err; 724 exit 255; 725 } 726 727 if (get_tid() != $ctx->trace->tid) { 728 warn $ok ? "Started new thread inside subtest, but thread never finished!\n" : $err; 729 exit 255; 730 } 731 } 732 elsif (!$parent->is_local && !$parent->ipc) { 733 warn $ok ? "A new process or thread was started inside subtest, but IPC is not enabled!\n" : $err; 734 exit 255; 735 } 736 737 $stack->pop($hub); 738 739 my $trace = $ctx->trace; 740 741 my $bailed = $hub->bailed_out; 742 743 if (!$finished) { 744 if ($bailed && !$buffered) { 745 $ctx->bail($bailed->reason); 746 } 747 elsif ($bailed && $buffered) { 748 $ok = 1; 749 } 750 else { 751 my $code = $hub->exit_code; 752 $ok = !$code; 753 $err = "Subtest ended with exit code $code" if $code; 754 } 755 } 756 757 $hub->finalize($trace->snapshot(huuid => $hub->uuid, hid => $hub->hid, nested => $hub->nested, buffered => $buffered), 1) 758 if $ok 759 && !$hub->no_ending 760 && !$hub->ended; 761 762 my $pass = $ok && $hub->is_passing; 763 my $e = $ctx->build_event( 764 'Subtest', 765 pass => $pass, 766 name => $name, 767 subtest_id => $hub->id, 768 subtest_uuid => $hub->uuid, 769 buffered => $buffered, 770 subevents => \@events, 771 start_stamp => $start_stamp, 772 stop_stamp => $stop_stamp, 773 ); 774 775 my $plan_ok = $hub->check_plan; 776 777 $ctx->hub->send($e); 778 779 $ctx->failure_diag($e) unless $e->pass; 780 781 $ctx->diag("Caught exception in subtest: $err") unless $ok; 782 783 $ctx->diag("Bad subtest plan, expected " . $hub->plan . " but ran " . $hub->count) 784 if defined($plan_ok) && !$plan_ok; 785 786 $ctx->bail($bailed->reason) if $bailed && $buffered; 787 788 $ctx->release; 789 return $pass; 790} 791 792# There is a use-cycle between API and API/Context. Context needs to use some 793# API functions as the package is compiling. Test2::API::context() needs 794# Test2::API::Context to be loaded, but we cannot 'require' the module there as 795# it causes a very noticeable performance impact with how often context() is 796# called. 797require Test2::API::Context; 798 7991; 800 801__END__ 802 803=pod 804 805=encoding UTF-8 806 807=head1 NAME 808 809Test2::API - Primary interface for writing Test2 based testing tools. 810 811=head1 ***INTERNALS NOTE*** 812 813B<The internals of this package are subject to change at any time!> The public 814methods provided will not change in backwards-incompatible ways (once there is 815a stable release), but the underlying implementation details might. 816B<Do not break encapsulation here!> 817 818Currently the implementation is to create a single instance of the 819L<Test2::API::Instance> Object. All class methods defer to the single 820instance. There is no public access to the singleton, and that is intentional. 821The class methods provided by this package provide the only functionality 822publicly exposed. 823 824This is done primarily to avoid the problems Test::Builder had by exposing its 825singleton. We do not want anyone to replace this singleton, rebless it, or 826directly muck with its internals. If you need to do something and cannot 827because of the restrictions placed here, then please report it as an issue. If 828possible, we will create a way for you to implement your functionality without 829exposing things that should not be exposed. 830 831=head1 DESCRIPTION 832 833This package exports all the functions necessary to write and/or verify testing 834tools. Using these building blocks you can begin writing test tools very 835quickly. You are also provided with tools that help you to test the tools you 836write. 837 838=head1 SYNOPSIS 839 840=head2 WRITING A TOOL 841 842The C<context()> method is your primary interface into the Test2 framework. 843 844 package My::Ok; 845 use Test2::API qw/context/; 846 847 our @EXPORT = qw/my_ok/; 848 use base 'Exporter'; 849 850 # Just like ok() from Test::More 851 sub my_ok($;$) { 852 my ($bool, $name) = @_; 853 my $ctx = context(); # Get a context 854 $ctx->ok($bool, $name); 855 $ctx->release; # Release the context 856 return $bool; 857 } 858 859See L<Test2::API::Context> for a list of methods available on the context object. 860 861=head2 TESTING YOUR TOOLS 862 863The C<intercept { ... }> tool lets you temporarily intercept all events 864generated by the test system: 865 866 use Test2::API qw/intercept/; 867 868 use My::Ok qw/my_ok/; 869 870 my $events = intercept { 871 # These events are not displayed 872 my_ok(1, "pass"); 873 my_ok(0, "fail"); 874 }; 875 876As of version 1.302178 this now returns an arrayref that is also an instance of 877L<Test2::API::InterceptResult>. See the L<Test2::API::InterceptResult> 878documentation for details on how to best use it. 879 880=head2 OTHER API FUNCTIONS 881 882 use Test2::API qw{ 883 test2_init_done 884 test2_stack 885 test2_set_is_end 886 test2_get_is_end 887 test2_ipc 888 test2_formatter_set 889 test2_formatter 890 test2_is_testing_done 891 }; 892 893 my $init = test2_init_done(); 894 my $stack = test2_stack(); 895 my $ipc = test2_ipc(); 896 897 test2_formatter_set($FORMATTER) 898 my $formatter = test2_formatter(); 899 900 ... And others ... 901 902=head1 MAIN API EXPORTS 903 904All exports are optional. You must specify subs to import. 905 906 use Test2::API qw/context intercept run_subtest/; 907 908This is the list of exports that are most commonly needed. If you are simply 909writing a tool, then this is probably all you need. If you need something and 910you cannot find it here, then you can also look at L</OTHER API EXPORTS>. 911 912These exports lack the 'test2_' prefix because of how important/common they 913are. Exports in the L</OTHER API EXPORTS> section have the 'test2_' prefix to 914ensure they stand out. 915 916=head2 context(...) 917 918Usage: 919 920=over 4 921 922=item $ctx = context() 923 924=item $ctx = context(%params) 925 926=back 927 928The C<context()> function will always return the current context. If 929there is already a context active, it will be returned. If there is not an 930active context, one will be generated. When a context is generated it will 931default to using the file and line number where the currently running sub was 932called from. 933 934Please see L<Test2::API::Context/"CRITICAL DETAILS"> for important rules about 935what you can and cannot do with a context once it is obtained. 936 937B<Note> This function will throw an exception if you ignore the context object 938it returns. 939 940B<Note> On perls 5.14+ a depth check is used to ensure there are no context 941leaks. This cannot be safely done on older perls due to 942L<https://rt.perl.org/Public/Bug/Display.html?id=127774> 943You can forcefully enable it either by setting C<$ENV{T2_CHECK_DEPTH} = 1> or 944C<$Test2::API::DO_DEPTH_CHECK = 1> B<BEFORE> loading L<Test2::API>. 945 946=head3 OPTIONAL PARAMETERS 947 948All parameters to C<context> are optional. 949 950=over 4 951 952=item level => $int 953 954If you must obtain a context in a sub deeper than your entry point you can use 955this to tell it how many EXTRA stack frames to look back. If this option is not 956provided the default of C<0> is used. 957 958 sub third_party_tool { 959 my $sub = shift; 960 ... # Does not obtain a context 961 $sub->(); 962 ... 963 } 964 965 third_party_tool(sub { 966 my $ctx = context(level => 1); 967 ... 968 $ctx->release; 969 }); 970 971=item wrapped => $int 972 973Use this if you need to write your own tool that wraps a call to C<context()> 974with the intent that it should return a context object. 975 976 sub my_context { 977 my %params = ( wrapped => 0, @_ ); 978 $params{wrapped}++; 979 my $ctx = context(%params); 980 ... 981 return $ctx; 982 } 983 984 sub my_tool { 985 my $ctx = my_context(); 986 ... 987 $ctx->release; 988 } 989 990If you do not do this, then tools you call that also check for a context will 991notice that the context they grabbed was created at the same stack depth, which 992will trigger protective measures that warn you and destroy the existing 993context. 994 995=item stack => $stack 996 997Normally C<context()> looks at the global hub stack. If you are maintaining 998your own L<Test2::API::Stack> instance you may pass it in to be used 999instead of the global one. 1000 1001=item hub => $hub 1002 1003Use this parameter if you want to obtain the context for a specific hub instead 1004of whatever one happens to be at the top of the stack. 1005 1006=item on_init => sub { ... } 1007 1008This lets you provide a callback sub that will be called B<ONLY> if your call 1009to C<context()> generated a new context. The callback B<WILL NOT> be called if 1010C<context()> is returning an existing context. The only argument passed into 1011the callback will be the context object itself. 1012 1013 sub foo { 1014 my $ctx = context(on_init => sub { 'will run' }); 1015 1016 my $inner = sub { 1017 # This callback is not run since we are getting the existing 1018 # context from our parent sub. 1019 my $ctx = context(on_init => sub { 'will NOT run' }); 1020 $ctx->release; 1021 } 1022 $inner->(); 1023 1024 $ctx->release; 1025 } 1026 1027=item on_release => sub { ... } 1028 1029This lets you provide a callback sub that will be called when the context 1030instance is released. This callback will be added to the returned context even 1031if an existing context is returned. If multiple calls to context add callbacks, 1032then all will be called in reverse order when the context is finally released. 1033 1034 sub foo { 1035 my $ctx = context(on_release => sub { 'will run second' }); 1036 1037 my $inner = sub { 1038 my $ctx = context(on_release => sub { 'will run first' }); 1039 1040 # Neither callback runs on this release 1041 $ctx->release; 1042 } 1043 $inner->(); 1044 1045 # Both callbacks run here. 1046 $ctx->release; 1047 } 1048 1049=back 1050 1051=head2 release($;$) 1052 1053Usage: 1054 1055=over 4 1056 1057=item release $ctx; 1058 1059=item release $ctx, ...; 1060 1061=back 1062 1063This is intended as a shortcut that lets you release your context and return a 1064value in one statement. This function will get your context, and an optional 1065return value. It will release your context, then return your value. Scalar 1066context is always assumed. 1067 1068 sub tool { 1069 my $ctx = context(); 1070 ... 1071 1072 return release $ctx, 1; 1073 } 1074 1075This tool is most useful when you want to return the value you get from calling 1076a function that needs to see the current context: 1077 1078 my $ctx = context(); 1079 my $out = some_tool(...); 1080 $ctx->release; 1081 return $out; 1082 1083We can combine the last 3 lines of the above like so: 1084 1085 my $ctx = context(); 1086 release $ctx, some_tool(...); 1087 1088=head2 context_do(&;@) 1089 1090Usage: 1091 1092 sub my_tool { 1093 context_do { 1094 my $ctx = shift; 1095 1096 my (@args) = @_; 1097 1098 $ctx->ok(1, "pass"); 1099 1100 ... 1101 1102 # No need to call $ctx->release, done for you on scope exit. 1103 } @_; 1104 } 1105 1106Using this inside your test tool takes care of a lot of boilerplate for you. It 1107will ensure a context is acquired. It will capture and rethrow any exception. It 1108will ensure the context is released when you are done. It preserves the 1109subroutine call context (list, scalar, void). 1110 1111This is the safest way to write a test tool. The only two downsides to this are a 1112slight performance decrease, and some extra indentation in your source. If the 1113indentation is a problem for you then you can take a peek at the next section. 1114 1115=head2 no_context(&;$) 1116 1117Usage: 1118 1119=over 4 1120 1121=item no_context { ... }; 1122 1123=item no_context { ... } $hid; 1124 1125 sub my_tool(&) { 1126 my $code = shift; 1127 my $ctx = context(); 1128 ... 1129 1130 no_context { 1131 # Things in here will not see our current context, they get a new 1132 # one. 1133 1134 $code->(); 1135 }; 1136 1137 ... 1138 $ctx->release; 1139 }; 1140 1141=back 1142 1143This tool will hide a context for the provided block of code. This means any 1144tools run inside the block will get a completely new context if they acquire 1145one. The new context will be inherited by tools nested below the one that 1146acquired it. 1147 1148This will normally hide the current context for the top hub. If you need to 1149hide the context for a different hub you can pass in the optional C<$hid> 1150parameter. 1151 1152=head2 intercept(&) 1153 1154Usage: 1155 1156 my $events = intercept { 1157 ok(1, "pass"); 1158 ok(0, "fail"); 1159 ... 1160 }; 1161 1162This function takes a codeblock as its only argument, and it has a prototype. 1163It will execute the codeblock, intercepting any generated events in the 1164process. It will return an array reference with all the generated event 1165objects. All events should be subclasses of L<Test2::Event>. 1166 1167As of version 1.302178 the events array that is returned is blssed as an 1168L<Test2::API::InterceptResult> instance. L<Test2::API::InterceptResult> 1169Provides a helpful interface for filtering and/or inspecting the events list 1170overall, or individual events within the list. 1171 1172This is intended to help you test your test code. This is not intended for 1173people simply writing tests. 1174 1175=head2 run_subtest(...) 1176 1177Usage: 1178 1179 run_subtest($NAME, \&CODE, $BUFFERED, @ARGS) 1180 1181 # or 1182 1183 run_subtest($NAME, \&CODE, \%PARAMS, @ARGS) 1184 1185This will run the provided codeblock with the args in C<@args>. This codeblock 1186will be run as a subtest. A subtest is an isolated test state that is condensed 1187into a single L<Test2::Event::Subtest> event, which contains all events 1188generated inside the subtest. 1189 1190=head3 ARGUMENTS: 1191 1192=over 4 1193 1194=item $NAME 1195 1196The name of the subtest. 1197 1198=item \&CODE 1199 1200The code to run inside the subtest. 1201 1202=item $BUFFERED or \%PARAMS 1203 1204If this is a simple scalar then it will be treated as a boolean for the 1205'buffered' setting. If this is a hash reference then it will be used as a 1206parameters hash. The param hash will be used for hub construction (with the 1207specified keys removed). 1208 1209Keys that are removed and used by run_subtest: 1210 1211=over 4 1212 1213=item 'buffered' => $bool 1214 1215Toggle buffered status. 1216 1217=item 'inherit_trace' => $bool 1218 1219Normally the subtest hub is pushed and the sub is allowed to generate its own 1220root context for the hub. When this setting is turned on a root context will be 1221created for the hub that shares the same trace as the current context. 1222 1223Set this to true if your tool is producing subtests without user-specified 1224subs. 1225 1226=item 'no_fork' => $bool 1227 1228Defaults to off. Normally forking inside a subtest will actually fork the 1229subtest, resulting in 2 final subtest events. This parameter will turn off that 1230behavior, only the original process/thread will return a final subtest event. 1231 1232=back 1233 1234=item @ARGS 1235 1236Any extra arguments you want passed into the subtest code. 1237 1238=back 1239 1240=head3 BUFFERED VS UNBUFFERED (OR STREAMED) 1241 1242Normally all events inside and outside a subtest are sent to the formatter 1243immediately by the hub. Sometimes it is desirable to hold off sending events 1244within a subtest until the subtest is complete. This usually depends on the 1245formatter being used. 1246 1247=over 4 1248 1249=item Things not affected by this flag 1250 1251In both cases events are generated and stored in an array. This array is 1252eventually used to populate the C<subevents> attribute on the 1253L<Test2::Event::Subtest> event that is generated at the end of the subtest. 1254This flag has no effect on this part, it always happens. 1255 1256At the end of the subtest, the final L<Test2::Event::Subtest> event is sent to 1257the formatter. 1258 1259=item Things that are affected by this flag 1260 1261The C<buffered> attribute of the L<Test2::Event::Subtest> event will be set to 1262the value of this flag. This means any formatter, listener, etc which looks at 1263the event will know if it was buffered. 1264 1265=item Things that are formatter dependent 1266 1267Events within a buffered subtest may or may not be sent to the formatter as 1268they happen. If a formatter fails to specify then the default is to B<NOT SEND> 1269the events as they are generated, instead the formatter can pull them from the 1270C<subevents> attribute. 1271 1272A formatter can specify by implementing the C<hide_buffered()> method. If this 1273method returns true then events generated inside a buffered subtest will not be 1274sent independently of the final subtest event. 1275 1276=back 1277 1278An example of how this is used is the L<Test2::Formatter::TAP> formatter. For 1279unbuffered subtests the events are rendered as they are generated. At the end 1280of the subtest, the final subtest event is rendered, but the C<subevents> 1281attribute is ignored. For buffered subtests the opposite occurs, the events are 1282NOT rendered as they are generated, instead the C<subevents> attribute is used 1283to render them all at once. This is useful when running subtests tests in 1284parallel, since without it the output from subtests would be interleaved 1285together. 1286 1287=head1 OTHER API EXPORTS 1288 1289Exports in this section are not commonly needed. These all have the 'test2_' 1290prefix to help ensure they stand out. You should look at the L</MAIN API 1291EXPORTS> section before looking here. This section is one where "Great power 1292comes with great responsibility". It is possible to break things badly if you 1293are not careful with these. 1294 1295All exports are optional. You need to list which ones you want at import time: 1296 1297 use Test2::API qw/test2_init_done .../; 1298 1299=head2 STATUS AND INITIALIZATION STATE 1300 1301These provide access to internal state and object instances. 1302 1303=over 4 1304 1305=item $bool = test2_init_done() 1306 1307This will return true if the stack and IPC instances have already been 1308initialized. It will return false if they have not. Init happens as late as 1309possible. It happens as soon as a tool requests the IPC instance, the 1310formatter, or the stack. 1311 1312=item $bool = test2_load_done() 1313 1314This will simply return the boolean value of the loaded flag. If Test2 has 1315finished loading this will be true, otherwise false. Loading is considered 1316complete the first time a tool requests a context. 1317 1318=item test2_set_is_end() 1319 1320=item test2_set_is_end($bool) 1321 1322This is used to toggle Test2's belief that the END phase has already started. 1323With no arguments this will set it to true. With arguments it will set it to 1324the first argument's value. 1325 1326This is used to prevent the use of C<caller()> in END blocks which can cause 1327segfaults. This is only necessary in some persistent environments that may have 1328multiple END phases. 1329 1330=item $bool = test2_get_is_end() 1331 1332Check if Test2 believes it is the END phase. 1333 1334=item $stack = test2_stack() 1335 1336This will return the global L<Test2::API::Stack> instance. If this has not 1337yet been initialized it will be initialized now. 1338 1339=item $bool = test2_is_testing_done() 1340 1341This will return true if testing is complete and no other events should be 1342sent. This is useful in things like warning handlers where you might want to 1343turn warnings into events, but need them to start acting like normal warnings 1344when testing is done. 1345 1346 $SIG{__WARN__} = sub { 1347 my ($warning) = @_; 1348 1349 if (test2_is_testing_done()) { 1350 warn @_; 1351 } 1352 else { 1353 my $ctx = context(); 1354 ... 1355 $ctx->release 1356 } 1357 } 1358 1359=item test2_ipc_disable 1360 1361Disable IPC. 1362 1363=item $bool = test2_ipc_disabled 1364 1365Check if IPC is disabled. 1366 1367=item test2_ipc_wait_enable() 1368 1369=item test2_ipc_wait_disable() 1370 1371=item $bool = test2_ipc_wait_enabled() 1372 1373These can be used to turn IPC waiting on and off, or check the current value of 1374the flag. 1375 1376Waiting is turned on by default. Waiting will cause the parent process/thread 1377to wait until all child processes and threads are finished before exiting. You 1378will almost never want to turn this off. 1379 1380=item $bool = test2_no_wait() 1381 1382=item test2_no_wait($bool) 1383 1384B<DISCOURAGED>: This is a confusing interface, it is better to use 1385C<test2_ipc_wait_enable()>, C<test2_ipc_wait_disable()> and 1386C<test2_ipc_wait_enabled()>. 1387 1388This can be used to get/set the no_wait status. Waiting is turned on by 1389default. Waiting will cause the parent process/thread to wait until all child 1390processes and threads are finished before exiting. You will almost never want 1391to turn this off. 1392 1393=item $fh = test2_stdout() 1394 1395=item $fh = test2_stderr() 1396 1397These functions return the filehandles that test output should be written to. 1398They are primarily useful when writing a custom formatter and code that turns 1399events into actual output (TAP, etc.). They will return a dupe of the original 1400filehandles that formatted output can be sent to regardless of whatever state 1401the currently running test may have left STDOUT and STDERR in. 1402 1403=item test2_reset_io() 1404 1405Re-dupe the internal filehandles returned by C<test2_stdout()> and 1406C<test2_stderr()> from the current STDOUT and STDERR. You shouldn't need to do 1407this except in very peculiar situations (for example, you're testing a new 1408formatter and you need control over where the formatter is sending its output.) 1409 1410=back 1411 1412=head2 BEHAVIOR HOOKS 1413 1414These are hooks that allow you to add custom behavior to actions taken by Test2 1415and tools built on top of it. 1416 1417=over 4 1418 1419=item test2_add_callback_exit(sub { ... }) 1420 1421This can be used to add a callback that is called after all testing is done. This 1422is too late to add additional results, the main use of this callback is to set the 1423exit code. 1424 1425 test2_add_callback_exit( 1426 sub { 1427 my ($context, $exit, \$new_exit) = @_; 1428 ... 1429 } 1430 ); 1431 1432The C<$context> passed in will be an instance of L<Test2::API::Context>. The 1433C<$exit> argument will be the original exit code before anything modified it. 1434C<$$new_exit> is a reference to the new exit code. You may modify this to 1435change the exit code. Please note that C<$$new_exit> may already be different 1436from C<$exit> 1437 1438=item test2_add_callback_post_load(sub { ... }) 1439 1440Add a callback that will be called when Test2 is finished loading. This 1441means the callback will be run once, the first time a context is obtained. 1442If Test2 has already finished loading then the callback will be run immediately. 1443 1444=item test2_add_callback_testing_done(sub { ... }) 1445 1446This adds your coderef as a follow-up to the root hub after Test2 is finished loading. 1447 1448This is essentially a helper to do the following: 1449 1450 test2_add_callback_post_load(sub { 1451 my $stack = test2_stack(); 1452 $stack->top; # Ensure we have a hub 1453 my ($hub) = Test2::API::test2_stack->all; 1454 1455 $hub->set_active(1); 1456 1457 $hub->follow_up(sub { ... }); # <-- Your coderef here 1458 }); 1459 1460=item test2_add_callback_context_acquire(sub { ... }) 1461 1462Add a callback that will be called every time someone tries to acquire a 1463context. This will be called on EVERY call to C<context()>. It gets a single 1464argument, a reference to the hash of parameters being used the construct the 1465context. This is your chance to change the parameters by directly altering the 1466hash. 1467 1468 test2_add_callback_context_acquire(sub { 1469 my $params = shift; 1470 $params->{level}++; 1471 }); 1472 1473This is a very scary API function. Please do not use this unless you need to. 1474This is here for L<Test::Builder> and backwards compatibility. This has you 1475directly manipulate the hash instead of returning a new one for performance 1476reasons. 1477 1478=item test2_add_callback_context_init(sub { ... }) 1479 1480Add a callback that will be called every time a new context is created. The 1481callback will receive the newly created context as its only argument. 1482 1483=item test2_add_callback_context_release(sub { ... }) 1484 1485Add a callback that will be called every time a context is released. The 1486callback will receive the released context as its only argument. 1487 1488=item test2_add_callback_pre_subtest(sub { ... }) 1489 1490Add a callback that will be called every time a subtest is going to be 1491run. The callback will receive the subtest name, coderef, and any 1492arguments. 1493 1494=item @list = test2_list_context_acquire_callbacks() 1495 1496Return all the context acquire callback references. 1497 1498=item @list = test2_list_context_init_callbacks() 1499 1500Returns all the context init callback references. 1501 1502=item @list = test2_list_context_release_callbacks() 1503 1504Returns all the context release callback references. 1505 1506=item @list = test2_list_exit_callbacks() 1507 1508Returns all the exit callback references. 1509 1510=item @list = test2_list_post_load_callbacks() 1511 1512Returns all the post load callback references. 1513 1514=item @list = test2_list_pre_subtest_callbacks() 1515 1516Returns all the pre-subtest callback references. 1517 1518=item test2_add_uuid_via(sub { ... }) 1519 1520=item $sub = test2_add_uuid_via() 1521 1522This allows you to provide a UUID generator. If provided UUIDs will be attached 1523to all events, hubs, and contexts. This is useful for storing, tracking, and 1524linking these objects. 1525 1526The sub you provide should always return a unique identifier. Most things will 1527expect a proper UUID string, however nothing in Test2::API enforces this. 1528 1529The sub will receive exactly 1 argument, the type of thing being tagged 1530'context', 'hub', or 'event'. In the future additional things may be tagged, in 1531which case new strings will be passed in. These are purely informative, you can 1532(and usually should) ignore them. 1533 1534=back 1535 1536=head2 IPC AND CONCURRENCY 1537 1538These let you access, or specify, the IPC system internals. 1539 1540=over 4 1541 1542=item $bool = test2_has_ipc() 1543 1544Check if IPC is enabled. 1545 1546=item $ipc = test2_ipc() 1547 1548This will return the global L<Test2::IPC::Driver> instance. If this has not yet 1549been initialized it will be initialized now. 1550 1551=item test2_ipc_add_driver($DRIVER) 1552 1553Add an IPC driver to the list. This will add the driver to the start of the 1554list. 1555 1556=item @drivers = test2_ipc_drivers() 1557 1558Get the list of IPC drivers. 1559 1560=item $bool = test2_ipc_polling() 1561 1562Check if polling is enabled. 1563 1564=item test2_ipc_enable_polling() 1565 1566Turn on polling. This will cull events from other processes and threads every 1567time a context is created. 1568 1569=item test2_ipc_disable_polling() 1570 1571Turn off IPC polling. 1572 1573=item test2_ipc_enable_shm() 1574 1575Legacy, this is currently a no-op that returns 0; 1576 1577=item test2_ipc_set_pending($uniq_val) 1578 1579Tell other processes and events that an event is pending. C<$uniq_val> should 1580be a unique value no other thread/process will generate. 1581 1582B<Note:> After calling this C<test2_ipc_get_pending()> will return 1. This is 1583intentional, and not avoidable. 1584 1585=item $pending = test2_ipc_get_pending() 1586 1587This returns -1 if there is no way to check (assume yes) 1588 1589This returns 0 if there are (most likely) no pending events. 1590 1591This returns 1 if there are (likely) pending events. Upon return it will reset, 1592nothing else will be able to see that there were pending events. 1593 1594=item $timeout = test2_ipc_get_timeout() 1595 1596=item test2_ipc_set_timeout($timeout) 1597 1598Get/Set the timeout value for the IPC system. This timeout is how long the IPC 1599system will wait for child processes and threads to finish before aborting. 1600 1601The default value is C<30> seconds. 1602 1603=back 1604 1605=head2 MANAGING FORMATTERS 1606 1607These let you access, or specify, the formatters that can/should be used. 1608 1609=over 4 1610 1611=item $formatter = test2_formatter 1612 1613This will return the global formatter class. This is not an instance. By 1614default the formatter is set to L<Test2::Formatter::TAP>. 1615 1616You can override this default using the C<T2_FORMATTER> environment variable. 1617 1618Normally 'Test2::Formatter::' is prefixed to the value in the 1619environment variable: 1620 1621 $ T2_FORMATTER='TAP' perl test.t # Use the Test2::Formatter::TAP formatter 1622 $ T2_FORMATTER='Foo' perl test.t # Use the Test2::Formatter::Foo formatter 1623 1624If you want to specify a full module name you use the '+' prefix: 1625 1626 $ T2_FORMATTER='+Foo::Bar' perl test.t # Use the Foo::Bar formatter 1627 1628=item test2_formatter_set($class_or_instance) 1629 1630Set the global formatter class. This can only be set once. B<Note:> This will 1631override anything specified in the 'T2_FORMATTER' environment variable. 1632 1633=item @formatters = test2_formatters() 1634 1635Get a list of all loaded formatters. 1636 1637=item test2_formatter_add($class_or_instance) 1638 1639Add a formatter to the list. Last formatter added is used at initialization. If 1640this is called after initialization a warning will be issued. 1641 1642=back 1643 1644=head2 TIME STAMPS 1645 1646You can enable or disable timestamps in trace facets. They are disabled by 1647default for compatibility and performance reasons. 1648 1649=over 4 1650 1651=item test2_enable_trace_stamps() 1652 1653Enable stamps in traces. 1654 1655=item test2_disable_trace_stamps() 1656 1657Disable stamps in traces. 1658 1659=item $bool = test2_trace_stamps_enabled() 1660 1661Check status of trace stamps. 1662 1663=back 1664 1665=head1 OTHER EXAMPLES 1666 1667See the C</Examples/> directory included in this distribution. 1668 1669=head1 SEE ALSO 1670 1671L<Test2::API::Context> - Detailed documentation of the context object. 1672 1673L<Test2::IPC> - The IPC system used for threading/fork support. 1674 1675L<Test2::Formatter> - Formatters such as TAP live here. 1676 1677L<Test2::Event> - Events live in this namespace. 1678 1679L<Test2::Hub> - All events eventually funnel through a hub. Custom hubs are how 1680C<intercept()> and C<run_subtest()> are implemented. 1681 1682=head1 MAGIC 1683 1684This package has an END block. This END block is responsible for setting the 1685exit code based on the test results. This end block also calls the callbacks that 1686can be added to this package. 1687 1688=head1 SOURCE 1689 1690The source code repository for Test2 can be found at 1691L<https://github.com/Test-More/test-more/>. 1692 1693=head1 MAINTAINERS 1694 1695=over 4 1696 1697=item Chad Granum E<lt>exodist@cpan.orgE<gt> 1698 1699=back 1700 1701=head1 AUTHORS 1702 1703=over 4 1704 1705=item Chad Granum E<lt>exodist@cpan.orgE<gt> 1706 1707=back 1708 1709=head1 COPYRIGHT 1710 1711Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>. 1712 1713This program is free software; you can redistribute it and/or 1714modify it under the same terms as Perl itself. 1715 1716See L<https://dev.perl.org/licenses/> 1717 1718=cut 1719