106 lines
2.7 KiB
C#
106 lines
2.7 KiB
C#
using System.Collections.Generic;
|
|
using NUnit.Framework;
|
|
using Assert = ModestTree.Assert;
|
|
|
|
namespace Zenject.Tests.Other
|
|
{
|
|
[TestFixture]
|
|
public class TestGenericContract : ZenjectUnitTestFixture
|
|
{
|
|
class Test1<T>
|
|
{
|
|
public T Data;
|
|
}
|
|
|
|
class Test2
|
|
{
|
|
}
|
|
|
|
[Test]
|
|
public void TestToSingle()
|
|
{
|
|
Container.Bind(typeof(Test1<>)).AsSingle().NonLazy();
|
|
|
|
var test1 = Container.Resolve<Test1<int>>();
|
|
Assert.That(test1.Data == 0);
|
|
test1.Data = 5;
|
|
|
|
var test2 = Container.Resolve<Test1<int>>();
|
|
|
|
Assert.That(test2 == test1);
|
|
Assert.That(test1.Data == 5);
|
|
}
|
|
|
|
[Test]
|
|
public void TestToTransient()
|
|
{
|
|
Container.Bind(typeof(Test1<>)).AsTransient().NonLazy();
|
|
|
|
var test1 = Container.Resolve<Test1<int>>();
|
|
Assert.That(test1.Data == 0);
|
|
|
|
var test2 = Container.Resolve<Test1<int>>();
|
|
Assert.That(test2.Data == 0);
|
|
Assert.That(test2 != test1);
|
|
|
|
Container.Resolve<Test1<string>>();
|
|
Container.Resolve<Test1<List<int>>>();
|
|
Container.Resolve<Test1<Test2>>();
|
|
}
|
|
|
|
interface IFoo<T>
|
|
{
|
|
}
|
|
|
|
interface IBar<T>
|
|
{
|
|
}
|
|
|
|
class Test2<T> : IFoo<T>, IBar<T>
|
|
{
|
|
}
|
|
|
|
[Test]
|
|
public void TestToSingleMultipleContracts()
|
|
{
|
|
Container.Bind(typeof(IFoo<>), typeof(IBar<>)).To(typeof(Test2<>)).AsSingle();
|
|
|
|
var foo = Container.Resolve<IFoo<int>>();
|
|
Assert.That(foo is Test2<int>);
|
|
|
|
var bar = Container.Resolve<IBar<int>>();
|
|
Assert.That(bar is Test2<int>);
|
|
|
|
Assert.IsEqual(foo, bar);
|
|
Assert.IsEqual(foo, Container.Resolve<IFoo<int>>());
|
|
Assert.IsEqual(bar, Container.Resolve<IBar<int>>());
|
|
}
|
|
|
|
public interface IQux {
|
|
}
|
|
|
|
public class Qux : IQux {
|
|
}
|
|
|
|
[Test]
|
|
public void TestToSingleMultipleContractsMismatch()
|
|
{
|
|
Container.Bind(typeof(IQux), typeof(IFoo<>), typeof(IBar<>)).To(typeof(Test2<>), typeof(Qux)).AsSingle();
|
|
|
|
var foo = Container.Resolve<IFoo<int>>();
|
|
Assert.That(foo is Test2<int>);
|
|
|
|
var bar = Container.Resolve<IBar<int>>();
|
|
Assert.That(bar is Test2<int>);
|
|
|
|
Assert.IsEqual(foo, bar);
|
|
Assert.IsEqual(foo, Container.Resolve<IFoo<int>>());
|
|
Assert.IsEqual(bar, Container.Resolve<IBar<int>>());
|
|
|
|
var qux = Container.Resolve<IQux>();
|
|
|
|
Assert.IsEqual(qux, Container.Resolve<IQux>());
|
|
}
|
|
}
|
|
}
|