// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest import GameplayKit // GameplayKit is only available on iOS 9.0 and above, OS X 10.11 and above, and // tvOS 9.0 and above. var GamePlayKitTests = TestSuite("GameplayKit") if #available(OSX 10.12, iOS 10.0, tvOS 10.0, *) { GamePlayKitTests.test("GKPath_float2") { let vec: [float2] = [float2(3.0), float2(4.0)] let path = GKPath(points: vec, radius: Float(30), cyclical: true) expectEqual(path.numPoints, 2) expectEqual(path.radius, Float(30)) expectEqual(path.isCyclical, true) } GamePlayKitTests.test("GKPath_float3") { let vec: [float3] = [float3(3.0), float3(4.0)] let path = GKPath(points: vec, radius: Float(30), cyclical: true) expectEqual(path.numPoints, 2) expectEqual(path.radius, Float(30)) expectEqual(path.isCyclical, true) } GamePlayKitTests.test("GKPolygonObstacle") { let vec = [float2(3.0, 3.0), float2(3.0, -3.0), float2(-3.0, 3.0), float2(-3.0, -3.0)] let obstacle = GKPolygonObstacle(points: vec) expectEqual(obstacle.vertexCount, 4) } GamePlayKitTests.test("GKEntity") { @objc(MovementComponent) class MovementComponent: GKComponent { override func update(deltaTime seconds: TimeInterval) {} override func didAddToEntity() {} override func willRemoveFromEntity() {} } let comp = MovementComponent() let entity = GKEntity() entity.addComponent(comp) expectEqual(entity.components.count, 1) let grabbedComp = entity.component(ofType: MovementComponent.self) expectEqual(grabbedComp, comp) entity.removeComponent(ofType: MovementComponent.self) expectEqual(entity.components.count, 0) } } if #available(OSX 10.11, iOS 9.0, tvOS 9.0, *) { class TestComponent : GKComponent {} class OtherTestComponent : GKComponent {} class TestState1 : GKState {} class TestState2 : GKState {} GamePlayKitTests.test("GKEntity.component(ofType)") { let entity = GKEntity() entity.addComponent(TestComponent()) do { var componentForTestComponent = entity.component(ofType: TestComponent.self) var componentForOtherTestComponent_nil = entity.component(ofType: OtherTestComponent.self) expectNotNil(componentForTestComponent) expectType(Optional.self, &componentForTestComponent) expectNil(componentForOtherTestComponent_nil) } entity.removeComponent(ofType: TestComponent.self) entity.addComponent(OtherTestComponent()) do { var componentForOtherTestComponent = entity.component(ofType: OtherTestComponent.self) var componentForTestComponent_nil = entity.component(ofType: TestComponent.self) expectNotNil(componentForOtherTestComponent) expectType(Optional.self, &componentForOtherTestComponent) expectNil(componentForTestComponent_nil) } } GamePlayKitTests.test("GKStateMachine.state(forClass:)") { do { // Construct a state machine with a custom subclass as the only state. let stateMachine = GKStateMachine( states: [TestState1()]) var stateForTestState1 = stateMachine.state(forClass: TestState1.self) var stateForTestState2_nil = stateMachine.state(forClass: TestState2.self) expectNotNil(stateForTestState1) expectType(Optional.self, &stateForTestState1) expectNil(stateForTestState2_nil) } do { // Construct a state machine with a custom subclass as the only state. let stateMachine = GKStateMachine( states: [TestState2()]) var stateForTestState2 = stateMachine.state(forClass: TestState2.self) var stateForTestState1_nil = stateMachine.state(forClass: TestState1.self) expectNotNil(stateForTestState2) expectType(Optional.self, &stateForTestState2) expectNil(stateForTestState1_nil) } } } // if #available(OSX 10.11, iOS 9.0, tvOS 9.0, *) runAllTests()