#!perl -w
use strict;
use Test::More tests => 19;
use Text::Aspell;
BEGIN { use_ok( 'Text::Aspell' ); }
# Always passes, but returns true or false for so can show diag
sub ok_to_fail {
my ( $ok, $message ) = @_;
pass( $message );
return $ok;
}
my $speller = Text::Aspell->new;
ok( $speller, 'Create Speller object' );
ok( $speller->set_option('sug-mode','fast'), 'Set option sug-mode to "fast"' ) or
diag( "Error: " . $speller->errstr );
#print defined $speller->create_speller ? "ok 4\n" : "not ok 4 " . $speller->errstr . "\n";
ok( $speller->set_option( 'lang', 'en_US' ), 'Set language to en_US' ) or
diag( "Error: " . $speller->errstr );
my $language = $speller->get_option('lang');
is ( $language, 'en_US', "check that 'lang' option is en_US" ) or
diag( "Really need the en_US dictionary installed!" );
ok( $speller->check('test'), 'Make sure word "test" is in dictionary' ) or
do {
my $err = $speller->errstr;
diag(<<"");
********************************************************************
* Error: $err
*
* Are you sure you have the Aspell en_US dictionary installed?
*
*********************************************************************
};
my $new_word = 'testt';
# make sure $new_word does NOT exist in the dictionary
ok( !$speller->check( $new_word ), "Word '$new_word' should NOT be in dictionary" );
ok( $speller->suggest($new_word), "suggest for word '$new_word'" ) or
diag( 'Error: ' . $speller->errstr );
my @s_words = $speller->suggest($new_word);
ok( @s_words > 2, "search for testt returned more than 2 [@s_words]" );
# Now add $new_word to session so it will be returned in suggestions
ok ( $speller->add_to_session($new_word), "add '$new_word' to the aspell session") or
diag( 'Error: ' . $speller->errstr );
@s_words = $speller->suggest($new_word);
ok( grep(/$new_word/, @s_words), "'$new_word' added to session now is returned in suggest" );
ok_to_fail( $speller->store_replacement( 'foo', 'bar' ), 'Store replacement "foo" for "bar"' ) or
diag( 'See README for more info on store_replacemnt' );
ok( grep( /bar/, $speller->suggest('foo')), 'Searching for "foo" found replacement "bar"' );
ok_to_fail( $speller->clear_session, 'Clear the aspell session' ) or
diag("clear_session may fail like store_replacement. See README" );
@s_words = $speller->suggest($new_word);
ok( !grep(/$new_word/, @s_words), "'$new_word' should not be a suggestion after clearing the session")
or diag( "suggested words were [@s_words]" );
my @dicts = $speller->list_dictionaries;
ok( @dicts, scalar @dicts . ' dictionaries listed' );
@dicts = $speller->dictionary_info;
ok( @dicts, scalar @dicts . ' dictionaries found with dictionary_info' );
use Data::Dumper;
print Dumper \@dicts;
my @list = $speller->get_option_as_list('sug-split-char');
SKIP: {
skip "option 'sug-split-char' not in your version of Aspell", 1 if $speller->errstr =~ m/is unknown/;
cmp_ok( scalar @list, '>', 1, 'Found more than one list item for "sug-split-char"') or
diag('Maybe option "sug-split-char" not in your version of Aspell or modified by config. ' . $speller->errstr);
}
# Display option keys
my $options = $speller->fetch_option_keys;
my $keys_count = ref $options eq 'HASH' ? keys %$options : 0;
if ( $keys_count ) {
for my $option ( sort keys %$options ) {
my $detail = $options->{$option};
for ( qw/ desc default type / ) {
$detail->{$_} = '(*not defined*)' unless defined $detail->{$_};
}
my $current;
if ( $detail->{type} == 3 ) {
$current = join ', ', map { "'$_'" } $speller->get_option_as_list( $option );
$current = "($current)" if defined $current;
} else {
$current = $speller->get_option( $option );
}
$current = '(* not defined *)' unless defined $current;
print <<"";
$option:
Description: $detail->{desc}
Default: $detail->{default}
Option type: $detail->{type}
Current Val: $current
}
}
ok( $keys_count, "Found $keys_count option keys from fetch_option_keys()" );