The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Plack::Middleware::Profiler::NYTProf;
use Test::More;
use Plack::Test;
use Plack::Builder;
use HTTP::Request::Common;
use File::Which qw(which);
use t::Util;

my $bin = scalar which 'nytprofhtml';
plan skip_all => 'nytprofhtml script is not in your PATH.' unless defined $bin;

# FIXME Need to check profile format version 
# The report isn't generated if profile format version isn't matched. 
# 
#subtest 'Change report_dir location' => sub {
#    my $result_dir = tempdir();
#    my $report_dir = tempdir();
#
#    my $app = Plack::Middleware::Profiler::NYTProf->wrap(
#        simple_app(),
#        env_nytprof => "start=no:addpid=0:file="
#            . path( $result_dir, "nytprof.out" ),
#        enable_reporting => 1,
#        report_dir       => sub {$report_dir},
#    );
#
#    ok !-e path( $report_dir, "index.html" ),
#        "Doesn't exists report directory before profiling";
#
#    test_psgi $app, sub {
#        my $cb  = shift;
#        my $res = $cb->( GET "/" );
#
#        is $res->code, 200, "Response is returned successfully";
#
#        ok -e path( $result_dir, "nytprof.out" ), "Exists nytprof.out";
#        ok -e path( $report_dir, "index.html" ),  "Exists the report file";
#        isnt -d "report", 1, "Doesn't exist default report directory";
#    };
#
#    unlink glob("nytprof*.out");
#};

subtest 'Change profiling_result_dir location and output filename' => sub {
    my $result_dir      = tempdir();
    my $result_filename = $$;

    my $app = Plack::Middleware::Profiler::NYTProf->wrap(
        simple_app(),
        env_nytprof => "start=no:addpid=0:file="
            . path( $result_dir, "nytprof.out" ),
        profiling_result_dir       => sub {$result_dir},
        profiling_result_file_name => sub {"nytprof.$result_filename.out"},
        enable_reporting           => 0
    );

    isnt -e path( $result_dir, "nytprof.$result_filename.out" ), 1,
        "Doesn't exists profile before profiling";

    test_psgi $app, sub {
        my $cb  = shift;
        my $res = $cb->( GET "/" );

        is $res->code, 200, "Response is returned successfully";

        ok -e path( $result_dir, "nytprof.$result_filename.out" ),
            "Exists profiling result file";
        ok !-e "nytprof.out", "Doesn't exist nytprof.out";

        ok !-e path( "report", "index.html" ), "Doesn't exist report file";
    };

    unlink glob("nytprof*.out");
};

done_testing;