+$ibx->with_umask(sub {
+ $rw_commit->();
+ $rw->add_message(PublicInbox::Eml->new(<<'EOF'));
+Date: Sat, 02 Oct 2010 00:00:01 +0000
+Subject: Hello
+Message-ID: <quote@a>
+From: Quoter <quoter@example.com>
+To: list@example.com
+
+> theatre illusions
+fade
+EOF
+ $rw->add_message(PublicInbox::Eml->new(<<'EOF'));
+Date: Sat, 02 Oct 2010 00:00:02 +0000
+Subject: Hello
+Message-ID: <nquote@a>
+From: Non-Quoter<non-quoter@example.com>
+To: list@example.com
+
+theatre
+fade
+EOF
+ $rw_commit->();
+ my $res = $ro->reopen->query("theatre");
+ is(scalar(@$res), 2, "got both matches");
+ if (@$res == 2) {
+ is($res->[0]->{mid}, 'nquote@a', 'non-quoted scores higher');
+ is($res->[1]->{mid}, 'quote@a', 'quoted result still returned');
+ }
+ $res = $ro->query("illusions");
+ is(scalar(@$res), 1, "got a match for quoted text");
+ is($res->[0]->{mid}, 'quote@a',
+ "quoted result returned if nothing else") if scalar(@$res);
+});
+
+# circular references
+$ibx->with_umask(sub {
+ my $s = 'foo://'. ('Circle' x 15).'/foo';
+ my $doc_id = $rw->add_message(PublicInbox::Eml->new(<<EOF));
+Subject: $s
+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
+
+LOOP!
+EOF
+ ok($doc_id > 0, "doc_id defined with circular reference");
+ $rw_commit->();
+ my $smsg = $ro->reopen->query('m:circle@a', {limit=>1})->[0];
+ is(defined($smsg), 1, 'found m:circl@a');
+ if (defined $smsg) {
+ is($smsg->{references}, '', "no references created");
+ is($smsg->{subject}, $s, 'long subject not rewritten');
+ }
+});
+
+{
+ 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');
+}
+
+$ibx->with_umask(sub {
+ my $mime = eml_load 't/utf8.eml';
+ my $doc_id = $rw->add_message($mime);
+ ok($doc_id > 0, 'message indexed doc_id with UTF-8');
+ $rw_commit->();
+ my $msg = $ro->reopen->
+ query('m:testmessage@example.com', {limit => 1})->[0];
+ is(defined($msg), 1, 'found testmessage@example.com');
+ if (defined $msg) {
+ is($mime->header('Subject'), $msg->{subject},
+ 'UTF-8 subject preserved');
+ }
+});
+
+# names and addresses
+{
+ my $mset = $ro->query('t:list@example.com', {mset => 1});
+ is($mset->size, 9, 'searched To: successfully');
+ foreach my $m ($mset->items) {
+ my $smsg = $ro->{over_ro}->get_art($m->get_docid);
+ like($smsg->{to}, qr/\blist\@example\.com\b/, 'to appears');
+ my $doc = $m->get_document;
+ my $col = PublicInbox::Search::BYTES();
+ my $bytes = PublicInbox::Smsg::get_val($doc, $col);
+ like($bytes, qr/\A[0-9]+\z/, '$bytes stored as digit');
+ ok($bytes > 0, '$bytes is > 0');
+ is($bytes, $smsg->{bytes}, 'bytes Xapian value matches Over');
+
+ $col = PublicInbox::Search::UID();
+ my $uid = PublicInbox::Smsg::get_val($doc, $col);
+ is($uid, $smsg->{num}, 'UID column matches {num}');
+ is($uid, $m->get_docid, 'UID column matches docid');
+ }
+
+ $mset = $ro->query('tc:list@example.com', {mset => 1});
+ is($mset->size, 9, 'searched To+Cc: successfully');
+ foreach my $m ($mset->items) {
+ my $smsg = $ro->{over_ro}->get_art($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->{over_ro}->get_art($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_name}, qr/Laggy Sender/,
+ "From appears with $pfx");
+ }
+ }
+}
+