git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC/PATCH (WIP)] gitweb: Check that RSS, Atom and OPML output is well formed XML
@ 2008-06-17  7:22 Jakub Narebski
  0 siblings, 0 replies; only message in thread
From: Jakub Narebski @ 2008-06-17  7:22 UTC (permalink / raw)
  To: git, Lea Wiemann

NOTE: This does not check that RSS and Atom feeds (and OPML outline)
conform to the specification (which might be given as DTD, XSD = XML
Schema, Relax-NG schema,...), only that it parses without errors.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
To check Atom and RSS feeds against specification we could use script
version of W3C Feed Validator (http://validator.w3.org/feed/), or
try to validate against XML Schema (XSD) which is default schema
language for RSS, or against Relax-NG schema which is default schema
language for Atom.

 t/t9503/test.pl             |   75 ++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 72 insertions(+), 5 deletions(-)

diff --git a/t/t9503/test.pl b/t/t9503/test.pl
index 7d081b9..df981c5 100755
--- a/t/t9503/test.pl
+++ b/t/t9503/test.pl
@@ -7,14 +7,21 @@ use strict;
 
 use Cwd qw(abs_path);
 use File::Spec;
+use XML::Parser;
 use Test::More qw(no_plan);
 use Test::WWW::Mechanize::CGI;
 
-eval { require HTML::Lint };
+eval { require HTML::Lint; };
 my $lint_installed = !$@;
 diag('HTML::Lint is not installed; no HTML validation tests')
 	unless $lint_installed;
 
+eval { require XML::Parser; };
+my $xml_parser_installed = !$@;
+diag('XML::Parser is not installed; no tests for well-formed XML')
+	unless $xml_parser_installed;
+
+
 my $gitweb = File::Spec->catfile('..','..','gitweb','gitweb.perl');
 # the followin two lines of code are workaround for bug in
 # Test::WWW::Mechanize::CGI::cgi_application version up to 0.3
@@ -24,10 +31,17 @@ $gitweb = File::Spec->rel2abs($gitweb);
 $gitweb = Cwd::abs_path($gitweb);
 
 my $mech = new Test::WWW::Mechanize::CGI;
+$mech->env(
+	GITWEB_CONFIG => $ENV{'GITWEB_CONFIG'},
+);
 $mech->cgi_application($gitweb);
-$mech->env(GITWEB_CONFIG => $ENV{'GITWEB_CONFIG'});
 
-# import config, pedeclaring config variables
+my $xml_parser;
+if ($xml_parser_installed) {
+	$xml_parser = new XML::Parser;
+}
+
+# import config, predeclaring config variables
 our $site_name = '';
 require_ok($ENV{'GITWEB_CONFIG'})
 	or diag('Could not load gitweb config; some tests would fail');
@@ -40,7 +54,7 @@ SKIP: {
 		unless $mech->get_ok('http://localhost/', "GET $pagename");
 	$mech->html_lint_ok('page validates') if $lint_installed;
 	$mech->title_like(qr!$site_name!,
-		'title contains $site_name');
+		"title contains $site_name");
 	$mech->content_contains('./t9503-gitweb-Mechanize.sh test repository', 
 		'lists test repository (by description)');
 }
@@ -87,5 +101,58 @@ $mech->get('http://localhost/?p=.git;a=commit;h=non-existent');
 like($mech->status, qr/40[0-9]/, "40x status response for $pagename");
 $mech->html_lint_ok('page validates') if $lint_installed;
 
+$pagename = 'HEAD commit in non existent repository';
+$mech->get('http://localhost/?p=non-existent.git;a=commit;h=HEAD');
+like($mech->status, qr/40[0-9]/, "40x status response for $pagename");
+$mech->html_lint_ok('page validates') if $lint_installed;
+
+SKIP: {
+	$pagename = 'test repository RSS feed (default)';
+	$get_ok = $mech->get_ok('http://localhost/?p=.git;a=rss',
+		"GET $pagename");
+	skip "Could not get $pagename", 0 + $xml_parser_installed
+		unless $get_ok;
+
+	if ($xml_parser_installed) {
+		eval {
+			$xml_parser->parse($mech->content());
+		};
+		ok(! $@, "$pagename is well formed XML")
+			or diag($@);
+	}
+}
+
+SKIP: {
+	$pagename = 'test repository Atom feed (default)';
+	$get_ok = $mech->get_ok('http://localhost/?p=.git;a=atom',
+		"GET $pagename");
+	skip "Could not get $pagename", 0 + $xml_parser_installed
+		unless $get_ok;
+
+	if ($xml_parser_installed) {
+		eval {
+			$xml_parser->parse($mech->content());
+		};
+		ok(! $@, "$pagename is well formed XML")
+			or diag($@);
+	}
+}
+
+SKIP: {
+	$pagename = 'list of repositories in OPML format';
+	$get_ok = $mech->get_ok('http://localhost/?a=opml',
+		"GET $pagename");
+	skip "Could not get $pagename", 0 + $xml_parser_installed
+		unless $get_ok;
+
+	if ($xml_parser_installed) {
+		eval {
+			$xml_parser->parse($mech->content());
+		};
+		ok(! $@, "$pagename is well formed XML")
+			or diag($@);
+	}
+}
+
 1;
 __END__
-- 
1.5.5.3

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2008-06-17  7:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-17  7:22 [RFC/PATCH (WIP)] gitweb: Check that RSS, Atom and OPML output is well formed XML Jakub Narebski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).