# t/005_desc.t - verify that primary descriptions are returned correctly
#
# $Id: 005_desc.t,v 1.1 2004/02/18 13:56:28 coar Exp $
#
#   CPAN module Convert::ASCIInames
#
#   Copyright 2004 Ken A L Coar
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this package or any files in it except in
#   compliance with the License.  A copy of the License should be
#   included as part of the package; the normative version may be
#   obtained a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#

use Test::More;
use Convert::ASCIInames;

my $res;
my %descs = (
             0x00 => 'Null character',
             0x01 => 'Start of Header',
             0x02 => 'Start of Text',
             0x03 => 'End Of Text',
             0x04 => 'End Of Transmission',
             0x05 => 'Enquiry',
             0x06 => 'Acknowledge',
             0x07 => 'Bell',
             0x08 => 'Backspace',
             0x09 => 'Horizontal Tab',
             0x0a => 'Linefeed',
             0x0b => 'Vertical Tab',
             0x0c => 'Formfeed',
             0x0d => 'Carriage Return',
             0x0e => 'Shift Out',
             0x0f => 'Shift In',
             0x10 => 'Data Link Escape',
             0x11 => 'Device Control 1',
             0x12 => 'Device Control 2',
             0x13 => 'Device Control 3',
             0x14 => 'Device Control 4',
             0x15 => 'Negative Acknowledge',
             0x16 => 'Synchronous Idle',
             0x17 => 'End of Transmission Block',
             0x18 => 'Cancel',
             0x19 => 'End of Medium',
             0x1a => 'Substitute',
             0x1b => 'Escape',
             0x1c => 'File Separator',
             0x1d => 'Group Separator',
             0x1e => 'Record Separator',
             0x1f => 'Unit Separator',
             0x7f => 'Delete',
             0x80 => 'Reserved for future standardizaton',
             0x81 => 'Reserved for future standardizaton',
             0x82 => 'Reserved for future standardizaton',
             0x83 => 'Reserved for future standardizaton',
             0x84 => 'Index',
             0x85 => 'Next Line',
             0x86 => 'Start of Selected Area',
             0x87 => 'End of Selected Area',
             0x88 => 'Horizontal Tabulation Set',
             0x89 => 'Horizontal Tab with Justify',
             0x8a => 'Vertical Tabulation Set',
             0x8b => 'Partial Line Down',
             0x8c => 'Partial Line Up',
             0x8d => 'Reverse Index',
             0x8e => 'Single Shift 2',
             0x8f => 'Single Shift 3',
             0x90 => 'Device control string',
             0x91 => 'Private Use 1',
             0x92 => 'Private Use 2',
             0x93 => 'Set Transmission State',
             0x94 => 'Cancel Character',
             0x95 => 'Message Waiting',
             0x96 => 'Start of Protected Area',
             0x97 => 'End of Protected Area',
             0x98 => 'Reserved for future standardization',
             0x99 => 'Reserved for future standardization',
             0x9a => 'Reserved for future standardization',
             0x9b => 'Control Sequence Introducer',
             0x9c => 'String Terminator',
             0x9d => 'Operating System Command',
             0x9e => 'Privacy Message',
             0x9f => 'Application Program Command',
             0x41 => chr(0x41),   # Not a special character
            );

Convert::ASCIInames::Configure(fallthrough => 0);
plan(tests => 512);
runem();
Convert::ASCIInames::Configure(fallthrough => 1);
$descs{0x20} = 'Space';
runem();

sub runem {
    for (my $ord = 0; $ord < 256; $ord++) {
        my $expected = (defined($descs{$ord}) ? $descs{$ord} : chr($ord));
        $res = ASCIIdescription($ord);
        ok($res eq $expected,
           "ASCIIdescription($ord) == '$expected'; got '$res'");
    }
}

__END__

#
# Local Variables:
# mode: cperl
# tab-width: 4
# indent-tabs-mode: nil
# End:
#