(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"urlmatch URL normalization">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:tu)
          op: Equal
          rhs: {(DQ ($ VSub_Name "$TEST_DIRECTORY") (/t0110/url))}
          spids: [17]
        )
      ]
      spids: [17]
    )
    (C {(test_expect_success)} {(SQ <"url scheme">)} 
      {
        (SQ <"\n"> <"\t! test-urlmatch-normalization \"\" &&\n"> 
          <"\t! test-urlmatch-normalization \"_\" &&\n"> <"\t! test-urlmatch-normalization \"scheme\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme:\" &&\n"> <"\t! test-urlmatch-normalization \"scheme:/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://\" &&\n"> <"\t! test-urlmatch-normalization \"file\" &&\n"> <"\t! test-urlmatch-normalization \"file:\" &&\n"> 
          <"\t! test-urlmatch-normalization \"file:/\" &&\n"> <"\ttest-urlmatch-normalization \"file://\" &&\n"> 
          <"\t! test-urlmatch-normalization \"://acme.co\" &&\n"> <"\t! test-urlmatch-normalization \"x_test://acme.co\" &&\n"> 
          <"\t! test-urlmatch-normalization \"-test://acme.co\" &&\n"> <"\t! test-urlmatch-normalization \"0test://acme.co\" &&\n"> 
          <"\t! test-urlmatch-normalization \"+test://acme.co\" &&\n"> <"\t! test-urlmatch-normalization \".test://acme.co\" &&\n"> 
          <"\t! test-urlmatch-normalization \"schem%6e://\" &&\n"> <"\ttest-urlmatch-normalization \"x-Test+v1.0://acme.co\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"AbCdeF://x.Y\")\" = \"abcdef://x.y/\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url authority">)} 
      {
        (SQ <"\n"> <"\t! test-urlmatch-normalization \"scheme://user:pass@\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://?\" &&\n"> <"\t! test-urlmatch-normalization \"scheme://#\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme:///\" &&\n"> <"\t! test-urlmatch-normalization \"scheme://:\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://:555\" &&\n"> <"\ttest-urlmatch-normalization \"file://user:pass@\" &&\n"> 
          <"\ttest-urlmatch-normalization \"file://?\" &&\n"> <"\ttest-urlmatch-normalization \"file://#\" &&\n"> 
          <"\ttest-urlmatch-normalization \"file:///\" &&\n"> <"\ttest-urlmatch-normalization \"file://:\" &&\n"> 
          <"\t! test-urlmatch-normalization \"file://:555\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://user:pass@host\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://@host\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://%00@host\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://%%@host\" &&\n"> <"\t! test-urlmatch-normalization \"scheme://host_\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://user:pass@host/\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://@host/\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://host/\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://host?x\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://host#x\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://host/@\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://host?@x\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://host#@x\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://[::1]\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://[::1]/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://hos%41/\" &&\n"> <"\ttest-urlmatch-normalization \"scheme://[invalid....:/\" &&\n"> 
          <"\ttest-urlmatch-normalization \"scheme://invalid....:]/\" &&\n"> <"\t! test-urlmatch-normalization \"scheme://invalid....:[/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"scheme://invalid....:[\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url port checks">)} 
      {
        (SQ <"\n"> <"\ttest-urlmatch-normalization \"xyz://q@some.host:\" &&\n"> 
          <"\ttest-urlmatch-normalization \"xyz://q@some.host:456/\" &&\n"> <"\t! test-urlmatch-normalization \"xyz://q@some.host:0\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://q@some.host:0000000\" &&\n"> <"\ttest-urlmatch-normalization \"xyz://q@some.host:0000001?\" &&\n"> 
          <"\ttest-urlmatch-normalization \"xyz://q@some.host:065535#\" &&\n"> <"\ttest-urlmatch-normalization \"xyz://q@some.host:65535\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://q@some.host:65536\" &&\n"> <"\t! test-urlmatch-normalization \"xyz://q@some.host:99999\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://q@some.host:100000\" &&\n"> <"\t! test-urlmatch-normalization \"xyz://q@some.host:100001\" &&\n"> 
          <"\ttest-urlmatch-normalization \"http://q@some.host:80\" &&\n"> <"\ttest-urlmatch-normalization \"https://q@some.host:443\" &&\n"> 
          <"\ttest-urlmatch-normalization \"http://q@some.host:80/\" &&\n"> <"\ttest-urlmatch-normalization \"https://q@some.host:443?\" &&\n"> 
          <"\t! test-urlmatch-normalization \"http://q@:8008\" &&\n"> <"\t! test-urlmatch-normalization \"http://:8080\" &&\n"> 
          <"\t! test-urlmatch-normalization \"http://:\" &&\n"> <"\ttest-urlmatch-normalization \"xyz://q@some.host:456/\" &&\n"> 
          <"\ttest-urlmatch-normalization \"xyz://[::1]:456/\" &&\n"> <"\ttest-urlmatch-normalization \"xyz://[::1]:/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://[::1]:000/\" &&\n"> <"\t! test-urlmatch-normalization \"xyz://[::1]:0%300/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://[::1]:0x80/\" &&\n"> <"\t! test-urlmatch-normalization \"xyz://[::1]:4294967297/\" &&\n"> 
          <"\t! test-urlmatch-normalization \"xyz://[::1]:030f/\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url port normalization">)} 
      {
        (SQ <"\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"http://x:800\")\" = \"http://x:800/\" &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -p \"http://x:0800\")\" = \"http://x:800/\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"http://x:00000800\")\" = \"http://x:800/\" &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -p \"http://x:065535\")\" = \"http://x:65535/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"http://x:1\")\" = \"http://x:1/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"http://x:80\")\" = \"http://x/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"http://x:080\")\" = \"http://x/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"http://x:000000080\")\" = \"http://x/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"https://x:443\")\" = \"https://x/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"https://x:0443\")\" = \"https://x/\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"https://x:000000443\")\" = \"https://x/\"\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url general escapes">)} 
      {
        (SQ <"\n"> <"\t! test-urlmatch-normalization \"http://x.y?%fg\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"X://W/%7e%41^%3a\")\" = \"x://w/~A%5E%3A\" &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -p \"X://W/:/?#[]@\")\" = \"x://w/:/?#[]@\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"X://W/$&()*+,;=\")\" = \"x://w/$&()*+,;=\" &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -p \"X://W/">
        ) (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <"\")\" = \"x://w/">) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\'">) (SQ <"\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"X://W?">) 
        (EscapedLiteralPart token:<Lit_EscapedChar "\\!">) (SQ <"\")\" = \"x://w/?">) (EscapedLiteralPart token:<Lit_EscapedChar "\\!">) (SQ <"\"\n">)
      }
    )
    (C {(test_expect_success)} {(KW_Bang "!") (MINGW)} {(SQ <"url high-bit escapes">)} 
      {
        (SQ <"\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-1\")\")\" = \"x://q/%01%02%03%04%05%06%07%08%0E%0F%10%11%12\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-2\")\")\" = \"x://q/%13%14%15%16%17%18%19%1B%1C%1D%1E%1F%7F\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-3\")\")\" = \"x://q/%80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-4\")\")\" = \"x://q/%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-5\")\")\" = \"x://q/%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-6\")\")\" = \"x://q/%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-7\")\")\" = \"x://q/%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-8\")\")\" = \"x://q/%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-9\")\")\" = \"x://q/%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-10\")\")\" = \"x://q/%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF\"\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url utf-8 escapes">)} 
      {
        (SQ <"\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"$(cat \"$tu-11\")\")\" = \"x://q/%C2%80%DF%BF%E0%A0%80%EF%BF%BD%F0%90%80%80%F0%AF%BF%BD\"\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url username/password escapes">)} 
      {
        (SQ <"\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"x://%41%62(^):%70+d@foo\")\" = \"x://Ab(%5E):p+d@foo/\"\n"
          >
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url normalized lengths">)} 
      {
        (SQ <"\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -l \"Http://%4d%65:%4d^%70@The.Host\")\" = 25 &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -l \"http://%41:%42@x.y/%61/\")\" = 17 &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -l \"http://@x.y/^\")\" = 15\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url . and .. segments">)} 
      {
        (SQ <"\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/.\")\" = \"x://y/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/./\")\" = \"x://y/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/.\")\" = \"x://y/a\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./\")\" = \"x://y/a/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/.?\")\" = \"x://y/?\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/./?\")\" = \"x://y/?\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/.?\")\" = \"x://y/a?\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./?\")\" = \"x://y/a/?\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./b/.././../c\")\" = \"x://y/c\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./b/../.././c/\")\" = \"x://y/c/\" &&\n"
          > 
          <
"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./b/.././../c/././.././.\")\" = \"x://y/\" &&\n"
          > <"\t! test-urlmatch-normalization \"x://y/a/./b/.././../c/././.././..\" &&\n"> 
          <
"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/./?/././..\")\" = \"x://y/a/?/././..\" &&\n"
          > <"\ttest \"$(test-urlmatch-normalization -p \"x://y/%2e/\")\" = \"x://y/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/%2E/\")\" = \"x://y/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/a/%2e./\")\" = \"x://y/\" &&\n"> 
          <"\ttest \"$(test-urlmatch-normalization -p \"x://y/b/.%2E/\")\" = \"x://y/\" &&\n"> <"\ttest \"$(test-urlmatch-normalization -p \"x://y/c/%2e%2E/\")\" = \"x://y/\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"url equivalents">)} 
      {
        (SQ <"\n"> <"\ttest-urlmatch-normalization \"httP://x\" \"Http://X/\" &&\n"> 
          <
"\ttest-urlmatch-normalization \"Http://%4d%65:%4d^%70@The.Host\" \"hTTP://Me:%4D^p@the.HOST:80/\" &&\n"
          > <"\t! test-urlmatch-normalization \"https://@x.y/^\" \"httpS://x.y:443/^\" &&\n"> 
          <"\ttest-urlmatch-normalization \"https://@x.y/^\" \"httpS://@x.y:0443/^\" &&\n"> <"\ttest-urlmatch-normalization \"https://@x.y/^/../abc\" \"httpS://@x.y:0443/abc\" &&\n"> 
          <"\ttest-urlmatch-normalization \"https://@x.y/^/..\" \"httpS://@x.y:0443/\"\n">
        )
      }
    )
    (C {(test_done)})
  ]
)