diff --git a/src/Assets/Plugins/Uniject/impl/TestableComponent.cs b/src/Assets/Plugins/Uniject/impl/TestableComponent.cs
index 61565da..4f320f2 100644
--- a/src/Assets/Plugins/Uniject/impl/TestableComponent.cs
+++ b/src/Assets/Plugins/Uniject/impl/TestableComponent.cs
@@ -22,6 +22,9 @@ public void OnUpdate() {
}
}
+ public virtual void Start() {
+ }
+
public virtual void Update() {
}
diff --git a/src/Assets/Plugins/Uniject/impl/TestableGameObject.cs b/src/Assets/Plugins/Uniject/impl/TestableGameObject.cs
index 5c99827..b16df0e 100644
--- a/src/Assets/Plugins/Uniject/impl/TestableGameObject.cs
+++ b/src/Assets/Plugins/Uniject/impl/TestableGameObject.cs
@@ -33,6 +33,13 @@ public virtual void Destroy () {
}
}
+ public void Start() {
+ for (int t = 0; t < components.Count; t++) {
+ TestableComponent component = components[t];
+ component.Start();
+ }
+ }
+
public void Update() {
if (active) {
for (int t = 0; t < components.Count; t++) {
diff --git a/src/Assets/Plugins/Uniject/impl/UnityGameObjectBridge.cs b/src/Assets/Plugins/Uniject/impl/UnityGameObjectBridge.cs
index d849869..c4c92b2 100644
--- a/src/Assets/Plugins/Uniject/impl/UnityGameObjectBridge.cs
+++ b/src/Assets/Plugins/Uniject/impl/UnityGameObjectBridge.cs
@@ -3,6 +3,11 @@
using UnityEngine;
public class UnityGameObjectBridge : MonoBehaviour {
+
+ public void Start() {
+ wrapping.Start();
+ }
+
public void OnDestroy() {
wrapping.Destroy();
}
diff --git a/src/test/tests/src/Impl/framework/TestUpdatableManager.cs b/src/test/tests/src/Impl/framework/TestUpdatableManager.cs
index fc47bf2..50406ef 100644
--- a/src/test/tests/src/Impl/framework/TestUpdatableManager.cs
+++ b/src/test/tests/src/Impl/framework/TestUpdatableManager.cs
@@ -12,6 +12,7 @@ public void step(int numUpdates) {
foreach (TestableGameObject o in toAdd) {
objects.Add(o);
+ o.Start();
}
toAdd.Clear();
diff --git a/src/test/tests/src/Tests/TestUniject.cs b/src/test/tests/src/Tests/TestUniject.cs
index 6b57d79..168f840 100644
--- a/src/test/tests/src/Tests/TestUniject.cs
+++ b/src/test/tests/src/Tests/TestUniject.cs
@@ -55,6 +55,23 @@ public HasInjectedPrefab(TestableGameObject parent, [Resource("mesh/sphere")] Te
}
}
+ public interface IStartUpdateCallback {
+ void OnConstructor();
+ void OnStart();
+ void OnUpdate();
+ }
+
+ [GameObjectBoundary]
+ public class HasStartUpdateCallback : TestableComponent {
+ public IStartUpdateCallback callback;
+ public HasStartUpdateCallback(TestableGameObject obj, IStartUpdateCallback callback) : base(obj) {
+ this.callback = callback;
+ this.callback.OnConstructor();
+ }
+ public override void Start() { callback.OnStart(); }
+ public override void Update() { callback.OnUpdate(); }
+ }
+
///
/// Tests the testable component has its Update method called.
///
@@ -67,6 +84,32 @@ public void TestTestableComponentIsUpdated() {
Assert.AreEqual(1, component.updateCount);
}
+ ///
+ /// Tests that the testable component has its constructor called
+ /// first, its Start method second, and its Update method last.
+ ///
+ [Test]
+ public void TestTestableComponentStartFiresBeforeUpdate()
+ {
+ Mock mockCallback = new Mock();
+ mockCallback.Setup(c => c.OnConstructor()).Callback(() => {
+ mockCallback.Verify(c => c.OnStart(), Times.Never());
+ mockCallback.Verify(c => c.OnUpdate(), Times.Never());
+ });
+ mockCallback.Setup(c => c.OnStart()).Callback(() => {
+ mockCallback.Verify(c => c.OnConstructor(), Times.Once());
+ mockCallback.Verify(c => c.OnUpdate(), Times.Never());
+ });
+ mockCallback.Setup(c => c.OnUpdate()).Callback(() => {
+ mockCallback.Verify(c => c.OnConstructor(), Times.Once());
+ mockCallback.Verify(c => c.OnStart(), Times.Once());
+ });
+
+ kernel.Bind().ToMethod(context => mockCallback.Object);
+ HasStartUpdateCallback component = kernel.Get();
+ step();
+ }
+
[Test]
public void TestDestroyedObjectsNotUpdated() {
MockComponent component = kernel.Get();