diff options
author | Kartik Agaram <vc@akkartik.com> | 2021-02-07 21:12:11 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2021-02-07 21:12:11 -0800 |
commit | a99775b4457fb46b2a30964937d8ae2099165496 (patch) | |
tree | 0f4d6b359e93698041821aeb9d048a17e736fd24 | |
parent | 1d7aae96f0eafb43b791b4221c544267b852b9c1 (diff) | |
download | mu-a99775b4457fb46b2a30964937d8ae2099165496.tar.gz |
7695 - baremetal: second bg assertion for spaces
When I'm also checking graphemes I assume that spaces can be in other bg colors. However, if I want to closely check the bg color for a cell with a space in it (ahem, cursor), I have to check the color in isolation.
-rw-r--r-- | baremetal/504test-screen.mu | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/baremetal/504test-screen.mu b/baremetal/504test-screen.mu index db59998d..72691a64 100644 --- a/baremetal/504test-screen.mu +++ b/baremetal/504test-screen.mu @@ -239,6 +239,64 @@ fn check-screen-row-in-background-color-from screen-on-stack: (addr screen), bg: } } +# helpers for checking just background color, not screen contents +# these can validate bg for spaces + +fn check-background-color-in-screen-row screen: (addr screen), bg: int, y: int, expected-bitmap: (addr array byte), msg: (addr array byte) { + check-background-color-in-screen-row-from screen, bg, y, 0/x, expected-bitmap, msg +} + +fn check-background-color-in-screen-row-from screen-on-stack: (addr screen), bg: int, y: int, x: int, expected-bitmap: (addr array byte), msg: (addr array byte) { + var screen/esi: (addr screen) <- copy screen-on-stack + var idx/ecx: int <- screen-cell-index screen, y, x + # compare background color where 'expected-bitmap' is a non-space + var e: (stream byte 0x100) + var e-addr/edx: (addr stream byte) <- address e + write e-addr, expected-bitmap + { + var done?/eax: boolean <- stream-empty? e-addr + compare done?, 0 + break-if-!= + var _expected-bit/eax: grapheme <- read-grapheme e-addr + var expected-bit/edi: grapheme <- copy _expected-bit + $check-background-color-in-screen-row-from:compare-cells: { + var background-color/eax: int <- screen-background-color-at-idx screen, idx + # if expected-bit is space, assert that background is NOT bg + compare expected-bit, 0x20 + { + break-if-!= + compare background-color, bg + break-if-!= $check-background-color-in-screen-row-from:compare-cells + count-test-failure + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, msg, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ": expected (", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, x, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ", ", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, y, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ") to not be in background-color ", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, bg, 3/fg/cyan, 0/bg + break $check-background-color-in-screen-row-from:compare-cells + } + # otherwise assert that background IS bg + compare background-color, bg + break-if-= $check-background-color-in-screen-row-from:compare-cells + count-test-failure + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, msg, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ": expected (", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, x, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ", ", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, y, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, ") in background-color ", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, bg, 3/fg/cyan, 0/bg + draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, " but observed background-color ", 3/fg/cyan, 0/bg + draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, background-color, 3/fg/cyan, 0/bg + } + idx <- increment + increment x + loop + } +} + fn test-draw-single-grapheme { var screen-on-stack: screen var screen/esi: (addr screen) <- address screen-on-stack @@ -248,6 +306,7 @@ fn test-draw-single-grapheme { check-screen-row screen, 0/y, "a", "F - test-draw-single-grapheme" # top-left corner of the screen check-screen-row-in-color screen, 1/fg, 0/y, "a", "F - test-draw-single-grapheme-fg" check-screen-row-in-background-color screen, 2/bg, 0/y, "a", "F - test-draw-single-grapheme-bg" + check-background-color-in-screen-row screen, 2/bg, 0/y, "x ", "F - test-draw-single-grapheme-bg2" } fn test-draw-multiple-graphemes { @@ -257,5 +316,5 @@ fn test-draw-multiple-graphemes { draw-text-wrapping-right-then-down-from-cursor-over-full-screen screen, "Hello, 世界", 1/fg, 2/bg check-screen-row screen, 0/y, "Hello, 世界", "F - test-draw-multiple-graphemes" check-screen-row-in-color screen, 1/fg, 0/y, "Hello, 世界", "F - test-draw-multiple-graphemes-fg" - check-screen-row-in-background-color screen, 2/bg, 0/y, "Hello, 世界", "F - test-draw-multiple-graphemes-bg" + check-background-color-in-screen-row screen, 2/bg, 0/y, "xxxxxxxxx ", "F - test-draw-multiple-graphemes-bg2" } |