using Moq; using NUnit.Framework; using Stylet; using StyletIoC; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace StyletUnitTests { [TestFixture] public class BootstrapperTests { private interface I1 { } private class C1 : I1 { } private class RootViewModel { } private class MyBootstrapper : Bootstrapper where T : class { public new IContainer Container { get { return base.Container; } set { base.Container = value; } } public new void Configure() { base.ConfigureBootstrapper(); } public bool ConfigureIoCCalled; protected override void ConfigureIoC(IStyletIoCBuilder builder) { this.ConfigureIoCCalled = true; builder.Bind().To(); base.ConfigureIoC(builder); } public new TInstance GetInstance() { return base.GetInstance(); } } private MyBootstrapper bootstrapper; [TestFixtureSetUp] public void FixtureSetUp() { Execute.TestExecuteSynchronously = true; } [SetUp] public void SetUp() { this.bootstrapper = new MyBootstrapper(); } [Test] public void ConfigureBindsRequiredTypes() { this.bootstrapper.Configure(); var ioc = this.bootstrapper.Container; Assert.IsInstanceOf(ioc.Get()); Assert.IsInstanceOf(ioc.Get()); Assert.IsInstanceOf(ioc.Get()); // Test autobinding Assert.DoesNotThrow(() => ioc.Get()); } [Test] public void ConfigureCallsConfigureIoCWithCorrectBuilder() { this.bootstrapper.Configure(); var ioc = this.bootstrapper.Container; Assert.True(this.bootstrapper.ConfigureIoCCalled); Assert.IsInstanceOf(ioc.Get()); } [Test] public void GetInstanceMappedToContainer() { var container = new Mock(); this.bootstrapper.Container = container.Object; container.Setup(x => x.Get(null)).Returns("hello").Verifiable(); var result = this.bootstrapper.GetInstance(); Assert.AreEqual("hello", result); container.Verify(); } } }