From e9fb4e935b9a938f2248c7586f272a71c8434ff1 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Sun, 12 Dec 2021 17:54:56 -0500 Subject: [PATCH 1/5] Rearrange example files to work as e2e tests --- .../150q-core/input}/a.jpg | Bin .../150q-core/input}/answer_key.jpg | Bin .../150q-core/input}/b.jpg | Bin .../75q-core-1/input}/scanned_page (1).png | Bin .../75q-core-1/input}/scanned_page (10).png | Bin .../75q-core-1/input}/scanned_page (11).png | Bin .../75q-core-1/input}/scanned_page (12).png | Bin .../75q-core-1/input}/scanned_page (13).png | Bin .../75q-core-1/input}/scanned_page (14).png | Bin .../75q-core-1/input}/scanned_page (15).png | Bin .../75q-core-1/input}/scanned_page (16).png | Bin .../75q-core-1/input}/scanned_page (17).png | Bin .../75q-core-1/input}/scanned_page (2).png | Bin .../75q-core-1/input}/scanned_page (3).png | Bin .../75q-core-1/input}/scanned_page (4).png | Bin .../75q-core-1/input}/scanned_page (5).png | Bin .../75q-core-1/input}/scanned_page (6).png | Bin .../75q-core-1/input}/scanned_page (7).png | Bin .../75q-core-1/input}/scanned_page (8).png | Bin .../75q-core-1/input}/scanned_page (9).png | Bin .../input}/sample scanned sheets_Page_01.jpg | Bin .../input}/sample scanned sheets_Page_02.jpg | Bin .../input}/sample scanned sheets_Page_03.jpg | Bin .../input}/sample scanned sheets_Page_04.jpg | Bin .../input}/sample scanned sheets_Page_05.jpg | Bin .../input}/sample scanned sheets_Page_06.jpg | Bin .../input}/sample scanned sheets_Page_07.jpg | Bin .../input}/sample scanned sheets_Page_08.jpg | Bin .../input}/sample scanned sheets_Page_09.jpg | Bin .../input}/sample scanned sheets_Page_10.jpg | Bin .../input}/sample scanned sheets_Page_11.jpg | Bin .../input}/sample scanned sheets_Page_12.jpg | Bin .../input}/sample scanned sheets_Page_13.jpg | Bin .../input}/sample scanned sheets_Page_14.jpg | Bin .../input}/sample scanned sheets_Page_15.jpg | Bin .../input}/sample scanned sheets_Page_16.jpg | Bin .../input}/sample scanned sheets_Page_17.jpg | Bin .../input}/sample scanned sheets_Page_18.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/1.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/10.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/11.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/2.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/3.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/4.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/5.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/6.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/7.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/8.jpg | Bin .../batch-B => e2e-tests/75q-core-3/input}/9.jpg | Bin .../low-resolution/input/example.png | Bin .../rearrangement/input}/a.jpg | Bin .../rearrangement/input}/arrangement.csv | 0 .../rearrangement/input}/b.jpg | Bin .../rearrangement/input}/key.jpg | Bin {examples => e2e-tests}/rearrangement/readme.md | 0 .../rejected-file/input}/reject.png | Bin .../rejected-file/input}/scanned_page (1).png | Bin .../rejected-file/input}/scanned_page (2).png | Bin .../rotation/input}/180deg.jpg | Bin .../rotation/input}/270deg.jpg | Bin .../issue-27 => e2e-tests/rotation/input}/90deg.jpg | Bin 61 files changed, 0 insertions(+), 0 deletions(-) rename {examples/150-question-sheet => e2e-tests/150q-core/input}/a.jpg (100%) rename {examples/150-question-sheet => e2e-tests/150q-core/input}/answer_key.jpg (100%) rename {examples/150-question-sheet => e2e-tests/150q-core/input}/b.jpg (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (1).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (10).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (11).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (12).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (13).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (14).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (15).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (16).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (17).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (2).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (3).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (4).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (5).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (6).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (7).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (8).png (100%) rename {examples/batch-A/scanner-A => e2e-tests/75q-core-1/input}/scanned_page (9).png (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_01.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_02.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_03.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_04.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_05.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_06.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_07.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_08.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_09.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_10.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_11.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_12.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_13.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_14.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_15.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_16.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_17.jpg (100%) rename {examples/batch-A/scanner-B => e2e-tests/75q-core-2/input}/sample scanned sheets_Page_18.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/1.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/10.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/11.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/2.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/3.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/4.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/5.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/6.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/7.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/8.jpg (100%) rename {examples/batch-B => e2e-tests/75q-core-3/input}/9.jpg (100%) rename examples/issue-24/69904077-efbe5480-13c3-11ea-9632-b0f461f800ae.png => e2e-tests/low-resolution/input/example.png (100%) rename {examples/rearrangement => e2e-tests/rearrangement/input}/a.jpg (100%) rename {examples/rearrangement => e2e-tests/rearrangement/input}/arrangement.csv (100%) rename {examples/rearrangement => e2e-tests/rearrangement/input}/b.jpg (100%) rename {examples/rearrangement => e2e-tests/rearrangement/input}/key.jpg (100%) rename {examples => e2e-tests}/rearrangement/readme.md (100%) rename {examples/issue-59 => e2e-tests/rejected-file/input}/reject.png (100%) rename {examples/issue-59 => e2e-tests/rejected-file/input}/scanned_page (1).png (100%) rename {examples/issue-59 => e2e-tests/rejected-file/input}/scanned_page (2).png (100%) rename {examples/issue-27 => e2e-tests/rotation/input}/180deg.jpg (100%) rename {examples/issue-27 => e2e-tests/rotation/input}/270deg.jpg (100%) rename {examples/issue-27 => e2e-tests/rotation/input}/90deg.jpg (100%) diff --git a/examples/150-question-sheet/a.jpg b/e2e-tests/150q-core/input/a.jpg similarity index 100% rename from examples/150-question-sheet/a.jpg rename to e2e-tests/150q-core/input/a.jpg diff --git a/examples/150-question-sheet/answer_key.jpg b/e2e-tests/150q-core/input/answer_key.jpg similarity index 100% rename from examples/150-question-sheet/answer_key.jpg rename to e2e-tests/150q-core/input/answer_key.jpg diff --git a/examples/150-question-sheet/b.jpg b/e2e-tests/150q-core/input/b.jpg similarity index 100% rename from examples/150-question-sheet/b.jpg rename to e2e-tests/150q-core/input/b.jpg diff --git a/examples/batch-A/scanner-A/scanned_page (1).png b/e2e-tests/75q-core-1/input/scanned_page (1).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (1).png rename to e2e-tests/75q-core-1/input/scanned_page (1).png diff --git a/examples/batch-A/scanner-A/scanned_page (10).png b/e2e-tests/75q-core-1/input/scanned_page (10).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (10).png rename to e2e-tests/75q-core-1/input/scanned_page (10).png diff --git a/examples/batch-A/scanner-A/scanned_page (11).png b/e2e-tests/75q-core-1/input/scanned_page (11).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (11).png rename to e2e-tests/75q-core-1/input/scanned_page (11).png diff --git a/examples/batch-A/scanner-A/scanned_page (12).png b/e2e-tests/75q-core-1/input/scanned_page (12).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (12).png rename to e2e-tests/75q-core-1/input/scanned_page (12).png diff --git a/examples/batch-A/scanner-A/scanned_page (13).png b/e2e-tests/75q-core-1/input/scanned_page (13).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (13).png rename to e2e-tests/75q-core-1/input/scanned_page (13).png diff --git a/examples/batch-A/scanner-A/scanned_page (14).png b/e2e-tests/75q-core-1/input/scanned_page (14).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (14).png rename to e2e-tests/75q-core-1/input/scanned_page (14).png diff --git a/examples/batch-A/scanner-A/scanned_page (15).png b/e2e-tests/75q-core-1/input/scanned_page (15).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (15).png rename to e2e-tests/75q-core-1/input/scanned_page (15).png diff --git a/examples/batch-A/scanner-A/scanned_page (16).png b/e2e-tests/75q-core-1/input/scanned_page (16).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (16).png rename to e2e-tests/75q-core-1/input/scanned_page (16).png diff --git a/examples/batch-A/scanner-A/scanned_page (17).png b/e2e-tests/75q-core-1/input/scanned_page (17).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (17).png rename to e2e-tests/75q-core-1/input/scanned_page (17).png diff --git a/examples/batch-A/scanner-A/scanned_page (2).png b/e2e-tests/75q-core-1/input/scanned_page (2).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (2).png rename to e2e-tests/75q-core-1/input/scanned_page (2).png diff --git a/examples/batch-A/scanner-A/scanned_page (3).png b/e2e-tests/75q-core-1/input/scanned_page (3).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (3).png rename to e2e-tests/75q-core-1/input/scanned_page (3).png diff --git a/examples/batch-A/scanner-A/scanned_page (4).png b/e2e-tests/75q-core-1/input/scanned_page (4).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (4).png rename to e2e-tests/75q-core-1/input/scanned_page (4).png diff --git a/examples/batch-A/scanner-A/scanned_page (5).png b/e2e-tests/75q-core-1/input/scanned_page (5).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (5).png rename to e2e-tests/75q-core-1/input/scanned_page (5).png diff --git a/examples/batch-A/scanner-A/scanned_page (6).png b/e2e-tests/75q-core-1/input/scanned_page (6).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (6).png rename to e2e-tests/75q-core-1/input/scanned_page (6).png diff --git a/examples/batch-A/scanner-A/scanned_page (7).png b/e2e-tests/75q-core-1/input/scanned_page (7).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (7).png rename to e2e-tests/75q-core-1/input/scanned_page (7).png diff --git a/examples/batch-A/scanner-A/scanned_page (8).png b/e2e-tests/75q-core-1/input/scanned_page (8).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (8).png rename to e2e-tests/75q-core-1/input/scanned_page (8).png diff --git a/examples/batch-A/scanner-A/scanned_page (9).png b/e2e-tests/75q-core-1/input/scanned_page (9).png similarity index 100% rename from examples/batch-A/scanner-A/scanned_page (9).png rename to e2e-tests/75q-core-1/input/scanned_page (9).png diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_01.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_01.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_01.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_01.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_02.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_02.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_02.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_02.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_03.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_03.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_03.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_03.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_04.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_04.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_04.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_04.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_05.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_05.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_05.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_05.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_06.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_06.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_06.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_06.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_07.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_07.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_07.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_07.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_08.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_08.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_08.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_08.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_09.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_09.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_09.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_09.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_10.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_10.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_10.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_10.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_11.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_11.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_11.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_11.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_12.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_12.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_12.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_12.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_13.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_13.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_13.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_13.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_14.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_14.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_14.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_14.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_15.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_15.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_15.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_15.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_16.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_16.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_16.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_16.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_17.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_17.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_17.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_17.jpg diff --git a/examples/batch-A/scanner-B/sample scanned sheets_Page_18.jpg b/e2e-tests/75q-core-2/input/sample scanned sheets_Page_18.jpg similarity index 100% rename from examples/batch-A/scanner-B/sample scanned sheets_Page_18.jpg rename to e2e-tests/75q-core-2/input/sample scanned sheets_Page_18.jpg diff --git a/examples/batch-B/1.jpg b/e2e-tests/75q-core-3/input/1.jpg similarity index 100% rename from examples/batch-B/1.jpg rename to e2e-tests/75q-core-3/input/1.jpg diff --git a/examples/batch-B/10.jpg b/e2e-tests/75q-core-3/input/10.jpg similarity index 100% rename from examples/batch-B/10.jpg rename to e2e-tests/75q-core-3/input/10.jpg diff --git a/examples/batch-B/11.jpg b/e2e-tests/75q-core-3/input/11.jpg similarity index 100% rename from examples/batch-B/11.jpg rename to e2e-tests/75q-core-3/input/11.jpg diff --git a/examples/batch-B/2.jpg b/e2e-tests/75q-core-3/input/2.jpg similarity index 100% rename from examples/batch-B/2.jpg rename to e2e-tests/75q-core-3/input/2.jpg diff --git a/examples/batch-B/3.jpg b/e2e-tests/75q-core-3/input/3.jpg similarity index 100% rename from examples/batch-B/3.jpg rename to e2e-tests/75q-core-3/input/3.jpg diff --git a/examples/batch-B/4.jpg b/e2e-tests/75q-core-3/input/4.jpg similarity index 100% rename from examples/batch-B/4.jpg rename to e2e-tests/75q-core-3/input/4.jpg diff --git a/examples/batch-B/5.jpg b/e2e-tests/75q-core-3/input/5.jpg similarity index 100% rename from examples/batch-B/5.jpg rename to e2e-tests/75q-core-3/input/5.jpg diff --git a/examples/batch-B/6.jpg b/e2e-tests/75q-core-3/input/6.jpg similarity index 100% rename from examples/batch-B/6.jpg rename to e2e-tests/75q-core-3/input/6.jpg diff --git a/examples/batch-B/7.jpg b/e2e-tests/75q-core-3/input/7.jpg similarity index 100% rename from examples/batch-B/7.jpg rename to e2e-tests/75q-core-3/input/7.jpg diff --git a/examples/batch-B/8.jpg b/e2e-tests/75q-core-3/input/8.jpg similarity index 100% rename from examples/batch-B/8.jpg rename to e2e-tests/75q-core-3/input/8.jpg diff --git a/examples/batch-B/9.jpg b/e2e-tests/75q-core-3/input/9.jpg similarity index 100% rename from examples/batch-B/9.jpg rename to e2e-tests/75q-core-3/input/9.jpg diff --git a/examples/issue-24/69904077-efbe5480-13c3-11ea-9632-b0f461f800ae.png b/e2e-tests/low-resolution/input/example.png similarity index 100% rename from examples/issue-24/69904077-efbe5480-13c3-11ea-9632-b0f461f800ae.png rename to e2e-tests/low-resolution/input/example.png diff --git a/examples/rearrangement/a.jpg b/e2e-tests/rearrangement/input/a.jpg similarity index 100% rename from examples/rearrangement/a.jpg rename to e2e-tests/rearrangement/input/a.jpg diff --git a/examples/rearrangement/arrangement.csv b/e2e-tests/rearrangement/input/arrangement.csv similarity index 100% rename from examples/rearrangement/arrangement.csv rename to e2e-tests/rearrangement/input/arrangement.csv diff --git a/examples/rearrangement/b.jpg b/e2e-tests/rearrangement/input/b.jpg similarity index 100% rename from examples/rearrangement/b.jpg rename to e2e-tests/rearrangement/input/b.jpg diff --git a/examples/rearrangement/key.jpg b/e2e-tests/rearrangement/input/key.jpg similarity index 100% rename from examples/rearrangement/key.jpg rename to e2e-tests/rearrangement/input/key.jpg diff --git a/examples/rearrangement/readme.md b/e2e-tests/rearrangement/readme.md similarity index 100% rename from examples/rearrangement/readme.md rename to e2e-tests/rearrangement/readme.md diff --git a/examples/issue-59/reject.png b/e2e-tests/rejected-file/input/reject.png similarity index 100% rename from examples/issue-59/reject.png rename to e2e-tests/rejected-file/input/reject.png diff --git a/examples/issue-59/scanned_page (1).png b/e2e-tests/rejected-file/input/scanned_page (1).png similarity index 100% rename from examples/issue-59/scanned_page (1).png rename to e2e-tests/rejected-file/input/scanned_page (1).png diff --git a/examples/issue-59/scanned_page (2).png b/e2e-tests/rejected-file/input/scanned_page (2).png similarity index 100% rename from examples/issue-59/scanned_page (2).png rename to e2e-tests/rejected-file/input/scanned_page (2).png diff --git a/examples/issue-27/180deg.jpg b/e2e-tests/rotation/input/180deg.jpg similarity index 100% rename from examples/issue-27/180deg.jpg rename to e2e-tests/rotation/input/180deg.jpg diff --git a/examples/issue-27/270deg.jpg b/e2e-tests/rotation/input/270deg.jpg similarity index 100% rename from examples/issue-27/270deg.jpg rename to e2e-tests/rotation/input/270deg.jpg diff --git a/examples/issue-27/90deg.jpg b/e2e-tests/rotation/input/90deg.jpg similarity index 100% rename from examples/issue-27/90deg.jpg rename to e2e-tests/rotation/input/90deg.jpg From 0bd48e3ef0716fb09c738ff1f2244f01f055daec Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Sun, 12 Dec 2021 17:58:08 -0500 Subject: [PATCH 2/5] Change example scenarios into end-to-end tests Move examples to /test/end-to-end, rename the example folders, add expected output files, add pytest test runner and configuration. --- .gitignore | 5 +- test/end-to-end/150q-core/args.txt | 1 + .../end-to-end}/150q-core/input/a.jpg | Bin .../150q-core/input/answer_key.jpg | Bin .../end-to-end}/150q-core/input/b.jpg | Bin test/end-to-end/150q-core/output/keys.csv | 2 + test/end-to-end/150q-core/output/results.csv | 3 + test/end-to-end/150q-core/output/scores.csv | 3 + .../75q-core-1/input/scanned_page (1).png | Bin .../75q-core-1/input/scanned_page (10).png | Bin .../75q-core-1/input/scanned_page (11).png | Bin .../75q-core-1/input/scanned_page (12).png | Bin .../75q-core-1/input/scanned_page (13).png | Bin .../75q-core-1/input/scanned_page (14).png | Bin .../75q-core-1/input/scanned_page (15).png | Bin .../75q-core-1/input/scanned_page (16).png | Bin .../75q-core-1/input/scanned_page (17).png | Bin .../75q-core-1/input/scanned_page (2).png | Bin .../75q-core-1/input/scanned_page (3).png | Bin .../75q-core-1/input/scanned_page (4).png | Bin .../75q-core-1/input/scanned_page (5).png | Bin .../75q-core-1/input/scanned_page (6).png | Bin .../75q-core-1/input/scanned_page (7).png | Bin .../75q-core-1/input/scanned_page (8).png | Bin .../75q-core-1/input/scanned_page (9).png | Bin test/end-to-end/75q-core-1/output/results.csv | 18 +++++ test/end-to-end/75q-core-2/args.txt | 1 + .../input/sample scanned sheets_Page_01.jpg | Bin .../input/sample scanned sheets_Page_02.jpg | Bin .../input/sample scanned sheets_Page_03.jpg | Bin .../input/sample scanned sheets_Page_04.jpg | Bin .../input/sample scanned sheets_Page_05.jpg | Bin .../input/sample scanned sheets_Page_06.jpg | Bin .../input/sample scanned sheets_Page_07.jpg | Bin .../input/sample scanned sheets_Page_08.jpg | Bin .../input/sample scanned sheets_Page_09.jpg | Bin .../input/sample scanned sheets_Page_10.jpg | Bin .../input/sample scanned sheets_Page_11.jpg | Bin .../input/sample scanned sheets_Page_12.jpg | Bin .../input/sample scanned sheets_Page_13.jpg | Bin .../input/sample scanned sheets_Page_14.jpg | Bin .../input/sample scanned sheets_Page_15.jpg | Bin .../input/sample scanned sheets_Page_16.jpg | Bin .../input/sample scanned sheets_Page_17.jpg | Bin .../input/sample scanned sheets_Page_18.jpg | Bin test/end-to-end/75q-core-2/output/results.csv | 19 +++++ .../end-to-end}/75q-core-3/input/1.jpg | Bin .../end-to-end}/75q-core-3/input/10.jpg | Bin .../end-to-end}/75q-core-3/input/11.jpg | Bin .../end-to-end}/75q-core-3/input/2.jpg | Bin .../end-to-end}/75q-core-3/input/3.jpg | Bin .../end-to-end}/75q-core-3/input/4.jpg | Bin .../end-to-end}/75q-core-3/input/5.jpg | Bin .../end-to-end}/75q-core-3/input/6.jpg | Bin .../end-to-end}/75q-core-3/input/7.jpg | Bin .../end-to-end}/75q-core-3/input/8.jpg | Bin .../end-to-end}/75q-core-3/input/9.jpg | Bin test/end-to-end/75q-core-3/output/keys.csv | 2 + test/end-to-end/75q-core-3/output/results.csv | 11 +++ test/end-to-end/75q-core-3/output/scores.csv | 11 +++ .../low-resolution/input/example.png | Bin .../low-resolution/output/results.csv | 2 + test/end-to-end/readme.md | 19 +++++ test/end-to-end/rearrangement/args.txt | 1 + .../end-to-end}/rearrangement/input/a.jpg | Bin .../rearrangement/input/arrangement.csv | 0 .../end-to-end}/rearrangement/input/b.jpg | Bin .../end-to-end}/rearrangement/input/key.jpg | Bin test/end-to-end/rearrangement/output/key.csv | 76 ++++++++++++++++++ .../output/rearranged_results.csv | 3 + .../output/rearranged_scores.csv | 3 + .../rearrangement/output/results.csv | 3 + .../end-to-end}/rearrangement/readme.md | 0 .../rejected-file/input/reject.png | Bin .../rejected-file/input/scanned_page (1).png | Bin .../rejected-file/input/scanned_page (2).png | Bin .../rejected-file/output/rejected_files.csv | 2 + .../rejected-file/output/results.csv | 3 + test/end-to-end/rotation/args.txt | 1 + .../end-to-end}/rotation/input/180deg.jpg | Bin .../end-to-end}/rotation/input/270deg.jpg | Bin .../end-to-end}/rotation/input/90deg.jpg | Bin test/end-to-end/rotation/output/results.csv | 4 + test/end-to-end/test_e2e.py | 34 ++++++++ 84 files changed, 226 insertions(+), 1 deletion(-) create mode 100644 test/end-to-end/150q-core/args.txt rename {e2e-tests => test/end-to-end}/150q-core/input/a.jpg (100%) rename {e2e-tests => test/end-to-end}/150q-core/input/answer_key.jpg (100%) rename {e2e-tests => test/end-to-end}/150q-core/input/b.jpg (100%) create mode 100644 test/end-to-end/150q-core/output/keys.csv create mode 100644 test/end-to-end/150q-core/output/results.csv create mode 100644 test/end-to-end/150q-core/output/scores.csv rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (1).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (10).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (11).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (12).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (13).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (14).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (15).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (16).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (17).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (2).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (3).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (4).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (5).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (6).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (7).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (8).png (100%) rename {e2e-tests => test/end-to-end}/75q-core-1/input/scanned_page (9).png (100%) create mode 100644 test/end-to-end/75q-core-1/output/results.csv create mode 100644 test/end-to-end/75q-core-2/args.txt rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_01.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_02.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_03.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_04.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_05.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_06.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_07.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_08.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_09.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_10.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_11.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_12.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_13.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_14.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_15.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_16.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_17.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-2/input/sample scanned sheets_Page_18.jpg (100%) create mode 100644 test/end-to-end/75q-core-2/output/results.csv rename {e2e-tests => test/end-to-end}/75q-core-3/input/1.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/10.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/11.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/2.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/3.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/4.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/5.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/6.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/7.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/8.jpg (100%) rename {e2e-tests => test/end-to-end}/75q-core-3/input/9.jpg (100%) create mode 100644 test/end-to-end/75q-core-3/output/keys.csv create mode 100644 test/end-to-end/75q-core-3/output/results.csv create mode 100644 test/end-to-end/75q-core-3/output/scores.csv rename {e2e-tests => test/end-to-end}/low-resolution/input/example.png (100%) create mode 100644 test/end-to-end/low-resolution/output/results.csv create mode 100644 test/end-to-end/readme.md create mode 100644 test/end-to-end/rearrangement/args.txt rename {e2e-tests => test/end-to-end}/rearrangement/input/a.jpg (100%) rename {e2e-tests => test/end-to-end}/rearrangement/input/arrangement.csv (100%) rename {e2e-tests => test/end-to-end}/rearrangement/input/b.jpg (100%) rename {e2e-tests => test/end-to-end}/rearrangement/input/key.jpg (100%) create mode 100644 test/end-to-end/rearrangement/output/key.csv create mode 100644 test/end-to-end/rearrangement/output/rearranged_results.csv create mode 100644 test/end-to-end/rearrangement/output/rearranged_scores.csv create mode 100644 test/end-to-end/rearrangement/output/results.csv rename {e2e-tests => test/end-to-end}/rearrangement/readme.md (100%) rename {e2e-tests => test/end-to-end}/rejected-file/input/reject.png (100%) rename {e2e-tests => test/end-to-end}/rejected-file/input/scanned_page (1).png (100%) rename {e2e-tests => test/end-to-end}/rejected-file/input/scanned_page (2).png (100%) create mode 100644 test/end-to-end/rejected-file/output/rejected_files.csv create mode 100644 test/end-to-end/rejected-file/output/results.csv create mode 100644 test/end-to-end/rotation/args.txt rename {e2e-tests => test/end-to-end}/rotation/input/180deg.jpg (100%) rename {e2e-tests => test/end-to-end}/rotation/input/270deg.jpg (100%) rename {e2e-tests => test/end-to-end}/rotation/input/90deg.jpg (100%) create mode 100644 test/end-to-end/rotation/output/results.csv create mode 100644 test/end-to-end/test_e2e.py diff --git a/.gitignore b/.gitignore index a13a14a..90dd7fc 100644 --- a/.gitignore +++ b/.gitignore @@ -136,4 +136,7 @@ scantron-reader *.exe # Manual -manual.pdf \ No newline at end of file +manual.pdf + +# E2E Test Output +/test/end-to-end/**/actual_output diff --git a/test/end-to-end/150q-core/args.txt b/test/end-to-end/150q-core/args.txt new file mode 100644 index 0000000..7ab566c --- /dev/null +++ b/test/end-to-end/150q-core/args.txt @@ -0,0 +1 @@ +--variant 150 \ No newline at end of file diff --git a/e2e-tests/150q-core/input/a.jpg b/test/end-to-end/150q-core/input/a.jpg similarity index 100% rename from e2e-tests/150q-core/input/a.jpg rename to test/end-to-end/150q-core/input/a.jpg diff --git a/e2e-tests/150q-core/input/answer_key.jpg b/test/end-to-end/150q-core/input/answer_key.jpg similarity index 100% rename from e2e-tests/150q-core/input/answer_key.jpg rename to test/end-to-end/150q-core/input/answer_key.jpg diff --git a/e2e-tests/150q-core/input/b.jpg b/test/end-to-end/150q-core/input/b.jpg similarity index 100% rename from e2e-tests/150q-core/input/b.jpg rename to test/end-to-end/150q-core/input/b.jpg diff --git a/test/end-to-end/150q-core/output/keys.csv b/test/end-to-end/150q-core/output/keys.csv new file mode 100644 index 0000000..bddf642 --- /dev/null +++ b/test/end-to-end/150q-core/output/keys.csv @@ -0,0 +1,2 @@ +Test Form Code,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75,Q76,Q77,Q78,Q79,Q80,Q81,Q82,Q83,Q84,Q85,Q86,Q87,Q88,Q89,Q90,Q91,Q92,Q93,Q94,Q95,Q96,Q97,Q98,Q99,Q100,Q101,Q102,Q103,Q104,Q105,Q106,Q107,Q108,Q109,Q110,Q111,Q112,Q113,Q114,Q115,Q116,Q117,Q118,Q119,Q120,Q121,Q122,Q123,Q124,Q125,Q126,Q127,Q128,Q129,Q130,Q131,Q132,Q133,Q134,Q135,Q136,Q137,Q138,Q139,Q140,Q141,Q142,Q143,Q144,Q145,Q146,Q147,Q148,Q149,Q150 +,answer_key.jpg,A,B,C,D,E,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/test/end-to-end/150q-core/output/results.csv b/test/end-to-end/150q-core/output/results.csv new file mode 100644 index 0000000..a4e3a25 --- /dev/null +++ b/test/end-to-end/150q-core/output/results.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5 +,,,,12345678,,a.jpg,A,B,B,D,E +,,,,12334235,,b.jpg,A,,C,D,E diff --git a/test/end-to-end/150q-core/output/scores.csv b/test/end-to-end/150q-core/output/scores.csv new file mode 100644 index 0000000..f9541f6 --- /dev/null +++ b/test/end-to-end/150q-core/output/scores.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Total Score (%),Total Points,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75,Q76,Q77,Q78,Q79,Q80,Q81,Q82,Q83,Q84,Q85,Q86,Q87,Q88,Q89,Q90,Q91,Q92,Q93,Q94,Q95,Q96,Q97,Q98,Q99,Q100,Q101,Q102,Q103,Q104,Q105,Q106,Q107,Q108,Q109,Q110,Q111,Q112,Q113,Q114,Q115,Q116,Q117,Q118,Q119,Q120,Q121,Q122,Q123,Q124,Q125,Q126,Q127,Q128,Q129,Q130,Q131,Q132,Q133,Q134,Q135,Q136,Q137,Q138,Q139,Q140,Q141,Q142,Q143,Q144,Q145,Q146,Q147,Q148,Q149,Q150 +,,,,12345678,,a.jpg,80.0,4,1,1,0,1,1 +,,,,12334235,,b.jpg,80.0,4,1,0,1,1,1 diff --git a/e2e-tests/75q-core-1/input/scanned_page (1).png b/test/end-to-end/75q-core-1/input/scanned_page (1).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (1).png rename to test/end-to-end/75q-core-1/input/scanned_page (1).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (10).png b/test/end-to-end/75q-core-1/input/scanned_page (10).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (10).png rename to test/end-to-end/75q-core-1/input/scanned_page (10).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (11).png b/test/end-to-end/75q-core-1/input/scanned_page (11).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (11).png rename to test/end-to-end/75q-core-1/input/scanned_page (11).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (12).png b/test/end-to-end/75q-core-1/input/scanned_page (12).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (12).png rename to test/end-to-end/75q-core-1/input/scanned_page (12).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (13).png b/test/end-to-end/75q-core-1/input/scanned_page (13).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (13).png rename to test/end-to-end/75q-core-1/input/scanned_page (13).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (14).png b/test/end-to-end/75q-core-1/input/scanned_page (14).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (14).png rename to test/end-to-end/75q-core-1/input/scanned_page (14).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (15).png b/test/end-to-end/75q-core-1/input/scanned_page (15).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (15).png rename to test/end-to-end/75q-core-1/input/scanned_page (15).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (16).png b/test/end-to-end/75q-core-1/input/scanned_page (16).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (16).png rename to test/end-to-end/75q-core-1/input/scanned_page (16).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (17).png b/test/end-to-end/75q-core-1/input/scanned_page (17).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (17).png rename to test/end-to-end/75q-core-1/input/scanned_page (17).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (2).png b/test/end-to-end/75q-core-1/input/scanned_page (2).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (2).png rename to test/end-to-end/75q-core-1/input/scanned_page (2).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (3).png b/test/end-to-end/75q-core-1/input/scanned_page (3).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (3).png rename to test/end-to-end/75q-core-1/input/scanned_page (3).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (4).png b/test/end-to-end/75q-core-1/input/scanned_page (4).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (4).png rename to test/end-to-end/75q-core-1/input/scanned_page (4).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (5).png b/test/end-to-end/75q-core-1/input/scanned_page (5).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (5).png rename to test/end-to-end/75q-core-1/input/scanned_page (5).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (6).png b/test/end-to-end/75q-core-1/input/scanned_page (6).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (6).png rename to test/end-to-end/75q-core-1/input/scanned_page (6).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (7).png b/test/end-to-end/75q-core-1/input/scanned_page (7).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (7).png rename to test/end-to-end/75q-core-1/input/scanned_page (7).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (8).png b/test/end-to-end/75q-core-1/input/scanned_page (8).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (8).png rename to test/end-to-end/75q-core-1/input/scanned_page (8).png diff --git a/e2e-tests/75q-core-1/input/scanned_page (9).png b/test/end-to-end/75q-core-1/input/scanned_page (9).png similarity index 100% rename from e2e-tests/75q-core-1/input/scanned_page (9).png rename to test/end-to-end/75q-core-1/input/scanned_page (9).png diff --git a/test/end-to-end/75q-core-1/output/results.csv b/test/end-to-end/75q-core-1/output/results.csv new file mode 100644 index 0000000..d3287c5 --- /dev/null +++ b/test/end-to-end/75q-core-1/output/results.csv @@ -0,0 +1,18 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24 +STUDENT,A,,,0123456789,02468,scanned_page (1).png,D,C,B,D,D,A,C,C,D,B,D,D,D,C,B,D,D,A,C,C,D,B,D,D +STUDENT,B,,,0123456790,02468,scanned_page (17).png,D,D,B,D,C,D,C,C,A,A,A,A,D,D,B,D,C,D,C,C,A,A,A,A +STUDENT,C,,,0123456791,0246,scanned_page (16).png,C,C,C,D,A,B,D,D,C,B,D,D,C,C,C,D,A,B,B,D,C,B,D,D +STUDENT,D,,,0123456792,02468,scanned_page (15).png,C,B,B,D,C,B,B,C,B,A,C,B,C,B,B,D,C,B,B,C,B,A,C,B +STUDENT,E,,,0123456793,,scanned_page (14).png,A,C,B,D,C,B,B,A,A,B,C,D,A,C,B,D,C,B,B,A,A,B,C,D +STUDENT,F,,,0123456794,02468,scanned_page (13).png,B,C,D,D,C,B,A,C,B,B,C,D,B,C,D,D,C,B,A,C,B,B,C,D +STUDENT,G,,,0123456795,02468,scanned_page (12).png,D,C,D,D,C,B,B,C,B,B,C,A,D,C,D,D,C,B,B,C,B,B,C,B +STUDENT,H,,,0123456796,02468,scanned_page (11).png,D,D,C,D,B,C,B,A,A,B,A,B,D,D,C,D,B,C,B,A,A,B,A,B +STUDENT,I,,,,,scanned_page (10).png,D,C,D,D,C,B,B,B,A,D,C,D,D,C,D,D,C,B,B,B,A,D,C,D +STUDENT,J,,,,,scanned_page (9).png,D,C,D,B,C,B,C,C,A,A,C,D,D,C,D,B,C,B,C,C,A,A,C,D +STUDENT,K,,,,,scanned_page (8).png,D,C,C,D,B,A,B,A,C,D,A,B,D,C,C,D,B,A,B,A,C,B,A,D +STUDENT,L,,,,,scanned_page (7).png,C,D,B,B,C,D,D,B,C,A,C,B,C,D,B,B,C,D,D,B,C,A,C,B +STUDENT,M,,,,,scanned_page (6).png,A,C,D,D,C,B,B,B,A,B,A,D,A,C,D,D,C,B,B,B,A,B,A,D +STUDENT,N,,,,,scanned_page (5).png,C,C,D,D,C,B,B,D,B,D,A,D,C,C,B,D,C,B,B,D,B,D,A,D +STUDENT,O,,,,,scanned_page (4).png,D,C,B,D,C,B,B,C,B,B,A,D,D,C,B,D,C,B,B,C,B,B,A,D +STUDENT,P,,,,,scanned_page (3).png,C,C,A,B,A,B,B,D,C,B,D,B,C,C,A,B,A,B,B,D,C,B,D,B +STUDENT,Q,,,,,scanned_page (2).png,B,B,B,D,C,B,B,C,A,B,A,B,B,B,B,D,C,B,B,C,A,B,A,B diff --git a/test/end-to-end/75q-core-2/args.txt b/test/end-to-end/75q-core-2/args.txt new file mode 100644 index 0000000..39be048 --- /dev/null +++ b/test/end-to-end/75q-core-2/args.txt @@ -0,0 +1 @@ +--empty --multiple \ No newline at end of file diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_01.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_01.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_01.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_01.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_02.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_02.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_02.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_02.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_03.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_03.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_03.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_03.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_04.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_04.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_04.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_04.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_05.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_05.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_05.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_05.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_06.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_06.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_06.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_06.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_07.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_07.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_07.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_07.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_08.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_08.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_08.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_08.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_09.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_09.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_09.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_09.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_10.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_10.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_10.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_10.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_11.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_11.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_11.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_11.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_12.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_12.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_12.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_12.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_13.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_13.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_13.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_13.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_14.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_14.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_14.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_14.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_15.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_15.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_15.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_15.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_16.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_16.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_16.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_16.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_17.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_17.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_17.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_17.jpg diff --git a/e2e-tests/75q-core-2/input/sample scanned sheets_Page_18.jpg b/test/end-to-end/75q-core-2/input/sample scanned sheets_Page_18.jpg similarity index 100% rename from e2e-tests/75q-core-2/input/sample scanned sheets_Page_18.jpg rename to test/end-to-end/75q-core-2/input/sample scanned sheets_Page_18.jpg diff --git a/test/end-to-end/75q-core-2/output/results.csv b/test/end-to-end/75q-core-2/output/results.csv new file mode 100644 index 0000000..06708f9 --- /dev/null +++ b/test/end-to-end/75q-core-2/output/results.csv @@ -0,0 +1,19 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24 +STUDENT,A,,B,0123456789,02468,sample scanned sheets_Page_18.jpg,D,C,B,D,D,A,C,C,D,B,D,D,D,C,B,D,D,A,C,C,D,B,D,D +STUDENT,B,,B,0123456790,02468,sample scanned sheets_Page_17.jpg,D,D,B,D,C,D,C,C,A,A,A,A,D,D,B,D,C,D,C,C,A,A,A,A +STUDENT,C,,B,0123456791,0246,sample scanned sheets_Page_16.jpg,C,C,C,D,A,B,D,D,C,B,D,D,C,C,C,D,A,B,B,D,C,B,D,D +STUDENT,D,,A,0123456792,02468,sample scanned sheets_Page_15.jpg,C,B,B,D,C,B,B,C,B,A,C,B,C,B,B,D,C,B,B,C,B,A,C,B +STUDENT,E,,B,0123456793,,sample scanned sheets_Page_14.jpg,A,C,B,D,C,B,B,A,A,B,C,D,A,C,B,D,C,B,B,A,A,B,C,D +STUDENT,F,,B,0123456794,02468,sample scanned sheets_Page_13.jpg,B,C,D,D,C,B,A,C,B,B,C,D,B,C,D,D,C,B,A,C,B,B,C,D +STUDENT,G,,C,0123456795,02468,sample scanned sheets_Page_12.jpg,D,C,D,D,C,B,B,C,B,B,C,A,D,C,D,D,C,B,B,C,B,B,C,B +STUDENT,H,,C,0123456796,02468,sample scanned sheets_Page_11.jpg,D,D,C,D,B,C,B,A,A,B,A,B,D,D,C,D,B,C,B,A,A,B,A,B +STUDENT,I,,B,888,222,sample scanned sheets_Page_01.jpg,D,C,D,D,C,B,B,B,A,D,C,D,D,C,D,D,C,B,B,B,A,D,C,D +STUDENT,J,,B,6666666666,33333,sample scanned sheets_Page_02.jpg,D,C,D,B,C,B,C,C,A,A,C,D,D,C,D,B,C,B,C,C,A,A,C,D +STUDENT,K,,B,444,321,sample scanned sheets_Page_03.jpg,D,C,C,D,B,A,B,A,C,D,A,B,D,C,C,D,B,A,B,A,C,B,A,D +STUDENT,L,,B,555,11,sample scanned sheets_Page_04.jpg,C,D,B,B,C,D,D,B,C,A,C,B,C,D,B,B,C,D,D,B,C,A,C,B +STUDENT,M,,B,222,233,sample scanned sheets_Page_05.jpg,A,C,D,D,C,B,B,B,A,B,A,D,A,C,D,D,C,B,B,B,A,B,A,D +STUDENT,N,,C,2345,1233,sample scanned sheets_Page_06.jpg,C,C,D,D,C,B,B,D,B,D,A,D,C,C,B,D,C,B,B,D,B,D,A,D +STUDENT,O,,A,0122,1222,sample scanned sheets_Page_07.jpg,D,C,B,D,C,B,B,C,B,B,A,D,D,C,B,D,C,B,B,C,B,B,A,D +STUDENT,P,,B,0122222222,1222,sample scanned sheets_Page_08.jpg,C,C,A,B,A,B,B,D,C,B,D,B,C,C,A,B,A,B,B,D,C,B,D,B +STUDENT,Q,,B,1222222222,01234,sample scanned sheets_Page_09.jpg,B,B,B,D,C,B,B,C,A,B,A,B,B,B,B,D,C,B,B,C,A,B,A,B +ZZZZZZZZZZZZ,,,B,,,sample scanned sheets_Page_10.jpg,B,C,D,D,C,B,A,C,B,B,C,D,B,C,D,D,C,B,A,C,B,B,C,D diff --git a/e2e-tests/75q-core-3/input/1.jpg b/test/end-to-end/75q-core-3/input/1.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/1.jpg rename to test/end-to-end/75q-core-3/input/1.jpg diff --git a/e2e-tests/75q-core-3/input/10.jpg b/test/end-to-end/75q-core-3/input/10.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/10.jpg rename to test/end-to-end/75q-core-3/input/10.jpg diff --git a/e2e-tests/75q-core-3/input/11.jpg b/test/end-to-end/75q-core-3/input/11.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/11.jpg rename to test/end-to-end/75q-core-3/input/11.jpg diff --git a/e2e-tests/75q-core-3/input/2.jpg b/test/end-to-end/75q-core-3/input/2.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/2.jpg rename to test/end-to-end/75q-core-3/input/2.jpg diff --git a/e2e-tests/75q-core-3/input/3.jpg b/test/end-to-end/75q-core-3/input/3.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/3.jpg rename to test/end-to-end/75q-core-3/input/3.jpg diff --git a/e2e-tests/75q-core-3/input/4.jpg b/test/end-to-end/75q-core-3/input/4.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/4.jpg rename to test/end-to-end/75q-core-3/input/4.jpg diff --git a/e2e-tests/75q-core-3/input/5.jpg b/test/end-to-end/75q-core-3/input/5.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/5.jpg rename to test/end-to-end/75q-core-3/input/5.jpg diff --git a/e2e-tests/75q-core-3/input/6.jpg b/test/end-to-end/75q-core-3/input/6.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/6.jpg rename to test/end-to-end/75q-core-3/input/6.jpg diff --git a/e2e-tests/75q-core-3/input/7.jpg b/test/end-to-end/75q-core-3/input/7.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/7.jpg rename to test/end-to-end/75q-core-3/input/7.jpg diff --git a/e2e-tests/75q-core-3/input/8.jpg b/test/end-to-end/75q-core-3/input/8.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/8.jpg rename to test/end-to-end/75q-core-3/input/8.jpg diff --git a/e2e-tests/75q-core-3/input/9.jpg b/test/end-to-end/75q-core-3/input/9.jpg similarity index 100% rename from e2e-tests/75q-core-3/input/9.jpg rename to test/end-to-end/75q-core-3/input/9.jpg diff --git a/test/end-to-end/75q-core-3/output/keys.csv b/test/end-to-end/75q-core-3/output/keys.csv new file mode 100644 index 0000000..aba56bb --- /dev/null +++ b/test/end-to-end/75q-core-3/output/keys.csv @@ -0,0 +1,2 @@ +Test Form Code,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75 +F,11.jpg,C,B,C,B,C,E,A,B,A,B,C,B,A,B,C,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,B,A,B,B,D,D,C,D,C,B,C,B,D,B,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/test/end-to-end/75q-core-3/output/results.csv b/test/end-to-end/75q-core-3/output/results.csv new file mode 100644 index 0000000..5e9ae60 --- /dev/null +++ b/test/end-to-end/75q-core-3/output/results.csv @@ -0,0 +1,11 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75 +BLUE PEN,XX,ZZ,A,0000000000,99,6.jpg,B,A,C,D,E,C,B,D,E,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +DAVID,XHAFER,YN,F,0123456789,9876543210,7.jpg,C,B,D,B,C,E,A,B,A,B,C,B,A,B,C,A,B,C,B,C,B,C,B,A,B,C,D,C,B,C,C,B,A,B,B,D,D,C,D,C,B,C,B,D,B,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +ERASED,XX,ZZ,,0123456789,0102345655,5.jpg,A,B,A,C,C,D,A,C,D,B,E,C,E,B,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +MESSY,XX,ZZ,C,9897968 95,1235456666,2.jpg,A,C,,B,C,B,C,B,D,C,B,A,E,E,,,[A|B],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,E +MULTIPLE,XX,ZZ,F,6654989578,0123,3.jpg,A,[A|B|C|D|E],[A|C|E],[B|D],[A|B|E],A,B,C,D,E,[C|D],C,C,B,C,[D|E],[A|B],[D|E],C,B,B,C,B,A,B,A,C,D,D,C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,C,[B|D],C,B,D,B,D,B,[A|E],B,E,C,B,C,B +PARISI,MAHIR,SE,,013579753,001325,9.jpg,E,D,C,B,A,B,B,A,B,C,B,B,D,E,E,,E,C,D,C,C,B,C,B,C,B,A,A,A,E,A,B,C,D,E,D,C,B,A,B,A,B,D,C,B,A,B,C,D,E,C,B,C,C,C,B,B,B,B,B,A,B,C,D,E,D,E,D,C,C,C,B,B,C,B +PATERNOSTER,AUGUST,SO,D,12153746,4512,10.jpg,A,C,B,D,C,B,C,D,E,D,[B|C],,C,C,B,A,,C,B,,C,C,B,C,A,A,E,C,B,D,A,C,B,A,A,B,C,B,C,D,E,C,B,B,[B|D],A,C,B,B,B,C,B,C,B,B,C,B,B,C,C,B,B,A,B,B,B,B,A,B,D,D,E,D,D,E +PEN WHITEOUT,XX,ZZ,C,0246788765,002,1.jpg,A,B,B,D,C,[C|E],C,E,D,E,,B,C,B,D,D,D,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +SCRIBBLED,XX,ZZ,D,0102453212,,4.jpg,A,B,A,B,B,C,D,E,D,C,B,D,E,D,A,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +WASHINGTON,RAELYN,RY,[A|C],1357924686,0099999999,8.jpg,A,A,A,B,C,C,A,E,C,B,D,B,C,B,D,A,D,D,A,B,C,B,C,C,C,B,B,D,C,C,E,E,A,A,C,B,C,B,C,B,B,D,E,A,B,E,D,D,C,B,C,D,D,D,C,A,B,D,E,D,A,B,A,B,C,A,B,A,B,A,B,C,D,C,D diff --git a/test/end-to-end/75q-core-3/output/scores.csv b/test/end-to-end/75q-core-3/output/scores.csv new file mode 100644 index 0000000..2a684b8 --- /dev/null +++ b/test/end-to-end/75q-core-3/output/scores.csv @@ -0,0 +1,11 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Total Score (%),Total Points,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75 +BLUE PEN,XX,ZZ,A,0000000000,99,6.jpg,NO KEY FOUND,NO KEY FOUND +DAVID,XHAFER,YN,F,0123456789,9876543210,7.jpg,78.67,59,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +ERASED,XX,ZZ,,0123456789,0102345655,5.jpg,NO KEY FOUND,NO KEY FOUND +MESSY,XX,ZZ,C,9897968 95,1235456666,2.jpg,NO KEY FOUND,NO KEY FOUND +MULTIPLE,XX,ZZ,F,6654989578,0123,3.jpg,22.67,17,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +PARISI,MAHIR,SE,,013579753,001325,9.jpg,NO KEY FOUND,NO KEY FOUND +PATERNOSTER,AUGUST,SO,D,12153746,4512,10.jpg,NO KEY FOUND,NO KEY FOUND +PEN WHITEOUT,XX,ZZ,C,0246788765,002,1.jpg,NO KEY FOUND,NO KEY FOUND +SCRIBBLED,XX,ZZ,D,0102453212,,4.jpg,NO KEY FOUND,NO KEY FOUND +WASHINGTON,RAELYN,RY,[A|C],1357924686,0099999999,8.jpg,NO KEY FOUND,NO KEY FOUND diff --git a/e2e-tests/low-resolution/input/example.png b/test/end-to-end/low-resolution/input/example.png similarity index 100% rename from e2e-tests/low-resolution/input/example.png rename to test/end-to-end/low-resolution/input/example.png diff --git a/test/end-to-end/low-resolution/output/results.csv b/test/end-to-end/low-resolution/output/results.csv new file mode 100644 index 0000000..330c9e6 --- /dev/null +++ b/test/end-to-end/low-resolution/output/results.csv @@ -0,0 +1,2 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2 +,A,,,1,,example.png,C,B diff --git a/test/end-to-end/readme.md b/test/end-to-end/readme.md new file mode 100644 index 0000000..fc00d0a --- /dev/null +++ b/test/end-to-end/readme.md @@ -0,0 +1,19 @@ +# End-To-End Tests + +The end-to-end tests run the CLI program against example datasets and compare the output CSV files +to expected output. Unlike unit tests, the end-to-end tests run the full program from start to +finish and test every part of execution. + +## Test Setup + +The `test_e2e.py` file runs end-to-end tests by locating all subdirectories in the `end_to_end` +directory. Each test is defined by a set of files in its subdirectory: + +- `input/**` The input files including all images and keys. +- `output/**` The expected output files to compare against. When functionality changes, these files + may need to be updated. +- `args.txt` Define additional arguments to pass to the CLI. For example, putting `--variant 150q` + here will make the program run in 150-question mode. Leaving this file blank or not creating it + will result in running with the default arguments (input and out paths plus `--disable-timestamp`). + Any instance of `$$INPUT_DIR$$` in this file will be replaced with the full absolute input directory + path. diff --git a/test/end-to-end/rearrangement/args.txt b/test/end-to-end/rearrangement/args.txt new file mode 100644 index 0000000..6c52f72 --- /dev/null +++ b/test/end-to-end/rearrangement/args.txt @@ -0,0 +1 @@ +--formmap "$$INPUT_DIR$$arrangement.csv" \ No newline at end of file diff --git a/e2e-tests/rearrangement/input/a.jpg b/test/end-to-end/rearrangement/input/a.jpg similarity index 100% rename from e2e-tests/rearrangement/input/a.jpg rename to test/end-to-end/rearrangement/input/a.jpg diff --git a/e2e-tests/rearrangement/input/arrangement.csv b/test/end-to-end/rearrangement/input/arrangement.csv similarity index 100% rename from e2e-tests/rearrangement/input/arrangement.csv rename to test/end-to-end/rearrangement/input/arrangement.csv diff --git a/e2e-tests/rearrangement/input/b.jpg b/test/end-to-end/rearrangement/input/b.jpg similarity index 100% rename from e2e-tests/rearrangement/input/b.jpg rename to test/end-to-end/rearrangement/input/b.jpg diff --git a/e2e-tests/rearrangement/input/key.jpg b/test/end-to-end/rearrangement/input/key.jpg similarity index 100% rename from e2e-tests/rearrangement/input/key.jpg rename to test/end-to-end/rearrangement/input/key.jpg diff --git a/test/end-to-end/rearrangement/output/key.csv b/test/end-to-end/rearrangement/output/key.csv new file mode 100644 index 0000000..f1c0eda --- /dev/null +++ b/test/end-to-end/rearrangement/output/key.csv @@ -0,0 +1,76 @@ +Source File,key.jpg +Q1,A +Q2,E +Q3,A +Q4, +Q5, +Q6, +Q7, +Q8, +Q9, +Q10, +Q11, +Q12, +Q13, +Q14, +Q15, +Q16, +Q17, +Q18, +Q19, +Q20, +Q21, +Q22, +Q23, +Q24, +Q25, +Q26, +Q27, +Q28, +Q29, +Q30, +Q31, +Q32, +Q33, +Q34, +Q35, +Q36, +Q37, +Q38, +Q39, +Q40, +Q41, +Q42, +Q43, +Q44, +Q45, +Q46, +Q47, +Q48, +Q49, +Q50, +Q51, +Q52, +Q53, +Q54, +Q55, +Q56, +Q57, +Q58, +Q59, +Q60, +Q61, +Q62, +Q63, +Q64, +Q65, +Q66, +Q67, +Q68, +Q69, +Q70, +Q71, +Q72, +Q73, +Q74, +Q75, diff --git a/test/end-to-end/rearrangement/output/rearranged_results.csv b/test/end-to-end/rearrangement/output/rearranged_results.csv new file mode 100644 index 0000000..20dd475 --- /dev/null +++ b/test/end-to-end/rearrangement/output/rearranged_results.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3 +A,,,,,,a.jpg,A,E,A +B,,,,,,b.jpg,A,E,A diff --git a/test/end-to-end/rearrangement/output/rearranged_scores.csv b/test/end-to-end/rearrangement/output/rearranged_scores.csv new file mode 100644 index 0000000..4da2cb0 --- /dev/null +++ b/test/end-to-end/rearrangement/output/rearranged_scores.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Total Score (%),Total Points,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24,Q25,Q26,Q27,Q28,Q29,Q30,Q31,Q32,Q33,Q34,Q35,Q36,Q37,Q38,Q39,Q40,Q41,Q42,Q43,Q44,Q45,Q46,Q47,Q48,Q49,Q50,Q51,Q52,Q53,Q54,Q55,Q56,Q57,Q58,Q59,Q60,Q61,Q62,Q63,Q64,Q65,Q66,Q67,Q68,Q69,Q70,Q71,Q72,Q73,Q74,Q75 +A,,,,,,a.jpg,100.0,3,1,1,1 +B,,,,,,b.jpg,100.0,3,1,1,1 diff --git a/test/end-to-end/rearrangement/output/results.csv b/test/end-to-end/rearrangement/output/results.csv new file mode 100644 index 0000000..aea917e --- /dev/null +++ b/test/end-to-end/rearrangement/output/results.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3 +A,,,A,,,a.jpg,A,E,A +B,,,B,,,b.jpg,A,A,E diff --git a/e2e-tests/rearrangement/readme.md b/test/end-to-end/rearrangement/readme.md similarity index 100% rename from e2e-tests/rearrangement/readme.md rename to test/end-to-end/rearrangement/readme.md diff --git a/e2e-tests/rejected-file/input/reject.png b/test/end-to-end/rejected-file/input/reject.png similarity index 100% rename from e2e-tests/rejected-file/input/reject.png rename to test/end-to-end/rejected-file/input/reject.png diff --git a/e2e-tests/rejected-file/input/scanned_page (1).png b/test/end-to-end/rejected-file/input/scanned_page (1).png similarity index 100% rename from e2e-tests/rejected-file/input/scanned_page (1).png rename to test/end-to-end/rejected-file/input/scanned_page (1).png diff --git a/e2e-tests/rejected-file/input/scanned_page (2).png b/test/end-to-end/rejected-file/input/scanned_page (2).png similarity index 100% rename from e2e-tests/rejected-file/input/scanned_page (2).png rename to test/end-to-end/rejected-file/input/scanned_page (2).png diff --git a/test/end-to-end/rejected-file/output/rejected_files.csv b/test/end-to-end/rejected-file/output/rejected_files.csv new file mode 100644 index 0000000..86ecc87 --- /dev/null +++ b/test/end-to-end/rejected-file/output/rejected_files.csv @@ -0,0 +1,2 @@ +Source File +reject.png diff --git a/test/end-to-end/rejected-file/output/results.csv b/test/end-to-end/rejected-file/output/results.csv new file mode 100644 index 0000000..c15a4da --- /dev/null +++ b/test/end-to-end/rejected-file/output/results.csv @@ -0,0 +1,3 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17,Q18,Q19,Q20,Q21,Q22,Q23,Q24 +STUDENT,A,,,0123456789,02468,scanned_page (1).png,D,C,B,D,D,A,C,C,D,B,D,D,D,C,B,D,D,A,C,C,D,B,D,D +STUDENT,Q,,,,,scanned_page (2).png,B,B,B,D,C,B,B,C,A,B,A,B,B,B,B,D,C,B,B,C,A,B,A,B diff --git a/test/end-to-end/rotation/args.txt b/test/end-to-end/rotation/args.txt new file mode 100644 index 0000000..7ab566c --- /dev/null +++ b/test/end-to-end/rotation/args.txt @@ -0,0 +1 @@ +--variant 150 \ No newline at end of file diff --git a/e2e-tests/rotation/input/180deg.jpg b/test/end-to-end/rotation/input/180deg.jpg similarity index 100% rename from e2e-tests/rotation/input/180deg.jpg rename to test/end-to-end/rotation/input/180deg.jpg diff --git a/e2e-tests/rotation/input/270deg.jpg b/test/end-to-end/rotation/input/270deg.jpg similarity index 100% rename from e2e-tests/rotation/input/270deg.jpg rename to test/end-to-end/rotation/input/270deg.jpg diff --git a/e2e-tests/rotation/input/90deg.jpg b/test/end-to-end/rotation/input/90deg.jpg similarity index 100% rename from e2e-tests/rotation/input/90deg.jpg rename to test/end-to-end/rotation/input/90deg.jpg diff --git a/test/end-to-end/rotation/output/results.csv b/test/end-to-end/rotation/output/results.csv new file mode 100644 index 0000000..7670e60 --- /dev/null +++ b/test/end-to-end/rotation/output/results.csv @@ -0,0 +1,4 @@ +Last Name,First Name,Middle Name,Test Form Code,Student ID,Course ID,Source File,Q1,Q2,Q3,Q4,Q5 +,,,,12334235,,90deg.jpg,A,,C,D,E +,,,,12334235,,180deg.jpg,A,,C,D,E +,,,,12334235,,270deg.jpg,A,,C,D,E diff --git a/test/end-to-end/test_e2e.py b/test/end-to-end/test_e2e.py new file mode 100644 index 0000000..17c1709 --- /dev/null +++ b/test/end-to-end/test_e2e.py @@ -0,0 +1,34 @@ +import subprocess +from pathlib import Path +import sys +import pytest + +current_dir = Path(__file__).parent +open_mcr_path = current_dir.parent.parent / "code" / "main.py" + +@pytest.mark.parametrize("path", [path for path in current_dir.iterdir() if path.is_dir() and path.name != "__pycache__"]) +def test_e2e(path: Path): + input_path = str(path / "input") + additional_args_path = path / "args.txt" + additional_raw_args = additional_args_path.read_text().split() if additional_args_path.exists() else [] + additional_args = [arg.replace("$$INPUT_DIR$$", f"{input_path}/") for arg in additional_raw_args] + + actual_output_path = path / "output" + actual_output_path.mkdir(exist_ok=True) + + subprocess.check_call([ + sys.executable or 'python', + str(open_mcr_path), + input_path, + str(actual_output_path), + "--disable-timestamp", + "--sort" + ] + additional_args) + + expected_output_path = path / "output" + + for actual_output_file in actual_output_path.iterdir(): + actual_output = actual_output_file.read_text() + expected_output_file = expected_output_path / actual_output_file.name + expected_output = expected_output_file.read_text() + assert actual_output == expected_output From c5165d36846666c5a58a8f39c25eb4b0eed7d1d9 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Sun, 12 Dec 2021 18:56:05 -0500 Subject: [PATCH 3/5] Add support for --disable-timestamp CLI argument This will disable timestamps in the output file/folder names. Useful for obtaining consistent filenames but comes at the risk of overwriting files from previous runs. --- code/data_exporting.py | 8 ++++---- code/main.py | 9 ++++++++- code/main_gui.py | 5 ++++- code/mcta_processing.py | 12 ++++++------ code/process_input.py | 7 +++---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/code/data_exporting.py b/code/data_exporting.py index d95261d..11ccf27 100644 --- a/code/data_exporting.py +++ b/code/data_exporting.py @@ -25,8 +25,8 @@ KEY_NOT_FOUND_MESSAGE = "NO KEY FOUND" -def format_timestamp_for_file(timestamp: datetime) -> str: - return timestamp.isoformat(sep="_").replace(":", "-") +def format_timestamp_for_file(timestamp: tp.Optional[datetime]) -> str: + return timestamp.isoformat(sep="_").replace(":", "-") + "__" if timestamp else "" def make_dir_if_not_exists(path: pathlib.Path): @@ -72,10 +72,10 @@ def __init__(self, columns: tp.List[RealOrVirtualField], num_questions: int): self.row_count = 0 def save(self, path: pathlib.PurePath, filebasename: str, sort: bool, - timestamp: datetime, transpose: bool = False) -> pathlib.PurePath: + timestamp: tp.Optional[datetime], transpose: bool = False) -> pathlib.PurePath: if sort: self.sortByName() - output_path = path / f"{format_timestamp_for_file(timestamp)}__{filebasename}.csv" + output_path = path / f"{format_timestamp_for_file(timestamp)}{filebasename}.csv" data = self.data if(transpose): data = list_utils.transpose(data) diff --git a/code/main.py b/code/main.py index ed9bf61..69b4a8a 100644 --- a/code/main.py +++ b/code/main.py @@ -1,5 +1,6 @@ import argparse import sys +from datetime import datetime from pathlib import Path import file_handling @@ -43,6 +44,9 @@ parser.add_argument('--mcta', action='store_true', help='Output additional files for Multiple Choice Test Analysis.') + parser.add_argument('--disable-timestamps', + action='store_true', + help='Disable timestamps in file names. Useful when consistent file names are required. Existing files will be overwritten without warning!') # prints help and exits when called w/o arguments if len(sys.argv) == 1: @@ -61,6 +65,8 @@ output_mcta = args.mcta debug_mode_on = args.debug form_variant = grid_i.form_150q if args.variant == '150' else grid_i.form_75q + files_timestamp = datetime.now().replace(microsecond=0) if not args.disable_timestamps else None + process_input(image_paths, output_folder, multi_answers_as_f, @@ -71,4 +77,5 @@ output_mcta, debug_mode_on, form_variant, - None) + None, + files_timestamp) diff --git a/code/main_gui.py b/code/main_gui.py index 531ef5f..822547f 100644 --- a/code/main_gui.py +++ b/code/main_gui.py @@ -3,6 +3,7 @@ import user_interface import sys from process_input import process_input +from datetime import datetime user_input = user_interface.MainWindow() if (user_input.cancelled): @@ -21,6 +22,7 @@ debug_mode_on = user_input.debug_mode form_variant = grid_i.form_150q if user_input.form_variant == user_interface.FormVariantSelection.VARIANT_150_Q else grid_i.form_75q progress_tracker = user_input.create_and_pack_progress(maximum=len(image_paths)) +files_timestamp = datetime.now().replace(microsecond=0) process_input(image_paths, output_folder, @@ -32,4 +34,5 @@ output_mcta, debug_mode_on, form_variant, - progress_tracker) \ No newline at end of file + progress_tracker, + files_timestamp) diff --git a/code/mcta_processing.py b/code/mcta_processing.py index 7d75b74..1c907f0 100644 --- a/code/mcta_processing.py +++ b/code/mcta_processing.py @@ -1,6 +1,6 @@ import typing as tp import pathlib -import datetime +from datetime import datetime import itertools from data_exporting import format_timestamp_for_file, save_csv, OutputSheet @@ -10,7 +10,7 @@ def transform_and_save_mcta_output(answers_results: OutputSheet, keys_results: OutputSheet, - files_timestamp: datetime, + files_timestamp: tp.Optional[datetime], output_folder: pathlib.Path): """Generate and save files that are specific to a downstream Multiple Choice Test Analysis software. The format of these files is dependend on the downstream software, so they are not @@ -19,7 +19,7 @@ def transform_and_save_mcta_output(answers_results: OutputSheet, create_answers_files(answers_results, output_folder, files_timestamp) -def create_keys_files(keys_results: OutputSheet, output_folder: pathlib.Path, files_timestamp: datetime): +def create_keys_files(keys_results: OutputSheet, output_folder: pathlib.Path, files_timestamp: tp.Optional[datetime]): """Create the key files for the Multiple Choice Test Analysis software. Params: @@ -37,7 +37,7 @@ def create_keys_files(keys_results: OutputSheet, output_folder: pathlib.Path, fi def create_answers_files(answers_results: OutputSheet, output_folder: pathlib.Path, - files_timestamp: datetime): + files_timestamp: tp.Optional[datetime]): """Create the answer files for the Multiple Choice Test Analysis software. Params: @@ -93,6 +93,6 @@ def build_answers_csv(data: tp.List[tp.Tuple[int, tp.List[str]]]) -> tp.List[tp. def save_mcta_csv(data: tp.List[tp.List[str]], path: pathlib.PurePath, basefilename: str, - timestamp: datetime): - filename = path / f"{format_timestamp_for_file(timestamp)}__mcta_{basefilename}.csv" + timestamp: tp.Optional[datetime]): + filename = path / f"{format_timestamp_for_file(timestamp)}mcta_{basefilename}.csv" save_csv(data, filename) diff --git a/code/process_input.py b/code/process_input.py index 2529bf8..86f9379 100644 --- a/code/process_input.py +++ b/code/process_input.py @@ -24,7 +24,8 @@ def process_input( output_mcta: bool, debug_mode_on: bool, form_variant: grid_i.FormVariant, - progress_tracker: tp.Optional[ProgressTrackerWidget]): + progress_tracker: tp.Optional[ProgressTrackerWidget], + files_timestamp: tp.Optional[datetime]): """Takes input as parameters and process it for either gui or cli. Parameter progress_tracker determines whith interface in use. @@ -39,10 +40,8 @@ def process_input( rejected_files = data_exporting.OutputSheet([grid_i.Field.IMAGE_FILE], 0) - files_timestamp = datetime.now().replace(microsecond=0) - debug_dir = output_folder / ( - data_exporting.format_timestamp_for_file(files_timestamp) + "__debug") + data_exporting.format_timestamp_for_file(files_timestamp) + "debug") if debug_mode_on: data_exporting.make_dir_if_not_exists(debug_dir) From 6ecaeac52ef8b0c144c70cd0129cc6c211266ef3 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Sun, 12 Dec 2021 19:49:01 -0500 Subject: [PATCH 4/5] Fix handling of quoted CLI paths Fixes handling of double-quotes paths in CLI arguments by stripping quotes from the argument if present. Adds two new utility methods to assist with this: str_utils.strip_double_quotes and file_handling.parse_path_arg. Fixes #65 --- code/file_handling.py | 8 ++++++++ code/main.py | 12 ++++++------ code/str_utils.py | 6 ++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/code/file_handling.py b/code/file_handling.py index b101836..b720164 100644 --- a/code/file_handling.py +++ b/code/file_handling.py @@ -4,6 +4,7 @@ import typing as tp from image_utils import SUPPORTED_IMAGE_EXTENSIONS +from str_utils import strip_double_quotes def list_file_paths(directory: pathlib.Path) -> tp.List[pathlib.Path]: @@ -39,3 +40,10 @@ def filter_by_extensions(files: tp.Sequence[pathlib.Path], def filter_images(files: tp.Sequence[pathlib.Path]) -> tp.List[pathlib.Path]: """Filter a list of Paths and return only the images.""" return filter_by_extensions(files, SUPPORTED_IMAGE_EXTENSIONS) + + + +def parse_path_arg(path_arg: str) -> pathlib.Path: + """Parse a path argument into a Path object, stripping quotes if present. + """ + return pathlib.Path(strip_double_quotes(path_arg)) diff --git a/code/main.py b/code/main.py index 69b4a8a..7a75513 100644 --- a/code/main.py +++ b/code/main.py @@ -1,9 +1,9 @@ import argparse import sys from datetime import datetime -from pathlib import Path import file_handling +from file_handling import parse_path_arg import grid_info as grid_i from process_input import process_input @@ -15,16 +15,16 @@ parser.add_argument('input_folder', help='Path to a folder containing scanned input sheets.\n' 'Sheets with student ID of "9999999999" treated as keys. Ignores subfolders.', - type=Path) + type=parse_path_arg) parser.add_argument('output_folder', help='Path to a folder to save result to.', - type=Path) + type=parse_path_arg) parser.add_argument('--anskeys', help='Answer Keys CSV file path. If given, will be used over other keys.', - type=Path) + type=parse_path_arg) parser.add_argument('--formmap', help='Form Arrangement Map CSV file path. If given, only one answer key may be provided.', - type=Path) + type=parse_path_arg) parser.add_argument('--variant', default='75', choices=['75', '150'], @@ -66,7 +66,7 @@ debug_mode_on = args.debug form_variant = grid_i.form_150q if args.variant == '150' else grid_i.form_75q files_timestamp = datetime.now().replace(microsecond=0) if not args.disable_timestamps else None - + print(arrangement_file) process_input(image_paths, output_folder, multi_answers_as_f, diff --git a/code/str_utils.py b/code/str_utils.py index 9d03d4c..45df471 100644 --- a/code/str_utils.py +++ b/code/str_utils.py @@ -6,3 +6,9 @@ def trim_middle_to_len(string: str, length: int, start: int = 15): if difference > 0: return string[:start] + " ... " + string[start + difference + 5:] return string + + +def strip_double_quotes(string: str) -> str: + if string[0] == '"' and string[-1] == '"': + return string[1:-1] + return string From abc48dff2a7c2a98b8d4a0eedd126dd63fbe5817 Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Sun, 12 Dec 2021 20:15:58 -0500 Subject: [PATCH 5/5] Add CI configuration to run Pytest --- .github/workflows/continuous_integration.yml | 25 ++++++++++++++++++++ requirements.txt | 6 ++--- 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/continuous_integration.yml diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml new file mode 100644 index 0000000..d2f7362 --- /dev/null +++ b/.github/workflows/continuous_integration.yml @@ -0,0 +1,25 @@ +name: Continuous Integration + +on: + push: + pull_request: + +jobs: + test: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [windows-latest, ubuntu-latest] + + steps: + - uses: actions/checkout@v2.3.1 + + - uses: actions/setup-python@v2 + with: + python-version: '3.x' + # cache: 'pip' # uncomment when https://github.com/actions/cache/issues/698 fixed + + - run: pip install -r requirements.txt + + - run: python -m pytest diff --git a/requirements.txt b/requirements.txt index d458c20..47c7471 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ PyInstaller==3.5 typing==3.7.4.1 -numpy==1.17.2 -pathlib==1.0.1 -opencv-python==4.2.0.32 +numpy==1.21.4 +opencv-python==4.5.4.60 flake8==3.7.8 yapf==0.28.0 +pytest==6.2.5