⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 url_test.c

📁 GNet是一个简单的网络库。它是目标定向的
💻 C
字号:
/* Parse various URLs * Copyright (C) 2001  David Helder * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <glib.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define GNET_EXPERIMENTAL 1#include <gnet.h>static int failed = 0;#define TEST(N, S, C) do {                             \if (C) { /*g_print ("%d %s: PASS\n", (N), (S)); */        } \else   { g_print ("%d %s: FAIL\n", (N), (S)); failed = 1; } \} while (0)struct URLTest{  gchar* str;  gchar* pretty;  struct  {    gchar* scheme;    gchar* user;	    gchar* password;    gchar* hostname;    gint   port;    gchar* path;    gchar* query;    gchar* fragment;  } url;};struct URLTest tests[] = {  /* VALID URLS.  PARSING AND PRINTING OF THESE SHOULD NOT CHANGE */  /* scheme/path */  { "scheme:", NULL,     {"scheme", NULL, NULL, NULL, 0, NULL, NULL, NULL}},  { "scheme:path", NULL,     {"scheme", NULL, NULL, NULL, 0, "path", NULL, NULL}},  { "path", NULL,     {NULL, NULL, NULL, NULL, 0, "path", NULL, NULL}},  { "/path", NULL,     {NULL, NULL, NULL, NULL, 0, "/path", NULL, NULL}},  /* hostname/port */  { "scheme://hostname/path", NULL,     {"scheme", NULL, NULL, "hostname", 0, "/path", NULL, NULL}},  { "scheme://hostname:123/path", NULL,     {"scheme", NULL, NULL, "hostname", 123, "/path", NULL, NULL}},  /* query/fragment */  { "path?query", NULL,     {NULL, NULL, NULL, NULL, 0, "path", "query", NULL}},  { "path?query#fragment", NULL,     {NULL, NULL, NULL, NULL, 0, "path", "query", "fragment"}},  { "scheme:path?query#fragment", NULL,     {"scheme", NULL, NULL, NULL, 0, "path", "query", "fragment"}},  /* full */  { "scheme://hostname:123/path?query#fragment", NULL,     {"scheme", NULL, NULL, "hostname", 123, "/path", "query", "fragment"}},  /* user/pass */  { "scheme://user@hostname", NULL,     {"scheme", "user", NULL, "hostname", 0, NULL, NULL, NULL }},  { "scheme://user@hostname:123/path?query#fragment", NULL,     {"scheme", "user", NULL, "hostname", 123, "/path", "query", "fragment"}},  { "scheme://user:pass@hostname", NULL,     {"scheme", "user", "pass", "hostname", 0, NULL, NULL, NULL}},  { "scheme://user:pass@hostname:123/path?query#fragment", NULL,     {"scheme", "user", "pass", "hostname", 123, "/path", "query", "fragment"}},  /* FUNNY URLS.  PARSING AND PRINTING OF THESE MAY CHANGE */  /* empty */  { "", NULL,     {NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL} },  { "scheme://hostname:123path?query#fragment",     "scheme://hostname:123/path?query#fragment",  /* PRETTY */    {"scheme", NULL, NULL, "hostname", 123, "path", "query", "fragment"}},  { "scheme:hostname:123/path?query#fragment", NULL,     {"scheme", NULL, NULL, NULL, 0, "hostname:123/path", "query", "fragment"}},  { "scheme://:pass@hostname:123/path?query#fragment", NULL,     {"scheme", "", "pass", "hostname", 123, "/path", "query", "fragment"}},  { NULL, NULL, {NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL} }};#define SAFESTRCMP(A,B) (((A)&&(B))?(strcmp((A),(B))):((A)||(B)))intmain (int argc, char* argv[]){  int i;  gnet_init ();  for (i = 0; tests[i].str; ++i)    {      GURL* url;      gchar* pretty;      url = gnet_url_new (tests[i].str);      TEST (i, "gnet_url_new", url != NULL);      if (!url) continue;      pretty = gnet_url_get_nice_string (url);      TEST (i, "gnet_url_get_nice_string", pretty);      if (!pretty) continue;      TEST (i, pretty, TRUE);      if (tests[i].pretty)	TEST (i, "pretty1", !strcmp (pretty, tests[i].pretty));      else	TEST (i, "pretty2", !strcmp (pretty, tests[i].str));      g_free (pretty);      TEST (i, "scheme",   !SAFESTRCMP(url->protocol, tests[i].url.scheme));      TEST (i, "user",     !SAFESTRCMP(url->user,     tests[i].url.user));      TEST (i, "password", !SAFESTRCMP(url->password, tests[i].url.password));      TEST (i, "hostname", !SAFESTRCMP(url->hostname, tests[i].url.hostname));      TEST (i, "port",     url->port == tests[i].url.port);      TEST (i, "path",     !SAFESTRCMP(url->resource, tests[i].url.path));      TEST (i, "query",    !SAFESTRCMP(url->query,    tests[i].url.query));      TEST (i, "fragment", !SAFESTRCMP(url->fragment, tests[i].url.fragment));      gnet_url_delete (url);    }  if (failed)    exit (1);  exit (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -