X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftest%2Furl.c;h=20849866305616cb146fc9540fde642b2f43a182;hb=470ce70b69e1530173950a8dfd6d274a70caa7bc;hp=df8961704d8159a6f9e2857a4b2349fd22556b80;hpb=64f018048c04f47d61c05a4ccfeb78755d2705cd;p=vlc diff --git a/src/test/url.c b/src/test/url.c index df8961704d..2084986630 100644 --- a/src/test/url.c +++ b/src/test/url.c @@ -19,11 +19,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include #include "vlc_url.h" +#include "vlc_strings.h" #include #include +#include typedef char * (*conv_t) (const char *); @@ -31,12 +37,19 @@ static void test (conv_t f, const char *in, const char *out) { char *res; - printf ("\"%s\" -> \"%s\" ?\n", in, out); + if (out != NULL) + printf ("\"%s\" -> \"%s\" ?\n", in, out); + else + printf ("\"%s\" -> NULL ?\n", in); res = f (in); if (res == NULL) - exit (1); - - if (strcmp (res, out)) + { + if (out == NULL) + return; /* good: NULL -> NULL */ + puts (" ERROR: got NULL"); + exit (2); + } + if (out == NULL || strcmp (res, out)) { printf (" ERROR: got \"%s\"\n", res); exit (2); @@ -55,15 +68,33 @@ static inline void test_b64 (const char *in, const char *out) test (vlc_b64_encode, in, out); } +static char *make_URI_def (const char *in) +{ + return make_URI (in, NULL); +} + +static inline void test_path (const char *in, const char *out) +{ + test (make_URI_def, in, out); +} + +static inline void test_current_directory_path (const char *in, const char *cwd, const char *out) +{ + char * expected_result = NULL; + int val = asprintf(&expected_result, "file://%s/%s", cwd, out); + assert (val != -1); + + test (make_URI_def, in, expected_result); +} + int main (void) { + int val; + (void)setvbuf (stdout, NULL, _IONBF, 0); test_decode ("this_should_not_be_modified_1234", "this_should_not_be_modified_1234"); - test_decode ("This+should+be+modified+1234!", - "This should be modified 1234!"); - test_decode ("This%20should%20be%20modified%201234!", "This should be modified 1234!"); @@ -74,17 +105,60 @@ int main (void) test_decode ("%2", "%2"); test_decode ("%0000", ""); - /* UTF-8 tests */ - test_decode ("T%C3%a9l%c3%A9vision+%e2%82%Ac", "Télévision €"); - test_decode ("T%E9l%E9vision", "T?l?vision"); - test_decode ("%C1%94%C3%a9l%c3%A9vision", "??élévision"); /* overlong */ + /* Non-ASCII tests */ + test_decode ("T%C3%a9l%c3%A9vision %e2%82%Ac", "Télévision €"); + test_decode ("T%E9l%E9vision", "T\xe9l\xe9vision"); /* Base 64 tests */ test_b64 ("", ""); - test_b64 ("d", "ZA=="); - test_b64 ("ab", "YWI="); - test_b64 ("abc", "YWJj"); - test_b64 ("abcd", "YWJjZA=="); + test_b64 ("f", "Zg=="); + test_b64 ("fo", "Zm8="); + test_b64 ("foo", "Zm9v"); + test_b64 ("foob", "Zm9vYg=="); + test_b64 ("fooba", "Zm9vYmE="); + test_b64 ("foobar", "Zm9vYmFy"); + + /* Path test */ + test_path ("file:///", "file:///"); + test_path ("http://www.example.com/%7Ejohn/", + "http://www.example.com/%7Ejohn/"); + test_path ("/", "file:///"); + test_path ("/home/john/", "file:///home/john/"); + test_path ("/home/john/music.ogg", "file:///home/john/music.ogg"); + test_path ("\\\\server/pub/music.ogg", "smb://server/pub/music.ogg"); + test_path ("\\\\server\\pub\\music.ogg", "smb://server/pub/music.ogg"); + test_path ("\\\\server", "smb://server"); + + /*int fd = open (".", O_RDONLY); + assert (fd != -1);*/ + val = chdir ("/tmp"); + assert (val != -1); + + char buf[256]; + char * tmpdir; + tmpdir = getcwd(buf, sizeof(buf)/sizeof(*buf)); + assert (tmpdir); + + test_current_directory_path ("movie.ogg", tmpdir, "movie.ogg"); + test_current_directory_path (".", tmpdir, "."); + test_current_directory_path ("", tmpdir, ""); + + /*val = fchdir (fd); + assert (val != -1);*/ + + /* URI to path tests */ +#define test( a, b ) test (make_path, a, b) + test ("mailto:john@example.com", NULL); + test ("http://www.example.com/file.html#ref", NULL); + test ("file://", NULL); + test ("file:///", "/"); + test ("file://localhost/home/john/music%2Eogg", "/home/john/music.ogg"); + test ("file://localhost/home/john/text#ref", "/home/john/text"); + test ("fd://0foobar", NULL); + test ("fd://0#ref", "/dev/stdin"); + test ("fd://1", "/dev/stdout"); + test ("fd://12345", "/dev/fd/12345"); +#undef test return 0; }