mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-05 01:20:26 +08:00
159 lines
2.9 KiB
Go
159 lines
2.9 KiB
Go
|
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||
|
|
|
||
|
|
package js
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/dop251/goja"
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestNewVM(t *testing.T) {
|
||
|
|
before := time.Now()
|
||
|
|
defer func() {
|
||
|
|
t.Log(time.Since(before).Seconds()*1000, "ms")
|
||
|
|
}()
|
||
|
|
|
||
|
|
vm := NewVM()
|
||
|
|
{
|
||
|
|
v, err := vm.RunString("JSON.stringify({\"a\":\"b\"})")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
t.Log("JSON.stringify():", v)
|
||
|
|
}
|
||
|
|
{
|
||
|
|
v, err := vm.RunString(`JSON.parse('{\"a\":\"b\"}')`)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
t.Log("JSON.parse():", v)
|
||
|
|
}
|
||
|
|
{
|
||
|
|
err := vm.AddConstructor("Url", &URL{})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("add constructor error:", err)
|
||
|
|
}
|
||
|
|
_, err = vm.RunString(`
|
||
|
|
{
|
||
|
|
let u = new Url("https://goedge.cn/docs?v=1")
|
||
|
|
console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
{
|
||
|
|
let u = new Url("https://teaos.cn/downloads?v=1")
|
||
|
|
console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url()
|
||
|
|
console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url("a", "b", "c")
|
||
|
|
console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
`)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("add constructor error:" + err.Error())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestVM_Program(t *testing.T) {
|
||
|
|
var s = `
|
||
|
|
{
|
||
|
|
let u = new Url("https://goedge.cn/docs?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
{
|
||
|
|
let u = new Url("https://teaos.cn/downloads?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url()
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url("a", "b", "c")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
`
|
||
|
|
program := goja.MustCompile("s", s, true)
|
||
|
|
|
||
|
|
before := time.Now()
|
||
|
|
defer func() {
|
||
|
|
t.Log(time.Since(before).Seconds()*1000, "ms")
|
||
|
|
}()
|
||
|
|
|
||
|
|
vm := NewVM()
|
||
|
|
err := vm.AddConstructor("Url", &URL{})
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("add constructor error:", err)
|
||
|
|
}
|
||
|
|
//_, err = vm.RunString(s)
|
||
|
|
_, err = vm.vm.RunProgram(program)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal("add constructor error:" + err.Error())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func Benchmark_Program(b *testing.B) {
|
||
|
|
var s = `
|
||
|
|
{
|
||
|
|
let u = new Url("https://goedge.cn/docs?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
{
|
||
|
|
let u = new Url("https://teaos.cn/downloads?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url()
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url("a", "b", "c")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
{
|
||
|
|
let u = new Url("https://goedge.cn/docs?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
{
|
||
|
|
let u = new Url("https://teaos.cn/downloads?v=1")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url()
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
|
||
|
|
{
|
||
|
|
let u = new Url("a", "b", "c")
|
||
|
|
//console.log("host:", u.host(), u.uri())
|
||
|
|
}
|
||
|
|
`
|
||
|
|
program := goja.MustCompile("s", s, true)
|
||
|
|
|
||
|
|
vm := NewVM()
|
||
|
|
|
||
|
|
err := vm.AddConstructor("Url", &URL{})
|
||
|
|
if err != nil {
|
||
|
|
b.Fatal("add constructor error:", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
//_, err = vm.RunString(s)
|
||
|
|
_, err = vm.vm.RunProgram(program)
|
||
|
|
if err != nil {
|
||
|
|
b.Fatal("add constructor error:" + err.Error())
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|