using System; using System.Collections.Generic; using NUnit.Framework; namespace Chernobyl.Creation.Collections { [TestFixture, Description("Tests for the BuilderEnumerable type.")] public class BuilderEnumerableTests : EnumerationTests> { public BuilderEnumerableTests() : base(false) {} [Test, Description("Ensures that BuilderEnumerable(IEnumerable>) " + "throws an exception when its first argument is null.")] public void ConstructorArgumentNullExceptionFirstArgument() { Assert.Throws(() => CreateBuilderEnumerable(null)); } [Test, Description("Ensures that BuilderEnumerable.Created is raised " + "when an IBuilder contained by BuilderEnumerable raises its own " + "IBuilder.Created event.")] public void CreatedRaised() { IFactory factory = new DefaultConstructorFactory(); BuilderEnumerable, int> test = CreateBuilderEnumerable(new IBuilder[] { factory }); test.Created += (sender, e) => Assert.Pass("IBuilder.Created event was raised."); factory.Create(); Assert.Fail("IBuilder.Created event was not raised."); } /// /// Creates the instances that are to be tested. This method should be /// overridden by any set of tests that are testing types derived from /// . This method must /// return a new instance every time it is called. /// /// The instances to /// be taken by the types constructor. /// The instance that is to be tested. protected virtual BuilderEnumerable, int> CreateBuilderEnumerable(IEnumerable> builders) { return new BuilderEnumerable, int>(builders); } protected override IEnumerable> CreateSingleItemEnumerable() { return CreateBuilderEnumerable( new[] { new DefaultConstructorFactory() } ); } protected override IEnumerable> CreateManyItemEnumerable() { BuilderEnumerable, int> enumerable = CreateBuilderEnumerable(new[] { new DefaultConstructorFactory(), new DefaultConstructorFactory(), new DefaultConstructorFactory(), new DefaultConstructorFactory(), new DefaultConstructorFactory() }); return enumerable; } } }