summaryrefslogtreecommitdiff
path: root/test/codes/CodeCacheTest.mc
diff options
context:
space:
mode:
Diffstat (limited to 'test/codes/CodeCacheTest.mc')
-rw-r--r--test/codes/CodeCacheTest.mc46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/codes/CodeCacheTest.mc b/test/codes/CodeCacheTest.mc
index 2ad7f05..3b2a02e 100644
--- a/test/codes/CodeCacheTest.mc
+++ b/test/codes/CodeCacheTest.mc
@@ -110,3 +110,49 @@ function codeRunsCoverExactlyTheDarkModules(logger as Test.Logger) as Boolean {
}
return true;
}
+
+// Steps a display job to the end and checks its percentage follows the
+// work: never down, never above 99, no big jumps, and a real spread (the
+// "Encoding" screen once showed 90 % at the first frame and sat there).
+function progressIsSteady(job as Codes.DisplayJob) as Boolean {
+ var last = job.percent();
+ var biggest = last;
+ var steps = 0;
+ var steady = last < 35;
+ while (!job.step(1)) {
+ var now = job.percent();
+ steady = steady && now >= last && now <= 99;
+ biggest = now - last > biggest ? now - last : biggest;
+ last = now;
+ steps++;
+ }
+ return steady && biggest <= 35 && steps >= 3 && last >= 60 && job.error == null;
+}
+
+(:test)
+function displayProgressFollowsTheWork(logger as Test.Logger) as Boolean {
+ var member = "https://example.com/member/fake-0042?name=Alice%20Example&card=0000111122223333&valid=2027-12-31&level=gold";
+ var long = "";
+ for (var i = 0; i < 40; i++) {
+ long += "abcdefghij";
+ }
+ var qr = progressIsSteady(new Codes.DisplayJob(new Qr.QrJob(member, 1, 0, -1), null));
+ var qrBig = progressIsSteady(new Codes.DisplayJob(new Qr.QrJob(long, 0, 0, -1), null));
+ var qrForced = progressIsSteady(new Codes.DisplayJob(new Qr.QrJob(member, 1, 0, 3), null));
+ var dm = progressIsSteady(new Codes.DisplayJob(new DataMatrix.DataMatrixJob(long.substring(0, 200) as String), null));
+ var az = progressIsSteady(new Codes.DisplayJob(new Aztec.AztecJob(long.substring(0, 200) as String, 1), null));
+ var pdf = progressIsSteady(new Codes.DisplayJob(new Pdf417.Pdf417Job(long.substring(0, 200) as String, 1, 260, 260, true),
+ null));
+ // A cached code only runs the finder: 0 at the start, then up to 99.
+ var bits = new [60 * 60]b;
+ for (var i = 0; i < bits.size(); i++) {
+ bits[i] = (i * 7 / 3) % 2;
+ }
+ var packed = Codes.Packed.parse(new Codes.Matrix(60, 60, 4, bits).toBytes()) as Codes.Packed;
+ var cached = new Codes.DisplayJob(null, packed);
+ var start = cached.percent();
+ var cachedSteady = progressIsSteady(cached);
+ logger.debug("progress qr=" + qr + " big=" + qrBig + " forced=" + qrForced + " dm=" + dm + " az=" + az + " pdf=" + pdf
+ + " cached=" + cachedSteady);
+ return qr && qrBig && qrForced && dm && az && pdf && start == 0 && cachedSteady;
+}