File: ffi_probe_runner.t

package info (click to toggle)
libffi-platypus-perl 2.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,860 kB
  • sloc: perl: 7,388; ansic: 6,862; cpp: 53; sh: 19; makefile: 14
file content (121 lines) | stat: -rw-r--r-- 2,726 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use Test2::V0 -no_srand => 1;
use Config;
use FFI::Probe::Runner;
use Capture::Tiny qw( capture_merged );
use FFI::Build;
use FFI::Build::File::C;
use FFI::Temp;
use lib 't/lib';
use Test::Cleanup;

my $runner;
my $tempdir = FFI::Temp->newdir( TEMPLATE => 'test-probe-XXXXXX' );

subtest basic => sub {

  my $exe = "blib/lib/auto/share/dist/FFI-Platypus/probe/bin/dlrun$Config{exe_ext}";

  unless(-f $exe)
  {
    require FFI::Probe::Runner::Builder;
    my $out;
    my $exception;
    ($out, $exe, $exception) = capture_merged {
      my $exe = eval {
        FFI::Probe::Runner::Builder->new( dir => $tempdir )->build;
      };
      ($exe, $exception);
    };
    note $out;
    die $exception if $exception;
  }

  note "exe=$exe";

  $runner = FFI::Probe::Runner->new(
    exe => $exe,
  );

  isa_ok $runner, 'FFI::Probe::Runner';
  is($runner->flags, '-');

  is($runner->verify, 1);

};

subtest 'run not pass' => sub {

  my $dir = FFI::Temp->newdir( TEMPLATE => 'test-probe-XXXXXX' );

  my $lib = do {
    my $build = FFI::Build->new(
      'frooble1',
      dir => $dir,
      buildname => "test-probe-$$-@{[ time ]}",
      verbose => 1,
      source => 'corpus/ffi_probe_runner/foo.c',
      export => ['dlmain'],
    );
    note capture_merged {
      $build->build;
      ();
    };
    cleanup("corpus/ffi_probe_runner/@{[ $build->buildname ]}");
    $build->file->path;
  };


  note "lib=$lib";

  my $res = $runner->run($lib, 'one','two','three');

  is($res->rv, 12);
  is($res->signal, 0);
  like($res->stdout, qr!argc=4!ms);
  like($res->stdout, qr!argv\[0\]=.*/bin/dlrun!ms);
  like($res->stdout, qr!argv\[1\]=one!ms);
  like($res->stdout, qr!argv\[2\]=two!ms);
  like($res->stdout, qr!argv\[3\]=three!ms);
  like($res->stderr, qr/something to std error/);
  ok(!$res->pass);

};

subtest 'run pass' => sub {

  my $dir = FFI::Temp->newdir( TEMPLATE => 'test-probe-XXXXXX' );

  my $lib = do {
    my $build = FFI::Build->new(
      'frooble2',
      verbose => 1,
      dir => $dir,
      buildname => "test-probe-$$-@{[ time ]}",
      source => 'corpus/ffi_probe_runner/bar.c',
      export => ['dlmain'],
    );
    note capture_merged {
      $build->build;
      ();
    };
    cleanup("corpus/ffi_probe_runner/@{[ $build->buildname ]}");
    $build->file->path;
  };

  note "lib=$lib";

  my $res = $runner->run($lib, 'one','two','three');

  is($res->rv, 0);
  is($res->signal, 0);
  like($res->stdout, qr!argc=4!ms);
  like($res->stdout, qr!argv\[0\]=.*/bin/dlrun!ms);
  like($res->stdout, qr!argv\[1\]=one!ms);
  like($res->stdout, qr!argv\[2\]=two!ms);
  like($res->stdout, qr!argv\[3\]=three!ms);
  like($res->stderr, qr/something to std error/);
  ok(!!$res->pass);

};

done_testing;