blob: 0433e98f8d5c7ccf8a679e24edea69825e7860eb [file] [log] [blame] [edit]
package runtime_test
import (
"bufio"
"bytes"
"encoding/json"
"flag"
"io"
"io/ioutil"
"path/filepath"
"testing"
"github.com/mafredri/cdp/protocol/runtime"
)
var update = flag.Bool("update", false, "update .golden files")
func TestRuntimeRemoteObject_String(t *testing.T) {
in := filepath.Join("testdata", "log.input")
input, err := ioutil.ReadFile(in)
if err != nil {
t.Fatal(err)
}
scanner := bufio.NewScanner(bytes.NewReader(input))
var buf bytes.Buffer
for scanner.Scan() {
var logEv runtime.ConsoleAPICalledReply
err := json.Unmarshal(scanner.Bytes(), &logEv)
if err != nil {
t.Fatal(err)
}
for _, arg := range logEv.Args {
buf.WriteString(arg.String())
buf.WriteByte('\n')
}
}
if err := scanner.Err(); err != nil {
t.Fatal(err)
}
out := filepath.Join("testdata", "log.golden")
want, err := ioutil.ReadFile(out)
if err != nil {
t.Fatal(err)
}
if got := buf.Bytes(); !bytes.Equal(got, want) {
if *update {
err := ioutil.WriteFile(out, got, 0666)
if err != nil {
t.Error(err)
}
return
}
t.Error("output does not match golden file")
showDiff(t, got, want)
}
}
func showDiff(t testing.TB, got, want []byte) {
gr := bufio.NewReader(bytes.NewReader(got))
wr := bufio.NewReader(bytes.NewReader(want))
var lineno int
for {
lineno++
g, err1 := gr.ReadBytes('\n')
w, err2 := wr.ReadBytes('\n')
if err1 != nil || err2 != nil {
if err1 != io.EOF || err2 != io.EOF {
t.Error(err1, err2)
}
break
}
if !bytes.Equal(g, w) {
t.Errorf("line %d: got %s; want %s", lineno, g[:len(g)-1], w[:len(w)-1])
}
}
}