Skip to content

DocumentGuideWorkout.kt

src/jvmMain/kotlin/afield/examples/DocumentGuideWorkout.kt · 39 lines

package afield.examples

object DocumentGuideWorkout

Trusted browser input checks, marshalled onto the same dispatcher as Field's captures.

fun prepare()

    fun prepare() {
        kotlinx.coroutines.runBlocking(afield.app.server.playwrightDispatcher) {
            checkNotNull(afield.app.server.globalPlaywriteContext).setViewportSize(1440, 960)
        }
    }

fun checkGestures()

    fun checkGestures() {
        kotlinx.coroutines.runBlocking(afield.app.server.playwrightDispatcher) {
            val page = checkNotNull(afield.app.server.globalPlaywriteContext)
            for (corner in listOf("nw", "ne", "sw", "se")) {
                page.evaluate("""() => Object.assign(document.getElementById('document-guide').style,
                    {left:'60px',top:'60px',width:'680px',height:'780px'})""")
                val before = page.locator("#document-guide").boundingBox()
                val x = if (corner.endsWith("w")) before.x+6 else before.x+before.width-6
                val y = if (corner.startsWith("n")) before.y+6 else before.y+before.height-6
                val dx = if (corner.endsWith("w")) 55.0 else -55.0
                val dy = if (corner.startsWith("n")) 40.0 else -40.0
                page.mouse().move(x,y)
                page.mouse().down()
                try { repeat(10) { i -> page.mouse().move(x+dx*(i+1)/10,y+dy*(i+1)/10) } }
                finally { page.mouse().up() }
                val after = page.locator("#document-guide").boundingBox()
                check(after.width < before.width-35 && after.height < before.height-25) { "Guide corner $corner did not resize" }
            }
            val before = page.locator("#document-guide").boundingBox()
            page.mouse().move(before.x+160,before.y+28)
            page.mouse().down()
            try { repeat(8) { i -> page.mouse().move(before.x+160+(i+1)*5,before.y+28+(i+1)*3) } }
            finally { page.mouse().up() }
            val after = page.locator("#document-guide").boundingBox()
            check(after.x > before.x+25 && after.y > before.y+15) { "Guide header did not drag" }
        }
    }
}