The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::Tester;
use Test::More tests => 98;
use Test::Output;

use strict;
use warnings;

check_test( sub {
            combined_is(sub {
                        print "TEST OUT\n";
                      },
                      "TEST OUT\n",
                      'Testing STDOUT'
                    )
            },{
              ok => 1,
              name => 'Testing STDOUT',
              diag => '',
            },'STDOUT matches success'
          );

check_test( sub {
            combined_is(sub {
                        print STDERR "TEST OUT\n";
                      },
                      "TEST OUT\n",
                      'Testing STDERR'
                    )
            },{
              ok => 1,
              name => 'Testing STDERR',
              diag => '',
            },'STDERR matches success'
          );

check_test( sub {
            combined_is(sub {
                        print "TEST OUT\n"; 
                        print STDERR "TEST ERR\n";
                        print "TEST AGAIN\n"; 
                      },
                      "TEST OUT\nTEST ERR\nTEST AGAIN\n",
                      'Testing STDOUT & STDERR'
                    )
            },{
              ok => 1,
              name => 'Testing STDOUT & STDERR',
              diag => '',
            },'STDOUT & STDERR match success'
          );

check_test( sub {
            combined_is(sub {
                        printf("TEST OUT - %d\n",25);
                      },
                      "TEST OUT - 25\n",
                      'Testing STDOUT printf'
                    )
            },{
              ok => 1,
              name => 'Testing STDOUT printf',
              diag => '',
            },'STDOUT printf match success'
          );

check_test( sub {
            combined_is(sub {
                        print "TEST OUT";
                      },
                      "TEST OUT STDOUT",
                      'Testing STDOUT failure'
                    )
            }, {
              ok => 0,
              name => 'Testing STDOUT failure',
              diag => "STDOUT & STDERR are:\nTEST OUT\nnot:\nTEST OUT STDOUT\nas expected\n",
            },'STDOUT not matching failure'
          );

check_test( sub {
            combined_is(sub {
                      print STDERR "TEST OUT"},
                      "TEST OUT STDERR",
                      'Testing STDERR failure'
                    )
            }, {
              ok => 0,
              name => 'Testing STDERR failure',
              diag => "STDOUT & STDERR are:\nTEST OUT\nnot:\nTEST OUT STDERR\nas expected\n",
            },'STDERR not matching failure'
          );

check_test( sub {
            combined_is(sub {
                      print "TEST ERR\n";
                      print STDERR "TEST OUT\n"},
                      "TEST ERR STDOUT\nTEST OUT STDERR\n",
                      'Testing STDERR failure'
                    )
            }, {
              ok => 0,
              name => 'Testing STDERR failure',
              diag => "STDOUT & STDERR are:\nTEST ERR\nTEST OUT\n\nnot:\nTEST ERR STDOUT\nTEST OUT STDERR\n\nas expected\n",
            },'STDOUT and STDERR not matching failure'
          );

check_test( sub {
            combined_is {
                        print "TEST OUT\n";
                      }
                      "TEST OUT\n",
                      'Testing STDOUT'
            },{
              ok => 1,
              name => 'Testing STDOUT',
              diag => '',
            },'codeblock STDOUT matches success'
          );

check_test( sub {
            combined_is {
                        print STDERR "TEST OUT\n";
                      }
                      "TEST OUT\n",
                      'Testing STDERR'
            },{
              ok => 1,
              name => 'Testing STDERR',
              diag => '',
            },'STDERR matches success'
          );

check_test( sub {
            combined_is {
                        print "TEST OUT\n"; 
                        print STDERR "TEST ERR\n";
                        print "TEST OUT AGAIN\n"; 
                      }
                      "TEST OUT\nTEST ERR\nTEST OUT AGAIN\n",
                      'Testing STDOUT & STDERR'
            },{
              ok => 1,
              name => 'Testing STDOUT & STDERR',
              diag => '',
            },'STDOUT & STDERR match success'
          );

check_test( sub {
            combined_is {
                        printf("TEST OUT - %d\n",25);
                      }
                      "TEST OUT - 25\n",
                      'Testing STDOUT printf'
            },{
              ok => 1,
              name => 'Testing STDOUT printf',
              diag => '',
            },'STDOUT printf match success'
          );

check_test( sub {
            combined_is {
                        print "TEST OUT";
                      }
                      "TEST OUT STDOUT",
                      'Testing STDOUT failure'
            }, {
              ok => 0,
              name => 'Testing STDOUT failure',
              diag => "STDOUT & STDERR are:\nTEST OUT\nnot:\nTEST OUT STDOUT\nas expected\n",
            },'STDOUT not matching failure'
          );

check_test( sub {
            combined_is {
                      print STDERR "TEST OUT"}
                      "TEST OUT STDERR",
                      'Testing STDERR failure'
            }, {
              ok => 0,
              name => 'Testing STDERR failure',
              diag => "STDOUT & STDERR are:\nTEST OUT\nnot:\nTEST OUT STDERR\nas expected\n",
            },'STDERR not matching failure'
          );

check_test( sub {
            combined_is {
                      print "TEST ERR\n";
                      print STDERR "TEST OUT\n"}
                      "TEST ERR STDOUT\nTEST OUT STDERR\n",
                      'Testing STDERR failure'
            }, {
              ok => 0,
              name => 'Testing STDERR failure',
              diag => "STDOUT & STDERR are:\nTEST ERR\nTEST OUT\n\nnot:\nTEST ERR STDOUT\nTEST OUT STDERR\n\nas expected\n",
            },'STDOUT and STDERR not matching failure'
          );