Skip to content

Commit 51c67e7

Browse files
committed
Improve API design. Make callback function can get current context scope.
1 parent 270f483 commit 51c67e7

File tree

7 files changed

+201
-166
lines changed

7 files changed

+201
-166
lines changed

v8_all_test.go

+76-76
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func Test_GetVersion(t *testing.T) {
6060

6161
func Test_HelloWorld(t *testing.T) {
6262
engine.NewContext(nil).Scope(func(cs ContextScope) {
63-
if cs.Eval([]byte("'Hello ' + 'World!'")).ToString() != "Hello World!" {
63+
if cs.Eval("'Hello ' + 'World!'").ToString() != "Hello World!" {
6464
t.Fatal("result not match")
6565
}
6666
})
@@ -157,59 +157,59 @@ func Test_Values(t *testing.T) {
157157
maxNumber = int64(maxUint64)
158158
)
159159

160-
if engine.NewBoolean(true).ToBoolean() != true {
160+
if cs.NewBoolean(true).ToBoolean() != true {
161161
t.Fatal(`NewBoolean(true).ToBoolean() != true`)
162162
}
163163

164-
if engine.NewNumber(12.34).ToNumber() != 12.34 {
164+
if cs.NewNumber(12.34).ToNumber() != 12.34 {
165165
t.Fatal(`NewNumber(12.34).ToNumber() != 12.34`)
166166
}
167167

168-
if engine.NewNumber(float64(maxNumber)).ToInteger() != maxNumber {
168+
if cs.NewNumber(float64(maxNumber)).ToInteger() != maxNumber {
169169
t.Fatal(`NewNumber(float64(maxNumber)).ToInteger() != maxNumber`)
170170
}
171171

172-
if engine.NewInteger(maxInt32).IsInt32() == false {
172+
if cs.NewInteger(maxInt32).IsInt32() == false {
173173
t.Fatal(`NewInteger(maxInt32).IsInt32() == false`)
174174
}
175175

176-
if engine.NewInteger(maxUint32).IsInt32() != false {
176+
if cs.NewInteger(maxUint32).IsInt32() != false {
177177
t.Fatal(`NewInteger(maxUint32).IsInt32() != false`)
178178
}
179179

180-
if engine.NewInteger(maxUint32).IsUint32() == false {
180+
if cs.NewInteger(maxUint32).IsUint32() == false {
181181
t.Fatal(`NewInteger(maxUint32).IsUint32() == false`)
182182
}
183183

184-
if engine.NewInteger(maxNumber).ToInteger() != maxNumber {
184+
if cs.NewInteger(maxNumber).ToInteger() != maxNumber {
185185
t.Fatal(`NewInteger(maxNumber).ToInteger() != maxNumber`)
186186
}
187187

188-
if engine.NewString("Hello World!").ToString() != "Hello World!" {
188+
if cs.NewString("Hello World!").ToString() != "Hello World!" {
189189
t.Fatal(`NewString("Hello World!").ToString() != "Hello World!"`)
190190
}
191191

192-
if engine.NewObject().IsObject() == false {
192+
if cs.NewObject().IsObject() == false {
193193
t.Fatal(`NewObject().IsObject() == false`)
194194
}
195195

196-
if engine.NewArray(5).IsArray() == false {
196+
if cs.NewArray(5).IsArray() == false {
197197
t.Fatal(`NewArray(5).IsArray() == false`)
198198
}
199199

200-
if engine.NewArray(5).ToArray().Length() != 5 {
200+
if cs.NewArray(5).ToArray().Length() != 5 {
201201
t.Fatal(`NewArray(5).Length() != 5`)
202202
}
203203

204-
if engine.NewRegExp("foo", RF_None).IsRegExp() == false {
204+
if cs.NewRegExp("foo", RF_None).IsRegExp() == false {
205205
t.Fatal(`NewRegExp("foo", RF_None).IsRegExp() == false`)
206206
}
207207

208-
if engine.NewRegExp("foo", RF_Global).ToRegExp().Pattern() != "foo" {
208+
if cs.NewRegExp("foo", RF_Global).ToRegExp().Pattern() != "foo" {
209209
t.Fatal(`NewRegExp("foo", RF_Global).ToRegExp().Pattern() != "foo"`)
210210
}
211211

212-
if engine.NewRegExp("foo", RF_Global).ToRegExp().Flags() != RF_Global {
212+
if cs.NewRegExp("foo", RF_Global).ToRegExp().Flags() != RF_Global {
213213
t.Fatal(`NewRegExp("foo", RF_Global).ToRegExp().Flags() != RF_Global`)
214214
}
215215
})
@@ -437,9 +437,9 @@ func Test_Function(t *testing.T) {
437437
}
438438

439439
result := value.ToFunction().Call(
440-
engine.NewInteger(1),
441-
engine.NewInteger(2),
442-
engine.NewInteger(3),
440+
cs.NewInteger(1),
441+
cs.NewInteger(2),
442+
cs.NewInteger(3),
443443
)
444444

445445
if result.IsNumber() == false {
@@ -462,7 +462,7 @@ func Test_Function(t *testing.T) {
462462
}
463463

464464
if function.ToFunction().Call(
465-
engine.NewString("Hello World!"),
465+
cs.NewString("Hello World!"),
466466
).IsTrue() == false {
467467
t.Fatal("callback return not match")
468468
}
@@ -490,11 +490,11 @@ func Test_Accessor(t *testing.T) {
490490
PA_None,
491491
)
492492

493-
template.SetProperty("def", engine.NewInteger(8888), PA_None)
493+
template.SetProperty("def", cs.NewInteger(8888), PA_None)
494494

495495
values := []*Value{
496496
template.NewObject(), // New
497-
engine.NewObject(), // Wrap
497+
cs.NewObject(), // Wrap
498498
}
499499
template.WrapObject(values[1])
500500

@@ -509,7 +509,7 @@ func Test_Accessor(t *testing.T) {
509509
t.Fatal(`object.GetProperty("abc").ToInt32() != 1234`)
510510
}
511511

512-
object.SetProperty("abc", engine.NewInteger(5678), PA_None)
512+
object.SetProperty("abc", cs.NewInteger(5678), PA_None)
513513

514514
if propertyValue != 5678 {
515515
t.Fatal(`propertyValue != 5678`)
@@ -577,17 +577,17 @@ func Test_NamedPropertyHandler(t *testing.T) {
577577
object := obj_template.NewObject().ToObject()
578578

579579
object.GetProperty("abc")
580-
object.SetProperty("abc", engine.NewInteger(123), PA_None)
580+
object.SetProperty("abc", cs.NewInteger(123), PA_None)
581581
object.GetPropertyAttributes("abc")
582582

583-
cs.Eval([]byte(`
583+
cs.Eval(`
584584
var data = GetData();
585585
586586
delete data.abc;
587587
588588
for (var p in data) {
589589
}
590-
`))
590+
`)
591591
})
592592

593593
if !(get_called && set_called && query_called && delete_called && enum_called) {
@@ -646,16 +646,16 @@ func Test_IndexedPropertyHandler(t *testing.T) {
646646
object := obj_template.NewObject().ToObject()
647647

648648
object.GetElement(1)
649-
object.SetElement(1, engine.NewInteger(123))
649+
object.SetElement(1, cs.NewInteger(123))
650650

651-
cs.Eval([]byte(`
651+
cs.Eval(`
652652
var data = GetData();
653653
654654
delete data[1];
655655
656656
for (var p in data) {
657657
}
658-
`))
658+
`)
659659
})
660660

661661
if !(get_called && set_called && query_called && delete_called && enum_called) {
@@ -666,59 +666,59 @@ func Test_IndexedPropertyHandler(t *testing.T) {
666666
}
667667

668668
func Test_ObjectConstructor(t *testing.T) {
669-
engine.NewContext(nil).Scope(func(cs ContextScope) {
670-
ftConstructor := engine.NewFunctionTemplate(nil)
671-
ftConstructor.SetClassName("MyClass")
669+
ftConstructor := engine.NewFunctionTemplate(nil)
670+
ftConstructor.SetClassName("MyClass")
672671

673-
obj_template := ftConstructor.InstanceTemplate()
672+
obj_template := ftConstructor.InstanceTemplate()
674673

675-
var (
676-
get_called = false
677-
set_called = false
678-
query_called = false
679-
delete_called = false
680-
enum_called = false
681-
)
674+
var (
675+
get_called = false
676+
set_called = false
677+
query_called = false
678+
delete_called = false
679+
enum_called = false
680+
)
682681

683-
obj_template.SetNamedPropertyHandler(
684-
func(name string, info PropertyCallbackInfo) {
685-
//t.Logf("get %s", name)
686-
get_called = get_called || name == "abc"
687-
},
688-
func(name string, value *Value, info PropertyCallbackInfo) {
689-
//t.Logf("set %s", name)
690-
set_called = set_called || name == "abc"
691-
},
692-
func(name string, info PropertyCallbackInfo) {
693-
//t.Logf("query %s", name)
694-
query_called = query_called || name == "abc"
695-
},
696-
func(name string, info PropertyCallbackInfo) {
697-
//t.Logf("delete %s", name)
698-
delete_called = delete_called || name == "abc"
699-
},
700-
func(info PropertyCallbackInfo) {
701-
//t.Log("enumerate")
702-
enum_called = true
703-
},
704-
nil,
705-
)
682+
obj_template.SetNamedPropertyHandler(
683+
func(name string, info PropertyCallbackInfo) {
684+
//t.Logf("get %s", name)
685+
get_called = get_called || name == "abc"
686+
},
687+
func(name string, value *Value, info PropertyCallbackInfo) {
688+
//t.Logf("set %s", name)
689+
set_called = set_called || name == "abc"
690+
},
691+
func(name string, info PropertyCallbackInfo) {
692+
//t.Logf("query %s", name)
693+
query_called = query_called || name == "abc"
694+
},
695+
func(name string, info PropertyCallbackInfo) {
696+
//t.Logf("delete %s", name)
697+
delete_called = delete_called || name == "abc"
698+
},
699+
func(info PropertyCallbackInfo) {
700+
//t.Log("enumerate")
701+
enum_called = true
702+
},
703+
nil,
704+
)
706705

706+
engine.NewContext(nil).Scope(func(cs ContextScope) {
707707
cs.Global().SetProperty("MyClass", ftConstructor.NewFunction(), PA_None)
708708

709-
if !cs.Eval([]byte("(new MyClass) instanceof MyClass")).IsTrue() {
709+
if !cs.Eval("(new MyClass) instanceof MyClass").IsTrue() {
710710
t.Fatal("(new MyClass) instanceof MyClass == false")
711711
}
712712

713-
object := cs.Eval([]byte(`
713+
object := cs.Eval(`
714714
var data = new MyClass;
715715
var temp = data.abc;
716716
data.abc = 1;
717717
delete data.abc;
718718
for (var p in data) {
719719
}
720720
data;
721-
`)).ToObject()
721+
`).ToObject()
722722

723723
object.GetPropertyAttributes("abc")
724724

@@ -769,7 +769,7 @@ func Test_Context(t *testing.T) {
769769
}, nil, nil, PA_None)
770770

771771
engine.NewContext(globalTemplate).Scope(func(cs ContextScope) {
772-
cs.Eval([]byte(`log("Hello World!")`))
772+
cs.Eval(`log("Hello World!")`)
773773
})
774774

775775
// Test Global Object
@@ -786,7 +786,7 @@ func Test_Context(t *testing.T) {
786786
return
787787
}
788788

789-
cs.Eval([]byte(`println("Hello World!")`))
789+
cs.Eval(`println("Hello World!")`)
790790
})
791791

792792
runtime.GC()
@@ -1079,7 +1079,7 @@ func Benchmark_NewContext(b *testing.B) {
10791079
func Benchmark_NewInteger(b *testing.B) {
10801080
engine.NewContext(nil).Scope(func(cs ContextScope) {
10811081
for i := 0; i < b.N; i++ {
1082-
engine.NewInteger(int64(i))
1082+
cs.NewInteger(int64(i))
10831083
}
10841084
})
10851085

@@ -1091,7 +1091,7 @@ func Benchmark_NewInteger(b *testing.B) {
10911091
func Benchmark_NewString(b *testing.B) {
10921092
engine.NewContext(nil).Scope(func(cs ContextScope) {
10931093
for i := 0; i < b.N; i++ {
1094-
engine.NewString("Hello World!")
1094+
cs.NewString("Hello World!")
10951095
}
10961096
})
10971097

@@ -1103,7 +1103,7 @@ func Benchmark_NewString(b *testing.B) {
11031103
func Benchmark_NewObject(b *testing.B) {
11041104
engine.NewContext(nil).Scope(func(cs ContextScope) {
11051105
for i := 0; i < b.N; i++ {
1106-
engine.NewObject()
1106+
cs.NewObject()
11071107
}
11081108
})
11091109

@@ -1115,7 +1115,7 @@ func Benchmark_NewObject(b *testing.B) {
11151115
func Benchmark_NewArray0(b *testing.B) {
11161116
engine.NewContext(nil).Scope(func(cs ContextScope) {
11171117
for i := 0; i < b.N; i++ {
1118-
engine.NewArray(0)
1118+
cs.NewArray(0)
11191119
}
11201120
})
11211121

@@ -1127,7 +1127,7 @@ func Benchmark_NewArray0(b *testing.B) {
11271127
func Benchmark_NewArray5(b *testing.B) {
11281128
engine.NewContext(nil).Scope(func(cs ContextScope) {
11291129
for i := 0; i < b.N; i++ {
1130-
engine.NewArray(5)
1130+
cs.NewArray(5)
11311131
}
11321132
})
11331133

@@ -1139,7 +1139,7 @@ func Benchmark_NewArray5(b *testing.B) {
11391139
func Benchmark_NewArray20(b *testing.B) {
11401140
engine.NewContext(nil).Scope(func(cs ContextScope) {
11411141
for i := 0; i < b.N; i++ {
1142-
engine.NewArray(20)
1142+
cs.NewArray(20)
11431143
}
11441144
})
11451145

@@ -1151,7 +1151,7 @@ func Benchmark_NewArray20(b *testing.B) {
11511151
func Benchmark_NewArray100(b *testing.B) {
11521152
engine.NewContext(nil).Scope(func(cs ContextScope) {
11531153
for i := 0; i < b.N; i++ {
1154-
engine.NewArray(100)
1154+
cs.NewArray(100)
11551155
}
11561156
})
11571157

@@ -1316,7 +1316,7 @@ func Benchmark_Setter(b *testing.B) {
13161316
b.StartTimer()
13171317

13181318
for i := 0; i < b.N; i++ {
1319-
object.SetProperty("abc", engine.NewInteger(5678), PA_None)
1319+
object.SetProperty("abc", cs.NewInteger(5678), PA_None)
13201320
}
13211321
})
13221322

@@ -1329,7 +1329,7 @@ func Benchmark_TryCatch(b *testing.B) {
13291329
engine.NewContext(nil).Scope(func(cs ContextScope) {
13301330
for i := 0; i < b.N; i++ {
13311331
cs.TryCatch(false, func() {
1332-
cs.Eval([]byte("a[=1;"))
1332+
cs.Eval("a[=1;")
13331333
})
13341334
}
13351335
})

0 commit comments

Comments
 (0)