- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Fri, 07 Mar 2008 14:15:36 -0800
- To: Ian Hickson <ian@hixie.ch>
- CC: public-css-testsuite@w3.org
- Message-ID: <47D1BE88.2010609@inkedblade.net>
Ian Hickson wrote: > On Mon, 26 Nov 2007, fantasai wrote: >>> Should we consider adding >>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> >>> to the HTML version of the tests so that they work when downloaded? >> This should do it, although I'm not sure if it's the right place to put >> the change. Ian, does that look ok to you, or should this be in the >> makefile instead? > > I don't understand why this would be in the Makefile. The right way to do > this is to manipulate the DOM tree before you serialise the DOM, though, > not regular expressions like the way the proposed patch does it. You think this (attached) is better? > Personally I'm not convinced we should be supporting non-HTTP variants. > The encoding should be in the HTTP headers. We'll almost certainly end up > with tests that require CGI scripts on the server side to test particular > edge cases (like timing issues). That's fine for official testing, but it's not uncommon to want to have a local copy of the tests for development work. ~fantasai
? patch.dfif
Index: treeTools.pm
===================================================================
RCS file: /sources/public/CSS/CSS2.1-test-suite/lib/treeTools.pm,v
retrieving revision 1.2
diff -u -r1.2 treeTools.pm
--- treeTools.pm 9 Aug 2006 05:21:17 -0000 1.2
+++ treeTools.pm 7 Mar 2008 22:11:49 -0000
@@ -142,3 +142,15 @@
return $node;
}
}
+
+sub firstChildElementWithName {
+ my($name) = shift @_;
+ my($parent) = @_;
+ foreach my $child (@{$parent->{childNodes}}) {
+ if (ref $child and $child->{nodeType} eq 'element' and
+ $child->{tagName} eq "{http://www.w3.org/1999/xhtml}$name")
+ {
+ return $child;
+ }
+ }
+}
\ No newline at end of file
Index: format/html4.pm
===================================================================
RCS file: /sources/public/CSS/CSS2.1-test-suite/lib/format/html4.pm,v
retrieving revision 1.1
diff -u -r1.1 html4.pm
--- format/html4.pm 2 Dec 2004 16:06:44 -0000 1.1
+++ format/html4.pm 7 Mar 2008 22:11:49 -0000
@@ -2,6 +2,7 @@
use strict;
use utf8;
use html;
+use treeTools;
1;
sub output {
@@ -10,8 +11,46 @@
if (@$namespaces != 1 or $namespaces->[0] ne 'http://www.w3.org/1999/xhtml') {
return undef; # not an HTML4 test.
}
+ addEncoding($tree);
my $output = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
$output .= "\n";
$output .= html::treeAsHTML($tree);
+ removeEncoding($tree);
return $output;
}
+
+sub addEncoding {
+ my ($tree) = @_;
+ $tree = treeTools::rootElement($tree);
+ if ($tree->{tagName} eq '{http://www.w3.org/1999/xhtml}html') {
+ my $head = treeTools::firstChildElementWithName('head', $tree);
+ if ($head) {
+ my $metaAttrs = {'http-equiv' => 'Content-Type',
+ 'content' => 'text/html; charset=UTF-8'};
+ my $meta = {nodeType => 'element',
+ tagName => '{http://www.w3.org/1999/xhtml}meta',
+ localName => 'meta',
+ namespace => 'http://www.w3.org/1999/xhtml',
+ attributes => $metaAttrs,
+ attributesPrefixed => $metaAttrs,
+ childNodes => []};
+ unshift(@{$head->{childNodes}}, $meta);
+ }
+ }
+}
+
+sub removeEncoding {
+ my ($tree) = @_;
+ $tree = treeTools::rootElement($tree);
+ if ($tree->{tagName} eq '{http://www.w3.org/1999/xhtml}html') {
+ my $head = treeTools::firstChildElementWithName('head', $tree);
+ if ($head) {
+ my $meta = treeTools::firstChildElementWithName('meta', $head);
+ if ($meta and $meta->{attributes}->{'http-equiv'} eq 'Content-Type' and
+ $meta->{attributes}->{'content'} eq 'text/html; charset=UTF-8')
+ {
+ shift(@{$head->{childNodes}});
+ }
+ }
+ }
+}
Received on Friday, 7 March 2008 22:15:12 UTC