#!/usr/bin/perl use strict; use warnings; use Test::More qw( no_plan ); use_ok( 'MARC::Detrans::Rules' ); use_ok( 'MARC::Detrans::Rule' ); my $rules = MARC::Detrans::Rules->new(); isa_ok( $rules, 'MARC::Detrans::Rules' ); $rules->addRule( MARC::Detrans::Rule->new( from=>'a', to=>'A', escape=>'g' ) ); $rules->addRule( MARC::Detrans::Rule->new( from=>'b', to=>'B', escape=>'h' ) ); $rules->addRule( MARC::Detrans::Rule->new( from=>'ac', to=>'Z', escape=>'i' ) ); $rules->addRule( MARC::Detrans::Rule->new( from=>'|*+', to=>'X', escape=>'j' ) ); my $esc = chr(0x1B); my $ascii = chr(0x1B).chr(0x28).chr(0x42); is( $rules->convert('a'), "${esc}gA${ascii}", 'convert() 1' ); is( $rules->convert('ab'), "${esc}gA${esc}hB${ascii}", 'convert() 2' ); is( $rules->convert('aab'), "${esc}gAA${esc}hB${ascii}", 'convert() 3' ); is( $rules->convert('aac'), "${esc}gA${esc}iZ${ascii}", 'convert() 4' ); is( $rules->convert('|*+'), "${esc}jX${ascii}", "convert() 5" ); ## non-existant mapping ok( ! $rules->convert('acw'), 'non-existant mapping' ); is( $rules->error(), 'no matching rule found for "w" [0x77] at position 3', 'non-existant mapping error message' ); ok( ! $rules->error(), 'error message erased on retrieval' ); $rules->addRule( MARC::Detrans::Rule->new( from => 'z', to => '^ESCz' ) ); is( $rules->convert('z'), chr(0x1B).'z', 'rule with ^ESC' );