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

📄 config-test.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
字号:
/* * config-test.c:  tests svn_config * * ==================================================================== * Copyright (c) 2000-2004 CollabNet.  All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution.  The terms * are also available at http://subversion.tigris.org/license-1.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * * This software consists of voluntary contributions made by many * individuals.  For exact contribution history, see the revision * history and logs, available at http://subversion.tigris.org/. * ==================================================================== *//* ====================================================================   To add tests, look toward the bottom of this file.*/#include <string.h>#include <apr_getopt.h>#include <apr_pools.h>#include "svn_error.h"#include "svn_config.h"#include "../svn_test.h"/* Initialize parameters for the tests. */extern int test_argc;extern const char **test_argv;static const apr_getopt_option_t opt_def[] =  {    {"srcdir", 'S', 1, "the source directory for VPATH test runs"},    {0, 0, 0, 0}  };static const char *srcdir = NULL;static svn_error_t *init_params(apr_pool_t *pool){  apr_getopt_t *opt;  int optch;  const char *opt_arg;  apr_status_t status;  apr_getopt_init(&opt, pool, test_argc, test_argv);  while (!(status = apr_getopt_long(opt, opt_def, &optch, &opt_arg)))    {      switch (optch)        {        case 'S':          srcdir = opt_arg;          break;        }    }  if (!srcdir)    return svn_error_create(SVN_ERR_TEST_FAILED, 0,                            "missing required parameter '--srcdir'");  return SVN_NO_ERROR;}/* A quick way to create error messages.  */static svn_error_t *fail(apr_pool_t *pool, const char *fmt, ...){  va_list ap;  char *msg;  va_start(ap, fmt);  msg = apr_pvsprintf(pool, fmt, ap);  va_end(ap);  return svn_error_create(SVN_ERR_TEST_FAILED, 0, msg);}static const char *config_keys[] = { "foo", "a", "b", "c", "d", "e", "f", "g",                                     "h", "i", NULL };static const char *config_values[] = { "bar", "Aa", "100", "bar",                                       "a %(bogus)s oyster bar",                                       "%(bogus)s shmoo %(",                                       "%Aa", "lyrical bard", "%(unterminated",                                       "Aa 100", NULL };static svn_error_t *test1(const char **msg,       svn_boolean_t msg_only,      svn_test_opts_t *opts,      apr_pool_t *pool){  svn_config_t *cfg;  int i;  const char *cfg_file;  *msg = "test svn_config";  if (msg_only)    return SVN_NO_ERROR;  if (!srcdir)    SVN_ERR(init_params(pool));  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", NULL);  SVN_ERR(svn_config_read(&cfg, cfg_file, TRUE, pool));  /* Test values retrieved from our ConfigParser instance against     values retrieved using svn_config. */  for (i = 0; config_keys[i] != NULL; i++)    {      const char *key, *py_val, *c_val;            key = config_keys[i];      py_val = config_values[i];      svn_config_get(cfg, &c_val, "section1", key, "default value");#if 0      printf("Testing expected value '%s' against '%s' for "             "option '%s'\n", py_val, c_val, key);#endif      /* Fail iff one value is null, or the strings don't match. */      if ((c_val == NULL) != (py_val == NULL)          || (c_val != NULL && py_val != NULL && strcmp(c_val, py_val) != 0))        return fail(pool, "Expected value '%s' not equal to '%s' for "                    "option '%s'", py_val, c_val, key);    }  return SVN_NO_ERROR;}static const char *true_keys[] = {"true1", "true2", "true3", "true4",                                  NULL};static const char *false_keys[] = {"false1", "false2", "false3", "false4",                                   NULL};static svn_error_t *test2(const char **msg,       svn_boolean_t msg_only,      svn_test_opts_t *opts,      apr_pool_t *pool){  svn_config_t *cfg;  int i;  const char *cfg_file;  *msg = "test svn_config boolean conversion";  if (msg_only)    return SVN_NO_ERROR;  if (!srcdir)    SVN_ERR(init_params(pool));  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", NULL);  SVN_ERR(svn_config_read(&cfg, cfg_file, TRUE, pool));  for (i = 0; true_keys[i] != NULL; i++)    {      svn_boolean_t value;      SVN_ERR(svn_config_get_bool(cfg, &value, "booleans", true_keys[i],                                  FALSE));      if (!value)        return fail(pool, "Value of option '%s' is not true", true_keys[i]);    }  for (i = 0; false_keys[i] != NULL; i++)    {      svn_boolean_t value;      SVN_ERR(svn_config_get_bool(cfg, &value, "booleans", false_keys[i],                                  TRUE));      if (value)        return fail(pool, "Value of option '%s' is not true", false_keys[i]);    }  {    svn_error_t *err;    svn_boolean_t value;    svn_error_clear((err = svn_config_get_bool(cfg, &value,                                               "booleans", "bad_true",                                               TRUE)));    if (!err)      return fail(pool, "No error on bad truth value");    svn_error_clear((err = svn_config_get_bool(cfg, &value,                                               "booleans", "bad_false",                                               FALSE)));    if (!err)      return fail(pool, "No error on bad truth value");  }  return SVN_NO_ERROR;}static svn_error_t *has_section_test(const char **msg,                  svn_boolean_t msg_only,                 svn_test_opts_t *opts,                 apr_pool_t *pool){  svn_config_t *cfg;  const char *cfg_file;  *msg = "test svn_config_has_section";  if (msg_only)    return SVN_NO_ERROR;  if (!srcdir)    SVN_ERR(init_params(pool));  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", NULL);  SVN_ERR(svn_config_read(&cfg, cfg_file, TRUE, pool));  if (! svn_config_has_section(cfg, "section1"))    return fail(pool, "Failed to find section1");  if (svn_config_has_section(cfg, "notthere"))    return fail(pool, "Returned true on missing section");  return SVN_NO_ERROR;}/*   ====================================================================   If you add a new test to this file, update this array.   (These globals are required by our included main())*//* An array of all test functions */struct svn_test_descriptor_t test_funcs[] =  {    SVN_TEST_NULL,    SVN_TEST_PASS(test1),    SVN_TEST_PASS(test2),    SVN_TEST_PASS(has_section_test),    SVN_TEST_NULL  };

⌨️ 快捷键说明

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