#!perl
use strict;
use warnings;

use Test::More tests => 13;
use RTF::Tokenizer;
use IO::File;

my $tokenizer = RTF::Tokenizer->new();

isa_ok( $tokenizer, 'RTF::Tokenizer', 'new returned an RTF::Tokenizer object' );

# Test from a filename
$tokenizer->{_BUFFER} = 'a';

$tokenizer->read_file('eg/test.rtf');
like( $tokenizer->{_BUFFER}, qr/^a{\\rtf1\s*/, 'read_file from filename gets first line' );
is( $tokenizer->{_RS}, "UNIX", 'Line-endings identified as UNIX');
$tokenizer->{_BUFFER} = '';

# Test from a filehandle

open(FALA, '< eg/test.rtf') || die $!;
$tokenizer->read_file(\*FALA);

like( $tokenizer->{_BUFFER}, qr/^{\\rtf1\s*/, 'read_file from filehandle gets first line' );
is( $tokenizer->{_RS}, "UNIX", 'Line-endings identified as UNIX');
$tokenizer->{_BUFFER} = '';

close FALA;

# Test from an IO::File object
my $fh = new IO::File;
$fh->open('< eg/test.rtf');
die "Failed to open eg/test.rtf with IO::File" unless $fh;
$tokenizer->read_file( $fh );
like( $tokenizer->{_BUFFER}, qr/^{\\rtf1\s*/, 'read_file from IO gets first line' );
is( $tokenizer->{_RS}, "UNIX", 'Line-endings identified as UNIX');
$tokenizer->{_BUFFER} = '';

# Test that a dodgy GLOB causes problems
my $LAGA = '';
eval '$tokenizer->read_file(\*LAGA)';
my $error_message = $@;
like ( $error_message, qr/Couldn't create an IO::File object from the reference you specified/, 'Dodgy glob caused a croak');

# Try and read a non-existant file
my $filename = 'file1';
$filename++ while (-e $filename);
eval '$tokenizer->read_file($filename)';
$error_message = $@;
like ( $error_message, qr/Couldn't open .+ for reading/, 'None-existant file caused a croak');

# Pass a funky reference
my $bad_ref = [];
eval '$tokenizer->read_file($bad_ref)';
$error_message = $@;
like ( $error_message, qr/You passed a reference to read_file of type ARRAY/, 'Funky reference caused a croak');

# Test initial_read()
is( $tokenizer->initial_read, 512, 'initial_read() returns 512' );
$tokenizer->initial_read(2);
is( $tokenizer->initial_read, 2, 'initial_read() returns 2' );
is( $tokenizer->initial_read, $tokenizer->{_INITIAL_READ}, 'initial_read returns {_INITIAL_READ}');