use strict; use IO::Handle; BEGIN { require "t/common.pl"; } my $loaded; BEGIN { $| = 1; print "1..22\n"; } END {print "not ok 1\n" unless $loaded;} use Text::BibTeX; $loaded = 1; print "ok 1\n"; setup_stderr; # ---------------------------------------------------------------------- # entry modification methods my ($text, $entry, @warnings, @fieldlist); $text = <<'TEXT'; @article{homer97, author = {Homer Simpson and Ned Flanders}, title = {Territorial Imperatives in Modern Suburbia}, journal = {Journal of Suburban Studies}, year = 1997 } TEXT test ($entry = new Text::BibTeX::Entry); test ($entry->parse_s ($text)); test ($entry->type eq 'article'); $entry->set_type ('book'); test ($entry->type eq 'book'); test ($entry->key eq 'homer97'); $entry->set_key ($entry->key . 'a'); test ($entry->key eq 'homer97a'); my @names = $entry->names ('author'); $names[0] = $names[0]->{'last'}[0] . ', ' . $names[0]->{'first'}[0]; $names[1] = $names[1]->{'last'}[0] . ', ' . $names[1]->{'first'}[0]; $entry->set ('author', join (' and ', @names)); my $author = $entry->get ('author'); test ($author eq 'Simpson, Homer and Flanders, Ned'); test (! warnings); $entry->set (author => 'Foo Bar {and} Co.', title => 'This is a new title'); test ($entry->get ('author') eq 'Foo Bar {and} Co.'); test ($entry->get ('title') eq 'This is a new title'); test (slist_equal ([$entry->get ('author', 'title')], ['Foo Bar {and} Co.', 'This is a new title'])); test (! warnings); test (slist_equal ([$entry->fieldlist], [qw(author title journal year)])); test ($entry->exists ('journal')); $entry->delete ('journal'); @fieldlist = $entry->fieldlist; test (! $entry->exists ('journal') && slist_equal (\@fieldlist, [qw(author title year)])); test (! warnings); $entry->set_fieldlist ([qw(author title journal year)]); @warnings = warnings; test (@warnings == 1 && $warnings[0] =~ /implicitly adding undefined field \"journal\"/i); @fieldlist = $entry->fieldlist; test ($entry->exists ('journal') && ! defined $entry->get ('journal') && slist_equal (\@fieldlist, [qw(author title journal year)])); test (! warnings); $entry->delete ('journal', 'author', 'year'); @fieldlist = $entry->fieldlist; test (! $entry->exists ('journal') && ! $entry->exists ('author') && ! $entry->exists ('year') && @fieldlist == 1 && $fieldlist[0] eq 'title'); test (! warnings);