84 lines
2.4 KiB
Plaintext
84 lines
2.4 KiB
Plaintext
// Comprehensive weak reference validation test
|
|
|
|
box Parent {
|
|
init { name }
|
|
|
|
pack(parentName) {
|
|
me.name = parentName
|
|
}
|
|
|
|
getName() {
|
|
return me.name
|
|
}
|
|
}
|
|
|
|
box Child {
|
|
init { weak parent, id }
|
|
|
|
pack(childId) {
|
|
me.id = childId
|
|
me.parent = 0 // Initialize as null
|
|
}
|
|
|
|
setParent(p) {
|
|
me.parent = p
|
|
}
|
|
|
|
// Safe check that doesn't call toString on null
|
|
checkParentStatus() {
|
|
local parentRef = me.parent
|
|
|
|
// Check if we got a valid parent reference
|
|
local console = new ConsoleBox()
|
|
console.log("Child " + me.id.toString() + " checking parent...")
|
|
|
|
// We expect null after parent drop, which should not cause errors
|
|
return "checked"
|
|
}
|
|
|
|
getId() {
|
|
return me.id
|
|
}
|
|
}
|
|
|
|
static box Main {
|
|
main() {
|
|
print("=== Comprehensive Weak Reference Validation ===")
|
|
|
|
local parent1 = new Parent("Parent1")
|
|
local parent2 = new Parent("Parent2")
|
|
|
|
local child1 = new Child(1)
|
|
local child2 = new Child(2)
|
|
local child3 = new Child(3)
|
|
|
|
print("Step 1: Set up multiple weak references")
|
|
child1.setParent(parent1)
|
|
child2.setParent(parent1) // Two children reference same parent
|
|
child3.setParent(parent2) // One child references different parent
|
|
|
|
print("Step 2: Verify all children can access parents")
|
|
child1.checkParentStatus()
|
|
child2.checkParentStatus()
|
|
child3.checkParentStatus()
|
|
|
|
print("Step 3: Drop parent1 (affects child1 and child2)")
|
|
parent1 = 0 // This should invalidate child1 and child2's references
|
|
|
|
print("Step 4: Check all children after parent1 drop")
|
|
child1.checkParentStatus() // Should be null now
|
|
child2.checkParentStatus() // Should be null now
|
|
child3.checkParentStatus() // Should still be valid (different parent)
|
|
|
|
print("Step 5: Drop parent2 (affects child3)")
|
|
parent2 = 0 // This should invalidate child3's reference
|
|
|
|
print("Step 6: Final check - all should be null now")
|
|
child1.checkParentStatus() // Still null
|
|
child2.checkParentStatus() // Still null
|
|
child3.checkParentStatus() // Now null too
|
|
|
|
print("✅ Weak reference system validation complete!")
|
|
return "All tests passed"
|
|
}
|
|
} |