public void TargetType()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var expectedType = typeof (Enum);

            // Act
            var actualType = converter.TargetType;

            // Assert
            Assert.Equal(expectedType, actualType);
        }
        public void BadValueException()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var value = "10";
            var expectedExceptionMessage = "The specified value '10' is not correct the type 'System.ConsoleModifiers'.";

            // Act
            var actualException = Assert.Throws<CommandLineParserException>(() => converter.Convert(value, typeof (ConsoleModifiers)));

            // Assert
            Assert.Equal(expectedExceptionMessage, actualException.Message);
        }
        public void ParseMultipleEnumNameValue()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var value = "Assembly, Class";
            var expectedValue = AttributeTargets.Assembly | AttributeTargets.Class;

            // Act
            var actualValue = converter.Convert(value, typeof (AttributeTargets));

            // Assert
            Assert.NotNull(actualValue);
            Assert.IsType<AttributeTargets>(actualValue);
            Assert.Equal(expectedValue, (AttributeTargets) actualValue);
        }
        public void BadNameValueException()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var value = "Hello";
            var expectedExceptionMessage = Constants.ExceptionMessages.FormatConverterUnableConvert(value, typeof(Enum));
            var expectedInnerExceptionMessage = "enumType";

            // Act
            var actualException = Assert.Throws<CommandLineParserException>(() => converter.Convert(value, converter.TargetType));

            // Assert
            Assert.Equal(expectedExceptionMessage, actualException.Message);
            Assert.NotNull(actualException.InnerException);
            var actualInnerExecption = Assert.IsAssignableFrom<ArgumentException>(actualException.InnerException);
            Assert.Equal(expectedInnerExceptionMessage, actualInnerExecption.ParamName);
        }
        public void NotEnumConcreteTargetTypeException()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var value = "Hello";
            var expectedExceptionMessage = "The specified concrete target type (System.Exception) is not an enum type.";

            // Act
            var actualException = Assert.Throws<CommandLineParserException>(() => converter.Convert(value, typeof (Exception)));

            // Assert
            Assert.Equal(expectedExceptionMessage, actualException.Message);
        }
        public void NullConcreteTargetTypeException()
        {
            // Arrange
            IConverter converter = new EnumConverter();
            var value = "Hello";
            var expectedExceptionMessage = @"concreteTargetType";

            // Act
            var actualException = Assert.Throws<ArgumentNullException>(() => converter.Convert(value, null));

            // Assert
            Assert.Equal(expectedExceptionMessage, actualException.ParamName);
        }