refactor(common): 重构 Conn 实体并优化地图进入逻辑
- 优化 Conn 实体的 SendPack 方法,提高代码复用性 - 添加 goja 模块到 go.work 文件 - 重构地图进入逻辑,增加玩家广播和刷怪功能 - 调整 OutInfo 结构中的 Vip 和 Viped 字段类型 - 简化 MonsterRefresh 结构体定义
This commit is contained in:
101
common/utils/goja/builtin_weakset_test.go
Normal file
101
common/utils/goja/builtin_weakset_test.go
Normal file
@@ -0,0 +1,101 @@
|
||||
package goja
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestWeakSetBasic(t *testing.T) {
|
||||
const SCRIPT = `
|
||||
var s = new WeakSet();
|
||||
var o = {};
|
||||
s.add(o);
|
||||
if (!s.has(o)) {
|
||||
throw new Error("has");
|
||||
}
|
||||
s.delete(o);
|
||||
if (s.has(o)) {
|
||||
throw new Error("still has");
|
||||
}
|
||||
`
|
||||
testScript(SCRIPT, _undefined, t)
|
||||
}
|
||||
|
||||
func TestWeakSetArraySimple(t *testing.T) {
|
||||
const SCRIPT = `
|
||||
var o1 = {}, o2 = {}, o3 = {};
|
||||
|
||||
var s = new WeakSet([o1, o2, o3]);
|
||||
s.has(o1) && s.has(o2) && s.has(o3);
|
||||
`
|
||||
testScript(SCRIPT, valueTrue, t)
|
||||
}
|
||||
|
||||
func TestWeakSetArrayGeneric(t *testing.T) {
|
||||
const SCRIPT = `
|
||||
var o1 = {}, o2 = {}, o3 = {};
|
||||
var a = new Array();
|
||||
var s;
|
||||
var thrown = false;
|
||||
a[1] = o2;
|
||||
|
||||
try {
|
||||
s = new WeakSet(a);
|
||||
} catch (e) {
|
||||
if (e instanceof TypeError) {
|
||||
thrown = true;
|
||||
}
|
||||
}
|
||||
if (!thrown) {
|
||||
throw new Error("Case 1 does not throw");
|
||||
}
|
||||
|
||||
Object.defineProperty(a.__proto__, "0", {value: o1, writable: true, enumerable: true, configurable: true});
|
||||
s = new WeakSet(a);
|
||||
if (!(s.has(o1) && s.has(o2) && !s.has(o3))) {
|
||||
throw new Error("Case 2 failed");
|
||||
}
|
||||
|
||||
Object.defineProperty(a, "2", {value: o3, configurable: true});
|
||||
s = new WeakSet(a);
|
||||
s.has(o1) && s.has(o2) && s.has(o3);
|
||||
`
|
||||
testScript(SCRIPT, valueTrue, t)
|
||||
}
|
||||
|
||||
func TestWeakSetGetAdderGetIteratorOrder(t *testing.T) {
|
||||
const SCRIPT = `
|
||||
let getterCalled = 0;
|
||||
|
||||
class S extends WeakSet {
|
||||
get add() {
|
||||
getterCalled++;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
let getIteratorCalled = 0;
|
||||
|
||||
let iterable = {};
|
||||
iterable[Symbol.iterator] = () => {
|
||||
getIteratorCalled++
|
||||
return {
|
||||
next: 1
|
||||
};
|
||||
}
|
||||
|
||||
let thrown = false;
|
||||
|
||||
try {
|
||||
new S(iterable);
|
||||
} catch (e) {
|
||||
if (e instanceof TypeError) {
|
||||
thrown = true;
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
thrown && getterCalled === 1 && getIteratorCalled === 0;
|
||||
`
|
||||
testScript(SCRIPT, valueTrue, t)
|
||||
}
|
||||
Reference in New Issue
Block a user