/*
- * "$Id$"
+ * PWG unit test program for CUPS.
*
- * PWG test program for CUPS.
+ * Copyright 2009-2016 by Apple Inc.
*
- * Copyright 2009-2010 by Apple Inc.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * This file is subject to the Apple OS-Developed Software exception.
- *
- * Contents:
- *
- * main() - Main entry.
- * test_pwg() - Test the PWG mapping functions.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
*/
#include "ppd-private.h"
+#include "file-private.h"
/*
* Local functions...
*/
-static int test_pwg(_pwg_t *pwg);
+static int test_pagesize(_ppd_cache_t *pc, ppd_file_t *ppd,
+ const char *ppdsize);
+static int test_ppd_cache(_ppd_cache_t *pc, ppd_file_t *ppd);
/*
main(int argc, /* I - Number of command-line args */
char *argv[]) /* I - Command-line arguments */
{
- int status; /* Status of tests (0 = success, 1 = fail) */
- const char *ppdfile; /* PPD filename */
- ppd_file_t *ppd; /* PPD file */
- _pwg_t *pwg; /* PWG mapping data */
- _pwg_media_t *pwgmedia; /* PWG media size */
+ int status; /* Status of tests (0 = success, 1 = fail) */
+ const char *ppdfile; /* PPD filename */
+ ppd_file_t *ppd; /* PPD file */
+ _ppd_cache_t *pc; /* PPD cache and PWG mapping data */
+ const pwg_media_t *pwgmedia; /* PWG media size */
+ size_t i, /* Looping var */
+ num_media; /* Number of media sizes */
+ const pwg_media_t *mediatable; /* Media size table */
+ int dupmedia = 0; /* Duplicate media sizes? */
status = 0;
- if (argc != 2)
+ if (argc < 2 || argc > 3)
{
- puts("Usage: ./testpwg filename.ppd");
+ puts("Usage: ./testpwg filename.ppd [jobfile]");
return (1);
}
- else
- ppdfile = argv[1];
+
+ ppdfile = argv[1];
printf("ppdOpenFile(%s): ", ppdfile);
if ((ppd = ppdOpenFile(ppdfile)) == NULL)
else
puts("PASS");
- fputs("_pwgCreateWithPPD(ppd): ", stdout);
- if ((pwg = _pwgCreateWithPPD(ppd)) == NULL)
+ fputs("_ppdCacheCreateWithPPD(ppd): ", stdout);
+ if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
{
puts("FAIL");
status ++;
else
{
puts("PASS");
- status += test_pwg(pwg);
+ status += test_ppd_cache(pc, ppd);
+
+ if (argc == 3)
+ {
+ /*
+ * Test PageSize mapping code.
+ */
+
+ int fd; /* Job file descriptor */
+ const char *pagesize; /* PageSize value */
+ ipp_t *job; /* Job attributes */
+ ipp_attribute_t *media; /* Media attribute */
+
+ if ((fd = open(argv[2], O_RDONLY)) >= 0)
+ {
+ job = ippNew();
+ ippReadFile(fd, job);
+ close(fd);
+
+ if ((media = ippFindAttribute(job, "media", IPP_TAG_ZERO)) != NULL &&
+ media->value_tag != IPP_TAG_NAME &&
+ media->value_tag != IPP_TAG_KEYWORD)
+ media = NULL;
+
+ if (media)
+ printf("_ppdCacheGetPageSize(media=%s): ",
+ media->values[0].string.text);
+ else
+ fputs("_ppdCacheGetPageSize(media-col): ", stdout);
+
+ fflush(stdout);
+
+ if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL)
+ {
+ puts("FAIL (Not Found)");
+ status = 1;
+ }
+ else if (media && _cups_strcasecmp(pagesize, media->values[0].string.text))
+ {
+ printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize,
+ media->values[0].string.text);
+ status = 1;
+ }
+ else
+ printf("PASS (%s)\n", pagesize);
+
+ ippDelete(job);
+ }
+ else
+ {
+ perror(argv[2]);
+ status = 1;
+ }
+ }
/*
- * _pwgDestroy should never fail...
+ * _ppdCacheDestroy should never fail...
*/
- fputs("_pwgDestroy(pwg): ", stdout);
- _pwgDestroy(pwg);
+ fputs("_ppdCacheDestroy(pc): ", stdout);
+ _ppdCacheDestroy(pc);
puts("PASS");
}
- fputs("_pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout);
- if ((pwgmedia = _pwgMediaForPWG("iso_a4_210x297mm")) == NULL)
+ fputs("pwgMediaForPWG(\"iso_a4_210x297mm\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPWG("iso_a4_210x297mm")) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
- fputs("_pwgMediaForLegacy(\"na-letter\"): ", stdout);
- if ((pwgmedia = _pwgMediaForLegacy("na-letter")) == NULL)
+ fputs("pwgMediaForPWG(\"roll_max_36.1025x3622.0472in\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPWG("roll_max_36.1025x3622.0472in")) == NULL)
+ {
+ puts("FAIL (not found)");
+ status ++;
+ }
+ else if (pwgmedia->width != 91700 || pwgmedia->length != 9199999)
+ {
+ printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
+ status ++;
+ }
+ else
+ printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length);
+
+ fputs("pwgMediaForPWG(\"disc_test_10x100mm\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPWG("disc_test_10x100mm")) == NULL)
+ {
+ puts("FAIL (not found)");
+ status ++;
+ }
+ else if (pwgmedia->width != 10000 || pwgmedia->length != 10000)
+ {
+ printf("FAIL (%dx%d)\n", pwgmedia->width, pwgmedia->length);
+ status ++;
+ }
+ else
+ printf("PASS (%dx%d)\n", pwgmedia->width, pwgmedia->length);
+
+ fputs("pwgMediaForLegacy(\"na-letter\"): ", stdout);
+ if ((pwgmedia = pwgMediaForLegacy("na-letter")) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
- fputs("_pwgMediaForPPD(\"4x6\"): ", stdout);
- if ((pwgmedia = _pwgMediaForPPD("4x6")) == NULL)
+ fputs("pwgMediaForPPD(\"4x6\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPPD("4x6")) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
- fputs("_pwgMediaForPPD(\"10x15cm\"): ", stdout);
- if ((pwgmedia = _pwgMediaForPPD("10x15cm")) == NULL)
+ fputs("pwgMediaForPPD(\"10x15cm\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPPD("10x15cm")) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
- fputs("_pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout);
- if ((pwgmedia = _pwgMediaForPPD("Custom.10x15cm")) == NULL)
+ fputs("pwgMediaForPPD(\"Custom.10x15cm\"): ", stdout);
+ if ((pwgmedia = pwgMediaForPPD("Custom.10x15cm")) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
- fputs("_pwgMediaForSize(29700, 42000): ", stdout);
- if ((pwgmedia = _pwgMediaForSize(29700, 42000)) == NULL)
+ fputs("pwgMediaForSize(29700, 42000): ", stdout);
+ if ((pwgmedia = pwgMediaForSize(29700, 42000)) == NULL)
{
puts("FAIL (not found)");
status ++;
else
puts("PASS");
+ fputs("pwgMediaForSize(9842, 19050): ", stdout);
+ if ((pwgmedia = pwgMediaForSize(9842, 19050)) == NULL)
+ {
+ puts("FAIL (not found)");
+ status ++;
+ }
+ else if (strcmp(pwgmedia->pwg, "na_monarch_3.875x7.5in"))
+ {
+ printf("FAIL (%s)\n", pwgmedia->pwg);
+ status ++;
+ }
+ else
+ printf("PASS (%s)\n", pwgmedia->pwg);
+
+ fputs("pwgMediaForSize(9800, 19000): ", stdout);
+ if ((pwgmedia = pwgMediaForSize(9800, 19000)) == NULL)
+ {
+ puts("FAIL (not found)");
+ status ++;
+ }
+ else if (strcmp(pwgmedia->pwg, "jpn_you6_98x190mm"))
+ {
+ printf("FAIL (%s)\n", pwgmedia->pwg);
+ status ++;
+ }
+ else
+ printf("PASS (%s)\n", pwgmedia->pwg);
+
+ fputs("Duplicate size test: ", stdout);
+ for (mediatable = _pwgMediaTable(&num_media);
+ num_media > 1;
+ num_media --, mediatable ++)
+ {
+ for (i = num_media - 1, pwgmedia = mediatable + 1; i > 0; i --, pwgmedia ++)
+ {
+ if (pwgmedia->width == mediatable->width &&
+ pwgmedia->length == mediatable->length)
+ {
+ if (!dupmedia)
+ {
+ dupmedia = 1;
+ status ++;
+ puts("FAIL");
+ }
+
+ printf(" %s and %s have the same dimensions (%dx%d)\n",
+ pwgmedia->pwg, mediatable->pwg, pwgmedia->width,
+ pwgmedia->length);
+ }
+ }
+ }
+ if (!dupmedia)
+ puts("PASS");
+
+
+ return (status);
+}
+
+
+/*
+ * 'test_pagesize()' - Test the PWG mapping functions.
+ */
+
+static int /* O - 1 on failure, 0 on success */
+test_pagesize(_ppd_cache_t *pc, /* I - PWG mapping data */
+ ppd_file_t *ppd, /* I - PPD file */
+ const char *ppdsize) /* I - PPD page size */
+{
+ int status = 0; /* Return status */
+ ipp_t *job; /* Job attributes */
+ const char *pagesize; /* PageSize value */
+
+
+ if (ppdPageSize(ppd, ppdsize))
+ {
+ printf("_ppdCacheGetPageSize(keyword=%s): ", ppdsize);
+ fflush(stdout);
+
+ if ((pagesize = _ppdCacheGetPageSize(pc, NULL, ppdsize, NULL)) == NULL)
+ {
+ puts("FAIL (Not Found)");
+ status = 1;
+ }
+ else if (_cups_strcasecmp(pagesize, ppdsize))
+ {
+ printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
+ status = 1;
+ }
+ else
+ puts("PASS");
+
+ job = ippNew();
+ ippAddString(job, IPP_TAG_JOB, IPP_TAG_KEYWORD, "media", NULL, ppdsize);
+
+ printf("_ppdCacheGetPageSize(media=%s): ", ppdsize);
+ fflush(stdout);
+
+ if ((pagesize = _ppdCacheGetPageSize(pc, job, NULL, NULL)) == NULL)
+ {
+ puts("FAIL (Not Found)");
+ status = 1;
+ }
+ else if (_cups_strcasecmp(pagesize, ppdsize))
+ {
+ printf("FAIL (Got \"%s\", Expected \"%s\")\n", pagesize, ppdsize);
+ status = 1;
+ }
+ else
+ puts("PASS");
+
+ ippDelete(job);
+ }
+
return (status);
}
/*
- * 'test_pwg()' - Test the PWG mapping functions.
+ * 'test_ppd_cache()' - Test the PPD cache functions.
*/
static int /* O - 1 on failure, 0 on success */
-test_pwg(_pwg_t *pwg) /* I - PWG mapping data */
+test_ppd_cache(_ppd_cache_t *pc, /* I - PWG mapping data */
+ ppd_file_t *ppd) /* I - PPD file */
{
int i, /* Looping var */
status = 0; /* Return status */
- _pwg_t *pwg2; /* Loaded data */
- _pwg_size_t *size, /* Size from original */
+ _ppd_cache_t *pc2; /* Loaded data */
+ pwg_size_t *size, /* Size from original */
*size2; /* Size from saved */
- _pwg_map_t *map, /* Map from original */
+ pwg_map_t *map, /* Map from original */
*map2; /* Map from saved */
* Verify that we can write and read back the same data...
*/
- fputs("_pwgWriteFile(test.pwg): ", stdout);
- if (!_pwgWriteFile(pwg, "test.pwg"))
+ fputs("_ppdCacheWriteFile(test.pwg): ", stdout);
+ if (!_ppdCacheWriteFile(pc, "test.pwg", NULL))
{
puts("FAIL");
status ++;
else
puts("PASS");
- fputs("_pwgCreateWithFile(test.pwg): ", stdout);
- if ((pwg2 = _pwgCreateWithFile("test.pwg")) == NULL)
+ fputs("_ppdCacheCreateWithFile(test.pwg): ", stdout);
+ if ((pc2 = _ppdCacheCreateWithFile("test.pwg", NULL)) == NULL)
{
puts("FAIL");
status ++;
}
else
{
- if (pwg2->num_sizes != pwg->num_sizes)
+ // TODO: FINISH ADDING ALL VALUES IN STRUCTURE
+ if (pc2->num_sizes != pc->num_sizes)
{
if (!status)
puts("FAIL");
- printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pwg2->num_sizes,
- pwg->num_sizes);
+ printf(" SAVED num_sizes=%d, ORIG num_sizes=%d\n", pc2->num_sizes,
+ pc->num_sizes);
status ++;
}
else
{
- for (i = pwg->num_sizes, size = pwg->sizes, size2 = pwg2->sizes;
+ for (i = pc->num_sizes, size = pc->sizes, size2 = pc2->sizes;
i > 0;
i --, size ++, size2 ++)
{
}
}
- for (i = pwg->num_sources, map = pwg->sources, map2 = pwg2->sources;
+ for (i = pc->num_sources, map = pc->sources, map2 = pc2->sources;
i > 0;
i --, map ++, map2 ++)
{
}
}
- for (i = pwg->num_types, map = pwg->types, map2 = pwg2->types;
+ for (i = pc->num_types, map = pc->types, map2 = pc2->types;
i > 0;
i --, map ++, map2 ++)
{
if (!status)
puts("PASS");
+
+ _ppdCacheDestroy(pc2);
}
- return (status);
-}
+ /*
+ * Test PageSize mapping code...
+ */
+ status += test_pagesize(pc, ppd, "Letter");
+ status += test_pagesize(pc, ppd, "na-letter");
+ status += test_pagesize(pc, ppd, "A4");
+ status += test_pagesize(pc, ppd, "iso-a4");
-/*
- * End of "$Id$".
- */
+ return (status);
+}