This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Win32 is playing to hard to get but I do not have
[perl5.git] / lib / perl5db / de0.t
1 #!./perl -- -*- mode: cperl; cperl-indent-level: 4 -*-
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6     require Config; import Config;
7     if ($^O eq 'VMS') {
8         print "1..0 # skip on $^O, no piped open\n";
9         exit 0;
10     }
11     $ENV{PERL5LIB} = '../lib';    # so children will see it too
12 }
13
14 use strict;
15 use IPC::Open3 qw(open3);
16 use IO::Select;
17
18 $|=1;
19
20 my @prgs;
21
22 {
23     local $/;
24     @prgs = split "########\n", <DATA>;
25     close DATA;
26 }
27
28 use Test::More;
29
30 plan tests => scalar @prgs;
31
32 require "dumpvar.pl";
33
34 $ENV{PERLDB_OPTS} = "TTY=0";
35 my($ornament1,$ornament2,$wtrfh,$rdrfh);
36 open3 $wtrfh, $rdrfh, 0, $^X, "-de0";
37 my $ios = IO::Select->new();
38 $ios->add($rdrfh);
39 for (@prgs){
40     my($prog,$expected) = split(/\nEXPECT\n?/, $_);
41     print $wtrfh $prog, "\n";
42     my $got;
43     while ($ios->can_read(0.25)) {
44         last unless sysread $rdrfh, $got, 1024, length($got);
45     }
46     SKIP: {
47         skip("failed to read debugger", 1) unless defined $got;
48         $got =~ s/^\s*Loading.*\r?\n?Editor.*\r?\n?\r?\n?Enter.*\r?\n?\r?\n?main::\(-e:1\):\s+0\r?\n?//;
49         unless (defined $ornament1) {
50             $got =~ s/^\s*Loading.*\r?\n?Editor.*\r?\n?\r?\n?Enter.*\r?\n?\r?\n?main::\(-e:1\):\s+0\r?\n?//;
51             ($ornament1,$ornament2) = $got =~
52                 /(.*?)0\s+'reserved example for calibrating the ornaments'\r?\n?(.*)/
53             }
54         $got =~ s/^\Q$ornament1\E//;
55         $got =~ s/\Q$ornament2\E\z//;
56         like($got, qr:$expected:i, $prog);
57     }
58 }
59
60 __END__
61 x "reserved example for calibrating the ornaments"
62 EXPECT
63 0  'reserved example for calibrating the ornaments'
64 ########
65 x "foo"
66 EXPECT
67 0  'foo'
68 ########
69 x "\x{100}"
70 EXPECT
71 0  '\\x\{0100\}'
72 ########
73 x *a
74 EXPECT
75 0  \*main::a
76 ########
77 x 1..3
78 EXPECT
79 0  1
80 1  2
81 2  3
82 ########
83 x +{1..4}
84 EXPECT
85 0\s+HASH\(0x[0-9a-f]+\)
86 \s+1 => 2
87 \s+3 => 4
88 ########