summaryrefslogtreecommitdiff
path: root/test/ipptool.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/ipptool.c')
-rw-r--r--test/ipptool.c137
1 files changed, 109 insertions, 28 deletions
diff --git a/test/ipptool.c b/test/ipptool.c
index dac5541c..fee9fc5d 100644
--- a/test/ipptool.c
+++ b/test/ipptool.c
@@ -1,9 +1,9 @@
/*
- * "$Id: ipptool.c 10461 2012-05-11 23:01:21Z mike $"
+ * "$Id: ipptool.c 10828 2013-01-21 13:00:37Z mike $"
*
* ipptool command for CUPS.
*
- * Copyright 2007-2012 by Apple Inc.
+ * Copyright 2007-2013 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
@@ -113,7 +113,10 @@ typedef struct _cups_status_s /**** Status info ****/
{
ipp_status_t status; /* Expected status code */
char *if_defined, /* Only if variable is defined */
- *if_not_defined; /* Only if variable is not defined */
+ *if_not_defined, /* Only if variable is not defined */
+ *define_match, /* Variable to define on match */
+ *define_no_match, /* Variable to define on no-match */
+ *define_value; /* Variable to define with value */
int repeat_limit, /* Maximum number of times to repeat */
repeat_match, /* Repeat the test when it does not match */
repeat_no_match; /* Repeat the test when it matches */
@@ -1184,7 +1187,9 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
_cups_strcasecmp(token, "WITH-VALUE"))
last_expect = NULL;
- if (_cups_strcasecmp(token, "IF-DEFINED") &&
+ if (_cups_strcasecmp(token, "DEFINE-MATCH") &&
+ _cups_strcasecmp(token, "DEFINE-NO-MATCH") &&
+ _cups_strcasecmp(token, "IF-DEFINED") &&
_cups_strcasecmp(token, "IF-NOT-DEFINED") &&
_cups_strcasecmp(token, "REPEAT-LIMIT") &&
_cups_strcasecmp(token, "REPEAT-MATCH") &&
@@ -1459,13 +1464,15 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
* Operation...
*/
- if (!get_token(fp, token, sizeof(token), &linenum))
+ if (!get_token(fp, temp, sizeof(temp), &linenum))
{
print_fatal_error("Missing OPERATION code on line %d.", linenum);
pass = 0;
goto test_exit;
}
+ expand_variables(vars, token, temp, sizeof(token));
+
if ((op = ippOpValue(token)) == (ipp_op_t)-1 &&
(op = strtol(token, NULL, 0)) == 0)
{
@@ -1508,13 +1515,15 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
double delay;
- if (!get_token(fp, token, sizeof(token), &linenum))
+ if (!get_token(fp, temp, sizeof(temp), &linenum))
{
print_fatal_error("Missing DELAY value on line %d.", linenum);
pass = 0;
goto test_exit;
}
+ expand_variables(vars, token, temp, sizeof(token));
+
if ((delay = _cupsStrScand(token, NULL, localeconv())) <= 0.0)
{
print_fatal_error("Bad DELAY value \"%s\" on line %d.", token,
@@ -1702,6 +1711,11 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
}
break;
+ case IPP_TAG_STRING :
+ attrptr = ippAddOctetString(request, group, attr, token,
+ strlen(token));
+ break;
+
default :
print_fatal_error("Unsupported ATTR value tag %s on line %d.",
ippTagString(value), linenum);
@@ -1804,6 +1818,8 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
last_status = statuses + num_statuses;
num_statuses ++;
+ last_status->define_match = NULL;
+ last_status->define_no_match = NULL;
last_status->if_defined = NULL;
last_status->if_not_defined = NULL;
last_status->repeat_limit = 1000;
@@ -1887,10 +1903,12 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
if (last_expect)
last_expect->define_match = strdup(token);
+ else if (last_status)
+ last_status->define_match = strdup(token);
else
{
- print_fatal_error("DEFINE-MATCH without a preceding EXPECT on line "
- "%d.", linenum);
+ print_fatal_error("DEFINE-MATCH without a preceding EXPECT or STATUS "
+ "on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -1907,10 +1925,12 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
if (last_expect)
last_expect->define_no_match = strdup(token);
+ else if (last_status)
+ last_status->define_no_match = strdup(token);
else
{
- print_fatal_error("DEFINE-NO-MATCH without a preceding EXPECT on "
- "line %d.", linenum);
+ print_fatal_error("DEFINE-NO-MATCH without a preceding EXPECT or "
+ "STATUS on line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -1929,8 +1949,8 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
last_expect->define_value = strdup(token);
else
{
- print_fatal_error("DEFINE-VALUE without a preceding EXPECT on line "
- "%d.", linenum);
+ print_fatal_error("DEFINE-VALUE without a preceding EXPECT on "
+ "line %d.", linenum);
pass = 0;
goto test_exit;
}
@@ -2204,7 +2224,8 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
if (request->attrs)
{
puts("<dict>");
- for (attrptr = request->attrs, group = attrptr->group_tag;
+ for (attrptr = request->attrs,
+ group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
attrptr;
attrptr = attrptr->next)
print_attr(attrptr, &group);
@@ -2240,8 +2261,7 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
puts("<key>StatusCode</key>");
print_xml_string("string", "skip");
puts("<key>ResponseAttributes</key>");
- puts("<dict>");
- puts("</dict>");
+ puts("<dict />");
}
else if (Output == _CUPS_OUTPUT_TEST)
puts("SKIP]");
@@ -2554,7 +2574,8 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
a = cupsArrayNew((cups_array_func_t)strcmp, NULL);
- for (attrptr = response->attrs, group = attrptr->group_tag;
+ for (attrptr = response->attrs,
+ group = attrptr ? attrptr->group_tag : IPP_TAG_ZERO;
attrptr;
attrptr = attrptr->next)
{
@@ -2641,11 +2662,23 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
repeat_count < statuses[i].repeat_limit)
repeat_test = 1;
- break;
+ if (statuses[i].define_match)
+ set_variable(vars, statuses[i].define_match, "1");
+
+ break;
}
- else if (statuses[i].repeat_no_match &&
- repeat_count < statuses[i].repeat_limit)
- repeat_test = 1;
+ else
+ {
+ if (statuses[i].repeat_no_match &&
+ repeat_count < statuses[i].repeat_limit)
+ repeat_test = 1;
+
+ if (statuses[i].define_no_match)
+ {
+ set_variable(vars, statuses[i].define_no_match, "1");
+ break;
+ }
+ }
}
if (i == num_statuses && num_statuses > 0)
@@ -2660,9 +2693,10 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
get_variable(vars, statuses[i].if_not_defined))
continue;
- add_stringf(errors, "EXPECTED: STATUS %s (got %s)",
- ippErrorString(statuses[i].status),
- ippErrorString(cupsLastError()));
+ if (!statuses[i].repeat_match)
+ add_stringf(errors, "EXPECTED: STATUS %s (got %s)",
+ ippErrorString(statuses[i].status),
+ ippErrorString(cupsLastError()));
}
if ((attrptr = ippFindAttribute(response, "status-message",
@@ -2726,7 +2760,8 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
{
if (expect->define_no_match)
set_variable(vars, expect->define_no_match, "1");
- else if (!expect->define_match && !expect->define_value)
+ else if (!expect->define_match && !expect->define_value &&
+ !expect->repeat_match && !expect->repeat_no_match)
{
if (expect->with_flags & _CUPS_WITH_REGEX)
add_stringf(errors, "EXPECTED: %s %s /%s/",
@@ -2958,7 +2993,7 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
}
if (num_displayed > 0 && !Verbosity && response &&
- (Output == _CUPS_OUTPUT_TEST || Output == _CUPS_OUTPUT_PLIST))
+ Output == _CUPS_OUTPUT_TEST)
{
for (attrptr = response->attrs;
attrptr != NULL;
@@ -2994,6 +3029,10 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
free(statuses[i].if_defined);
if (statuses[i].if_not_defined)
free(statuses[i].if_not_defined);
+ if (statuses[i].define_match)
+ free(statuses[i].define_match);
+ if (statuses[i].define_no_match)
+ free(statuses[i].define_no_match);
}
num_statuses = 0;
@@ -3044,6 +3083,10 @@ do_tests(_cups_vars_t *vars, /* I - Variables */
free(statuses[i].if_defined);
if (statuses[i].if_not_defined)
free(statuses[i].if_not_defined);
+ if (statuses[i].define_match)
+ free(statuses[i].define_match);
+ if (statuses[i].define_no_match)
+ free(statuses[i].define_no_match);
}
for (i = num_expects, expect = expects; i > 0; i --, expect ++)
@@ -3716,8 +3759,11 @@ print_attr(ipp_attribute_t *attr, /* I - Attribute to print */
{
if (!attr->name || (group && *group != attr->group_tag))
{
- puts("</dict>");
- puts("<dict>");
+ if (attr->group_tag != IPP_TAG_ZERO)
+ {
+ puts("</dict>");
+ puts("<dict>");
+ }
if (group)
*group = attr->group_tag;
@@ -3788,6 +3834,41 @@ print_attr(ipp_attribute_t *attr, /* I - Attribute to print */
break;
case IPP_TAG_STRING :
+ for (i = 0; i < attr->num_values; i ++)
+ {
+ if (Output == _CUPS_OUTPUT_PLIST)
+ {
+ char buffer[IPP_MAX_LENGTH * 5 / 4 + 1];
+ /* Output buffer */
+
+ printf("<data>%s</data>\n",
+ httpEncode64_2(buffer, sizeof(buffer),
+ attr->values[i].unknown.data,
+ attr->values[i].unknown.length));
+ }
+ else
+ {
+ char *ptr, /* Pointer into data */
+ *end; /* End of data */
+
+ putchar('\"');
+ for (ptr = attr->values[i].unknown.data,
+ end = ptr + attr->values[i].unknown.length;
+ ptr < end;
+ ptr ++)
+ {
+ if (*ptr == '\\' || *ptr == '\"')
+ printf("\\%c", *ptr);
+ else if (!isprint(*ptr & 255))
+ printf("\\%03o", *ptr & 255);
+ else
+ putchar(*ptr);
+ }
+ putchar('\"');
+ }
+ }
+ break;
+
case IPP_TAG_TEXT :
case IPP_TAG_NAME :
case IPP_TAG_KEYWORD :
@@ -5396,5 +5477,5 @@ with_value(cups_array_t *errors, /* I - Errors array */
/*
- * End of "$Id: ipptool.c 10461 2012-05-11 23:01:21Z mike $".
+ * End of "$Id: ipptool.c 10828 2013-01-21 13:00:37Z mike $".
*/