# -*- cperl -*- use strict; use warnings; use IO::Handle; use Test::More tests => 29; BEGIN { use_ok('Text::BibTeX'); require "t/common.pl"; } # ---------------------------------------------------------------------- # 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 ok($entry = new Text::BibTeX::Entry); ok($entry->parse_s ($text)); ok($entry->type eq 'article'); $entry->set_type ('book'); ok($entry->type eq 'book'); ok($entry->key eq 'homer97'); $entry->set_key ($entry->key . 'a'); ok($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; no_err( sub { $author = $entry->get ('author'); is($author, 'Simpson, Homer and Flanders, Ned'); }); no_err( sub { $entry->set (author => 'Foo Bar {and} Co.', title => 'This is a new title'); ok($entry->get ('author') eq 'Foo Bar {and} Co.'); ok($entry->get ('title') eq 'This is a new title'); ok(slist_equal ([$entry->get ('author', 'title')], ['Foo Bar {and} Co.', 'This is a new title'])); } ); ok(slist_equal ([$entry->fieldlist], [qw(author title journal year)])); ok($entry->exists ('journal')); $entry->delete ('journal'); no_err sub { @fieldlist = $entry->fieldlist; ok(! $entry->exists ('journal')); ok(slist_equal (\@fieldlist, [qw(author title year)])); }; err_like sub { $entry->set_fieldlist ([qw(author title journal year)]); }, qr/implicitly adding undefined field \"journal\"/i; no_err sub { @fieldlist = $entry->fieldlist; ok($entry->exists ('journal')); ok(! defined $entry->get ('journal')); ok(slist_equal (\@fieldlist, [qw(author title journal year)])); }; $entry->delete ('journal', 'author', 'year'); no_err sub { @fieldlist = $entry->fieldlist; }; ok(! $entry->exists ('journal')); ok(! $entry->exists ('author')); ok(! $entry->exists ('year')); is(scalar @fieldlist, 1); is($fieldlist[0] ,'title');