1.4.5.2
This commit is contained in:
75
EdgeNode/internal/js/lib_console_assert.go
Normal file
75
EdgeNode/internal/js/lib_console_assert.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
//go:build script
|
||||
// +build script
|
||||
|
||||
package js
|
||||
|
||||
import teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
|
||||
|
||||
func init() {
|
||||
if !teaconst.IsMain {
|
||||
return
|
||||
}
|
||||
|
||||
SharedLibraryManager.Register(&JSConsoleAssertLibrary{})
|
||||
}
|
||||
|
||||
type JSConsoleAssertLibrary struct {
|
||||
JSBaseLibrary
|
||||
}
|
||||
|
||||
func (this *JSConsoleAssertLibrary) JSNamespace() string {
|
||||
return "gojs.console.JSConsoleAssertLibrary"
|
||||
}
|
||||
|
||||
func (this *JSConsoleAssertLibrary) JSPrototype() string {
|
||||
return `console.assert = function () {
|
||||
$this.Assert(arguments)
|
||||
}`
|
||||
}
|
||||
|
||||
func (this *JSConsoleAssertLibrary) Assert(arguments *FunctionArguments) (any, error) {
|
||||
arg0, ok := arguments.ArgAt(0)
|
||||
if !ok {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
if arg0.IsArgumentsObject() {
|
||||
var obj = arg0.Object()
|
||||
if obj == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
assertion, err := obj.GetIdx(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if assertion.IsBoolean() {
|
||||
var b = assertion.Boolean()
|
||||
if !b {
|
||||
msgObj, err := obj.GetIdx(1)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var msg = ""
|
||||
|
||||
// 支持 assert(assertion, msg)
|
||||
// TODO 支持 assert(assertion, obj)
|
||||
if msgObj.IsString() {
|
||||
msg = msgObj.String()
|
||||
}
|
||||
|
||||
msgValue, err := arguments.Context().NewValue("Assertion Failed: " + msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
arguments.Context().Isolate().ThrowException(msgValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
Reference in New Issue
Block a user