The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package xt::Cinnamon;
use strict;
use warnings;
use base qw(Exporter);
our @EXPORT = qw(cinnamon);

use Test::Requires qw(Directory::Scratch);

sub cinnamon {
    my $dir = Directory::Scratch->new();
    chdir $dir;
    $dir->mkdir('config');

    my $app = Cinnamon::Tested->new(dir => $dir);
    return $app;
}

1;

package Cinnamon::Tested;
use strict;
use warnings;

use Capture::Tiny qw(capture);

sub new {
    my ($class, %args) = @_;
    my $self = bless {}, $class;
    $self->{dir} = $args{dir};
    return $self;
}

sub dir {
    return $_[0]->{dir};
}

sub run {
    my ($self, @args) = @_;
    ($self->{system_output}, $self->{system_error}) = capture {
        eval { system(@args) };
        warn $@;
    };
}

sub system_output {
    return $_[0]->{system_output};
}

sub system_error {
    return $_[0]->{system_error};
}

1;