- test/mock.luau: Destroy = Destroying → Parent nil → 자손 재귀 → 연결 해제, 두 번째는 no-op; claim이 Destroy된 inst면 새 gcconn 즉시 Disconnect. spec.lifetime 6b/6c 추가. - test/spec.init.luau: Quad 탑레벨 값 확인을 typechecked 계층으로(smoke.init 5절 제거). - ROADMAP M7 체크박스·tween-plan: isTween/TweenBrand는 Brand.luau. - conventions: 규약 요약의 단위 나열 제거(소스는 brief §1). 코드 주석 절 인용을 제목 앞부분으로. - round11.md: H-168(Ref() 무인자 vs Ref<T>(T)) / H-169(재진입 :Set 옛 value) / H-170(resume이 에러 삼킴)을 §4 배치 문항으로(권고 전부 (a)), §5에 단위 끝 절차 기록. 세션 원문·요약 갱신. Co-authored-by: qwreey <me@qwreey.moe>
67 lines
1.9 KiB
Text
67 lines
1.9 KiB
Text
--[[ 임시 스모크 테스트 — New()/RunInit의 멱등 가드가 기대대로 동작하는지 확인 ]]
|
|
|
|
local Quad = require("../src")
|
|
|
|
print("=== 1. New()가 만든 module엔 InitDebug가 이미 반영돼 있음 ===")
|
|
assert(Quad.debug == false, "top-level require(quad-base)도 New()를 거쳐야 함")
|
|
print("PASS")
|
|
|
|
print()
|
|
print("=== 2. RunInit은 같은 함수를 다시 넘겨도 재실행하지 않음 ===")
|
|
do
|
|
local runCount = 0
|
|
local function initFn(module)
|
|
runCount += 1
|
|
module.marker = true
|
|
end
|
|
|
|
Quad:RunInit(initFn)
|
|
Quad:RunInit(initFn)
|
|
Quad:RunInit(initFn)
|
|
|
|
assert(runCount == 1, "같은 initFn을 여러 번 RunInit해도 실제 실행은 1회여야 함")
|
|
assert(Quad.marker == true, "실행됐다면 마커가 세팅돼 있어야 함")
|
|
print("PASS: " .. runCount .. "회 호출 중 실제 실행 " .. runCount .. "회")
|
|
end
|
|
|
|
print()
|
|
print("=== 3. New()로 만든 서로 다른 module은 RunInit 기록을 공유하지 않음 ===")
|
|
do
|
|
local runCount = 0
|
|
local function initFn(_module)
|
|
runCount += 1
|
|
end
|
|
|
|
local a = Quad.New()
|
|
local b = Quad.New()
|
|
assert(a ~= b, "New()는 매번 독립된 module을 만들어야 함")
|
|
|
|
a:RunInit(initFn)
|
|
b:RunInit(initFn)
|
|
|
|
assert(runCount == 2, "서로 다른 module 인스턴스는 각자 한 번씩 실행돼야 함(총 2회)")
|
|
print("PASS: 독립 인스턴스 2개 각각 1회씩, 총 " .. runCount .. "회")
|
|
end
|
|
|
|
print()
|
|
print("=== 4. 서로 다른 initFn은 서로의 실행 여부에 영향을 안 줌 ===")
|
|
do
|
|
local m = Quad.New()
|
|
local aRan, bRan = false, false
|
|
local function initA(_module)
|
|
aRan = true
|
|
end
|
|
local function initB(_module)
|
|
bRan = true
|
|
end
|
|
|
|
m:RunInit(initA)
|
|
assert(aRan == true and bRan == false, "initA만 돌았어야 함")
|
|
m:RunInit(initB)
|
|
assert(aRan == true and bRan == true, "이제 둘 다 돌았어야 함")
|
|
m:RunInit(initA) -- no-op이어야 함, 에러 없이 통과하면 충분
|
|
print("PASS")
|
|
end
|
|
|
|
print()
|
|
print("=== ALL PASS ===")
|