The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use warnings;
use strict;

use Test::More qw(no_plan);

use File::Fu;

my $tmp = File::Fu->dir->temp_dir('tmp.');
can_ok($tmp, 'basename');
can_ok($tmp, 'dirname');
is($tmp->dirname, './');
like($tmp->basename, qr/^tmp\./);
eval {$tmp /= "foo"};
like($@, qr/^cannot mutate/);
my $subdir = $tmp / 'foo';
ok(! $subdir->isa('File::Fu::Dir::Temp'));

{
  my $fn;
  {
    my $fh = File::Fu->dir->temp_file;
    $fn = $fh->name;
    is($fn->dirname, File::Fu->dir);
    ok($fn->e);
    ok(-e $fn);
    $fn = "$fn";
  }
  ok(! -e $fn, 'gone');
}
{
  my $fn;
  {
    my $fh = File::Fu->temp_file('foo');
    $fn = $fh->name;
    like($fn->basename, qr/^foo/);
    is($fn->dirname, File::Fu->tmp);
    ok($fn->e);
    ok(-e $fn);
    $fn = "$fn";
  }
  ok(! -e $fn, 'gone');
}

{ # write+do
  my @stuff = ("thbbt\n", "xo094auc\n", "\n  \n...ee\n");
  my $n;
  is(scalar(
    File::Fu->temp_file->write(@stuff)->do(sub {
      $n = ''.$_->name;
      ok(-e $n);
      $_->name->read
    })
  ), join('',@stuff), "write temp file");
  ok(not(-e $n), "$n gone");
}
{
  my $x = File::Fu->temp_file;
  $x->write("...");
  eval {$x->write("\n")};
  like(($@||''), qr/^write\(\) on closed tempfile/);
}


# vim:ts=2:sw=2:et:sta