diff options
Diffstat (limited to 'test/codes')
| -rw-r--r-- | test/codes/CodeCacheTest.mc | 46 |
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; +} |
