From 980f6f49c4fbbfa8aa52f93e4b0b1d7e39f1a17a Mon Sep 17 00:00:00 2001 From: TTFISH Date: Fri, 12 Jul 2024 03:12:27 +0800 Subject: [PATCH] Merge CI test into workflow with fixed tests (#58) Merged the GSoC 2023 work from Pratyush Ranjan, a CI/build/unit testing facility which tests file conversions given by a table describing the conversions and by included input files. - Manual merge from original commits with failed tests The original repo is from branch ci23 of https://github.com/pranjanpr/libcupsfilters. The test fails which required to be fixed. - In .gitignore add temporary files created during the tests - Fixed failing test script The last two test cases incupsfilters/test-filter-cases.txt required further checks. Original gave: ERROR: cfFilterUniversal: Unsupported combination of input and output formats: application/pdf -> image/jpeg --- .github/workflows/build.yaml | 60 ++ .gitignore | 9 + Makefile.am | 33 +- cupsfilters/test-filter-cases.txt | 5 + cupsfilters/test_files/bashrc.urf | 1 + cupsfilters/test_files/test_file.pdf | Bin cupsfilters/test_files/test_file.pwg | 1 + cupsfilters/test_files/test_file_1pg.pdf | Bin 0 -> 70011 bytes cupsfilters/test_files/test_file_2pg.pdf | Bin 0 -> 3028 bytes cupsfilters/test_files/test_file_4pg.pdf | Bin 0 -> 96034 bytes cupsfilters/testfilters.c | 1198 ++++++++++++++++++++++ cupsfilters/testfilters.sh | 15 + 12 files changed, 1318 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build.yaml create mode 100644 cupsfilters/test-filter-cases.txt create mode 100644 cupsfilters/test_files/bashrc.urf create mode 100644 cupsfilters/test_files/test_file.pdf create mode 100644 cupsfilters/test_files/test_file.pwg create mode 100644 cupsfilters/test_files/test_file_1pg.pdf create mode 100644 cupsfilters/test_files/test_file_2pg.pdf create mode 100644 cupsfilters/test_files/test_file_4pg.pdf create mode 100644 cupsfilters/testfilters.c create mode 100755 cupsfilters/testfilters.sh diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..f0b947d1a --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,60 @@ +name: Build and Test + +on: + push: + branches: + - '**' + pull_request: + branches: + - '**' + +jobs: + build-linux-run-tests: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: show Ubuntu version + run: cat /etc/os-release | grep PRETTY_NAME | awk -F '=' '{print $2}' + - name: update build environment + run: sudo apt-get update --fix-missing -y && sudo apt-get upgrade --fix-missing -y + - name: install prerequisites + run: | + sudo apt-get install -y avahi-daemon libavahi-client-dev libssl-dev libpam-dev libusb-1.0-0-dev zlib1g-dev + sudo apt install autotools-dev autopoint cmake libtool pkg-config libcups2-dev libexif-dev liblcms2-dev libfontconfig1-dev + sudo apt install libfreetype6-dev build-essential qtbase5-dev qtchooser libcairo2-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev libopenjp2-7-dev liblcms2-dev libjpeg-dev + - name: Install libqpdf > 11.0.0 + run: | + cd .. + mkdir qpdf + wget -O qpdf-11.6.3.tar.gz https://sourceforge.net/projects/qpdf/files/qpdf/11.6.3/qpdf-11.6.3.tar.gz + tar -xzf qpdf-11.6.3.tar.gz + cd qpdf-11.6.3 + mkdir build && + cd build && + cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_STATIC_LIBS=OFF \ + -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/qpdf-11.6.3 \ + .. && + make + sudo make install + cd .. + cd .. + - name: Install poppler and mupdf + run: | + sudo apt install libpoppler-cpp-dev libpython3-dev libdbus-1-dev + sudo apt install mupdf-tools + + - name: Install ghostscript + run: sudo apt install ghostscript + + - name: configure + env: + CC: /usr/bin/gcc + run: ./autogen.sh && ./configure --enable-debug + - name: make + run: make + - name: Run Tests + run: make check || cat test/error_log* \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7e6ce7162..4c0cad37f 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,12 @@ m4/visibility.m4 m4/wchar_t.m4 m4/wint_t.m4 m4/xsize.m4 + +# ignore test tmp files +*.log +*.trs +test-pdf +test-ps +testfilters +test-analyze +Test_summary_final.txt \ No newline at end of file diff --git a/Makefile.am b/Makefile.am index 450a9d5b1..45bca9252 100644 --- a/Makefile.am +++ b/Makefile.am @@ -91,6 +91,8 @@ pkgfiltersinclude_DATA = \ lib_LTLIBRARIES = libcupsfilters.la +check_SCRIPTS = cupsfilters/testfilters.sh + check_PROGRAMS = \ testcmyk \ testdither \ @@ -101,14 +103,17 @@ check_PROGRAMS = \ testpdf2 \ test-analyze \ test-pdf \ - test-ps + test-ps \ + testfilters + TESTS = \ testdither \ testpdf1 \ testpdf2 \ test-analyze \ test-pdf \ - test-ps + test-ps \ + cupsfilters/testfilters.sh # testcmyk # fails as it opens some image.ppm which is nowerhe to be found. # testimage # requires also some ppm file as argument @@ -135,6 +140,7 @@ libcupsfilters_la_SOURCES = \ cupsfilters/cmyk.c \ cupsfilters/colord.c \ cupsfilters/colormanager.c \ + cupsfilters/testfilters.c \ cupsfilters/debug.c \ cupsfilters/debug-internal.h \ cupsfilters/dither.c \ @@ -311,11 +317,30 @@ test_pdf_LDADD = libcupsfilters.la test_ps_SOURCES = cupsfilters/fontembed/test-ps.c test_ps_LDADD = libcupsfilters.la +testfilters_SOURCES = \ + cupsfilters/testfilters.c \ + $(pkgfiltersinclude_DATA) + +testfilters_LDADD = \ + libcupsfilters.la \ + -lm -ldl -lcups + +testfilters_LDFLAGS = \ + -D_GNU_SOURCE \ + -L/usr/lib + EXTRA_DIST += \ $(pkgfiltersinclude_DATA) \ cupsfilters/image.pgm \ cupsfilters/image.ppm \ - cupsfilters/fontembed/README + cupsfilters/fontembed/README \ + cupsfilters/test-filter-cases.txt \ + cupsfilters/test_files/bashrc.urf \ + cupsfilters/test_files/test_file.pdf \ + cupsfilters/test_files/test_file.pwg \ + cupsfilters/test_files/test_file_1pg.pdf \ + cupsfilters/test_files/test_file_2pg.pdf \ + cupsfilters/test_files/test_file_4pg.pdf # ========= # CUPS Data @@ -347,4 +372,4 @@ install-data-hook: uninstall-hook: $(RM) $(DESTDIR)$(pkgcharsetdir)/pdf.utf-8 -SUBDIRS = +SUBDIRS = \ No newline at end of file diff --git a/cupsfilters/test-filter-cases.txt b/cupsfilters/test-filter-cases.txt new file mode 100644 index 000000000..ba045aac4 --- /dev/null +++ b/cupsfilters/test-filter-cases.txt @@ -0,0 +1,5 @@ +# Input_File Input_Type Output_File Output_Type Make Model Color Duplex Formats Job-Id: random number User: randome name Title: randome title Copies: range between 1 to 20 Options +cupsfilters/test_files/test_file_1pg.pdf application/pdf cupsfilters/test_files/output_files/test_file_op.pdf application/pdf Generic PDF Color 2 1 1 text/plain,application/pdf 13 new-user custom-print 10 sides=two-sided-long-edge media-size=A4 printer-resolution=300dpi +cupsfilters/test_files/test_file_4pg.pdf application/pdf cupsfilters/test_files/output_files/test_file_op.pwg image/pwg-raster Generic PDF Color 2 1 1 image/pwg-raster,application/pdf 13 new-user custom-print 5 sides=two-sided-short-edge media-size=A4 printer-resolution=300dpi +cupsfilters/test_files/bashrc.urf image/urf cupsfilters/test_files/output_files/test_file_op.jpg image/jpeg Canon GX7000 series 2 1 0 image/urf,image/jpeg 13 new-user custom-print 1 sides=two-sided-short-edge media-size=A4 printer-resolution=600dpi +cupsfilters/test_files/test_file_2pg.pdf application/pdf cupsfilters/test_files/output_files/test_file_op.jpg image/jpeg Brother MFC-L6900DW 2 1 0 application/pdf,application/vnd.cups-pdf 13 new-user custom-print 1 sides=two-sided-short-edge media-size=A4 printer-resolution=300dpi \ No newline at end of file diff --git a/cupsfilters/test_files/bashrc.urf b/cupsfilters/test_files/bashrc.urf new file mode 100644 index 000000000..c1e55a931 --- /dev/null +++ b/cupsfilters/test_files/bashrc.urf @@ -0,0 +1 @@ +RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2 \ No newline at end of file diff --git a/cupsfilters/test_files/test_file.pdf b/cupsfilters/test_files/test_file.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/cupsfilters/test_files/test_file.pwg b/cupsfilters/test_files/test_file.pwg new file mode 100644 index 000000000..8c17033d6 --- /dev/null +++ b/cupsfilters/test_files/test_file.pwg @@ -0,0 +1 @@ +RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2RaS2 \ No newline at end of file diff --git a/cupsfilters/test_files/test_file_1pg.pdf b/cupsfilters/test_files/test_file_1pg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e25081e0325c8bfd62d09786c49e64c283f49da0 GIT binary patch literal 70011 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

`kx>?2G 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 literal 0 HcmV?d00001 diff --git a/cupsfilters/test_files/test_file_2pg.pdf b/cupsfilters/test_files/test_file_2pg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dbf091df9a607221e000593a8b5a97b5ea5fb073 GIT binary patch literal 3028 zcmd5;+iK%D7``|79sZj_3mw^3d>n>>rft|$r=<Gl zWIx$CH11?D%do5oLHZ^AN9p^&qnnG-8;=ca>*%k)|M=6kY|A5;iigj(_3oW*IpgQ0 zB;?N?G}O?F~e-o&fdSbEveGxxNVs&T}_+wIC);wN|S3_`=^Ym z?y1Je_6W!5=Pa%0o_u4M!sh=IbybO>E+wq5{dR6;Rn+AKku*_{3aqswkCH}v ztJ}FLi^-kT6dU1Mb|uqH42vhacOeZu&Rl#HCGFr-xBWM-|+e^~95C3kuyCa8Nz&=d3 zPw9GoO7mhx4-J@*eqI7o0NLmbm9D2#M#EZ@Dl~~|vk9Y>(382@*~jiaPA^4vloGW^${BO z&|L0&$FyZ34q1)S0TXjiAeyzye;HJqPhX+oj`M@hIuz@m%ZWTgO?gR!qsqvQPqV zVBwTl{djT$Lm)?KJ&`!^p- zB?yU29^x`|s{JSof_pN9Oqel#YyZFw~B0kRS*9GB0?&&kJAg z<34|7m-_(#cV8b5!0fg%+X9aQc`Db0`!4$;o1mTB0`JJMabTnKqnZ}rgzd~^$`C_Q S>NZV0@_bPEqs!}&ZT$n`rwj1_ literal 0 HcmV?d00001 diff --git a/cupsfilters/test_files/test_file_4pg.pdf b/cupsfilters/test_files/test_file_4pg.pdf new file mode 100644 index 0000000000000000000000000000000000000000..379f6f518872692f1d5237f18a51bdc93ef039ea GIT binary patch literal 96034 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%0D&8rj#gV4S=BSVYuU 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 literal 0 HcmV?d00001 diff --git a/cupsfilters/testfilters.c b/cupsfilters/testfilters.c new file mode 100644 index 000000000..cf9dbed63 --- /dev/null +++ b/cupsfilters/testfilters.c @@ -0,0 +1,1198 @@ +#include "../config.h" +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * 'remove_white_space()' - Remove white spaces from beginning and end of a string + */ + +char* +remove_white_space( + char* str) +{ + char *end; + while(isspace((unsigned char)*str)) str++; + if(*str == 0) // All spaces? + return str; + + // Trim trailing space + end = str + strlen(str) - 1; + while(end > str && isspace((unsigned char)*end)) end--; + + // Write new null terminator character + end[1] = '\0'; + + return str; +} + +/* + * 'create_media_size_range()' - Create a ranged media-size value. + */ + +static ipp_t * /* O - media-col collection */ +create_media_size_range(int min_width, /* I - Minimum x-dimension in 2540ths */ + int max_width, /* I - Maximum x-dimension in 2540ths */ + int min_length, /* I - Minimum x-dimension in 2540ths */ + int max_length) /* I - Maximum y-dimension in 2540ths */ +{ + ipp_t *media_size = ippNew(); /* media-size value */ + + + ippAddRange(media_size, IPP_TAG_ZERO, "x-dimension", min_width, max_width); + ippAddRange(media_size, IPP_TAG_ZERO, "y-dimension", min_length, max_length); + + return (media_size); +} + + +static ipp_t * /* O - media-col collection */ +create_media_col(const char *media, /* I - Media name */ + const char *source, /* I - Media source, if any */ + const char *type, /* I - Media type, if any */ + ipp_t *media_size,/* I - media-size collection value */ + int bottom, /* I - Bottom margin in 2540ths */ + int left, /* I - Left margin in 2540ths */ + int right, /* I - Right margin in 2540ths */ + int top) /* I - Top margin in 2540ths */ +{ + ipp_t *media_col = ippNew(); /* media-col value */ + char media_key[256]; /* media-key value */ + const char *media_key_suffix = ""; /* media-key suffix */ + + + if (bottom == 0 && left == 0 && right == 0 && top == 0) + media_key_suffix = "_borderless"; + + if (media) + { + if (type && source) + snprintf(media_key, sizeof(media_key), "%s_%s_%s%s", media, source, type, media_key_suffix); + else if (type) + snprintf(media_key, sizeof(media_key), "%s__%s%s", media, type, media_key_suffix); + else if (source) + snprintf(media_key, sizeof(media_key), "%s_%s%s", media, source, media_key_suffix); + else + snprintf(media_key, sizeof(media_key), "%s%s", media, media_key_suffix); + + ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-key", NULL, media_key); + } + ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size); + if (media) + ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-size-name", NULL, media); + if (bottom >= 0) + ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin", bottom); + if (left >= 0) + ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin", left); + if (right >= 0) + ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin", right); + if (top >= 0) + ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin", top); + if (source) + ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, source); + if (type) + ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, type); + + ippDelete(media_size); + + return (media_col); +} + + +/* + * 'create_media_size()' - Create a media-size value. + */ + +static ipp_t * /* O - media-col collection */ +create_media_size(int width, /* I - x-dimension in 2540ths */ + int length) /* I - y-dimension in 2540ths */ +{ + ipp_t *media_size = ippNew(); /* media-size value */ + + + ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "x-dimension", width); + ippAddInteger(media_size, IPP_TAG_ZERO, IPP_TAG_INTEGER, "y-dimension", length); + + return (media_size); +} + +/* + * 'test_wrapper()' - Utilizes libcupsfilters API for running a particular test + * + */ + +int // O - Exit status +test_wrapper( + int num_clargs, // I - Number of command-line args + char *clargs[], // I - Command-line arguments + void *parameters, // I - Filter function parameters + int *JobCanceled, // I - Var set to 1 when job canceled + ipp_t* emulated_ipp, + char* inputMIME, + char* outputMIME, + char* inputFile, + char* outputFile) +{ + int inputfd; // Print file descriptor + int outputfd; // File Descriptor for Output File + int inputseekable = 0; // Is the input seekable (actual file + // not stdin)? + int num_options = 0; // Number of print options + cups_option_t *options = NULL; // Print options + cf_filter_data_t filter_data; + const char *val; + char buf[256]; + int retval = 0; + + // + // Make sure status messages are not buffered... + // + + setbuf(stderr, NULL); + + // + // Ignore broken pipe signals... + // + + signal(SIGPIPE, SIG_IGN); + + // + // Try to open the print file... + // + + if ((inputfd = open(inputFile, O_RDONLY)) < 0) + { + if (!(*JobCanceled)) + { + fprintf(stderr, "DEBUG: Unable to open \"%s\": %s\n", inputFile, + strerror(errno)); + fprintf(stderr, "ERROR: Unable to open print file\n"); + } + + return (1); + } + + // + // Try to open output file... + // + + if ((outputfd = open(outputFile, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) < 0) + { + if (!(*JobCanceled)) + { + fprintf(stderr, "DEBUG: Unable to open \"%s\": %s\n", outputFile, + strerror(errno)); + fprintf(stderr, "ERROR: Unable to open Write file\n"); + } + + return (1); + } + + options = NULL; + if (num_clargs > 5) + num_options = cupsParseOptions(clargs[5], 0, &options); + fprintf(stderr, "NUM Options: %d\n", num_options); + if ((filter_data.printer = getenv("PRINTER")) == NULL) + filter_data.printer = clargs[0]; + filter_data.job_id = num_clargs > 1 ? atoi(clargs[1]) : 0; + filter_data.job_user = num_clargs > 2 ? clargs[2] : NULL; + filter_data.job_title = num_clargs > 3 ? clargs[3] : NULL; + filter_data.copies = num_clargs > 4 ? atoi(clargs[4]) : 1; + filter_data.content_type = inputMIME; ///Set the input MIME Type from the test + filter_data.final_content_type = outputMIME; /// Set the output MIME Tyoe from the test case + + filter_data.job_attrs = NULL; // We use command line options + // The following two will get populated by ppdFilterLoadPPD() + filter_data.printer_attrs = NULL; // We use the queue's PPD file + filter_data.header = NULL; // CUPS Raster header of queue's PPD + filter_data.num_options = num_options; + + + filter_data.options = options; // Command line options from 5th arg + + /* Debugging Options + for(int option_no = 0; option_no < num_options; option_no++){ + printf("Printing Options: %s %s\n", (filter_data.options)[option_no].name, (filter_data.options)[option_no].value); + } + */ + + filter_data.back_pipe[0] = 3; // CUPS uses file descriptor 3 for + filter_data.back_pipe[1] = 3; // the back channel + filter_data.side_pipe[0] = 4; // CUPS uses file descriptor 4 for + filter_data.side_pipe[1] = 4; // the side channel + filter_data.extension = NULL; + filter_data.logfunc = cfCUPSLogFunc; // Logging scheme of CUPS + filter_data.logdata = NULL; + filter_data.iscanceledfunc = cfCUPSIsCanceledFunc; // Job-is-canceled + // function + filter_data.iscanceleddata = JobCanceled; + + // + // CUPS_FONTPATH (Usually /usr/share/cups/fonts) + // + + if (cupsGetOption("cups-fontpath", + filter_data.num_options, filter_data.options) == NULL) + { + if ((val = getenv("CUPS_FONTPATH")) == NULL) + { + val = CUPS_DATADIR; + snprintf(buf, sizeof(buf), "%s/fonts", val); + val = buf; + } + if (val[0] != '\0') + filter_data.num_options = + cupsAddOption("cups-fontpath", val, + filter_data.num_options, &(filter_data.options)); + } + + // + // Set the printer attributes to Emulated printer... + // + + filter_data.printer_attrs = emulated_ipp; + + // + // Fire up the filter function (output to stdout, file descriptor 1) + // + + retval = cfFilterUniversal(inputfd, outputfd, inputseekable, &filter_data, parameters); + + return retval; +} + +/* + * 'load_legacy_attributes()' - Load IPP attributes using the old ippserver + * options. + */ + + +static ipp_t * /* O - IPP attributes or `NULL` on error */ +load_legacy_attributes( + const char *make, /* I - Manufacturer name */ + const char *model, /* I - Model name */ + int ppm, /* I - pages-per-minute */ + int ppm_color, /* I - pages-per-minute-color */ + int duplex, /* I - Duplex support? */ + cups_array_t *docformats) /* I - document-format-supported values */ +{ + size_t i; /* Looping var */ + ipp_t *attrs, /* IPP attributes */ + *col; /* Collection value */ + ipp_attribute_t *attr; /* Current attribute */ + char device_id[1024],/* printer-device-id */ + *ptr, /* Pointer into device ID */ + make_model[128];/* printer-make-and-model */ + const char *format, /* Current document format */ + *prefix; /* Prefix for device ID */ + size_t num_media; /* Number of media */ + const char * const *media; /* List of media */ + size_t num_ready; /* Number of loaded media */ + const char * const *ready; /* List of loaded media */ + pwg_media_t *pwg; /* PWG media size information */ + static const char * const media_supported[] = + { /* media-supported values */ + "na_letter_8.5x11in", /* Letter */ + "na_legal_8.5x14in", /* Legal */ + "iso_a4_210x297mm", /* A4 */ + "na_number-10_4.125x9.5in", /* #10 Envelope */ + "iso_dl_110x220mm" /* DL Envelope */ + }; + static const char * const media_supported_color[] = + { /* media-supported values */ + "na_letter_8.5x11in", /* Letter */ + "na_legal_8.5x14in", /* Legal */ + "iso_a4_210x297mm", /* A4 */ + "na_number-10_4.125x9.5in", /* #10 Envelope */ + "iso_dl_110x220mm", /* DL Envelope */ + "na_index-3x5_3x5in", /* Photo 3x5 */ + "oe_photo-l_3.5x5in", /* Photo L */ + "na_index-4x6_4x6in", /* Photo 4x6 */ + "iso_a6_105x148mm", /* A6 */ + "na_5x7_5x7in", /* Photo 5x7 aka 2L */ + "iso_a5_148x210mm", /* A5 */ + "roll_min_4x1in", /* Roll */ + "roll_max_8.5x39.6in" /* Roll */ + }; + static const char * const media_ready[] = + { /* media-ready values */ + "na_letter_8.5x11in", /* Letter */ + "na_number-10_4.125x9.5in" /* #10 */ + }; + static const char * const media_ready_color[] = + { /* media-ready values */ + "na_letter_8.5x11in", /* Letter */ + "na_index-4x6_4x6in", /* Photo 4x6 */ + "roll_current_8.5x0in" /* 8.5" roll */ + }; + static const char * const media_source_supported[] = + { /* media-source-supported values */ + "auto", + "main", + "manual", + "by-pass-tray" /* AKA multi-purpose tray */ + }; + static const char * const media_source_supported_color[] = + { /* media-source-supported values */ + "auto", + "main", + "photo", + "roll" + }; + static const char * const media_type_supported[] = + { /* media-type-supported values */ + "auto", + "cardstock", + "envelope", + "labels", + "other", + "stationery", + "stationery-letterhead", + "transparency" + }; + static const char * const media_type_supported_color[] = + { /* media-type-supported values */ + "auto", + "cardstock", + "envelope", + "labels", + "other", + "stationery", + "stationery-letterhead", + "transparency", + "photographic-glossy", + "photographic-high-gloss", + "photographic-matte", + "photographic-satin", + "photographic-semi-gloss" + }; + static const int media_bottom_margin_supported[] = + { /* media-bottom-margin-supported values */ + 635 /* 1/4" */ + }; + static const int media_bottom_margin_supported_color[] = + { /* media-bottom/top-margin-supported values */ + 0, /* Borderless */ + 1168 /* 0.46" (common HP inkjet bottom margin) */ + }; + static const int media_lr_margin_supported[] = + { /* media-left/right-margin-supported values */ + 340, /* 3.4mm (historical HP PCL A4 margin) */ + 635 /* 1/4" */ + }; + static const int media_lr_margin_supported_color[] = + { /* media-left/right-margin-supported values */ + 0, /* Borderless */ + 340, /* 3.4mm (historical HP PCL A4 margin) */ + 635 /* 1/4" */ + }; + static const int media_top_margin_supported[] = + { /* media-top-margin-supported values */ + 635 /* 1/4" */ + }; + static const int media_top_margin_supported_color[] = + { /* media-top/top-margin-supported values */ + 0, /* Borderless */ + 102 /* 0.04" (common HP inkjet top margin */ + }; + static const int orientation_requested_supported[4] = + { /* orientation-requested-supported values */ + IPP_ORIENT_PORTRAIT, + IPP_ORIENT_LANDSCAPE, + IPP_ORIENT_REVERSE_LANDSCAPE, + IPP_ORIENT_REVERSE_PORTRAIT + }; + static const char * const overrides_supported[] = + { /* overrides-supported values */ + "document-numbers", + "media", + "media-col", + "orientation-requested", + "pages" + }; + static const char * const print_color_mode_supported[] = + { /* print-color-mode-supported values */ + "monochrome" + }; + static const char * const print_color_mode_supported_color[] = + { /* print-color-mode-supported values */ + "auto", + "color", + "monochrome" + }; + static const int print_quality_supported[] = + { /* print-quality-supported values */ + IPP_QUALITY_DRAFT, + IPP_QUALITY_NORMAL, + IPP_QUALITY_HIGH + }; + static const char * const printer_input_tray[] = + { /* printer-input-tray values */ + "type=sheetFeedAutoRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=-2;level=-2;status=0;name=auto", + "type=sheetFeedAutoRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=250;level=100;status=0;name=main", + "type=sheetFeedManual;mediafeed=0;mediaxfeed=0;maxcapacity=1;level=-2;status=0;name=manual", + "type=sheetFeedAutoNonRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=25;level=-2;status=0;name=by-pass-tray" + }; + static const char * const printer_input_tray_color[] = + { /* printer-input-tray values */ + "type=sheetFeedAutoRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=-2;level=-2;status=0;name=auto", + "type=sheetFeedAutoRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=250;level=-2;status=0;name=main", + "type=sheetFeedAutoRemovableTray;mediafeed=0;mediaxfeed=0;maxcapacity=25;level=-2;status=0;name=photo", + "type=continuousRoll;mediafeed=0;mediaxfeed=0;maxcapacity=100;level=-2;status=0;name=roll" + }; + static const char * const printer_supply[] = + { /* printer-supply values */ + "index=1;class=receptacleThatIsFilled;type=wasteToner;unit=percent;" + "maxcapacity=100;level=25;colorantname=unknown;", + "index=2;class=supplyThatIsConsumed;type=toner;unit=percent;" + "maxcapacity=100;level=75;colorantname=black;" + }; + static const char * const printer_supply_color[] = + { /* printer-supply values */ + "index=1;class=receptacleThatIsFilled;type=wasteInk;unit=percent;" + "maxcapacity=100;level=25;colorantname=unknown;", + "index=2;class=supplyThatIsConsumed;type=ink;unit=percent;" + "maxcapacity=100;level=75;colorantname=black;", + "index=3;class=supplyThatIsConsumed;type=ink;unit=percent;" + "maxcapacity=100;level=50;colorantname=cyan;", + "index=4;class=supplyThatIsConsumed;type=ink;unit=percent;" + "maxcapacity=100;level=33;colorantname=magenta;", + "index=5;class=supplyThatIsConsumed;type=ink;unit=percent;" + "maxcapacity=100;level=67;colorantname=yellow;" + }; + static const char * const printer_supply_description[] = + { /* printer-supply-description values */ + "Toner Waste Tank", + "Black Toner" + }; + static const char * const printer_supply_description_color[] = + { /* printer-supply-description values */ + "Ink Waste Tank", + "Black Ink", + "Cyan Ink", + "Magenta Ink", + "Yellow Ink" + }; + static const int pwg_raster_document_resolution_supported[] = + { + 300, + 600 + }; + static const char * const pwg_raster_document_type_supported[] = + { + "black_1", + "sgray_8" + }; + static const char * const pwg_raster_document_type_supported_color[] = + { + "black_1", + "sgray_8", + "srgb_8", + "srgb_16" + }; + static const char * const sides_supported[] = + { /* sides-supported values */ + "one-sided", + "two-sided-long-edge", + "two-sided-short-edge" + }; + static const char * const urf_supported[] = + { /* urf-supported values */ + "CP1", + "IS1-4-5-19", + "MT1-2-3-4-5-6", + "RS600", + "V1.4", + "W8" + }; + static const char * const urf_supported_color[] = + { /* urf-supported values */ + "CP1", + "IS1-4-5-7-19", + "MT1-2-3-4-5-6-8-9-10-11-12-13", + "RS600", + "SRGB24", + "V1.4", + "W8" + }; + static const char * const urf_supported_color_duplex[] = + { /* urf-supported values */ + "CP1", + "IS1-4-5-7-19", + "MT1-2-3-4-5-6-8-9-10-11-12-13", + "RS600", + "SRGB24", + "V1.4", + "W8", + "DM3" + }; + static const char * const urf_supported_duplex[] = + { /* urf-supported values */ + "CP1", + "IS1-4-5-19", + "MT1-2-3-4-5-6", + "RS600", + "V1.4", + "W8", + "DM1" + }; + + + attrs = ippNew(); + + if (ppm_color > 0) + { + num_media = (int)(sizeof(media_supported_color) / sizeof(media_supported_color[0])); + media = media_supported_color; + num_ready = (int)(sizeof(media_ready_color) / sizeof(media_ready_color[0])); + ready = media_ready_color; + } + else + { + num_media = (int)(sizeof(media_supported) / sizeof(media_supported[0])); + media = media_supported; + num_ready = (int)(sizeof(media_ready) / sizeof(media_ready[0])); + ready = media_ready; + } + + /* color-supported */ + ippAddBoolean(attrs, IPP_TAG_PRINTER, "color-supported", ppm_color > 0); + + /* copies-default */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "copies-default", 1); + + /* copies-supported */ + ippAddRange(attrs, IPP_TAG_PRINTER, "copies-supported", 1, (cupsArrayFind(docformats, (void *)"application/pdf") != NULL || cupsArrayFind(docformats, (void *)"image/jpeg") != NULL) ? 999 : 1); + + /* document-password-supported */ + if (cupsArrayFind(docformats, (void *)"application/pdf")) + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "document-password-supported", 1023); + + /* finishing-template-supported */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template-supported", NULL, "none"); + + /* finishings-col-database */ + col = ippNew(); + ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none"); + ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-database", col); + ippDelete(col); + + /* finishings-col-default */ + col = ippNew(); + ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none"); + ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-default", col); + ippDelete(col); + + /* finishings-col-ready */ + col = ippNew(); + ippAddString(col, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishing-template", NULL, "none"); + ippAddCollection(attrs, IPP_TAG_PRINTER, "finishings-col-ready", col); + ippDelete(col); + + /* finishings-col-supported */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "finishings-col-supported", NULL, "finishing-template"); + + /* finishings-default */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-default", IPP_FINISHINGS_NONE); + + /* finishings-ready */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-ready", IPP_FINISHINGS_NONE); + + /* finishings-supported */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "finishings-supported", IPP_FINISHINGS_NONE); + + /* media-bottom-margin-supported */ + if (ppm_color > 0) + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin-supported", (int)(sizeof(media_bottom_margin_supported) / sizeof(media_bottom_margin_supported[0])), media_bottom_margin_supported); + else + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-bottom-margin-supported", (int)(sizeof(media_bottom_margin_supported_color) / sizeof(media_bottom_margin_supported_color[0])), media_bottom_margin_supported_color); + + /* media-col-database and media-col-default */ + for (i = 0, attr = NULL; i < num_media; i ++) + { + int bottom, left, /* media-xxx-margins */ + right, top; + const char *source; /* media-source, if any */ + + pwg = pwgMediaForPWG(media[i]); + + if (pwg->width < 21000 && pwg->length < 21000) + { + source = "photo"; /* Photo size media from photo tray */ + bottom = /* Borderless margins */ + left = + right = + top = 0; + } + else if (pwg->width < 21000) + { + source = "by-pass-tray"; /* Envelopes from multi-purpose tray */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are standard */ + right = media_lr_margin_supported[1]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + else if (pwg->width == 21000) + { + source = NULL; /* A4 from any tray */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are reduced */ + right = media_lr_margin_supported[0]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + else + { + source = NULL; /* Other size media from any tray */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are standard */ + right = media_lr_margin_supported[1]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + + if (!strncmp(media[i], "roll_min_", 9) && i < (num_media - 1)) + { + // Roll min/max range... + pwg_media_t *pwg2; // Max size + ipp_t *media_size; // media-size member attribute + + i ++; + pwg2 = pwgMediaForPWG(media[i]); + + media_size = ippNew(); + ippAddRange(media_size, IPP_TAG_ZERO, "x-dimension", pwg->width, pwg2->width); + ippAddRange(media_size, IPP_TAG_ZERO, "y-dimension", pwg->length, pwg2->length); + + col = create_media_col(NULL, source, NULL, media_size, bottom, left, right, top); + } + else + { + // Sheet size + col = create_media_col(media[i], source, NULL, create_media_size(pwg->width, pwg->length), bottom, left, right, top); + } + + if (attr) + ippSetCollection(attrs, &attr, ippGetCount(attr), col); + else + attr = ippAddCollection(attrs, IPP_TAG_PRINTER, "media-col-database", col); + + ippDelete(col); + } + + /* media-col-default */ + pwg = pwgMediaForPWG(ready[0]); + + if (pwg->width == 21000) + col = create_media_col(ready[0], "main", "stationery", create_media_size(pwg->width, pwg->length), ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0], media_lr_margin_supported[0], media_lr_margin_supported[0], ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]); + else + col = create_media_col(ready[0], "main", "stationery", create_media_size(pwg->width, pwg->length), ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0], media_lr_margin_supported[1], media_lr_margin_supported[1], ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]); + + ippAddCollection(attrs, IPP_TAG_PRINTER, "media-col-default", col); + + ippDelete(col); + + /* media-col-ready */ + attr = ippAddCollections(attrs, IPP_TAG_PRINTER, "media-col-ready", num_ready, NULL); + for (i = 0; i < num_ready; i ++) + { + int bottom, left, /* media-xxx-margins */ + right, top; + const char *source, /* media-source */ + *type; /* media-type */ + + pwg = pwgMediaForPWG(ready[i]); + + if (pwg->width < 21000 && pwg->length < 21000) + { + source = "photo"; /* Photo size media from photo tray */ + type = "photographic-glossy"; /* Glossy photo paper */ + bottom = /* Borderless margins */ + left = + right = + top = 0; + } + else if (pwg->width < 21000) + { + source = "by-pass-tray"; /* Envelopes from multi-purpose tray */ + type = "envelope"; /* Envelope */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are standard */ + right = media_lr_margin_supported[1]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + else if (pwg->width == 21000) + { + source = "main"; /* A4 from main tray */ + type = "stationery"; /* Plain paper */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are reduced */ + right = media_lr_margin_supported[0]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + else + { + source = "main"; /* A4 from main tray */ + type = "stationery"; /* Plain paper */ + bottom = ppm_color > 0 ? media_bottom_margin_supported_color[1] : media_bottom_margin_supported[0]; + left = /* Left/right margins are standard */ + right = media_lr_margin_supported[1]; + top = ppm_color > 0 ? media_top_margin_supported_color[1] : media_top_margin_supported[0]; + } + + col = create_media_col(ready[i], source, type, create_media_size(pwg->width, pwg->length), bottom, left, right, top); + ippSetCollection(attrs, &attr, i, col); + ippDelete(col); + } + + /* media-default */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-default", NULL, media[0]); + + /* media-left/right-margin-supported */ + if (ppm_color > 0) + { + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin-supported", (int)(sizeof(media_lr_margin_supported_color) / sizeof(media_lr_margin_supported_color[0])), media_lr_margin_supported_color); + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin-supported", (int)(sizeof(media_lr_margin_supported_color) / sizeof(media_lr_margin_supported_color[0])), media_lr_margin_supported_color); + } + else + { + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-left-margin-supported", (int)(sizeof(media_lr_margin_supported) / sizeof(media_lr_margin_supported[0])), media_lr_margin_supported); + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-right-margin-supported", (int)(sizeof(media_lr_margin_supported) / sizeof(media_lr_margin_supported[0])), media_lr_margin_supported); + } + + /* media-ready */ + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-ready", num_ready, NULL, ready); + + /* media-supported */ + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-supported", num_media, NULL, media); + + /* media-size-supported */ + for (i = 0, attr = NULL; i < num_media; i ++) + { + pwg = pwgMediaForPWG(media[i]); + + if (!strncmp(media[i], "roll_min_", 9) && i < (num_media - 1)) + { + // Roll min/max range... + pwg_media_t *pwg2; // Max size + + i ++; + pwg2 = pwgMediaForPWG(media[i]); + + col = create_media_size_range(pwg->width, pwg2->width, pwg->length, pwg2->length); + } + else + { + // Sheet size... + col = create_media_size(pwg->width, pwg->length); + } + + if (attr) + ippSetCollection(attrs, &attr, ippGetCount(attr), col); + else + attr = ippAddCollection(attrs, IPP_TAG_PRINTER, "media-size-supported", col); + + ippDelete(col); + } + + /* media-source-supported */ + if (ppm_color > 0) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-source-supported", (int)(sizeof(media_source_supported_color) / sizeof(media_source_supported_color[0])), NULL, media_source_supported_color); + else + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-source-supported", (int)(sizeof(media_source_supported) / sizeof(media_source_supported[0])), NULL, media_source_supported); + + /* media-top-margin-supported */ + if (ppm_color > 0) + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin-supported", (int)(sizeof(media_top_margin_supported) / sizeof(media_top_margin_supported[0])), media_top_margin_supported); + else + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "media-top-margin-supported", (int)(sizeof(media_top_margin_supported_color) / sizeof(media_top_margin_supported_color[0])), media_top_margin_supported_color); + + /* media-type-supported */ + if (ppm_color > 0) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-type-supported", (int)(sizeof(media_type_supported_color) / sizeof(media_type_supported_color[0])), NULL, media_type_supported_color); + else + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-type-supported", (int)(sizeof(media_type_supported) / sizeof(media_type_supported[0])), NULL, media_type_supported); + + /* orientation-requested-default */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "orientation-requested-default", IPP_ORIENT_PORTRAIT); + + /* orientation-requested-supported */ + if (cupsArrayFind(docformats, (void *)"application/pdf") || cupsArrayFind(docformats, (void *)"image/jpeg")) + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "orientation-requested-supported", (int)(sizeof(orientation_requested_supported) / sizeof(orientation_requested_supported[0])), orientation_requested_supported); + else + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "orientation-requested-supported", IPP_ORIENT_PORTRAIT); + + /* output-bin-default */ + if (ppm_color > 0) + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "output-bin-default", NULL, "face-up"); + else + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "output-bin-default", NULL, "face-down"); + + /* output-bin-supported */ + if (ppm_color > 0) + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "output-bin-supported", NULL, "face-up"); + else + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "output-bin-supported", NULL, "face-down"); + + /* overrides-supported */ + if (cupsArrayFind(docformats, (void *)"application/pdf")) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "overrides-supported", (int)(sizeof(overrides_supported) / sizeof(overrides_supported[0])), NULL, overrides_supported); + + /* page-ranges-supported */ + ippAddBoolean(attrs, IPP_TAG_PRINTER, "page-ranges-supported", cupsArrayFind(docformats, (void *)"application/pdf") != NULL); + + /* pages-per-minute */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute", ppm); + + /* pages-per-minute-color */ + if (ppm_color > 0) + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "pages-per-minute-color", ppm_color); + + /* print-color-mode-default */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-default", NULL, ppm_color > 0 ? "auto" : "monochrome"); + + /* print-color-mode-supported */ + if (ppm_color > 0) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-supported", (int)(sizeof(print_color_mode_supported_color) / sizeof(print_color_mode_supported_color[0])), NULL, print_color_mode_supported_color); + else + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-supported", (int)(sizeof(print_color_mode_supported) / sizeof(print_color_mode_supported[0])), NULL, print_color_mode_supported); + + /* print-content-optimize-default */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-default", NULL, "auto"); + + /* print-content-optimize-supported */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-supported", NULL, "auto"); + + /* print-quality-default */ + ippAddInteger(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-default", IPP_QUALITY_NORMAL); + + /* print-quality-supported */ + ippAddIntegers(attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-supported", (int)(sizeof(print_quality_supported) / sizeof(print_quality_supported[0])), print_quality_supported); + + /* print-rendering-intent-default */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-default", NULL, "auto"); + + /* print-rendering-intent-supported */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-supported", NULL, "auto"); + + /* printer-device-id */ + snprintf(device_id, sizeof(device_id), "MFG:%s;MDL:%s;", make, model); + ptr = device_id + strlen(device_id); + prefix = "CMD:"; + for (format = (const char *)cupsArrayFirst(docformats); format; format = (const char *)cupsArrayNext(docformats)) + { + if (!strcasecmp(format, "application/pdf")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPDF", prefix); + else if (!strcasecmp(format, "application/postscript")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPS", prefix); + else if (!strcasecmp(format, "application/vnd.hp-PCL")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPCL", prefix); + else if (!strcasecmp(format, "image/jpeg")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sJPEG", prefix); + else if (!strcasecmp(format, "image/png")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPNG", prefix); + else if (!strcasecmp(format, "image/pwg-raster")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPWG", prefix); + else if (!strcasecmp(format, "image/urf")) + snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sURF", prefix); + else + continue; + + ptr += strlen(ptr); + prefix = ","; + } + if (ptr < (device_id + sizeof(device_id) - 1)) + { + *ptr++ = ';'; + *ptr = '\0'; + } + ippAddString(attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-device-id", NULL, device_id); + + /* printer-input-tray */ + if (ppm_color > 0) + { + attr = ippAddOctetString(attrs, IPP_TAG_PRINTER, "printer-input-tray", printer_input_tray_color[0], strlen(printer_input_tray_color[0])); + for (i = 1; i < (int)(sizeof(printer_input_tray_color) / sizeof(printer_input_tray_color[0])); i ++) + ippSetOctetString(attrs, &attr, i, printer_input_tray_color[i], strlen(printer_input_tray_color[i])); + } + else + { + attr = ippAddOctetString(attrs, IPP_TAG_PRINTER, "printer-input-tray", printer_input_tray[0], strlen(printer_input_tray[0])); + for (i = 1; i < (int)(sizeof(printer_input_tray) / sizeof(printer_input_tray[0])); i ++) + ippSetOctetString(attrs, &attr, i, printer_input_tray[i], strlen(printer_input_tray[i])); + } + + /* printer-make-and-model */ + snprintf(make_model, sizeof(make_model), "%s %s", make, model); + ippAddString(attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model", NULL, make_model); + + /* printer-resolution-default */ + ippAddResolution(attrs, IPP_TAG_PRINTER, "printer-resolution-default", IPP_RES_PER_INCH, 600, 600); + + /* printer-resolution-supported */ + ippAddResolution(attrs, IPP_TAG_PRINTER, "printer-resolution-supported", IPP_RES_PER_INCH, 600, 600); + + /* printer-supply and printer-supply-description */ + if (ppm_color > 0) + { + attr = ippAddOctetString(attrs, IPP_TAG_PRINTER, "printer-supply", printer_supply_color[0], strlen(printer_supply_color[0])); + for (i = 1; i < (int)(sizeof(printer_supply_color) / sizeof(printer_supply_color[0])); i ++) + ippSetOctetString(attrs, &attr, i, printer_supply_color[i], strlen(printer_supply_color[i])); + + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-supply-description", (int)(sizeof(printer_supply_description_color) / sizeof(printer_supply_description_color[0])), NULL, printer_supply_description_color); + } + else + { + attr = ippAddOctetString(attrs, IPP_TAG_PRINTER, "printer-supply", printer_supply[0], strlen(printer_supply[0])); + for (i = 1; i < (int)(sizeof(printer_supply) / sizeof(printer_supply[0])); i ++) + ippSetOctetString(attrs, &attr, i, printer_supply[i], strlen(printer_supply[i])); + + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-supply-description", (int)(sizeof(printer_supply_description) / sizeof(printer_supply_description[0])), NULL, printer_supply_description); + } + + /* pwg-raster-document-xxx-supported */ + if (cupsArrayFind(docformats, (void *)"image/pwg-raster")) + { + ippAddResolutions(attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", (int)(sizeof(pwg_raster_document_resolution_supported) / sizeof(pwg_raster_document_resolution_supported[0])), IPP_RES_PER_INCH, pwg_raster_document_resolution_supported, pwg_raster_document_resolution_supported); + + if (ppm_color > 0 && duplex) + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "pwg-raster-document-sheet-back", NULL, "rotated"); + else if (duplex) + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "pwg-raster-document-sheet-back", NULL, "normal"); + + if (ppm_color > 0) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "pwg-raster-document-type-supported", (int)(sizeof(pwg_raster_document_type_supported_color) / sizeof(pwg_raster_document_type_supported_color[0])), NULL, pwg_raster_document_type_supported_color); + else + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "pwg-raster-document-type-supported", (int)(sizeof(pwg_raster_document_type_supported) / sizeof(pwg_raster_document_type_supported[0])), NULL, pwg_raster_document_type_supported); + } + + /* sides-default */ + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "sides-default", NULL, "one-sided"); + + /* sides-supported */ + if (duplex) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "sides-supported", (int)(sizeof(sides_supported) / sizeof(sides_supported[0])), NULL, sides_supported); + else + ippAddString(attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "sides-supported", NULL, "one-sided"); + + /* urf-supported */ + if (cupsArrayFind(docformats, (void *)"image/urf")) + { + if (ppm_color > 0) + { + if (duplex) + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported_color_duplex) / sizeof(urf_supported_color_duplex[0])), NULL, urf_supported_color_duplex); + else + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported_color) / sizeof(urf_supported_color[0])), NULL, urf_supported_color); + } + else if (duplex) + { + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported_duplex) / sizeof(urf_supported_duplex[0])), NULL, urf_supported_duplex); + } + else + { + ippAddStrings(attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported) / sizeof(urf_supported[0])), NULL, urf_supported); + } + } + + return (attrs); +} + + +/* + * 'run_test()' - Runs a particular test case + * + */ + +int +run_test( + char * test_case, + char * currentFile) +{ + char* make = (char*) malloc(100 * sizeof(char*)); + char* model = (char*) malloc(100 * sizeof(char*)); + + int ppm = 1; + + char* inputFileName = (char*) malloc(100 * sizeof(char*)); + char* outputFileName = (char*) malloc(100 * sizeof(char*)); + + char* inputContentType = (char*) malloc(100 * sizeof(char*)); + char* outputContentType = (char*) malloc(100 * sizeof(char*)); + + // ppm_color and duplex should be supplied... + int color = 0; + int duplex = 0; + int ppm_color = 0; + + cups_array_t* docformats = cupsArrayNew(NULL, NULL); + + int jobCanceled = 0; + + char* next_token1, *next_token2; + + char *token = strtok_r(test_case, "\t", &next_token1); + token = remove_white_space(token); + //printf( "%s\n", token ); //printing each token + + strcpy(inputFileName, token); + + int token_index = 1; + + //dynamic allocation of clargs as we dont know number of arguments + + char **clargs = (char**)malloc(1*sizeof(char*)); + clargs[0] = currentFile; + + int globalFlag = 1; + + while ( token != NULL ) + { + token = strtok_r(NULL, "\t", &next_token1); + if (!token) break; + + token = remove_white_space(token); + + if (globalFlag == 1) + { + strcpy(inputContentType, token); + globalFlag++; + continue; + } + else if (globalFlag == 2) + { + strcpy(outputFileName, token); + globalFlag++; + continue; + } + else if (globalFlag == 3) + { + strcpy(outputContentType, token); + globalFlag++; + continue; + } + else if (globalFlag == 4) + { + /* make string */ + strcpy(make, token); + globalFlag++; + continue; + } + else if (globalFlag == 5) + { + /* model string */ + strcpy(model, token); + globalFlag++; + continue; + } + else if (globalFlag == 6) + { + /* ppm color */ + color = atoi(token); + if(color) + ppm_color = 1; + + globalFlag++; + continue; + } + else if(globalFlag == 7) + { + /* if printer is duplex */ + duplex = atoi(token); + globalFlag++; + continue; + } + else if(globalFlag == 8) + { + /* for file formats ',' seperated */ + globalFlag++; + char* format_token = strtok_r(token, ",", &next_token2); + + if(format_token) + cupsArrayAdd(docformats, format_token); + + while(format_token != NULL){ + format_token = strtok_r(NULL, ",", &next_token2); + if(format_token) + cupsArrayAdd(docformats, format_token); + } + continue; + } + + clargs = realloc(clargs, (token_index+1)*sizeof(char*)); + char* tmp_token = (char*)malloc(100*sizeof(char*)); + strcpy(tmp_token, token); + + clargs[token_index] = tmp_token; + token_index++; + } + + ipp_t* emulated_ipp = load_legacy_attributes(make, model, ppm, ppm_color, duplex, docformats); + return test_wrapper(token_index, clargs, NULL, &jobCanceled, emulated_ipp, inputContentType, outputContentType, inputFileName, outputFileName); +} + +int main(int argc, // I - Number of command-line args + char *argv[]) // I - Command-line arguments{ +{ + char *file_name; // File Name of Input Test File + FILE *fp; // File Pointer + char *line = NULL; // Input Stream + size_t len = 0; // Length of Input Stream + ssize_t read; + + + // set file_name (test.txt) from argv... + if (argc > 1) + file_name = argv[1]; + else + { + fprintf(stderr, "No Input Test file Provided...\n"); + exit(EXIT_FAILURE); + } + char* tc_cnt = argv[2]; + int total_tc = atoi(tc_cnt) + 1; + fprintf(stdout, "%s\n", file_name); + fp = fopen(file_name, "r"); + + if (fp == NULL) + exit(EXIT_FAILURE); + + int test_case_no = 1; + + // Counts the number of test case which failed... + int fail_cnt = 0; + + while ((read = getline(&line, &len, fp))!=-1 && total_tc--) + { + if (!line) + break; + + char* test_case = (char*)malloc(1000*sizeof(char)); + memcpy(test_case, line, strlen(line)+1); + + // skip lines starting with '#' (Intruction Line) ... + if(test_case[0] == '#') + continue; + + test_case[len-1] = '\0'; + fprintf(stderr, "Running Test #%d\n", test_case_no); + int testResult = run_test(test_case, argv[0]); + + if(testResult == 0) + fprintf(stderr, "Test Status %d: Successful\n", test_case_no); + else + { + fprintf(stderr, "Test Status %d: Failed\n", test_case_no); + fail_cnt++; + } + + + test_case_no++; + } + + fclose(fp); + return (fail_cnt); +} diff --git a/cupsfilters/testfilters.sh b/cupsfilters/testfilters.sh new file mode 100755 index 000000000..58fde53fb --- /dev/null +++ b/cupsfilters/testfilters.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo "Test-Suite for Libcupsfilters" +#Now run the executable file with test case +echo "Running Tests..." +echo "Input number of Tests..." +#read TC + +mkdir -p cupsfilters/test_files/output_files +./testfilters cupsfilters/test-filter-cases.txt 2 2 2>&1 | tee Test_summary_final.txt +exit_code=$? + +#Delete the output_files folder all together... +rm -r cupsfilters/test_files/output_files +exit $exit_code