#!/usr/bin/perl -w

use strict;
use Test;
use Mail::Freshmeat;

BEGIN { plan test => 7382 }

my $count = -1;
my @newsletters;

open FM, "t/sample.newsletters" or die $!;
#open FM, "../fmold" or die $!;
#open FM, "../fm" or die $!;
while (<FM>)
{
	$count++ if /^From\s/;
	push @{$newsletters[$count]}, $_;
}
close FM or die $!;

$count = 1;
for my $newsletter (@newsletters)
{
	my $letter;
	eval { $letter = Mail::Freshmeat->new($newsletter) };

	ok(not $@);
	ok($letter->links_header(),
		'::: L I N K S   F O R   T H E   D A Y :::');
	ok($letter->links(),
		qr!\d{4}/\d{2}/\d{2}/!);
	ok($letter->headlines_header(),
		qr/^::: R E L E A S E   H E A D L I N E S \(\d+\) :::$/);
	ok($letter->headlines(),
		qr/((?: ^ \[\d+\]\ .* $ \n | ^ [^\)]+ \) $ \n)+)/mx);
	ok($letter->ad_header(), '::: A D V E R T I S I N G :::') if
		$letter->ad_header();
	ok($letter->articles_header(),
		qr/^::: A R T I C L E S \(\d+\) :::$/) if $letter->articles_header();
	ok($letter->entries_header(),
		'::: R E L E A S E   D E T A I L S :::');
	ok($letter->ad(), qr!http://!) if $letter->ad();
	my $footer = <<'EOF';
The freshmeat daily newsletter
To unsubscribe, send email to freshmeat-news-request@lists.freshmeat.net
or visit http://lists.freshmeat.net/mailman/listinfo/freshmeat-news

EOF
	chomp $footer;
	chomp $footer;
	ok($letter->footer(), $footer);
	ok($letter->entries_total(), qr/^\d+$/);
	ok($letter->articles_total(), qr/^\d+$/) if $letter->articles_total();
	ok($letter->date(), qr/\d+\/\d+\/\d+/);
	ok(ref $letter->entries(), 'ARRAY');

	for my $entry ($letter->entries())
	{
		#warn "testing nl #$count, entry#", $entry->position(), "\n";
		my $entry_keys = join '', $entry->entry_keys();
		ok($entry_keys, '_position_name_and_version_name_version_posted_by_name_posted_by_url_posted_on_trove_about_changes_license_url');
		ok($entry->position(), qr/^\d{3}$/);
		ok($entry->posted_on(),
			qr/^\w+,\s\w+\s\d{1,2}\w{2}\s\d{4}\s\d{2}:\d{2}$/);
		ok($entry->license(),
			qr/license|commercial|domain|free|approved|
				shareware|gpl|unknown|/ix);
		ok($entry->url(), qr/^http:\/\//);
		ok($entry->name_and_version(), qr/${\(quotemeta($entry->name()))}/);
		ok($entry->short_entry(), qr/${\(quotemeta($entry->name()))}/);
		ok($entry->posted_by_url(), qr/http:\/\/|/);
		#ok($entry->about(), qr/^About:\s/);
		#ok($entry->changes(), qr/^Changes:\s|/);
	}

	for my $article ($letter->articles())
	{
		my $article_keys = join '', $article->article_keys();
		ok($article_keys, '_title_posted_by_name_posted_by_url_posted_on_section_description_url');
		ok($article->posted_by_url(), qr/mailto|http|ftp|\@/);
		ok($article->posted_on(),
			qr/^\w+,\s\w+\s\d{1,2}\w{2}\s\d{4}\s\d{2}:\d{2}$/);
		ok($article->url(), qr!http://!);
	}

	$count++;
}


syntax highlighted by Code2HTML, v. 0.9.1