using NUnit.Framework; using Assert = ModestTree.Assert; namespace Zenject.Tests.Bindings.Singletons { [TestFixture] public class TestAsSingle : ZenjectUnitTestFixture { [Test] public void TestAsSingleThrows() { Container.Bind().AsSingle(); Container.Bind().AsSingle(); Assert.Throws(() => Container.FlushBindings()); } [Test] public void TestAsSingleAndTransientThrows() { Container.Bind().AsSingle(); Container.Bind().AsTransient(); Assert.Throws(() => Container.FlushBindings()); } [Test] public void TestAsSingleAndResolveNoThrow() { Container.Bind().AsSingle(); Container.Bind().To().FromResolve(); Assert.IsEqual(Container.Resolve(), Container.Resolve()); } [Test] public void TestToSingleMethod1() { Container.Bind().AsSingle(); Assert.Throws(() => { Container.Bind().FromMethod(container => new Foo()).AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromInstance(new Foo()).AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromIFactory(b => b.To().AsCached()).AsSingle(); Container.FlushBindings(); }); } [Test] public void TestToSingleMethod() { Container.Bind().FromMethod(container => new Foo()).AsSingle(); Assert.Throws(() => { Container.Bind().AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromInstance(new Foo()).AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromIFactory(b => b.To().AsCached()).AsSingle(); Container.FlushBindings(); }); } [Test] public void TestToSingleInstance() { Container.Bind().FromInstance(new Foo()).AsSingle(); Assert.Throws(() => { Container.Bind().AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromMethod(container => new Foo()).AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromIFactory(b => b.To().AsCached()).AsSingle(); Container.FlushBindings(); }); } [Test] public void TestToSingleFactory() { Container.Bind().FromIFactory(b => b.To().AsCached()).AsSingle(); Assert.Throws(() => { Container.Bind().AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromMethod(container => new Foo()).AsSingle(); Container.FlushBindings(); }); Assert.Throws(() => { Container.Bind().FromInstance(new Foo()).AsSingle(); Container.FlushBindings(); }); } class Bar { public Foo GetFoo() { return new Foo(); } } interface IFoo { } class Foo : IFoo { } class FooFactory : IFactory { public Foo Create() { return new Foo(); } } } }