Blame gnulib-tests/test-quotearg.h

Packit 33f14e
/* Test of quotearg family of functions.
Packit 33f14e
   Copyright (C) 2008-2017 Free Software Foundation, Inc.
Packit 33f14e
Packit 33f14e
   This program is free software; you can redistribute it and/or modify
Packit 33f14e
   it under the terms of the GNU General Public License as published by
Packit 33f14e
   the Free Software Foundation; either version 3, or (at your option)
Packit 33f14e
   any later version.
Packit 33f14e
Packit 33f14e
   This program is distributed in the hope that it will be useful,
Packit 33f14e
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 33f14e
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 33f14e
   GNU General Public License for more details.
Packit 33f14e
Packit 33f14e
   You should have received a copy of the GNU General Public License
Packit 33f14e
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
Packit 33f14e
Packit 33f14e
/* Written by Eric Blake <ebb9@byu.net>, 2008.  */
Packit 33f14e
Packit 33f14e
struct result_strings {
Packit 33f14e
  char const *str1; /* Translation of "".  */
Packit 33f14e
  char const *str2; /* Translation of "\0""1\0".  */
Packit 33f14e
  size_t len2; /* Length of str2.  */
Packit 33f14e
  char const *str3; /* Translation of "simple".  */
Packit 33f14e
  char const *str4; /* Translation of " \t\n'\"\033?""?/\\".  */
Packit 33f14e
  char const *str5; /* Translation of "a:b".  */
Packit 33f14e
  char const *str6; /* Translation of "a\\b".  */
Packit 33f14e
  char const *str7; /* Translation of "a' b".  */
Packit 33f14e
  char const *str8a; /* Translation of LQ RQ, in ASCII charset.  */
Packit 33f14e
  char const *str8b; /* Translation of LQ RQ, in Latin1 or UTF-8 charset.  */
Packit 33f14e
};
Packit 33f14e
Packit 33f14e
struct result_groups {
Packit 33f14e
  struct result_strings group1; /* Via quotearg_buffer.  */
Packit 33f14e
  struct result_strings group2; /* Via quotearg{,_mem}.  */
Packit 33f14e
  struct result_strings group3; /* Via quotearg_colon{,_mem}.  */
Packit 33f14e
};
Packit 33f14e
Packit 33f14e
/* These quotes are borrowed from a pt_PT.utf8 translation.  */
Packit 33f14e
# define LQ "\302\253"
Packit 33f14e
# define RQ "\302\273"
Packit 33f14e
# define LQ_ENC "\\302\\253"
Packit 33f14e
# define RQ_ENC "\\302\\273"
Packit 33f14e
# define RQ_ESC "\\\302\273"
Packit 33f14e
Packit 33f14e
static struct result_strings inputs = {
Packit 33f14e
  "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b",
Packit 33f14e
  "a' b", LQ RQ, NULL
Packit 33f14e
};
Packit 33f14e
Packit 33f14e
static void
Packit 33f14e
compare (char const *a, size_t la, char const *b, size_t lb)
Packit 33f14e
{
Packit 33f14e
  ASSERT (la == lb);
Packit 33f14e
  ASSERT (memcmp (a, b, la) == 0);
Packit 33f14e
  ASSERT (b[lb] == '\0');
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
static void
Packit 33f14e
compare_strings (char *(func) (char const *, size_t *),
Packit 33f14e
                 struct result_strings *results, bool ascii_only)
Packit 33f14e
{
Packit 33f14e
  size_t len;
Packit 33f14e
  char *p;
Packit 33f14e
Packit 33f14e
  len = 0;
Packit 33f14e
  p = func (inputs.str1, &len;;
Packit 33f14e
  compare (results->str1, strlen (results->str1), p, len);
Packit 33f14e
Packit 33f14e
  len = inputs.len2;
Packit 33f14e
  p = func (inputs.str2, &len;;
Packit 33f14e
  compare (results->str2, results->len2, p, len);
Packit 33f14e
Packit 33f14e
  len = SIZE_MAX;
Packit 33f14e
  p = func (inputs.str3, &len;;
Packit 33f14e
  compare (results->str3, strlen (results->str3), p, len);
Packit 33f14e
Packit 33f14e
  len = strlen (inputs.str4);
Packit 33f14e
  p = func (inputs.str4, &len;;
Packit 33f14e
  compare (results->str4, strlen (results->str4), p, len);
Packit 33f14e
Packit 33f14e
  len = SIZE_MAX;
Packit 33f14e
  p = func (inputs.str5, &len;;
Packit 33f14e
  compare (results->str5, strlen (results->str5), p, len);
Packit 33f14e
Packit 33f14e
  len = strlen (inputs.str6);
Packit 33f14e
  p = func (inputs.str6, &len;;
Packit 33f14e
  compare (results->str6, strlen (results->str6), p, len);
Packit 33f14e
Packit 33f14e
  len = strlen (inputs.str7);
Packit 33f14e
  p = func (inputs.str7, &len;;
Packit 33f14e
  compare (results->str7, strlen (results->str7), p, len);
Packit 33f14e
Packit 33f14e
  len = strlen (inputs.str8a);
Packit 33f14e
  p = func (inputs.str8a, &len;;
Packit 33f14e
  if (ascii_only)
Packit 33f14e
    compare (results->str8a, strlen (results->str8a), p, len);
Packit 33f14e
  else
Packit 33f14e
    compare (results->str8b, strlen (results->str8b), p, len);
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
static char *
Packit 33f14e
use_quotearg_buffer (const char *str, size_t *len)
Packit 33f14e
{
Packit 33f14e
  static char buf[100];
Packit 33f14e
  size_t size;
Packit 33f14e
  memset (buf, 0xa5, 100);
Packit 33f14e
  size = quotearg_buffer (buf, 100, str, *len, NULL);
Packit 33f14e
  *len = size;
Packit 33f14e
  ASSERT ((unsigned char) buf[size + 1] == 0xa5);
Packit 33f14e
  return buf;
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
static char *
Packit 33f14e
use_quotearg (const char *str, size_t *len)
Packit 33f14e
{
Packit 33f14e
  char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len);
Packit 33f14e
  *len = strlen (p);
Packit 33f14e
  return p;
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
static char *
Packit 33f14e
use_quotearg_colon (const char *str, size_t *len)
Packit 33f14e
{
Packit 33f14e
  char *p = (*len == SIZE_MAX ? quotearg_colon (str)
Packit 33f14e
             : quotearg_colon_mem (str, *len));
Packit 33f14e
  *len = strlen (p);
Packit 33f14e
  return p;
Packit 33f14e
}