15 if (!(nominal == actual))
17 return (nominal == actual);
23 TUri base =
TUri(
"http://a/b/c/d;p?q");
27 success &= TestResolutionHelper(
"g:h",
"g:h", base);
28 success &= TestResolutionHelper(
"g",
"http://a/b/c/g", base);
29 success &= TestResolutionHelper(
"./g",
"http://a/b/c/g", base);
30 success &= TestResolutionHelper(
"g/",
"http://a/b/c/g/", base);
31 success &= TestResolutionHelper(
"/g",
"http://a/g", base);
32 success &= TestResolutionHelper(
"//g",
"http://g", base);
33 success &= TestResolutionHelper(
"?y",
"http://a/b/c/d;p?y", base);
34 success &= TestResolutionHelper(
"g?y",
"http://a/b/c/g?y", base);
35 success &= TestResolutionHelper(
"#s",
"http://a/b/c/d;p?q#s", base);
36 success &= TestResolutionHelper(
"g#s",
"http://a/b/c/g#s", base);
37 success &= TestResolutionHelper(
"g?y#s",
"http://a/b/c/g?y#s", base);
38 success &= TestResolutionHelper(
";x",
"http://a/b/c/;x", base);
39 success &= TestResolutionHelper(
"g;x",
"http://a/b/c/g;x", base);
40 success &= TestResolutionHelper(
"g;x?y#s",
"http://a/b/c/g;x?y#s", base);
41 success &= TestResolutionHelper(
"",
"http://a/b/c/d;p?q", base);
42 success &= TestResolutionHelper(
".",
"http://a/b/c/", base);
43 success &= TestResolutionHelper(
"./",
"http://a/b/c/", base);
44 success &= TestResolutionHelper(
"..",
"http://a/b/", base);
45 success &= TestResolutionHelper(
"../",
"http://a/b/", base);
46 success &= TestResolutionHelper(
"../g",
"http://a/b/g", base);
47 success &= TestResolutionHelper(
"../..",
"http://a/", base);
48 success &= TestResolutionHelper(
"../../",
"http://a/", base);
49 success &= TestResolutionHelper(
"../../g",
"http://a/g", base);
51 success &= TestResolutionHelper(
"../../../g",
"http://a/g", base);
52 success &= TestResolutionHelper(
"../../../../g",
"http://a/g", base);
53 success &= TestResolutionHelper(
"/./g",
"http://a/g", base);
54 success &= TestResolutionHelper(
"/../g",
"http://a/g", base);
55 success &= TestResolutionHelper(
"g.",
"http://a/b/c/g.", base);
56 success &= TestResolutionHelper(
".g",
"http://a/b/c/.g", base);
57 success &= TestResolutionHelper(
"g..",
"http://a/b/c/g..", base);
58 success &= TestResolutionHelper(
"..g",
"http://a/b/c/..g", base);
59 success &= TestResolutionHelper(
"./../g",
"http://a/b/g", base);
60 success &= TestResolutionHelper(
"./g/.",
"http://a/b/c/g/", base);
61 success &= TestResolutionHelper(
"g/./h",
"http://a/b/c/g/h", base);
62 success &= TestResolutionHelper(
"g/../h",
"http://a/b/c/h", base);
63 success &= TestResolutionHelper(
"g;x=1/./y",
"http://a/b/c/g;x=1/y", base);
64 success &= TestResolutionHelper(
"g;x=1/../y",
"http://a/b/c/y", base);
65 success &= TestResolutionHelper(
"g?y/./x",
"http://a/b/c/g?y/./x", base);
66 success &= TestResolutionHelper(
"g?y/../x",
"http://a/b/c/g?y/../x", base);
67 success &= TestResolutionHelper(
"g#s/./x",
"http://a/b/c/g#s/./x", base);
68 success &= TestResolutionHelper(
"g#s/../x",
"http://a/b/c/g#s/../x", base);
69 success &= TestResolutionHelper(
"http:g",
"http:g", base);
77 for (
char i = 0; i < 127; i++) {
80 sprintf(buffer,
"0x%02x, ", i);
81 errors = errors + buffer;
93 TString composed =
"http://user:pass@host.org/some/path/file.avi?key1=value1#anchor3";
98 uri.
SetPath(
"/some/path/file.avi");
101 return uri.
GetUri() == composed;
104void Answer(
Bool_t success)
109 Printf(
"---> F A I L E D F A I L E D F A I L E D\n");
116 valid &=
TUri(
"ftp://ftp.is.co.za/rfc/rfc1808.txt").
IsUri();
117 valid &=
TUri(
"http://www.ietf.org/rfc/rfc2396.txt").
IsUri();
119 valid &=
TUri(
"mailto:John.Doe@example.com").
IsUri();
120 valid &=
TUri(
"news:comp.infosystems.www.servers.unix").
IsUri();
121 valid &=
TUri(
"tel:+1-816-555-1212").
IsUri();
122 valid &=
TUri(
"telnet://192.0.2.16:80/").
IsUri();
123 valid &=
TUri(
"urn:oasis:names:specification:docbook:dtd:xml:4.1.2").
IsUri();
130 Printf(
"\n\nTUri test macro ...");
131 Printf(
"---> Validation");
132 Answer(TestValidation());
133 Printf(
"---> Reference Resolution");
134 Answer(TestResolution());
135 Printf(
"---> PCT Conversion");
137 Printf(
"---> Equivalence and Normalisation");
138 Answer(
TUri(
"example://a/b/c/%7Bfoo%7D") ==
TUri(
"eXAMPLE://a/./b/../b/%63/%7bfoo%7d"));
139 Printf(
"---> Composition");
140 Answer(TestComposition());
void Printf(const char *fmt,...)
Formats a string in a circular formatting buffer and prints the string.
const char * Data() const
This class represents a RFC 3986 compatible URI.
Bool_t SetScheme(const TString &scheme)
Set scheme component of URI:
Bool_t SetFragment(const TString &fragment)
Set fragment component of URI:
Bool_t SetPath(const TString &path)
Set path component of URI:
Bool_t SetUserInfo(const TString &userinfo)
Set userinfo component of URI:
Bool_t IsUri() const
Returns kTRUE if instance qualifies as URI URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] ...
static const TString PctEncode(const TString &source)
Percent-encode and return the given string according to RFC 3986 in principle, this function cannot f...
const TString GetUri() const
Returns the whole URI - an implementation of chapter 5.3 component recomposition.
static TUri Transform(const TUri &reference, const TUri &base)
Transform a URI reference into its target URI using given a base URI.
Bool_t SetQuery(const TString &path)
Set query component of URI:
Bool_t SetHost(const TString &host)
Set host component of URI:
static const TString PctDecode(const TString &source)
Percent-decode the given string according to chapter 2.1 we assume a valid pct-encoded string.