1package eventloop 2 3import ( 4 "github.com/dop251/goja" 5 "testing" 6 "time" 7) 8 9func TestRun(t *testing.T) { 10 const SCRIPT = ` 11 setTimeout(function() { 12 console.log("ok"); 13 }, 1000); 14 console.log("Started"); 15 ` 16 17 loop := NewEventLoop() 18 prg, err := goja.Compile("main.js", SCRIPT, false) 19 if err != nil { 20 t.Fatal(err) 21 } 22 loop.Run(func(vm *goja.Runtime) { 23 vm.RunProgram(prg) 24 }) 25} 26 27func TestStart(t *testing.T) { 28 const SCRIPT = ` 29 setTimeout(function() { 30 console.log("ok"); 31 }, 1000); 32 console.log("Started"); 33 ` 34 35 prg, err := goja.Compile("main.js", SCRIPT, false) 36 if err != nil { 37 t.Fatal(err) 38 } 39 40 loop := NewEventLoop() 41 loop.Start() 42 43 loop.RunOnLoop(func(vm *goja.Runtime) { 44 vm.RunProgram(prg) 45 }) 46 47 time.Sleep(2 * time.Second) 48 loop.Stop() 49} 50 51func TestInterval(t *testing.T) { 52 const SCRIPT = ` 53 var count = 0; 54 var t = setInterval(function() { 55 console.log("tick"); 56 if (++count > 2) { 57 clearInterval(t); 58 } 59 }, 1000); 60 console.log("Started"); 61 ` 62 63 loop := NewEventLoop() 64 prg, err := goja.Compile("main.js", SCRIPT, false) 65 if err != nil { 66 t.Fatal(err) 67 } 68 loop.Run(func(vm *goja.Runtime) { 69 vm.RunProgram(prg) 70 }) 71} 72