public void ValidateTypeMapping_UniqueMapping_DoesNotThrowException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create(), target, MappingBehaviors.None);

			// Act
			validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
		}
		public void ValidateTypeMapping_InterfaceAlreadyMappedAndIsAMultimap_DoesNotThrowException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create().AndUseMultimappingFor(typeof(IEnumerable)), target, MappingBehaviors.None);
			target.RegisterType<IEnumerable, SortedList>();

			// Act
			validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
		}
		public void ValidateTypeMapping_ConcreteMappedToOtherInterface_DoesNotThrowException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create(), target, MappingBehaviors.None);
			target.RegisterType<Object, ArrayList>();

			// Act
			validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
		}
		public void ValidateTypeMapping_InterfaceAlreadyMapped_ThrowsDuplicateMappingException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create(), target, MappingBehaviors.None);
			target.RegisterType<IEnumerable, SortedList>();

			// Act
			try
			{
				validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
			}
			catch (DuplicateMappingException ex)
			{
				Assert.AreEqual("Attempted to map at least two concrete types (System.Collections.SortedList and System.Collections.ArrayList) to the same interface (System.Collections.IEnumerable).", ex.Message);
				Assert.AreEqual(typeof(IEnumerable), ex.MappingInterface);
				Assert.AreEqual(typeof(ArrayList), ex.DuplicateMappingConcrete);
				Assert.AreEqual(typeof(SortedList), ex.MappedConcrete);
				throw;
			}
		}
		public void ValidateTypeMapping_MultimappingExistsWithSameImplicitNameForSameType_ThrowsDuplicateMappingException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create(), target, MappingBehaviors.MultimapByDefault);
			target.RegisterType<IEnumerable, SortedList>("System.Collections.ArrayList");

			// Act
			try
			{
				validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
			}
			catch (DuplicateMappingException ex)
			{
				Assert.AreEqual("Attempted to map at least two concrete types (System.Collections.SortedList and System.Collections.ArrayList) with the same name ('System.Collections.ArrayList').", ex.Message);
				Assert.AreEqual(typeof(IEnumerable), ex.MappingInterface);
				Assert.AreEqual(typeof(ArrayList), ex.DuplicateMappingConcrete);
				Assert.AreEqual(typeof(SortedList), ex.MappedConcrete);
				throw;
			}
		}
		public void ValidateTypeMapping_MappingExistsForTypeWithAnotherName_DoesNotThrowException()
		{
			var validator = new TypeMappingValidator(AutomapperConfig.Create().AndUseNamedMappingFor(typeof(ArrayList), "TEST"), target, MappingBehaviors.MultimapByDefault);
			target.RegisterType<IEnumerable, SortedList>("ANOTHER NAME");

			// Act
			validator.ValidateTypeMapping(new TypeMapping(typeof(IEnumerable), typeof(ArrayList)));
		}