ROOT logo

From $ROOTSYS/tutorials/net/TUriTest.C

// TUriTest.C - rudimentary TUri test macro - Gerhard E. Bruckner 2007-10-18

#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());
}

 TUriTest.C:1
 TUriTest.C:2
 TUriTest.C:3
 TUriTest.C:4
 TUriTest.C:5
 TUriTest.C:6
 TUriTest.C:7
 TUriTest.C:8
 TUriTest.C:9
 TUriTest.C:10
 TUriTest.C:11
 TUriTest.C:12
 TUriTest.C:13
 TUriTest.C:14
 TUriTest.C:15
 TUriTest.C:16
 TUriTest.C:17
 TUriTest.C:18
 TUriTest.C:19
 TUriTest.C:20
 TUriTest.C:21
 TUriTest.C:22
 TUriTest.C:23
 TUriTest.C:24
 TUriTest.C:25
 TUriTest.C:26
 TUriTest.C:27
 TUriTest.C:28
 TUriTest.C:29
 TUriTest.C:30
 TUriTest.C:31
 TUriTest.C:32
 TUriTest.C:33
 TUriTest.C:34
 TUriTest.C:35
 TUriTest.C:36
 TUriTest.C:37
 TUriTest.C:38
 TUriTest.C:39
 TUriTest.C:40
 TUriTest.C:41
 TUriTest.C:42
 TUriTest.C:43
 TUriTest.C:44
 TUriTest.C:45
 TUriTest.C:46
 TUriTest.C:47
 TUriTest.C:48
 TUriTest.C:49
 TUriTest.C:50
 TUriTest.C:51
 TUriTest.C:52
 TUriTest.C:53
 TUriTest.C:54
 TUriTest.C:55
 TUriTest.C:56
 TUriTest.C:57
 TUriTest.C:58
 TUriTest.C:59
 TUriTest.C:60
 TUriTest.C:61
 TUriTest.C:62
 TUriTest.C:63
 TUriTest.C:64
 TUriTest.C:65
 TUriTest.C:66
 TUriTest.C:67
 TUriTest.C:68
 TUriTest.C:69
 TUriTest.C:70
 TUriTest.C:71
 TUriTest.C:72
 TUriTest.C:73
 TUriTest.C:74
 TUriTest.C:75
 TUriTest.C:76
 TUriTest.C:77
 TUriTest.C:78
 TUriTest.C:79
 TUriTest.C:80
 TUriTest.C:81
 TUriTest.C:82
 TUriTest.C:83
 TUriTest.C:84
 TUriTest.C:85
 TUriTest.C:86
 TUriTest.C:87
 TUriTest.C:88
 TUriTest.C:89
 TUriTest.C:90
 TUriTest.C:91
 TUriTest.C:92
 TUriTest.C:93
 TUriTest.C:94
 TUriTest.C:95
 TUriTest.C:96
 TUriTest.C:97
 TUriTest.C:98
 TUriTest.C:99
 TUriTest.C:100
 TUriTest.C:101
 TUriTest.C:102
 TUriTest.C:103
 TUriTest.C:104
 TUriTest.C:105
 TUriTest.C:106
 TUriTest.C:107
 TUriTest.C:108
 TUriTest.C:109
 TUriTest.C:110
 TUriTest.C:111
 TUriTest.C:112
 TUriTest.C:113
 TUriTest.C:114
 TUriTest.C:115
 TUriTest.C:116
 TUriTest.C:117
 TUriTest.C:118
 TUriTest.C:119
 TUriTest.C:120
 TUriTest.C:121
 TUriTest.C:122
 TUriTest.C:123
 TUriTest.C:124
 TUriTest.C:125
 TUriTest.C:126
 TUriTest.C:127
 TUriTest.C:128
 TUriTest.C:129
 TUriTest.C:130
 TUriTest.C:131
 TUriTest.C:132
 TUriTest.C:133
 TUriTest.C:134
 TUriTest.C:135
 TUriTest.C:136
 TUriTest.C:137
 TUriTest.C:138