add test for EntityStateMachine could be deallocated
This commit is contained in:
parent
1aae190fc1
commit
1c8c063e01
|
|
@ -354,7 +354,7 @@ public class EntityStateMachine<StateName: Hashable> {
|
|||
toAdd = newState.providers
|
||||
}
|
||||
|
||||
for (_, provider) in toAdd {
|
||||
for (_, provider) in toAdd {
|
||||
entity.assign(provider.getComponent())
|
||||
}
|
||||
currentState = newState
|
||||
|
|
|
|||
|
|
@ -413,6 +413,27 @@ class EntityStateMachineTests: XCTestCase {
|
|||
XCTAssertTrue(entity.get(component: MockComponent.self) === component1)
|
||||
XCTAssertTrue(entity.get(component: MockComponent2.self) === component2)
|
||||
}
|
||||
|
||||
func testGetsDeinitedWhileBeingStronglyReferencedByComponentAssignedToEntity() {
|
||||
class Marker: Component {
|
||||
let fsm: EntityStateMachine<String>
|
||||
init(fsm: EntityStateMachine<String>) {
|
||||
self.fsm = fsm
|
||||
}
|
||||
}
|
||||
|
||||
let nexus = Nexus()
|
||||
var entity = nexus.createEntity()
|
||||
var markerComponent = Marker(fsm: EntityStateMachine<String>(entity: entity))
|
||||
entity.assign(markerComponent)
|
||||
weak var weakMarker = markerComponent
|
||||
weak var weakFsm = markerComponent.fsm
|
||||
nexus.destroy(entity: entity)
|
||||
entity = nexus.createEntity()
|
||||
markerComponent = .init(fsm: .init(entity: entity))
|
||||
XCTAssertNil(weakMarker)
|
||||
XCTAssertNil(weakFsm)
|
||||
}
|
||||
|
||||
class MockComponent: ComponentInitializable {
|
||||
let value: Int
|
||||
|
|
|
|||
Loading…
Reference in New Issue