Added # wildcard and handled urls containing query

feature/UrlUtils
Kenneth Barbour 2018-03-13 16:10:55 -04:00 committed by Kenneth Barbour
parent 9486a3af86
commit 464add864d
2 changed files with 19 additions and 1 deletions

View File

@ -44,7 +44,14 @@ bool RequestRouter::urlMatches(const char * pattern, const char * url)
else if (url[u] == '\0') p++;
else u++;
} else {
if (pattern[p++] == url[u++]) continue;
if (pattern[p] == url[u]) {
p++;
u++;
continue;
}
if (pattern[p] == '\0' && url[u] == '?')
return true;
if (pattern[p] == '#') return true;
return false;
}

View File

@ -104,5 +104,16 @@ TEST_CASE("Url Wildcards","[RequestRouter]")
CHECK(RequestRouter::urlMatches("/*/","/foo") == false);
CHECK(RequestRouter::urlMatches("/foo/*/bar","/foo/baz/bar") == true);
CHECK(RequestRouter::urlMatches("*","foo") == true);
CHECK(RequestRouter::urlMatches("/foo","/foo?bar") == true);
CHECK(RequestRouter::urlMatches("/bar","/?bar") == false);
CHECK(RequestRouter::urlMatches("/#","/bar?foo") == true);
CHECK(RequestRouter::urlMatches("/foo/#","/foo/") == true);
CHECK(RequestRouter::urlMatches("/users/*/#","/users/alice/data") == true);
CHECK(RequestRouter::urlMatches("/users/*/#","/users/alice/") == true);
CHECK(RequestRouter::urlMatches("/users/*/#","/users/alice") == false);
CHECK(RequestRouter::urlMatches("/users/*","/users/alice?foo") == true);
CHECK(RequestRouter::urlMatches("/fs/#","/fs/foo/bar/baz") == true);
CHECK(RequestRouter::urlMatches("/*/*/*","/foo/bar/baz") == true);
CHECK(RequestRouter::urlMatches("/*/*/*","/foo/bar/baz/qux") == false);
}