--- /dev/null
+#!/usr/bin/perl
+#
+# Copyright 2006 (C) LibLime
+# Joshua Ferraro <jmf@liblime.com>
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+#
+# $Id$
+#
+use strict; use warnings; #FIXME: turn off warnings before release
+
+# specify the number of tests
+use Test::More tests => 23;
+use C4::Context;
+use C4::Record;
+
+=head1 NAME
+
+Record_test.pl - test suite for Record.pm
+
+=head1 SYNOPSIS
+
+$ export KOHA_CONF=/path/to/koha.conf
+$ ./Record_test.pl
+
+=cut
+
+## FIXME: Preliminarily grab the modules dir so we can run this in context
+
+ok (1, 'module compiled');
+
+# open some files for testing
+open MARC21MARC8,"testrecords/marc21_marc8.dat" or die $!;
+my $marc21_marc8; # = scalar (MARC21MARC8);
+foreach my $line (<MARC21MARC8>) {
+ $marc21_marc8 .= $line;
+}
+$marc21_marc8 =~ s/\n$//;
+close MARC21MARC8;
+
+open (MARC21UTF8,"<:utf8","testrecords/marc21_utf8.dat") or die $!;
+my $marc21_utf8;
+foreach my $line (<MARC21UTF8>) {
+ $marc21_utf8 .= $line;
+}
+$marc21_utf8 =~ s/\n$//;
+close MARC21UTF8;
+
+open MARC21MARC8COMBCHARS,"testrecords/marc21_marc8_combining_chars.dat" or die $!;
+my $marc21_marc8_combining_chars;
+foreach my $line(<MARC21MARC8COMBCHARS>) {
+ $marc21_marc8_combining_chars.=$line;
+}
+$marc21_marc8_combining_chars =~ s/\n$//; #FIXME: why is a newline ending up here?
+close MARC21MARC8COMBCHARS;
+
+open (MARC21UTF8COMBCHARS,"<:utf8","testrecords/marc21_utf8_combining_chars.dat") or die $!;
+my $marc21_utf8_combining_chars;
+foreach my $line(<MARC21UTF8COMBCHARS>) {
+ $marc21_utf8_combining_chars.=$line;
+}
+close MARC21UTF8COMBCHARS;
+
+open (MARCXMLUTF8,"<:utf8","testrecords/marcxml_utf8.xml") or die $!;
+my $marcxml_utf8;
+foreach my $line (<MARCXMLUTF8>) {
+ $marcxml_utf8 .= $line;
+}
+close MARCXMLUTF8;
+
+$marcxml_utf8 =~ s/\n//g;
+
+## The Tests:
+my $error; my $marc; my $marcxml; my $dcxml; # some scalars to store values
+## MARC to MARCXML
+print "\n1. Checking conversion of simple ISO-2709 (MARC21) records to MARCXML\n";
+ok (($error,$marcxml) = marc2marcxml($marc21_marc8,'UTF-8','MARC21'), 'marc2marcxml - from MARC-8 to UTF-8 (MARC21)');
+ok (!$error, 'no errors in conversion');
+ $marcxml =~ s/\n//g;
+ $marcxml =~ s/v\/ s/v\/s/g; # FIXME: bug in new_from_xml_record!!
+is ($marcxml,$marcxml_utf8, 'record matches antitype');
+
+ok (($error,$marcxml) = marc2marcxml($marc21_utf8,'UTF-8','MARC21'), 'marc2marcxml - from UTF-8 to UTF-8 (MARC21)');
+ok (!$error, 'no errors in conversion');
+ $marcxml =~ s/\n//g;
+ $marcxml =~ s/v\/ s/v\/s/g;
+is ($marcxml,$marcxml_utf8, 'record matches antitype');
+
+print "\n2. checking binary MARC21 records with combining characters to MARCXML\n";
+ok (($error,$marcxml) = marc2marcxml($marc21_marc8_combining_chars,'MARC-8','MARC21'), 'marc2marcxml - from MARC-8 to MARC-8 with combining characters(MARC21)');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$marcxml) = marc2marcxml($marc21_marc8_combining_chars,'UTF-8','MARC21'), 'marc2marcxml - from MARC-8 to UTF-8 with combining characters (MARC21)');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$marcxml) = marc2marcxml($marc21_utf8_combining_chars,'UTF-8','MARC21'), 'marc2marcxml - from UTF-8 to UTF-8 with combining characters (MARC21)');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$dcxml) = marc2dcxml($marc21_utf8), 'marc2dcxml - from ISO-2709 to Dublin Core');
+ok (!$error, 'no errors in conversion');
+
+print "\n3. checking ability to alter encoding\n";
+ok (($error,$marc) = changeEncoding($marc21_marc8,'MARC','MARC21','UTF-8'), 'changeEncoding - MARC21 from MARC-8 to UTF-8');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$marc) = changeEncoding($marc21_utf8,'MARC','MARC21','MARC-8'), 'changeEncoding - MARC21 from UTF-8 to MARC-8');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$marc) = changeEncoding($marc21_marc8,'MARC','MARC21','MARC-8'), 'changeEncoding - MARC21 from MARC-8 to MARC-8');
+ok (!$error, 'no errors in conversion');
+
+ok (($error,$marc) = changeEncoding($marc21_utf8,'MARC','MARC21','UTF-8'), 'changeEncoding - MARC21 from UTF-8 to UTF-8');
+ok (!$error, 'no errors in conversion');
+
+__END__
+
+=head1 TODO
+
+Still lots more to test including UNIMARC support
+
+=head1 AUTHOR
+
+Joshua Ferraro <jmf@liblime.com>
+
+=head1 MODIFICATIONS
+
+# $Id$
+
+=cut
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<record
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
+ xmlns="http://www.loc.gov/MARC21/slim">
+
+ <leader>00463 a2200169 4500</leader>
+ <controlfield tag="001">84893</controlfield>
+ <controlfield tag="003">ACLS</controlfield>
+ <controlfield tag="005">19990324000000.0</controlfield>
+ <controlfield tag="008">930421s19xx xxu 00010 eng d</controlfield>
+ <datafield tag="020" ind1=" " ind2=" ">
+ <subfield code="a">0854562702</subfield>
+ </datafield>
+ <datafield tag="090" ind1=" " ind2=" ">
+ <subfield code="c">1738</subfield>
+ <subfield code="d">1738</subfield>
+ </datafield>
+ <datafield tag="100" ind1="1" ind2=" ">
+ <subfield code="a">Christie, Agatha,</subfield>
+ <subfield code="d">1890-1976.</subfield>
+ </datafield>
+ <datafield tag="245" ind1="1" ind2="0">
+ <subfield code="a">Why didn't they ask Evans? /</subfield>
+ <subfield code="c">Agatha Christie.</subfield>
+ </datafield>
+ <datafield tag="250" ind1=" " ind2=" ">
+ <subfield code="a">Large print edition.</subfield>
+ </datafield>
+ <datafield tag="650" ind1=" " ind2="0">
+ <subfield code="a">Large type books.</subfield>
+ </datafield>
+ <datafield tag="942" ind1=" " ind2=" ">
+ <subfield code="a">ONe</subfield>
+ <subfield code="c">LP</subfield>
+ <subfield code="k">LP Christie</subfield>
+ </datafield>
+ <datafield tag="952" ind1=" " ind2=" ">
+ <subfield code="b">NPL</subfield>
+ <subfield code="p">31000000010273</subfield>
+ <subfield code="r">12.00</subfield>
+ <subfield code="u">2148</subfield>
+ </datafield>
+</record>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<collection
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd"
+ xmlns="http://www.loc.gov/MARC21/slim">
+
+<record>
+ <leader>00463 a2200169 4500</leader>
+ <controlfield tag="001">84893</controlfield>
+ <controlfield tag="003">ACLS</controlfield>
+ <controlfield tag="005">19990324000000.0</controlfield>
+ <controlfield tag="008">930421s19xx xxu 00010 eng d</controlfield>
+ <datafield tag="020" ind1=" " ind2=" ">
+ <subfield code="a">0854562702</subfield>
+ </datafield>
+ <datafield tag="090" ind1=" " ind2=" ">
+ <subfield code="c">1738</subfield>
+ <subfield code="d">1738</subfield>
+ </datafield>
+ <datafield tag="100" ind1="1" ind2=" ">
+ <subfield code="a">Christie, Agatha,</subfield>
+ <subfield code="d">1890-1976.</subfield>
+ </datafield>
+ <datafield tag="245" ind1="1" ind2="0">
+ <subfield code="a">Why didn't they ask Evans? /</subfield>
+ <subfield code="c">Agatha Christie.</subfield>
+ </datafield>
+ <datafield tag="250" ind1=" " ind2=" ">
+ <subfield code="a">Large print edition.</subfield>
+ </datafield>
+ <datafield tag="650" ind1=" " ind2="0">
+ <subfield code="a">Large type books.</subfield>
+ </datafield>
+ <datafield tag="942" ind1=" " ind2=" ">
+ <subfield code="a">ONe</subfield>
+ <subfield code="c">LP</subfield>
+ <subfield code="k">LP Christie</subfield>
+ </datafield>
+ <datafield tag="952" ind1=" " ind2=" ">
+ <subfield code="b">NPL</subfield>
+ <subfield code="p">31000000010273</subfield>
+ <subfield code="r">12.00</subfield>
+ <subfield code="u">2148</subfield>
+ </datafield>
+</record>
+</collection>