package Test::Power::FromLine;
use strict;
use warnings;
use utf8;
use 5.010_001;

use Cwd ();
use File::Spec;

our $BASE_DIR = Cwd::getcwd();
our %FILECACHE;

sub inspect_line {
    my $level = shift;

    my ($package, $filename, $line_no) = caller($level+1);
    my $line = sub {
        undef $filename if $filename eq '-e';
        if (defined $filename) {
            $filename = File::Spec->rel2abs($filename, $BASE_DIR);
            my $file = $FILECACHE{$filename} ||= [
                do {
                    # Do not die if we can't open the file
                    open my $fh, '<', $filename
                        or return '';
                    <$fh>
                }
            ];
            my $line = $file->[ $line_no - 1 ];
            $line =~ s{^\s+|\s+$}{}g;
            $line;
        } else {
            "";
        }
    }->();
    return ($package, $filename, $line_no, $line);
}

1;