From 8d9777a9547a3d014297acb52d607402cefb4013 Mon Sep 17 00:00:00 2001 From: "Simon G." Date: Wed, 3 Dec 2025 15:01:18 +0100 Subject: [PATCH] - add all existing test cases that use current factory implementation and substitute it with generated factories --- .../AsyncFactoryTest.cs | 60 +++++ .../FluentFactoryRegistrationTest.cs | 212 ++++++++++++++++++ .../MultiLayerResolveTest.cs | 40 ++++ .../OpenGenericRegistrationTest.cs | 41 ++++ .../TestClasses/A.cs | 10 + .../TestClasses/AsyncMultitonTest.cs | 13 ++ .../TestClasses/AsyncTest.cs | 14 ++ .../TestClasses/B.cs | 10 + .../TestClasses/C.cs | 9 + .../TestClasses/Constraint.cs | 9 + .../TestClasses/CtorGenericTest.cs | 11 + .../TestClasses/DefaultTest.cs | 5 + .../TestClasses/Factories/IAFactory.cs | 10 + .../Factories/IAsyncMultitonTestFactory.cs | 8 + .../Factories/IAsyncTestFactory.cs | 8 + .../TestClasses/Factories/IBFactory.cs | 9 + .../Factories/ICtorGenericTestFactory.cs | 8 + .../Factories/IDefaultTestFactory.cs | 11 + .../Factories/IGenericTestFactory.cs | 8 + .../Factories/IInvalidMultitonTestFactory.cs | 9 + .../Factories/IMultitonTestFactory.cs | 9 + .../Factories/ITestDefaultFactory.cs | 8 + .../Factories/ITestFactoryNoCreate.cs | 3 + .../Factories/ITestFactoryWrongReturn.cs | 6 + .../TestClasses/Factories/ITestNullFactory.cs | 8 + .../TestClasses/GenericTest.cs | 5 + .../TestClasses/Interfaces/IA.cs | 6 + .../TestClasses/Interfaces/IAsyncTest.cs | 7 + .../TestClasses/Interfaces/IB.cs | 6 + .../TestClasses/Interfaces/IConstraint.cs | 3 + .../TestClasses/Interfaces/IDefaultTest.cs | 3 + .../TestClasses/Interfaces/IGenericTest.cs | 3 + .../TestClasses/MultitonScope.cs | 3 + .../TestClasses/TestByte.cs | 12 + .../TestClasses/TestConstructor.cs | 16 ++ .../TestClasses/TestMultiton.cs | 11 + .../TestClasses/TestNull.cs | 23 ++ 37 files changed, 637 insertions(+) create mode 100644 Test.LightweightIocContainer.FactoryGenerator/AsyncFactoryTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/FluentFactoryRegistrationTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/MultiLayerResolveTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/OpenGenericRegistrationTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/A.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncMultitonTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/B.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/C.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Constraint.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/CtorGenericTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/DefaultTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncMultitonTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IBFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ICtorGenericTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IDefaultTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IGenericTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IInvalidMultitonTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IMultitonTestFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestDefaultFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryNoCreate.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryWrongReturn.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestNullFactory.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/GenericTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IA.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IAsyncTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IB.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IConstraint.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IDefaultTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IGenericTest.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/MultitonScope.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestByte.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestConstructor.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestMultiton.cs create mode 100644 Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestNull.cs diff --git a/Test.LightweightIocContainer.FactoryGenerator/AsyncFactoryTest.cs b/Test.LightweightIocContainer.FactoryGenerator/AsyncFactoryTest.cs new file mode 100644 index 0000000..41347dd --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/AsyncFactoryTest.cs @@ -0,0 +1,60 @@ +// Author: Simon.Gockner +// Created: 2025-12-03 +// Copyright(c) 2025 SimonG. All Rights Reserved. + +using LightweightIocContainer; +using LightweightIocContainer.FactoryGenerator; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator; + +[TestFixture] +public class AsyncFactoryTest +{ + [Test] + public async Task TestAsyncFactoryResolve() + { + IocContainer container = new(); + container.Register(r => r.Add().WithGeneratedFactory()); + + IAsyncTestFactory testFactory = container.Resolve(); + IAsyncTest test = await testFactory.Create(); + + Assert.That(test, Is.InstanceOf()); + } + + [Test] + public async Task TestAsyncFactoryResolveOnCreateCalled() + { + IocContainer container = new(); + container.Register(r => r.Add().OnCreateAsync(t => t.Initialize()).WithGeneratedFactory()); + + IAsyncTestFactory testFactory = container.Resolve(); + IAsyncTest test = await testFactory.Create(); + + Assert.That(test, Is.InstanceOf()); + Assert.That(test.IsInitialized, Is.True); + } + + [Test] + public async Task TestAsyncMultitonFactoryResolveOnCreateCalledCorrectly() + { + IocContainer container = new(); + container.Register(r => r.AddMultiton().OnCreateAsync(t => t.Initialize()).WithGeneratedFactory()); + + IAsyncMultitonTestFactory testFactory = container.Resolve(); + IAsyncTest test1 = await testFactory.Create(1); + IAsyncTest test2 = await testFactory.Create(2); + IAsyncTest anotherTest1 = await testFactory.Create(1); + + Assert.That(test1, Is.InstanceOf()); + Assert.That(test1.IsInitialized, Is.True); + + Assert.That(test2, Is.InstanceOf()); + Assert.That(test2.IsInitialized, Is.True); + + Assert.That(test1, Is.SameAs(anotherTest1)); + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/FluentFactoryRegistrationTest.cs b/Test.LightweightIocContainer.FactoryGenerator/FluentFactoryRegistrationTest.cs new file mode 100644 index 0000000..dc702a1 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/FluentFactoryRegistrationTest.cs @@ -0,0 +1,212 @@ +// Author: Simon.Gockner +// Created: 2025-12-03 +// Copyright(c) 2025 SimonG. All Rights Reserved. + +using LightweightIocContainer; +using LightweightIocContainer.Exceptions; +using LightweightIocContainer.FactoryGenerator; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator; + +[TestFixture] +public class FluentFactoryRegistrationTest +{ + private IocContainer _iocContainer; + + [SetUp] + public void SetUp() => _iocContainer = new IocContainer(); + + [TearDown] + public void TearDown() => _iocContainer.Dispose(); + + [Test] + public void TestFluentFactoryRegistration() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + + IDefaultTestFactory factory = _iocContainer.Resolve(); + IDefaultTest test = factory.Create(); + + Assert.That(factory, Is.InstanceOf()); + Assert.That(test, Is.InstanceOf()); + } + + [Test] + public void TestFluentFactoryRegistrationResolveWithoutFactoryFails() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + Assert.Throws(()=>_iocContainer.Resolve()); + } + + [Test] + public void TestRegisterFactoryWithoutCreate() => Assert.Throws(() => _iocContainer.Register(r => r.Add().WithGeneratedFactory())); + + [Test] + public void TestResolveFromFactory() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + + IDefaultTestFactory testFactory = _iocContainer.Resolve(); + IDefaultTest createdTest = testFactory.Create(); + + Assert.That(createdTest, Is.InstanceOf()); + } + + [Test] + public void TestResolveFromFactoryWithParams() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + _iocContainer.Register(r => r.Add()); //this registration is abnormal and should only be used in unit tests + + IDefaultTestFactory testFactory = _iocContainer.Resolve(); + IDefaultTest createdTest = testFactory.Create("Test"); + + Assert.That(createdTest, Is.InstanceOf()); + } + + [Test] + public void TestResolveFromFactoryWithDefaultParamCreate() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + _iocContainer.Register(r => r.Add()); //this registration is abnormal and should only be used in unit tests + + IDefaultTestFactory testFactory = _iocContainer.Resolve(); + IDefaultTest createdTest = testFactory.CreateTest(); + + Assert.That(createdTest, Is.InstanceOf()); + } + + [Test] + public void TestResolveFromFactoryWithDefaultParamCtor() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + _iocContainer.Register(r => r.Add()); //this registration is abnormal and should only be used in unit tests + + IDefaultTestFactory testFactory = _iocContainer.Resolve(); + IDefaultTest createdTest = testFactory.Create(); + + Assert.That(createdTest, Is.InstanceOf()); + } + + [Test] + public void TestResolveFromFactoryWithByte() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + + IDefaultTestFactory testFactory = _iocContainer.Resolve(); + IDefaultTest createdTest = testFactory.Create(1); + + Assert.That(createdTest, Is.InstanceOf()); + } + + [Test] + public void TestPassingNullAsMiddleParameter() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + + ITestNullFactory testNullFactory = _iocContainer.Resolve(); + + object obj = new(); + string content = "TestContent"; + string optional2 = "optionalParameter2"; + + IDefaultTest createdTest = testNullFactory.Create(obj, content, null!, optional2); + if (createdTest is not TestNull testNull) + { + Assert.Fail(); + return; + } + + Assert.That(testNull.Obj, Is.SameAs(obj)); + Assert.That(testNull.Content, Is.EqualTo(content)); + Assert.That(testNull.Optional1, Is.Null); + Assert.That(testNull.Optional2, Is.EqualTo(optional2)); + } + + [Test] + public void TestPassingNullAsDefaultParameter() + { + _iocContainer.Register(r => r.Add().WithGeneratedFactory()); + + ITestDefaultFactory testDefaultFactory = _iocContainer.Resolve(); + + object obj = new(); + string content = "TestContent"; + string optional2 = "optionalParameter2"; + + IDefaultTest createdTest = testDefaultFactory.Create(obj, content, null!, optional2); + if (createdTest is not TestNull testNull) + { + Assert.Fail(); + return; + } + + Assert.That(testNull.Obj, Is.SameAs(obj)); + Assert.That(testNull.Content, Is.EqualTo(content)); + Assert.That(testNull.Optional1, Is.Null); + Assert.That(testNull.Optional2, Is.EqualTo(optional2)); + Assert.That(testNull.TestNullFactory, Is.Null); + } + + [Test] + public void TestResolveMultitonFromFactory() + { + _iocContainer.Register(r => r.AddMultiton().WithGeneratedFactory()); + + MultitonScope scope1 = new(); + MultitonScope scope2 = new(); + + IMultitonTestFactory testFactory = _iocContainer.Resolve(); + + IDefaultTest resolvedTest1 = testFactory.Create(scope1); + IDefaultTest resolvedTest2 = testFactory.Create(scope1); + IDefaultTest resolvedTest3 = testFactory.Create(scope2); + + Assert.That(resolvedTest1, Is.SameAs(resolvedTest2)); + Assert.That(resolvedTest1, Is.Not.SameAs(resolvedTest3)); + Assert.That(resolvedTest2, Is.Not.SameAs(resolvedTest3)); + } + + [Test] + public void TestResolveMultitonFromFactoryClearInstances() + { + _iocContainer.Register(r => r.AddMultiton().WithGeneratedFactory()); + + MultitonScope scope1 = new(); + MultitonScope scope2 = new(); + + IMultitonTestFactory testFactory = _iocContainer.Resolve(); + + IDefaultTest resolvedTest1 = testFactory.Create(scope1); + IDefaultTest resolvedTest2 = testFactory.Create(scope1); + IDefaultTest resolvedTest3 = testFactory.Create(scope2); + + Assert.That(resolvedTest1, Is.SameAs(resolvedTest2)); + Assert.That(resolvedTest1, Is.Not.SameAs(resolvedTest3)); + Assert.That(resolvedTest2, Is.Not.SameAs(resolvedTest3)); + + testFactory.ClearMultitonInstance(); + + IDefaultTest resolvedTest4 = testFactory.Create(scope1); + IDefaultTest resolvedTest5 = testFactory.Create(scope2); + + Assert.That(resolvedTest1, Is.Not.SameAs(resolvedTest4)); + Assert.That(resolvedTest2, Is.Not.SameAs(resolvedTest4)); + Assert.That(resolvedTest3, Is.Not.SameAs(resolvedTest5)); + } + + [Test] + public void InvalidMultitonFactoryRegistrationFactoryWithoutParameter() => + Assert.Throws(() => _iocContainer.Register(r => r.AddMultiton().WithGeneratedFactory())); + + [Test] + public void InvalidMultitonFactoryRegistrationFactoryWithoutScopeAsFirstParameter() => + Assert.Throws(() => _iocContainer.Register(r => r.AddMultiton().WithGeneratedFactory())); + + [Test] + public void TestInvalidCreateMethodReturnType() => + Assert.Throws(() => _iocContainer.Register(r => r.Add().WithGeneratedFactory())); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/MultiLayerResolveTest.cs b/Test.LightweightIocContainer.FactoryGenerator/MultiLayerResolveTest.cs new file mode 100644 index 0000000..ad22459 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/MultiLayerResolveTest.cs @@ -0,0 +1,40 @@ +// Author: Simon.Gockner +// Created: 2025-12-03 +// Copyright(c) 2025 SimonG. All Rights Reserved. + +using LightweightIocContainer; +using LightweightIocContainer.FactoryGenerator; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator; + +[TestFixture] +public class MultiLayerResolveTest +{ + [Test] + public void TestResolveFactoryAsCtorParameter() + { + IocContainer container = new(); + container.Register(r => r.Add().WithGeneratedFactory()); + container.Register(r => r.Add().WithGeneratedFactory()); + + IAFactory aFactory = container.Resolve(); + IA a = aFactory.Create(); + Assert.That(a, Is.InstanceOf()); + } + + [Test] + public void TestResolveSingleTypeRegistrationAsCtorParameter() + { + IocContainer container = new(); + container.Register(r => r.Add()); + container.Register(r => r.Add().WithGeneratedFactory()); + container.Register(r => r.Add().WithFactoryMethod(_ => new C("test"))); + + IBFactory bFactory = container.Resolve(); + IB b = bFactory.Create(); + Assert.That(b, Is.InstanceOf()); + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/OpenGenericRegistrationTest.cs b/Test.LightweightIocContainer.FactoryGenerator/OpenGenericRegistrationTest.cs new file mode 100644 index 0000000..0bbc68c --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/OpenGenericRegistrationTest.cs @@ -0,0 +1,41 @@ +// Author: Simon.Gockner +// Created: 2025-12-03 +// Copyright(c) 2025 SimonG. All Rights Reserved. + +using LightweightIocContainer; +using LightweightIocContainer.FactoryGenerator; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator; + +[TestFixture] +public class OpenGenericRegistrationTest +{ + private IocContainer _iocContainer; + + [SetUp] + public void SetUp() => _iocContainer = new IocContainer(); + + [TearDown] + public void TearDown() => _iocContainer.Dispose(); + + [Test] + public void TestRegisterFactoryOfOpenGenericType() + { + _iocContainer.Register(r => r.AddOpenGenerics(typeof(IGenericTest<>), typeof(GenericTest<>)).WithGeneratedFactory()); + IGenericTestFactory testFactory = _iocContainer.Resolve(); + IGenericTest test = testFactory.Create(); + Assert.That(test, Is.InstanceOf>()); + } + + [Test] + public void TestRegisterFactoryOfOpenGenericTypeWithCtorParameter() + { + _iocContainer.Register(r => r.AddOpenGenerics(typeof(IGenericTest<>), typeof(CtorGenericTest<>)).WithGeneratedFactory()); + ICtorGenericTestFactory testFactory = _iocContainer.Resolve(); + IGenericTest test = testFactory.Create(new Constraint()); + Assert.That(test, Is.InstanceOf>()); + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/A.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/A.cs new file mode 100644 index 0000000..257c818 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/A.cs @@ -0,0 +1,10 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class A : IA +{ + public A(IBFactory bFactory) => BProperty = bFactory.Create(new C("from A")); + public IB BProperty { get; } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncMultitonTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncMultitonTest.cs new file mode 100644 index 0000000..f348057 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncMultitonTest.cs @@ -0,0 +1,13 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class AsyncMultitonTest(int id) : AsyncTest +{ + public int Id { get; } = id; + public override async Task Initialize() + { + if (IsInitialized) + throw new Exception(); + + await base.Initialize(); + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncTest.cs new file mode 100644 index 0000000..db49384 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/AsyncTest.cs @@ -0,0 +1,14 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class AsyncTest : IAsyncTest +{ + public bool IsInitialized { get; private set; } + + public virtual async Task Initialize() + { + await Task.Delay(200); + IsInitialized = true; + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/B.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/B.cs new file mode 100644 index 0000000..ea3d980 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/B.cs @@ -0,0 +1,10 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class B : IB +{ + public B(C c) => C = c; + + public C C { get; } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/C.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/C.cs new file mode 100644 index 0000000..0c30db7 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/C.cs @@ -0,0 +1,9 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class C +{ + public C(string test) + { + + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Constraint.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Constraint.cs new file mode 100644 index 0000000..de12f29 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Constraint.cs @@ -0,0 +1,9 @@ +// Author: Simon.Gockner +// Created: 2025-12-03 +// Copyright(c) 2025 SimonG. All Rights Reserved. + +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class Constraint : IConstraint; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/CtorGenericTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/CtorGenericTest.cs new file mode 100644 index 0000000..53447b0 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/CtorGenericTest.cs @@ -0,0 +1,11 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class CtorGenericTest : IGenericTest where T : IConstraint, new() +{ + public CtorGenericTest(T item) + { + + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/DefaultTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/DefaultTest.cs new file mode 100644 index 0000000..8ff1e67 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/DefaultTest.cs @@ -0,0 +1,5 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class DefaultTest : IDefaultTest; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAFactory.cs new file mode 100644 index 0000000..4db3a75 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAFactory.cs @@ -0,0 +1,10 @@ +using JetBrains.Annotations; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +[UsedImplicitly] +public interface IAFactory +{ + IA Create(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncMultitonTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncMultitonTestFactory.cs new file mode 100644 index 0000000..e868964 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncMultitonTestFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IAsyncMultitonTestFactory +{ + Task Create(int id); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncTestFactory.cs new file mode 100644 index 0000000..4da09ba --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IAsyncTestFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IAsyncTestFactory +{ + Task Create(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IBFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IBFactory.cs new file mode 100644 index 0000000..893af32 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IBFactory.cs @@ -0,0 +1,9 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IBFactory +{ + IB Create(); + IB Create(C c); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ICtorGenericTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ICtorGenericTestFactory.cs new file mode 100644 index 0000000..bda8c3b --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ICtorGenericTestFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface ICtorGenericTestFactory +{ + IGenericTest Create(T item) where T : IConstraint, new(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IDefaultTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IDefaultTestFactory.cs new file mode 100644 index 0000000..9c4ccda --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IDefaultTestFactory.cs @@ -0,0 +1,11 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IDefaultTestFactory +{ + IDefaultTest Create(); + IDefaultTest Create(string name); + IDefaultTest CreateTest(string name = null!); + IDefaultTest Create(byte id); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IGenericTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IGenericTestFactory.cs new file mode 100644 index 0000000..83a9bdf --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IGenericTestFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IGenericTestFactory +{ + IGenericTest Create() where T : IConstraint, new(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IInvalidMultitonTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IInvalidMultitonTestFactory.cs new file mode 100644 index 0000000..8250ca9 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IInvalidMultitonTestFactory.cs @@ -0,0 +1,9 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IInvalidMultitonTestFactory +{ + IDefaultTest Create(MultitonScope scope); + IDefaultTest Create(int number); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IMultitonTestFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IMultitonTestFactory.cs new file mode 100644 index 0000000..9e5effa --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/IMultitonTestFactory.cs @@ -0,0 +1,9 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface IMultitonTestFactory +{ + IDefaultTest Create(MultitonScope scope); + void ClearMultitonInstance(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestDefaultFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestDefaultFactory.cs new file mode 100644 index 0000000..e88a284 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestDefaultFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface ITestDefaultFactory +{ + IDefaultTest Create(object obj, string content, string optional1, string optional2, ITestNullFactory testNullFactory = null!); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryNoCreate.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryNoCreate.cs new file mode 100644 index 0000000..3409b08 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryNoCreate.cs @@ -0,0 +1,3 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface ITestFactoryNoCreate; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryWrongReturn.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryWrongReturn.cs new file mode 100644 index 0000000..83b5315 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestFactoryWrongReturn.cs @@ -0,0 +1,6 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface ITestFactoryWrongReturn +{ + public MultitonScope Create(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestNullFactory.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestNullFactory.cs new file mode 100644 index 0000000..b3a4f80 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Factories/ITestNullFactory.cs @@ -0,0 +1,8 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; + +public interface ITestNullFactory +{ + IDefaultTest Create(object obj, string content, string optional1, string optional2); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/GenericTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/GenericTest.cs new file mode 100644 index 0000000..9265eab --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/GenericTest.cs @@ -0,0 +1,5 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class GenericTest : IGenericTest where T : IConstraint, new(); \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IA.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IA.cs new file mode 100644 index 0000000..276ecef --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IA.cs @@ -0,0 +1,6 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IA +{ + IB BProperty { get; } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IAsyncTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IAsyncTest.cs new file mode 100644 index 0000000..42af1dd --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IAsyncTest.cs @@ -0,0 +1,7 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IAsyncTest +{ + bool IsInitialized { get; } + Task Initialize(); +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IB.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IB.cs new file mode 100644 index 0000000..831f456 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IB.cs @@ -0,0 +1,6 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IB +{ + C C { get; } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IConstraint.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IConstraint.cs new file mode 100644 index 0000000..3956cae --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IConstraint.cs @@ -0,0 +1,3 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IConstraint; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IDefaultTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IDefaultTest.cs new file mode 100644 index 0000000..b65741e --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IDefaultTest.cs @@ -0,0 +1,3 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IDefaultTest; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IGenericTest.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IGenericTest.cs new file mode 100644 index 0000000..14a4006 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/Interfaces/IGenericTest.cs @@ -0,0 +1,3 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +public interface IGenericTest where T : IConstraint, new(); \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/MultitonScope.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/MultitonScope.cs new file mode 100644 index 0000000..7c3fdfe --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/MultitonScope.cs @@ -0,0 +1,3 @@ +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class MultitonScope; \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestByte.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestByte.cs new file mode 100644 index 0000000..e81e8ff --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestByte.cs @@ -0,0 +1,12 @@ +using JetBrains.Annotations; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class TestByte : IDefaultTest +{ + [UsedImplicitly] + private readonly byte _id; + + public TestByte(byte id) => _id = id; +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestConstructor.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestConstructor.cs new file mode 100644 index 0000000..db2c0e2 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestConstructor.cs @@ -0,0 +1,16 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class TestConstructor : IDefaultTest +{ + public TestConstructor(string name, DefaultTest test) + { + + } + + public TestConstructor(DefaultTest test, string name = null!) + { + + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestMultiton.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestMultiton.cs new file mode 100644 index 0000000..88ea27d --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestMultiton.cs @@ -0,0 +1,11 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class TestMultiton : IDefaultTest +{ + public TestMultiton(MultitonScope scope) + { + + } +} \ No newline at end of file diff --git a/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestNull.cs b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestNull.cs new file mode 100644 index 0000000..cf99071 --- /dev/null +++ b/Test.LightweightIocContainer.FactoryGenerator/TestClasses/TestNull.cs @@ -0,0 +1,23 @@ +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Factories; +using Test.LightweightIocContainer.FactoryGenerator.TestClasses.Interfaces; + +namespace Test.LightweightIocContainer.FactoryGenerator.TestClasses; + +public class TestNull : IDefaultTest +{ + + public TestNull(object obj, string content, string optional1, string optional2, ITestNullFactory testNullFactory) + { + Obj = obj; + Content = content; + Optional1 = optional1; + Optional2 = optional2; + TestNullFactory = testNullFactory; + } + + public object Obj { get; } + public string Content { get; } + public string Optional1 { get; } + public string Optional2 { get; } + public ITestNullFactory TestNullFactory { get; } +} \ No newline at end of file