+});
+
+# circular references
+$ibx->with_umask(sub {
+ my $s = 'foo://'. ('Circle' x 15).'/foo';
+ my $doc_id = $rw->add_message(Email::MIME->create(
+ header => [ Subject => $s ],
+ header_str => [
+ Date => 'Sat, 02 Oct 2010 00:00:01 +0000',
+ 'Message-ID' => '<circle@a>',
+ 'References' => '<circle@a>',
+ 'In-Reply-To' => '<circle@a>',
+ From => 'Circle <circle@example.com>',
+ To => 'list@example.com',
+ ],
+ body => "LOOP!\n"));
+ ok($doc_id > 0, "doc_id defined with circular reference");
+ my $smsg = $rw->query('m:circle@a', {limit=>1})->[0];
+ is($smsg->references, '', "no references created");
+ is($s, $smsg->subject, 'long subject not rewritten');
+});
+
+$ibx->with_umask(sub {
+ my $str = eval {
+ my $mbox = 't/utf8.mbox';
+ open(my $fh, '<', $mbox) or die "failed to open mbox: $mbox\n";
+ local $/;
+ <$fh>
+ };
+ $str =~ s/\AFrom [^\n]+\n//s;
+ my $mime = Email::MIME->new($str);
+ my $doc_id = $rw->add_message($mime);
+ ok($doc_id > 0, 'message indexed doc_id with UTF-8');
+ my $msg = $rw->query('m:testmessage@example.com', {limit => 1})->[0];
+ is($mime->header('Subject'), $msg->subject, 'UTF-8 subject preserved');
+});
+
+{
+ my $msgs = $ro->query('d:19931002..20101002');
+ ok(scalar(@$msgs) > 0, 'got results within range');
+ $msgs = $ro->query('d:20101003..');
+ is(scalar(@$msgs), 0, 'nothing after 20101003');
+ $msgs = $ro->query('d:..19931001');
+ is(scalar(@$msgs), 0, 'nothing before 19931001');
+}
+
+# names and addresses
+{
+ my $mset = $ro->query('t:list@example.com', {mset => 1});
+ is($mset->size, 6, 'searched To: successfully');
+ foreach my $m ($mset->items) {
+ my $smsg = $ro->lookup_article($m->get_docid);
+ like($smsg->to, qr/\blist\@example\.com\b/, 'to appears');
+ }
+
+ $mset = $ro->query('tc:list@example.com', {mset => 1});
+ is($mset->size, 6, 'searched To+Cc: successfully');
+ foreach my $m ($mset->items) {
+ my $smsg = $ro->lookup_article($m->get_docid);
+ my $tocc = join("\n", $smsg->to, $smsg->cc);
+ like($tocc, qr/\blist\@example\.com\b/, 'tocc appears');
+ }
+
+ foreach my $pfx ('tcf:', 'c:') {
+ my $mset = $ro->query($pfx . 'foo@example.com', { mset => 1 });
+ is($mset->items, 1, "searched $pfx successfully for Cc:");
+ foreach my $m ($mset->items) {
+ my $smsg = $ro->lookup_article($m->get_docid);
+ like($smsg->cc, qr/\bfoo\@example\.com\b/,
+ 'cc appears');
+ }
+ }
+
+ foreach my $pfx ('', 'tcf:', 'f:') {
+ my $res = $ro->query($pfx . 'Laggy');
+ is(scalar(@$res), 1,
+ "searched $pfx successfully for From:");
+ foreach my $smsg (@$res) {
+ like($smsg->from, qr/Laggy Sender/,
+ "From appears with $pfx");
+ }
+ }
+}
+
+{
+ $rw_commit->();
+ $ro->reopen;
+ my $res = $ro->query('b:hello');
+ is(scalar(@$res), 0, 'no match on body search only');
+ $res = $ro->query('bs:smith');
+ is(scalar(@$res), 0,
+ 'no match on body+subject search for From');
+
+ $res = $ro->query('q:theatre');
+ is(scalar(@$res), 1, 'only one quoted body');
+ like($res->[0]->from, qr/\AQuoter/, 'got quoted body');
+
+ $res = $ro->query('nq:theatre');
+ is(scalar @$res, 1, 'only one non-quoted body');
+ like($res->[0]->from, qr/\ANon-Quoter/, 'got non-quoted body');
+
+ foreach my $pfx (qw(b: bs:)) {
+ $res = $ro->query($pfx . 'theatre');
+ is(scalar @$res, 2, "searched both bodies for $pfx");
+ like($res->[0]->from, qr/\ANon-Quoter/,
+ "non-quoter first for $pfx");
+ }