mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-14 12:23:43 +00:00
140 lines
3.2 KiB
Go
140 lines
3.2 KiB
Go
package evaluation
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func source(t testing.TB, name string) string {
|
|
t.Helper()
|
|
b, e := os.ReadFile("testdata/extensions/" + name + ".js")
|
|
if e != nil {
|
|
t.Fatal("run python3 fetch_sources.py first: ", e)
|
|
}
|
|
return string(b)
|
|
}
|
|
func setup(t testing.TB, engine, name string) Runtime {
|
|
t.Helper()
|
|
r, e := New(engine)
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
t.Cleanup(r.Close)
|
|
b, e := os.ReadFile("replay.js")
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
for _, s := range []string{fmt.Sprintf("var extensionName = %q;", name), string(b), source(t, name)} {
|
|
if _, e = r.Eval(s); e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
}
|
|
return r
|
|
}
|
|
func TestExtensionReplay(t *testing.T) {
|
|
for _, name := range []string{"bilibili", "youtube", "twitter"} {
|
|
t.Run(name, func(t *testing.T) {
|
|
var want any
|
|
for _, engine := range []string{"goja", "moejs"} {
|
|
t.Run(engine, func(t *testing.T) {
|
|
r := setup(t, engine, name)
|
|
v, e := r.Eval("resolveOnce()")
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
t.Log(v)
|
|
if engine == "goja" {
|
|
want = v
|
|
} else if want != nil && v != want {
|
|
t.Fatalf("output differs\ngoja: %s\nmoejs: %s", want, v)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
func BenchmarkExtension(b *testing.B) {
|
|
for _, name := range []string{"bilibili", "youtube", "twitter"} {
|
|
for _, engine := range []string{"goja", "moejs"} {
|
|
b.Run(name+"/"+engine+"/warm", func(b *testing.B) {
|
|
r := setup(b, engine, name)
|
|
if _, e := r.Eval("resolveOnce()"); e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
if _, e := r.Eval("resolveOnce()"); e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
}
|
|
})
|
|
b.Run(name+"/"+engine+"/cold", func(b *testing.B) {
|
|
src := source(b, name)
|
|
p, e := os.ReadFile("replay.js")
|
|
if e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
r, e := New(engine)
|
|
if e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
for _, s := range []string{fmt.Sprintf("var extensionName=%q;", name), string(p), src, "resolveOnce()"} {
|
|
if _, e = r.Eval(s); e != nil {
|
|
r.Close()
|
|
b.Fatal(e)
|
|
}
|
|
}
|
|
r.Close()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestExtensionLifecycle(t *testing.T) {
|
|
for _, name := range []string{"bilibili", "youtube", "twitter"} {
|
|
t.Run(name, func(t *testing.T) {
|
|
var want any
|
|
for _, engine := range []string{"goja", "moejs"} {
|
|
t.Run(engine, func(t *testing.T) {
|
|
r := setup(t, engine, name)
|
|
v, e := r.Eval("lifecycleOnce()")
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
t.Log(v)
|
|
if engine == "goja" {
|
|
want = v
|
|
} else if want != nil && v != want {
|
|
t.Fatalf("lifecycle differs\ngoja: %s\nmoejs: %s", want, v)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
}
|
|
func BenchmarkBufferedTransport(b *testing.B) {
|
|
for _, name := range []string{"bilibili", "youtube", "twitter"} {
|
|
for _, engine := range []string{"goja", "moejs"} {
|
|
b.Run(name+"/"+engine, func(b *testing.B) {
|
|
r := setup(b, engine, name)
|
|
if _, e := r.Eval("Response = BufferedResponse; resolveOnce()"); e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
if _, e := r.Eval("resolveOnce()"); e != nil {
|
|
b.Fatal(e)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|