added test for wasm log output
callback case for log test
Этот коммит содержится в:
родитель
67ac4fdd8e
коммит
4918395f88
3 изменённых файлов: 101 добавлений и 4 удалений
44
tests/wasm/log_test.go
Обычный файл
44
tests/wasm/log_test.go
Обычный файл
|
@ -0,0 +1,44 @@
|
|||
// +build go1.14
|
||||
|
||||
package wasm
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/chromedp/chromedp"
|
||||
)
|
||||
|
||||
func TestLog(t *testing.T) {
|
||||
|
||||
t.Parallel()
|
||||
|
||||
err := run("tinygo build -o " + wasmTmpDir + "/log.wasm -target wasm testdata/log.go")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ctx, cancel := chromectx(5 * time.Second)
|
||||
defer cancel()
|
||||
|
||||
var log1 string
|
||||
err = chromedp.Run(ctx,
|
||||
chromedp.Navigate("http://localhost:8826/run?file=log.wasm"),
|
||||
chromedp.Sleep(time.Second),
|
||||
chromedp.InnerHTML("#log", &log1),
|
||||
waitLogRe(`^..../../.. ..:..:.. log 1
|
||||
..../../.. ..:..:.. log 2
|
||||
..../../.. ..:..:.. log 3
|
||||
println 4
|
||||
fmt.Println 5
|
||||
..../../.. ..:..:.. log 6
|
||||
in func 1
|
||||
..../../.. ..:..:.. in func 2
|
||||
$`),
|
||||
)
|
||||
t.Logf("log1: %s", log1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
}
|
|
@ -10,6 +10,7 @@ import (
|
|||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
@ -145,12 +146,23 @@ if (wasmSupported) {
|
|||
|
||||
}
|
||||
|
||||
// waitLog blocks until the log output equals the text provided (ignoring whitespace before and after)
|
||||
func waitLog(logText string) chromedp.QueryAction {
|
||||
return waitInnerTextTrimEq("#log", logText)
|
||||
return waitInnerTextTrimEq("#log", strings.TrimSpace(logText))
|
||||
}
|
||||
|
||||
// waitInnerTextTrimEq will wait for the innerText of the specified element to match a specific string after whitespace trimming.
|
||||
func waitInnerTextTrimEq(sel, innerText string) chromedp.QueryAction {
|
||||
// waitLogRe blocks until the log output matches this regular expression
|
||||
func waitLogRe(restr string) chromedp.QueryAction {
|
||||
return waitInnerTextMatch("#log", regexp.MustCompile(restr))
|
||||
}
|
||||
|
||||
// waitInnerTextTrimEq will wait for the innerText of the specified element to match a specific text pattern (ignoring whitespace before and after)
|
||||
func waitInnerTextTrimEq(sel string, innerText string) chromedp.QueryAction {
|
||||
return waitInnerTextMatch(sel, regexp.MustCompile(`^\s*`+regexp.QuoteMeta(innerText)+`\s*$`))
|
||||
}
|
||||
|
||||
// waitInnerTextMatch will wait for the innerText of the specified element to match a specific regexp pattern
|
||||
func waitInnerTextMatch(sel string, re *regexp.Regexp) chromedp.QueryAction {
|
||||
|
||||
return chromedp.Query(sel, func(s *chromedp.Selector) {
|
||||
|
||||
|
@ -173,7 +185,7 @@ func waitInnerTextTrimEq(sel, innerText string) chromedp.QueryAction {
|
|||
if err != nil {
|
||||
return nodes, err
|
||||
}
|
||||
if strings.TrimSpace(ret) != innerText {
|
||||
if !re.MatchString(ret) {
|
||||
// log.Printf("found text: %s", ret)
|
||||
return nodes, errors.New("unexpected value: " + ret)
|
||||
}
|
||||
|
|
41
tests/wasm/testdata/log.go
предоставленный
Обычный файл
41
tests/wasm/testdata/log.go
предоставленный
Обычный файл
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
// try various log and other output directly
|
||||
log.Println("log 1")
|
||||
log.Print("log 2")
|
||||
log.Printf("log %d\n", 3)
|
||||
println("println 4")
|
||||
fmt.Println("fmt.Println 5")
|
||||
log.Printf("log %s", "6")
|
||||
|
||||
// now set up some log output in a button click callback
|
||||
js.Global().
|
||||
Get("document").
|
||||
Call("querySelector", "#main").
|
||||
Set("innerHTML", `<button id="testbtn">Test</button>`)
|
||||
|
||||
js.Global().
|
||||
Get("document").
|
||||
Call("querySelector", "#testbtn").
|
||||
Call("addEventListener", "click",
|
||||
js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
||||
println("in func 1")
|
||||
log.Printf("in func 2")
|
||||
return nil
|
||||
}))
|
||||
|
||||
// click the button
|
||||
js.Global().
|
||||
Get("document").
|
||||
Call("querySelector", "#testbtn").
|
||||
Call("click")
|
||||
|
||||
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче