Kodi Documentation 23.0
Kodi is an open source media player and entertainment hub.
Loading...
Searching...
No Matches
TestURIParser.cpp File Reference
#include "utils/URIParser.h"
#include <optional>
#include <string>
#include <string_view>
#include <utility>
#include <gtest/gtest.h>

Classes

class  TestURIParserReference
 
class  TestURIParserValid
 
class  TestURIParserInvalid
 

Functions

 TEST_P (TestURIParserReference, PreservesComponentsAndSpelling)
 
 INSTANTIATE_TEST_SUITE_P (GenericSyntax, TestURIParserReference, testing::Values(ReferenceCase{"", {}, {}, "", {}, {}}, ReferenceCase{"path", {}, {}, "path", {}, {}}, ReferenceCase{"../a/b", {}, {}, "../a/b", {}, {}}, ReferenceCase{"./notes:2026", {}, {}, "./notes:2026", {}, {}}, ReferenceCase{"a/b:c", {}, {}, "a/b:c", {}, {}}, ReferenceCase{"/tmp/a://b", {}, {}, "/tmp/a://b", {}, {}}, ReferenceCase{"?query", {}, {}, "", "query", {}}, ReferenceCase{"#fragment", {}, {}, "", {}, "fragment"}, ReferenceCase{"?", {}, {}, "", "", {}}, ReferenceCase{"#", {}, {}, "", {}, ""}, ReferenceCase{"?#", {}, {}, "", "", ""}, ReferenceCase{"//host/path", {}, "host", "/path", {}, {}}, ReferenceCase{"//", {}, "", "", {}, {}}, ReferenceCase{"///path", {}, "", "/path", {}, {}}, ReferenceCase{"scheme:", "scheme", {}, "", {}, {}}, ReferenceCase{"scheme:?", "scheme", {}, "", "", {}}, ReferenceCase{"scheme:#", "scheme", {}, "", {}, ""}, ReferenceCase{"scheme:?#", "scheme", {}, "", "", ""}, ReferenceCase{"scheme://?#", "scheme", "", "", "", ""}, ReferenceCase{"scheme:/path", "scheme", {}, "/path", {}, {}}, ReferenceCase{"scheme:path", "scheme", {}, "path", {}, {}}, ReferenceCase{"file:/tmp/a", "file", {}, "/tmp/a", {}, {}}, ReferenceCase{"file:///tmp/a", "file", "", "/tmp/a", {}, {}}, ReferenceCase{"C:relative", "C", {}, "relative", {}, {}}, ReferenceCase{"HTTP://user:p%40ss@[2001:db8::1]:80/a//b?x=+%2f&x=%2F#part?x", "HTTP", "user:p%40ss@[2001:db8::1]:80", "/a//b", "x=+%2f&x=%2F", "part?x"}, ReferenceCase{"DATA:text/plain,http://example.test/a//b?x=1#fragment", "DATA", {}, "text/plain,http://example.test/a//b", "x=1", "fragment"}, ReferenceCase{"magnet:?xt=urn:btih:0123456789012345678901234567890123456789&tr=&tr=a+b", "magnet", {}, "", "xt=urn:btih:0123456789012345678901234567890123456789&tr=&tr=a+b", {}}, ReferenceCase{"urn:example:a/b?+resolver?=query#part", "urn", {}, "example:a/b", "+resolver?=query", "part"}, ReferenceCase{"example+v1:body", "example+v1", {}, "body", {}, {}}))
 
 TEST (TestURIParser, RecognizesOnlyLeadingSchemeWithoutValidatingBody)
 
 TEST (TestURIParser, ScansMalformedCandidatesWithoutLosingBytes)
 
 TEST_P (TestURIParserValid, AcceptsGenericSyntax)
 
 INSTANTIATE_TEST_SUITE_P (GenericSyntax, TestURIParserValid, testing::Values("x://", "x://@", "x://host:", "x://host:999999999999", "x://user:p%40ss@host/", "x://255.255.255.255/", "x://256.0.0.1/", "x://01.2.3.4/", "x://name%20here/", "x://[::]/", "x://[::1]/", "x://[1::]/", "x://[1:2:3:4:5:6:7:8]/", "x://[1:2:3:4:5:6:7::]/", "x://[::1:2:3:4:5:6:7]/", "x://[2001:db8::1]:/", "x://[::ffff:192.0.2.1]/", "x://[1:2:3:4:5:6:192.0.2.1]/", "x://[1:2:3:4:5::192.0.2.1]/", "x://[v1.a:b]/", "x://[VF.A!$&'()*+,;=:]/", "x:/", "x:////", "x:a/./../b", "x:%00%7f%FF", "x:!$&'()*+,;=:@/~_-.", "x:?a/b?c:d@e+f%20#x/y?z", "data://x", "mailto:user@example.test"))
 
 TEST_P (TestURIParserInvalid, RejectsInvalidGenericSyntax)
 
 INSTANTIATE_TEST_SUITE_P (GenericSyntax, TestURIParserInvalid, testing::Values(":path", "1scheme:path", "bad_scheme:path", "x:bad%", "x:bad%0", "x:bad%GG", "x:space here", "x:tab\there", "x:line\nbreak", "x:\x7f", "x:\xc3\xa9", "x:a\\b", "x:a|b", "x:a<b", "x:a>b", "x:a\"b", "x:a{b", "x:a}b", "x:a^b", "x:a`b", "x:a[b", "x:a]b", "x:?bad%", "x:#bad%", "x:#a#b", "x://user@@host", "x://host:port/", "x://host:-1/", "x://host:12:34/", "x://bad%host/", "x://[::1", "x://[]/", "x://[::1]suffix/", "x://[::1]:port/", "x://::1/", "x://[1:2:3:4:5:6:7]/", "x://[1:2:3:4:5:6:7:8:9]/", "x://[1:2:3:4:5:6:7:8::]/", "x://[1::2::3]/", "x://[:::]/", "x://[12345::]/", "x://[::g]/", "x://[::ffff:256.1.2.3]/", "x://[::ffff:01.2.3.4]/", "x://[192.0.2.1::]/", "x://[1:2:3:4:5:6::192.0.2.1]/", "x://[::ffff:1.2.3]/", "x://[v.a]/", "x://[v1.]/", "x://[v1.a%20b]/", "x://[vG.a]/", "x://[fe80::1%25eth0]/"))
 
 TEST (TestURIParser, RejectsEmbeddedNul)
 
 TEST (TestURIParser, RangesRemainUsableWithCopiedAndMovedStorage)
 

