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