]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/testpwg.c
License change: Apache License, Version 2.0.
[thirdparty/cups.git] / cups / testpwg.c
index c77033613425c5c060788164ce9261dfac1266e7..6473c8cf91ff3b52e012d22e7325b10eeb3c0a55 100644 (file)
@@ -1,22 +1,9 @@
 /*
- * "$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);
 
 
 /*
@@ -41,22 +31,26 @@ int                                 /* O - Exit status */
 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)
@@ -74,8 +68,8 @@ main(int  argc,                               /* I - Number of command-line args */
   else
     puts("PASS");
 
-  fputs("_pwgCreateWithPPD(ppd): ", stdout);
-  if ((pwg = _pwgCreateWithPPD(ppd)) == NULL)
+  fputs("_ppdCacheCreateWithPPD(ppd): ", stdout);
+  if ((pc = _ppdCacheCreateWithPPD(ppd)) == NULL)
   {
     puts("FAIL");
     status ++;
@@ -83,19 +77,72 @@ main(int  argc,                             /* I - Number of command-line args */
   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 ++;
@@ -113,8 +160,36 @@ main(int  argc,                            /* I - Number of command-line args */
   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 ++;
@@ -132,8 +207,8 @@ main(int  argc,                             /* I - Number of command-line args */
   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 ++;
@@ -151,8 +226,8 @@ main(int  argc,                             /* I - Number of command-line args */
   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 ++;
@@ -170,8 +245,8 @@ main(int  argc,                             /* I - Number of command-line args */
   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 ++;
@@ -189,8 +264,8 @@ main(int  argc,                             /* I - Number of command-line args */
   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 ++;
@@ -203,23 +278,137 @@ main(int  argc,                          /* I - Number of command-line args */
   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 */
 
 
@@ -227,8 +416,8 @@ test_pwg(_pwg_t *pwg)                       /* I - PWG mapping data */
   * 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 ++;
@@ -236,27 +425,28 @@ test_pwg(_pwg_t *pwg)                     /* I - PWG mapping data */
   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 ++)
       {
@@ -309,7 +499,7 @@ test_pwg(_pwg_t *pwg)                       /* I - PWG mapping data */
        }
       }
 
-      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 ++)
       {
@@ -332,7 +522,7 @@ test_pwg(_pwg_t *pwg)                       /* I - PWG mapping data */
        }
       }
 
-      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 ++)
       {
@@ -358,12 +548,18 @@ test_pwg(_pwg_t *pwg)                     /* I - PWG mapping data */
 
     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);
+}