ROOT
6.10/00
Reference Guide
ROOT Home Page
Main Page
Tutorials
User's Classes
Namespaces
All Classes
Files
Release Notes
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
tutorials
net
TUriTest.C File Reference
Net tutorials
Detailed Description
Rudimentary
TUri
test macro.
#include <
TUri.h
>
Bool_t
TestResolutionHelper(
TUri
reference,
TUri
nominal,
TUri
&base)
{
TUri
actual =
TUri::Transform
(reference, base);
if
(!(nominal == actual))
Printf
(
"\tERROR: %s => %s (should read: %s)"
, reference.
GetUri
().
Data
(), actual.
GetUri
().
Data
(), nominal.
GetUri
().
Data
());
return
(nominal == actual);
}
Bool_t
TestResolution()
{
TUri
base =
TUri
(
"http://a/b/c/d;p?q"
);
Bool_t
success =
kTRUE
;
// 5.4.1. Normal Examples
success &= TestResolutionHelper(
"g:h"
,
"g:h"
, base);
success &= TestResolutionHelper(
"g"
,
"http://a/b/c/g"
, base);
success &= TestResolutionHelper(
"./g"
,
"http://a/b/c/g"
, base);
success &= TestResolutionHelper(
"g/"
,
"http://a/b/c/g/"
, base);
success &= TestResolutionHelper(
"/g"
,
"http://a/g"
, base);
success &= TestResolutionHelper(
"//g"
,
"http://g"
, base);
success &= TestResolutionHelper(
"?y"
,
"http://a/b/c/d;p?y"
, base);
success &= TestResolutionHelper(
"g?y"
,
"http://a/b/c/g?y"
, base);
success &= TestResolutionHelper(
"#s"
,
"http://a/b/c/d;p?q#s"
, base);
success &= TestResolutionHelper(
"g#s"
,
"http://a/b/c/g#s"
, base);
success &= TestResolutionHelper(
"g?y#s"
,
"http://a/b/c/g?y#s"
, base);
success &= TestResolutionHelper(
";x"
,
"http://a/b/c/;x"
, base);
success &= TestResolutionHelper(
"g;x"
,
"http://a/b/c/g;x"
, base);
success &= TestResolutionHelper(
"g;x?y#s"
,
"http://a/b/c/g;x?y#s"
, base);
success &= TestResolutionHelper(
""
,
"http://a/b/c/d;p?q"
, base);
success &= TestResolutionHelper(
"."
,
"http://a/b/c/"
, base);
success &= TestResolutionHelper(
"./"
,
"http://a/b/c/"
, base);
success &= TestResolutionHelper(
".."
,
"http://a/b/"
, base);
success &= TestResolutionHelper(
"../"
,
"http://a/b/"
, base);
success &= TestResolutionHelper(
"../g"
,
"http://a/b/g"
, base);
success &= TestResolutionHelper(
"../.."
,
"http://a/"
, base);
success &= TestResolutionHelper(
"../../"
,
"http://a/"
, base);
success &= TestResolutionHelper(
"../../g"
,
"http://a/g"
, base);
// 5.4.2. Abnormal Examples
success &= TestResolutionHelper(
"../../../g"
,
"http://a/g"
, base);
success &= TestResolutionHelper(
"../../../../g"
,
"http://a/g"
, base);
success &= TestResolutionHelper(
"/./g"
,
"http://a/g"
, base);
success &= TestResolutionHelper(
"/../g"
,
"http://a/g"
, base);
success &= TestResolutionHelper(
"g."
,
"http://a/b/c/g."
, base);
success &= TestResolutionHelper(
".g"
,
"http://a/b/c/.g"
, base);
success &= TestResolutionHelper(
"g.."
,
"http://a/b/c/g.."
, base);
success &= TestResolutionHelper(
"..g"
,
"http://a/b/c/..g"
, base);
success &= TestResolutionHelper(
"./../g"
,
"http://a/b/g"
, base);
success &= TestResolutionHelper(
"./g/."
,
"http://a/b/c/g/"
, base);
success &= TestResolutionHelper(
"g/./h"
,
"http://a/b/c/g/h"
, base);
success &= TestResolutionHelper(
"g/../h"
,
"http://a/b/c/h"
, base);
success &= TestResolutionHelper(
"g;x=1/./y"
,
"http://a/b/c/g;x=1/y"
, base);
success &= TestResolutionHelper(
"g;x=1/../y"
,
"http://a/b/c/y"
, base);
success &= TestResolutionHelper(
"g?y/./x"
,
"http://a/b/c/g?y/./x"
, base);
success &= TestResolutionHelper(
"g?y/../x"
,
"http://a/b/c/g?y/../x"
, base);
success &= TestResolutionHelper(
"g#s/./x"
,
"http://a/b/c/g#s/./x"
, base);
success &= TestResolutionHelper(
"g#s/../x"
,
"http://a/b/c/g#s/../x"
, base);
success &= TestResolutionHelper(
"http:g"
,
"http:g"
, base);
return
(success);
}
Bool_t
TestPct()
{
TString
errors =
""
;
for
(
char
i = 0; i < 127; i++) {
if
(
TUri::PctDecode
(
TUri::PctEncode
(i)) != i) {
char
buffer[10];
sprintf(buffer,
"0x%02x, "
, i);
errors = errors + buffer;
}
}
if
(!errors.
IsNull
())
Printf
(
"\tERROR at %s"
, errors.
Data
());
else
Printf
(
"\tOK"
);
return
errors.
IsNull
();
}
Bool_t
TestComposition()
{
TString
composed =
"http://user:pass@host.org/some/path/file.avi?key1=value1#anchor3"
;
TUri
uri;
uri.
SetScheme
(
"http"
);
uri.
SetUserInfo
(
"user:pass"
);
uri.
SetHost
(
"host.org"
);
uri.
SetPath
(
"/some/path/file.avi"
);
uri.
SetQuery
(
"key1=value1"
);
uri.
SetFragment
(
"anchor3"
);
return
uri.
GetUri
() == composed;
}
void
Answer(
Bool_t
success)
{
if
(success)
Printf
(
"---> SUCCESS\n"
);
else
Printf
(
"---> F A I L E D F A I L E D F A I L E D\n"
);
}
Bool_t
TestValidation()
{
// validating examples from RFC chapter 1.1.2
Bool_t
valid =
kTRUE
;
valid &=
TUri
(
"ftp://ftp.is.co.za/rfc/rfc1808.txt"
).
IsUri
();
valid &=
TUri
(
"http://www.ietf.org/rfc/rfc2396.txt"
).
IsUri
();
// IPV6 example excluded
//valid &= TUri("ldap://[2001:db8::7]/c=GB?objectClass?one").IsUri();
valid &=
TUri
(
"mailto:John.Doe@example.com"
).
IsUri
();
valid &=
TUri
(
"news:comp.infosystems.www.servers.unix"
).
IsUri
();
valid &=
TUri
(
"tel:+1-816-555-1212"
).
IsUri
();
valid &=
TUri
(
"telnet://192.0.2.16:80/"
).
IsUri
();
valid &=
TUri
(
"urn:oasis:names:specification:docbook:dtd:xml:4.1.2"
).
IsUri
();
return
valid;
}
void
TUriTest()
{
Printf
(
"\n\nTUri test macro ..."
);
Printf
(
"---> Validation"
);
Answer(TestValidation());
Printf
(
"---> Reference Resolution"
);
Answer(TestResolution());
Printf
(
"---> PCT Conversion"
);
Answer(TestPct());
Printf
(
"---> Equivalence and Normalisation"
);
Answer(
TUri
(
"example://a/b/c/%7Bfoo%7D"
) ==
TUri
(
"eXAMPLE://a/./b/../b/%63/%7bfoo%7d"
));
Printf
(
"---> Composition"
);
Answer(TestComposition());
}
Author
Gerhard E. Bruckner 2007-10-18
Definition in file
TUriTest.C
.