public void AssertIsValidDiscovererType_throws_nothing_when_type_and_arguments_match_ITypeDiscoverer(Type type, object[] args)
        {
            var discovererTypeInfo = new TypeDiscovererInfo
            {
                DiscovererType          = type,
                DiscovererArgumentTypes = args.Select(x => x.GetType()).ToArray(),
                DiscovererArguments     = args
            };

            Assert.That(
                () => TypeDiscovererTypeValidator.AssertIsValidDiscovererType(discovererTypeInfo),
                Throws.Nothing);
        }
        public void AssertIsValidDiscovererType_throws_ArgumentOutOfRangeException_when_provided_type_is_not_an_ITypeDiscoverer(Type type)
        {
            var discovererTypeInfo = new TypeDiscovererInfo
            {
                DiscovererType          = type,
                DiscovererArgumentTypes = new Type[] {},
                DiscovererArguments     = new object[] {}
            };

            Assert.That(
                () => TypeDiscovererTypeValidator.AssertIsValidDiscovererType(discovererTypeInfo),
                Throws.Exception.TypeOf <ArgumentOutOfRangeException>()
                .With.Message.Match("must be of type ITypeDiscoverer")
                );
        }
        public void AssertIsValidDiscovererType_throws_ArgumentNullException_when_provided_discoverer_type_is_null()
        {
            var discovererTypeInfo = new TypeDiscovererInfo
            {
                DiscovererType          = null,
                DiscovererArgumentTypes = new Type[] {},
                DiscovererArguments     = new object[] {}
            };

            Assert.That(
                () => TypeDiscovererTypeValidator.AssertIsValidDiscovererType(discovererTypeInfo),
                Throws.ArgumentNullException
                .With.Message.Match("specified as ITypeDiscoverer .* cannot be null")
                );
        }
        public void AssertIsValidDiscovererType_throws_ArgumentOutOfRangeException_when_no_matching_noargs_ctor_is_found(Type type, object[] args)
        {
            var discovererTypeInfo = new TypeDiscovererInfo
            {
                DiscovererType          = type,
                DiscovererArgumentTypes = args.Select(x => x.GetType()).ToArray(),
                DiscovererArguments     = args
            };

            Assert.That(
                () => TypeDiscovererTypeValidator.AssertIsValidDiscovererType(discovererTypeInfo),
                Throws.Exception.TypeOf <ArgumentOutOfRangeException>()
                .With.Message.Match(
                    Regex.Escape($"{type.FullName}") + ".* must have a constructor which corresponds" +
                    " to the argument types which were provided"
                    )
                );
        }