0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos#!/usr/local/bin/perl -w
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosuse Test::More tests => 33;
088fa5d9eaa83bf4b3d59a64c0519f42a143aaa9Alin Brici
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo HordosEND { ok $loaded; }
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosuse CGI ( ':standard', '-no_debug', '*h3', 'start_table' );
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos$loaded = 1;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosok 1;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo HordosBEGIN {
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos $| = 1;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos if ( $] > 5.006 ) {
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos # no utf8
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos require utf8; # we contain Latin-1
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos utf8->unimport;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos }
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos}
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos######################### End of black magic.
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosmy $CRLF = "\015\012";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosif ( $^O eq 'VMS' ) {
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos $CRLF = "\n"; # via web server carriage is inserted automatically
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos}
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosif ( ord("\t") != 9 ) { # EBCDIC?
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos $CRLF = "\r\n";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos}
088fa5d9eaa83bf4b3d59a64c0519f42a143aaa9Alin Brici
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller# util
f277d0ee6abc01fba581c836571dc390ac349de8Brendan Millersub test {
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller local ($^W) = 0;
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordos my ( undef, $true, $msg ) = @_;
aa26d20912b59f80d1b06b9c0a34c2d4de507a4fLaszlo Hordos ok $true => $msg;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos}
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos# all the automatic tags
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordosis h1(), '<h1 />', "single tag";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis h1('fred'), '<h1>fred</h1>', "open/close tag";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordosis h1( 'fred', 'agnes', 'maura' ), '<h1>fred agnes maura</h1>',
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos "open/close tag multiple";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis h1( { -align => 'CENTER' }, 'fred' ), '<h1 align="CENTER">fred</h1>',
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "open/close tag with attribute";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
df96152750f1114a1168f7e6e9ea78d579ef35ccLaszlo Hordosis h1( { -align => undef }, 'fred' ), '<h1 align>fred</h1>',
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "open/close tag with orphan attribute";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis h1( { -align => 'CENTER' }, [ 'fred', 'agnes' ] ),
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos '<h1 align="CENTER">fred</h1> <h1 align="CENTER">agnes</h1>',
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "distributive tag with attribute";
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos{
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos local $" = '-';
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos is h1( 'fred', 'agnes', 'maura' ), '<h1>fred-agnes-maura</h1>',
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "open/close tag \$\" interpolation";
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos}
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordosis header(), "Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}",
fe644a7302b3235c08aec5fd7992a329f2ee1364Laszlo Hordos "header()";
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordosis header( -type => 'image/gif', -charset => '' ), "Content-Type: image/gif${CRLF}${CRLF}",
6e2a3debb126632908b48829c5a3f3823c1c60aaLaszlo Hordos "header()";
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordos
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordosis header( -type => 'image/gif', -status => '500 Sucks' ),
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos "Status: 500 Sucks${CRLF}Content-Type: image/gif${CRLF}${CRLF}", "header()";
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos
c32fc412b63ff49e61e7748fda8a3d2dab890813Laszlo Hordos# return to normal
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordoscharset( 'ISO-8859-1' );
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordoslike header( -nph => 1 ),
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller qr!HTTP/1.0 200 OK${CRLF}Server: cmdline${CRLF}Date:.+${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}!,
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos "header()";
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmilleris start_html(), <<END, "start_html()";
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller<!DOCTYPE html
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos<head>
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos<title>Untitled Document</title>
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos</head>
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos<body>
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo HordosEND
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmilleris start_html(
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos -Title => 'The world of foo' ,
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos -Script => [ {-src=> 'foo.js', -charset=>'utf-8'} ],
9797a5587e15fe093b9d962818283cd8e1197ef6Laszlo Hordos ), <<END, "start_html()";
27f054fe098cabdf56be9e73e3c689b9ebdacfc5Laszlo Hordos<!DOCTYPE html
51c85743b9d73dedd60a0ecad2402c231f71e39dLaszlo Hordos PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
9797a5587e15fe093b9d962818283cd8e1197ef6Laszlo Hordos<head>
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos<title>The world of foo</title>
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos<script src="foo.js" charset="utf-8" type="text/javascript"></script>
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos</head>
9797a5587e15fe093b9d962818283cd8e1197ef6Laszlo Hordos<body>
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan MmillerEND
df96152750f1114a1168f7e6e9ea78d579ef35ccLaszlo Hordos
0f6ab51d11efadda72c74d92abc1747773621142Laszlo Hordosfor my $v (qw/ 2.0 3.2 4.0 4.01 /) {
df96152750f1114a1168f7e6e9ea78d579ef35ccLaszlo Hordos local $CGI::XHTML = 1;
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos is
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller start_html( -dtd => "-//IETF//DTD HTML $v//FR", -lang => 'fr' ),
27f054fe098cabdf56be9e73e3c689b9ebdacfc5Laszlo Hordos <<"END", 'start_html()';
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordos<!DOCTYPE html
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos PUBLIC "-//IETF//DTD HTML $v//FR">
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos<html lang="fr"><head><title>Untitled Document</title>
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller</head>
27f054fe098cabdf56be9e73e3c689b9ebdacfc5Laszlo Hordos<body>
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo HordosEND
e95ef6b1ae95c5684fc1b20063975a2cb29055b9Laszlo Hordos}
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmilleris
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos start_html( -dtd => "-//IETF//DTD HTML 9.99//FR", -lang => 'fr' ),
9797a5587e15fe093b9d962818283cd8e1197ef6Laszlo Hordos <<"END", 'start_html()';
27f054fe098cabdf56be9e73e3c689b9ebdacfc5Laszlo Hordos<!DOCTYPE html
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller PUBLIC "-//IETF//DTD HTML 9.99//FR">
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
a0bf2647c3f5c8bb50b03ab767037b5f90242989Laszlo Hordos<head>
a0bf2647c3f5c8bb50b03ab767037b5f90242989Laszlo Hordos<title>Untitled Document</title>
f277d0ee6abc01fba581c836571dc390ac349de8Brendan Miller<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
a0bf2647c3f5c8bb50b03ab767037b5f90242989Laszlo Hordos</head>
968a8ea42a7a90597e80bca047c0e8a70b3b5f5fLaszlo Hordos<body>
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo HordosEND
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
27f054fe098cabdf56be9e73e3c689b9ebdacfc5Laszlo Hordosmy $cookie =
968a8ea42a7a90597e80bca047c0e8a70b3b5f5fLaszlo Hordos cookie( -name => 'fred', -value => [ 'chocolate', 'chip' ], -path => '/' );
579ff718e67ce5888eab9740fd497adc8e8b9dedBrendan Mmiller
f277d0ee6abc01fba581c836571dc390ac349de8Brendan Milleris $cookie, 'fred=chocolate&chip; path=/', "cookie()";
298d6fd085f2d9dc134cc7049faf9ae263881cfcLaszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosmy $h = header( -Cookie => $cookie );
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordoslike $h,
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos qr!^Set-Cookie: fred=chocolate&chip\; path=/${CRLF}Date:.*${CRLF}Content-Type: text/html; charset=ISO-8859-1${CRLF}${CRLF}!s,
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos "header(-cookie)";
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordosis start_h3, '<h3>';
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordosis end_h3, '</h3>';
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordosis start_table( { -border => undef } ), '<table border>';
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordosis h1( escapeHTML("this is <not> \x8bright\x9b") ),
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordos '<h1>this is &lt;not&gt; &#8249;right&#8250;</h1>';
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmillercharset('utf-8');
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordos
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordosis h1( escapeHTML("this is <not> \x8bright\x9b") ),
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordos ord("\t") == 9
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos ? '<h1>this is &lt;not&gt; �right�</h1>'
22021f13de98c2ef69055bec833d200f16922bc2Laszlo Hordos : '<h1>this is &lt;not&gt; �right�</h1>';
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis i( p('hello there') ), '<i><p>hello there</p></i>';
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmillermy $q = CGI->new;
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordosis $q->h1('hi'), '<h1>hi</h1>';
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
d90caa300251d7fd09e3f286018ce04356a71e62Laszlo Hordos$q->autoEscape(1);
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis $q->p( { title => "hello world&egrave;" }, 'hello &aacute;' ),
9797a5587e15fe093b9d962818283cd8e1197ef6Laszlo Hordos '<p title="hello world&amp;egrave;">hello &aacute;</p>';
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos$q->autoEscape(0);
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmilleris $q->p( { title => "hello world&egrave;" }, 'hello &aacute;' ),
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos '<p title="hello world&egrave;">hello &aacute;</p>';
a1f638677d6b70887a0eeeab4e30fd2d7dbb5e5eBrendan Mmiller
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis p( { title => "hello world&egrave;" }, 'hello &aacute;' ),
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos '<p title="hello world&amp;egrave;">hello &aacute;</p>';
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordosis header( -type => 'image/gif', -charset => 'UTF-8' ),
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos "Content-Type: image/gif; charset=UTF-8${CRLF}${CRLF}", "header()";
0fdda69ce3627d501e4bb3103765f676bb1ab061Laszlo Hordos