From 0309fc28bd368f4e3caff56f9b15ec5dbe1ea59a Mon Sep 17 00:00:00 2001 From: Leon Miller-Out Date: Wed, 9 Sep 2020 18:00:09 -0400 Subject: [PATCH 1/8] Start adding a manual test suite. --- test/Application.cfc | 3 ++ test/README.md | 1 + test/bin/install_extension.sh | 29 ++++++++++++++++++ test/box.json | 57 +++++++++++++++++++++++++++++++++++ test/classic_basic.cfm | 5 +++ test/index.cfm | 7 +++++ test/modern_basic.cfm | 5 +++ test/modern_section.cfm | 7 +++++ 8 files changed, 114 insertions(+) create mode 100644 test/Application.cfc create mode 100644 test/README.md create mode 100755 test/bin/install_extension.sh create mode 100644 test/box.json create mode 100644 test/classic_basic.cfm create mode 100644 test/index.cfm create mode 100644 test/modern_basic.cfm create mode 100644 test/modern_section.cfm diff --git a/test/Application.cfc b/test/Application.cfc new file mode 100644 index 0000000..dd928ce --- /dev/null +++ b/test/Application.cfc @@ -0,0 +1,3 @@ +component { + this.pdf.type = 'classic'; +} diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..1771625 --- /dev/null +++ b/test/README.md @@ -0,0 +1 @@ +This is the manual test suite for the PDF extension. diff --git a/test/bin/install_extension.sh b/test/bin/install_extension.sh new file mode 100755 index 0000000..008f430 --- /dev/null +++ b/test/bin/install_extension.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -e + +script_dir=$(cd `dirname $0` && pwd) +repo_root=${script_dir}/../../ + +cd "${repo_root}test" +lucee_home=$(box server info property=serverHomeDirectory) + +if [ -z "${lucee_home}" ]; then + echo "ERROR: Could not find Lucee home directory" + exit 1 +fi + +deploy_dir=${lucee_home}/WEB-INF/lucee-server/deploy + +echo "Found Lucee home directory at ${lucee_home}" +echo "Copying the following files to ${deploy_dir}:" +ls "${repo_root}"dist/*.lex + +cp "${repo_root}"dist/*.lex "${deploy_dir}" + +echo "Waiting for Lucee to install the extension..." +while ls "${deploy_dir}"/*.lex &> /dev/null; do + sleep 1 + echo -n . +done +echo +echo "Extension installed" diff --git a/test/box.json b/test/box.json new file mode 100644 index 0000000..53dfe8b --- /dev/null +++ b/test/box.json @@ -0,0 +1,57 @@ +{ + "author":"", + "bugs":"", + "changelog":"", + "contributors":[], + "dependencies":{}, + "description":"", + "devDependencies":{}, + "documentation":"", + "homepage":"", + "ignore":[ + "**/.*", + "/test/", + "/tests/" + ], + "installPaths":{}, + "instructions":"", + "keywords":[], + "license":[ + { + "type":"", + "URL":"" + } + ], + "location":"ForgeboxStorage", + "name":"My Package", + "private":false, + "projectURL":"", + "repository":{ + "type":"", + "URL":"" + }, + "scripts":{}, + "shortDescription":"A sweet package", + "slug":"my-package", + "testbox":{ + "bundles":"", + "directory":"tests.specs", + "labels":"", + "options":{}, + "recurse":true, + "reporter":"", + "runner":[ + { + "default":"" + } + ], + "testBundles":"", + "testSpecs":"", + "testSuites":"", + "verbose":true, + "watchDelay":500, + "watchPaths":"**.cfc" + }, + "type":"modules", + "version":"0.0.0" +} diff --git a/test/classic_basic.cfm b/test/classic_basic.cfm new file mode 100644 index 0000000..8d56221 --- /dev/null +++ b/test/classic_basic.cfm @@ -0,0 +1,5 @@ + +
+ Classic engine has no support for border-radius, so the box should have rectilinear corners. +
+
diff --git a/test/index.cfm b/test/index.cfm new file mode 100644 index 0000000..7b105fd --- /dev/null +++ b/test/index.cfm @@ -0,0 +1,7 @@ + diff --git a/test/modern_basic.cfm b/test/modern_basic.cfm new file mode 100644 index 0000000..26578a9 --- /dev/null +++ b/test/modern_basic.cfm @@ -0,0 +1,5 @@ + +
+ Modern engine, as evidenced by the rounded corners of the box. +
+
diff --git a/test/modern_section.cfm b/test/modern_section.cfm new file mode 100644 index 0000000..db16bf6 --- /dev/null +++ b/test/modern_section.cfm @@ -0,0 +1,7 @@ + + +
+ Modern engine in a cfdocumentsection. Border corners should be rounded. +
+
+
From 662178ebc02e5ceee746a35485b6f144fa3e3904 Mon Sep 17 00:00:00 2001 From: Leon Miller-Out Date: Mon, 21 Sep 2020 10:30:11 -0400 Subject: [PATCH 2/8] Construct simple, manual, visual test system. --- test/README.md | 7 ++++ test/expected_output/classic_basic.png | Bin 0 -> 41759 bytes test/expected_output/modern_basic.png | Bin 0 -> 42078 bytes test/expected_output/modern_section.png | Bin 0 -> 42078 bytes test/index.cfm | 44 ++++++++++++++++++++---- 5 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 test/expected_output/classic_basic.png create mode 100644 test/expected_output/modern_basic.png create mode 100644 test/expected_output/modern_section.png diff --git a/test/README.md b/test/README.md index 1771625..cb6ab0b 100644 --- a/test/README.md +++ b/test/README.md @@ -1 +1,8 @@ This is the manual test suite for the PDF extension. + +## Running tests + +In the `test` folder, run `box start`. This should open a browser to the test suite page. + +Scroll down the page and make sure that each PDF looks like the reference image. + diff --git a/test/expected_output/classic_basic.png b/test/expected_output/classic_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..956541ad0daa019c596d270e9f10c73eeea8ae1b GIT binary patch literal 41759 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 literal 0 HcmV?d00001 diff --git a/test/expected_output/modern_basic.png b/test/expected_output/modern_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..01b479f0ebe82d2a9cde30208f6340e8afd54558 GIT binary patch literal 42078 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 vOtLo0oI3P*US=)rZR}Kb<+Pw@)`; -
  • Classic engine, basic
  • -
  • Modern engine, basic
  • -
  • Modern engine, with sections
  • - - + + + + + + + From b89dd71126d64b5333c8d651e781d28168a4aa65 Mon Sep 17 00:00:00 2001 From: Leon Miller-Out Date: Mon, 21 Sep 2020 10:34:16 -0400 Subject: [PATCH 3/8] Add column headers to explain what's going on. --- test/index.cfm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/index.cfm b/test/index.cfm index 77e9704..0fe8428 100644 --- a/test/index.cfm +++ b/test/index.cfm @@ -8,6 +8,11 @@
  • Modern engine, mixed orientation
  • ---> +
    +
    Actual PDF Output
    +
    Expected Output (screenshot)
    +
    +