Function Documentation

◆ INSTANTIATE_TEST_SUITE_P() [1/3]

INSTANTIATE_TEST_SUITE_P ( GenericSyntax ,
TestURIParserInvalid ,
testing::Values(":path", "1scheme:path", "bad_scheme:path", "x:bad%", "x:bad%0", "x:bad%GG", "x:space here", "x:tab\there", "x:line\nbreak", "x:\x7f", "x:\xc3\xa9", "x:a\\b", "x:a|b", "x:a<b", "x:a>b", "x:a\"b", "x:a{b", "x:a}b", "x:a^b", "x:a`b", "x:a[b", "x:a]b", "x:?bad%", "x:#bad%", "x:#a#b", "x://user@@host", "x://host:port/", "x://host:-1/", "x://host:12:34/", "x://bad%host/", "x://[::1", "x://[]/", "x://[::1]suffix/", "x://[::1]:port/", "x://::1/", "x://[1:2:3:4:5:6:7]/", "x://[1:2:3:4:5:6:7:8:9]/", "x://[1:2:3:4:5:6:7:8::]/", "x://[1::2::3]/", "x://[:::]/", "x://[12345::]/", "x://[::g]/", "x://[::ffff:256.1.2.3]/", "x://[::ffff:01.2.3.4]/", "x://[192.0.2.1::]/", "x://[1:2:3:4:5:6::192.0.2.1]/", "x://[::ffff:1.2.3]/", "x://[v.a]/", "x://[v1.]/", "x://[v1.a%20b]/", "x://[vG.a]/", "x://[fe80::1%25eth0]/")  )

◆ INSTANTIATE_TEST_SUITE_P() [2/3]

INSTANTIATE_TEST_SUITE_P ( GenericSyntax ,
TestURIParserReference  )

◆ INSTANTIATE_TEST_SUITE_P() [3/3]

INSTANTIATE_TEST_SUITE_P ( GenericSyntax ,
TestURIParserValid  )

◆ TEST() [1/4]

TEST ( TestURIParser ,
RangesRemainUsableWithCopiedAndMovedStorage  )

◆ TEST() [2/4]

TEST ( TestURIParser ,
RecognizesOnlyLeadingSchemeWithoutValidatingBody  )

◆ TEST() [3/4]

TEST ( TestURIParser ,
RejectsEmbeddedNul  )

◆ TEST() [4/4]

TEST ( TestURIParser ,
ScansMalformedCandidatesWithoutLosingBytes  )

◆ TEST_P() [1/3]

TEST_P ( TestURIParserInvalid ,
RejectsInvalidGenericSyntax  )

◆ TEST_P() [2/3]

TEST_P ( TestURIParserReference ,
PreservesComponentsAndSpelling  )

◆ TEST_P() [3/3]

TEST_P ( TestURIParserValid ,
AcceptsGenericSyntax  )