The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

use strict;
use warnings;

use Test::More tests => 4;

BEGIN { use_ok('Term::Spinner') }

{
    package TestFH;

    our $TFHOUT;

    sub TIEHANDLE {
        my $self;
        $TFHOUT = '';
        bless \$self => shift;
    }

    sub PRINT {
        my $self = shift;
        $TFHOUT .= join(q{},@_);
    }

    sub CLOSE { $TFHOUT='' }
}

tie(*FOO, 'TestFH');
my $spinner = Term::Spinner->new(
    output_handle => \*FOO,
);
$spinner->advance();
$spinner->advance();
$spinner->advance();
$spinner->finish();
$spinner->advance();
$spinner->advance();
$spinner->clear();
$spinner->advance();
undef $spinner;
is(
    $TestFH::TFHOUT,
    qq{\\\010 \010|\010 \010/\010 \010x\010 \010\\\010 \010|\010 \010/\010 \010x\010 \010}
);
close(FOO);

tie(*FOO, 'TestFH');
$spinner = Term::Spinner->new(
    output_handle => \*FOO,
    clear_on_destruct => 0,
);
$spinner->advance();
$spinner->advance();
$spinner->advance();
$spinner->finish();
$spinner->advance();
$spinner->advance();
$spinner->clear();
$spinner->advance();
undef $spinner;
is(
    $TestFH::TFHOUT,
    qq{\\\010 \010|\010 \010/\010 \010x\010 \010\\\010 \010|\010 \010/\010 \010x}
);
close(FOO);

tie(*FOO, 'TestFH');
$spinner = Term::Spinner->new(
    output_handle => \*FOO,
    finish_on_destruct => 0,
    clear_on_destruct => 0,
);
$spinner->advance();
$spinner->advance();
$spinner->advance();
$spinner->finish();
$spinner->advance();
$spinner->advance();
$spinner->clear();
$spinner->advance();
undef $spinner;
is(
   $TestFH::TFHOUT,
   qq{\\\010 \010|\010 \010/\010 \010x\010 \010\\\010 \010|\010 \010/}
);
close(FOO);