From 65fedb737ecd878f2de9f8983ec5cd67ad0f728b Mon Sep 17 00:00:00 2001 From: Igor Kravchenko Date: Thu, 1 Oct 2020 10:26:33 +0300 Subject: [PATCH] add tests for EntityState.get --- Sources/FirebladeECS/FSM.swift | 2 +- Tests/FirebladeECSTests/FSMTests.swift | 44 +++++++++++++++++++ Tests/FirebladeECSTests/XCTestManifests.swift | 8 +++- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/Sources/FirebladeECS/FSM.swift b/Sources/FirebladeECS/FSM.swift index d99ac8d..9b91234 100644 --- a/Sources/FirebladeECS/FSM.swift +++ b/Sources/FirebladeECS/FSM.swift @@ -123,7 +123,7 @@ extension ComponentSingletonProvider: ComponentProvider { /// This component provider calls a function to get the component instance. The function must /// return a single component of the appropriate type. public class DynamicComponentProvider { - /// Wrapper for closure to make it hashable + /// Wrapper for closure to make it hashable via ObjectIdentifier public class Closure { let provideComponent: () -> Component diff --git a/Tests/FirebladeECSTests/FSMTests.swift b/Tests/FirebladeECSTests/FSMTests.swift index e831525..66fc41e 100644 --- a/Tests/FirebladeECSTests/FSMTests.swift +++ b/Tests/FirebladeECSTests/FSMTests.swift @@ -209,6 +209,50 @@ class EntityStateTests: XCTestCase { XCTAssertTrue(provider?.getComponent() is MockComponent) } + func testGetReturnsTypeProviderByDefault() { + state.add(MockComponent.self) + let provider = state.get(MockComponent.self) + XCTAssertNotNil(provider) + XCTAssertTrue(provider is ComponentTypeProvider?) + } + + func testGetReturnsInstanceProvider() { + let component = MockComponent() + state.add(MockComponent.self).withInstance(component) + let provider = state.get(MockComponent.self) + XCTAssertNotNil(provider) + XCTAssertTrue(provider is ComponentInstanceProvider?) + } + + func testGetReturnsSingletonProvider() { + state.add(MockComponent.self).withSingleton(MockComponent.self) + let provider = state.get(MockComponent.self) + XCTAssertNotNil(provider) + XCTAssertTrue(provider is ComponentSingletonProvider?) + } + + func testGetReturnsDynamicProvider() { + state.add(MockComponent.self).withMethod(.init { MockComponent() }) + let provider = state.get(MockComponent.self) + XCTAssertNotNil(provider) + XCTAssertTrue(provider is DynamicComponentProvider?) + } + + func testGetReturnsTypeProvider() { + state.add(MockComponent.self).withType(MockComponent.self) + let provider = state.get(MockComponent.self) + XCTAssertNotNil(provider) + XCTAssertTrue(provider is ComponentTypeProvider?) + } + + func testGetReturnsPassedProvider() { + let singletonProvider = ComponentSingletonProvider(type: MockComponent.self) + state.add(MockComponent.self).withProvider(singletonProvider) + let provider = state.get(MockComponent.self) as? ComponentSingletonProvider + XCTAssertNotNil(provider) + XCTAssertTrue(provider === singletonProvider) + } + class MockComponent: ComponentInitializable { let value: Int diff --git a/Tests/FirebladeECSTests/XCTestManifests.swift b/Tests/FirebladeECSTests/XCTestManifests.swift index 10bd937..6588b7c 100644 --- a/Tests/FirebladeECSTests/XCTestManifests.swift +++ b/Tests/FirebladeECSTests/XCTestManifests.swift @@ -113,7 +113,13 @@ extension EntityStateTests { ("testAddWithMethodQualifierCreatesDynamicProvider", testAddWithMethodQualifierCreatesDynamicProvider), ("testAddWithNoQualifierCreatesTypeProvider", testAddWithNoQualifierCreatesTypeProvider), ("testAddWithSingletonQualifierCreatesSingletonProvider", testAddWithSingletonQualifierCreatesSingletonProvider), - ("testAddWithTypeQualifierCreatesTypeProvider", testAddWithTypeQualifierCreatesTypeProvider) + ("testAddWithTypeQualifierCreatesTypeProvider", testAddWithTypeQualifierCreatesTypeProvider), + ("testGetReturnsDynamicProvider", testGetReturnsDynamicProvider), + ("testGetReturnsInstanceProvider", testGetReturnsInstanceProvider), + ("testGetReturnsPassedProvider", testGetReturnsPassedProvider), + ("testGetReturnsSingletonProvider", testGetReturnsSingletonProvider), + ("testGetReturnsTypeProvider", testGetReturnsTypeProvider), + ("testGetReturnsTypeProviderByDefault", testGetReturnsTypeProviderByDefault) ] }