catberry-uri
Version:
URI parser strictly according to RFC 3986
267 lines • 9.43 kB
JSON
{
"items": [
{
"name": "full URI",
"uri": "scheme-+.scheme1234567890://ABCabc123-._~!$&'()*+,;=:ABCabc123-._~!$&'()*+,;=@ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": "scheme-+.scheme1234567890",
"authority": {
"userInfo": {
"user": "ABCabc123-._~!$&'()*+,;=",
"password": "ABCabc123-._~!$&'()*+,;="
},
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI without scheme",
"uri": "//ABCabc123-._~!$&'()*+,;=:ABCabc123-._~!$&'()*+,;=@ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": {
"user": "ABCabc123-._~!$&'()*+,;=",
"password": "ABCabc123-._~!$&'()*+,;="
},
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI user info without password content",
"uri": "//ABCabc123-._~!$&'()*+,;=:@ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": {
"user": "ABCabc123-._~!$&'()*+,;=",
"password": ""
},
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI user info without password",
"uri": "//ABCabc123-._~!$&'()*+,;=@ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": {
"user": "ABCabc123-._~!$&'()*+,;=",
"password": null
},
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI user info without content",
"uri": "//@ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": {
"user": null,
"password": null
},
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI authority without user info",
"uri": "//ABCabc123_.~-!$&'()*+,;=:[]:1234/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": null,
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": "1234"
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI authority without port content",
"uri": "//ABCabc123_.~-!$&'()*+,;=:[]:/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": null,
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": ""
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI authority without port",
"uri": "//ABCabc123_.~-!$&'()*+,;=:[]/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": null,
"host": "ABCabc123_.~-!$&'()*+,;=:[]",
"port": null
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI authority without host",
"uri": "///ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": {
"userInfo": null,
"host": null,
"port": null
},
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI without authority",
"uri": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#ABCabc123-._~!$&'()*+,;=:@/?",
"expected": {
"scheme": null,
"authority": null,
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": "ABCabc123-._~!$&'()*+,;=:@/?"
}
},
{
"name": "URI without fragment content",
"uri": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?#",
"expected": {
"scheme": null,
"authority": null,
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": ""
}
},
{
"name": "URI without fragment",
"uri": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?ABCabc123-._~!$'()*,;:@/?=ABCabc123-._~!$'()*,;:@/?&ABCabc1234-._~!$'()*,;:@/?=ABCabc1234-._~!$'()*,;:@/?",
"expected": {
"scheme": null,
"authority": null,
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {
"ABCabc123-._~!$'()*,;:@/?": "ABCabc123-._~!$'()*,;:@/?",
"ABCabc1234-._~!$'()*,;:@/?": "ABCabc1234-._~!$'()*,;:@/?"
},
"fragment": null
}
},
{
"name": "URI without query content",
"uri": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@?",
"expected": {
"scheme": null,
"authority": null,
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": {},
"fragment": null
}
},
{
"name": "URI without query",
"uri": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"expected": {
"scheme": null,
"authority": null,
"path": "/ABCabc123-._~!$&'()*+,;=:@/ABCabc123-._~!$&'()*+,;=:@",
"query": null,
"fragment": null
}
},
{
"name": "URI /",
"uri": "/",
"expected": {
"scheme": null,
"authority": null,
"path": "/",
"query": null,
"fragment": null
}
},
{
"name": "empty URI",
"uri": "",
"expected": {
"scheme": null,
"authority": null,
"path": "",
"query": null,
"fragment": null
}
}
]
}