/* * Option unit test program for CUPS. * * Copyright 2008-2016 by Apple Inc. * * Licensed under Apache License v2.0. See the file "LICENSE" for more information. */ /* * Include necessary headers... */ #include "cups-private.h" /* * 'main()' - Test option processing functions. */ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { int status = 0, /* Exit status */ num_options; /* Number of options */ cups_option_t *options; /* Options */ const char *value; /* Value of an option */ ipp_t *request; /* IPP request */ ipp_attribute_t *attr; /* IPP attribute */ int count; /* Number of attributes */ if (argc == 1) { /* * cupsParseOptions() */ fputs("cupsParseOptions: ", stdout); num_options = cupsParseOptions("foo=1234 " "bar=\"One Fish\",\"Two Fish\",\"Red Fish\"," "\"Blue Fish\" " "baz={param1=1 param2=2} " "foobar=FOO\\ BAR " "barfoo=barfoo " "barfoo=\"\'BAR FOO\'\" " "auth-info=user,pass\\\\,word\\\\\\\\", 0, &options); if (num_options != 6) { printf("FAIL (num_options=%d, expected 6)\n", num_options); status ++; } else if ((value = cupsGetOption("foo", num_options, options)) == NULL || strcmp(value, "1234")) { printf("FAIL (foo=\"%s\", expected \"1234\")\n", value); status ++; } else if ((value = cupsGetOption("bar", num_options, options)) == NULL || strcmp(value, "One Fish,Two Fish,Red Fish,Blue Fish")) { printf("FAIL (bar=\"%s\", expected \"One Fish,Two Fish,Red Fish,Blue " "Fish\")\n", value); status ++; } else if ((value = cupsGetOption("baz", num_options, options)) == NULL || strcmp(value, "{param1=1 param2=2}")) { printf("FAIL (baz=\"%s\", expected \"{param1=1 param2=2}\")\n", value); status ++; } else if ((value = cupsGetOption("foobar", num_options, options)) == NULL || strcmp(value, "FOO BAR")) { printf("FAIL (foobar=\"%s\", expected \"FOO BAR\")\n", value); status ++; } else if ((value = cupsGetOption("barfoo", num_options, options)) == NULL || strcmp(value, "\'BAR FOO\'")) { printf("FAIL (barfoo=\"%s\", expected \"\'BAR FOO\'\")\n", value); status ++; } else if ((value = cupsGetOption("auth-info", num_options, options)) == NULL || strcmp(value, "user,pass\\,word\\\\")) { printf("FAIL (auth-info=\"%s\", expected \"user,pass\\,word\\\\\")\n", value); status ++; } else puts("PASS"); fputs("cupsEncodeOptions2: ", stdout); request = ippNew(); ippSetOperation(request, IPP_OP_PRINT_JOB); cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB); for (count = 0, attr = ippFirstAttribute(request); attr; attr = ippNextAttribute(request), count ++); if (count != 6) { printf("FAIL (%d attributes, expected 6)\n", count); status ++; } else if ((attr = ippFindAttribute(request, "foo", IPP_TAG_ZERO)) == NULL) { puts("FAIL (Unable to find attribute \"foo\")"); status ++; } else if (ippGetValueTag(attr) != IPP_TAG_NAME) { printf("FAIL (\"foo\" of type %s, expected name)\n", ippTagString(ippGetValueTag(attr))); status ++; } else if (ippGetCount(attr) != 1) { printf("FAIL (\"foo\" has %d values, expected 1)\n", (int)ippGetCount(attr)); status ++; } else if (strcmp(ippGetString(attr, 0, NULL), "1234")) { printf("FAIL (\"foo\" has value %s, expected 1234)\n", ippGetString(attr, 0, NULL)); status ++; } else if ((attr = ippFindAttribute(request, "auth-info", IPP_TAG_ZERO)) == NULL) { puts("FAIL (Unable to find attribute \"auth-info\")"); status ++; } else if (ippGetValueTag(attr) != IPP_TAG_TEXT) { printf("FAIL (\"auth-info\" of type %s, expected text)\n", ippTagString(ippGetValueTag(attr))); status ++; } else if (ippGetCount(attr) != 2) { printf("FAIL (\"auth-info\" has %d values, expected 2)\n", (int)ippGetCount(attr)); status ++; } else if (strcmp(ippGetString(attr, 0, NULL), "user")) { printf("FAIL (\"auth-info\"[0] has value \"%s\", expected \"user\")\n", ippGetString(attr, 0, NULL)); status ++; } else if (strcmp(ippGetString(attr, 1, NULL), "pass,word\\")) { printf("FAIL (\"auth-info\"[1] has value \"%s\", expected \"pass,word\\\")\n", ippGetString(attr, 1, NULL)); status ++; } else puts("PASS"); } else { int i; /* Looping var */ cups_option_t *option; /* Current option */ num_options = cupsParseOptions(argv[1], 0, &options); for (i = 0, option = options; i < num_options; i ++, option ++) printf("options[%d].name=\"%s\", value=\"%s\"\n", i, option->name, option->value); } exit (status); }