public void CommonCases() { var _builder = new StringParserBuilder { PreSteps = { NullableParseStep.Default, }, Steps = { EnumParseStep.Ordinal, CustomParseStep.Define <ushort>(_s => { ushort _value; return(ushort.TryParse(_s, out _value) ? ParseStep.Valid((ushort)(_value + 1)) : ParseStep.InvalidString()); }), }, PostSteps = { ConvertibleParseStep.Default, }, }; var _stringParser = _builder.Build(); Assert.Equal(true, _stringParser.Parse <bool?>("True")); Assert.Equal(false, _stringParser.Parse <bool>("False")); Assert.Equal(null, _stringParser.Parse <bool?>(null)); Assert.Equal("Test", _stringParser.Parse <string>("Test")); Assert.Equal(22, _stringParser.Parse <int>("22")); Assert.Equal('@', _stringParser.Parse <char>("@")); Assert.Equal(null, _stringParser.Parse <int?>(string.Empty)); Assert.Equal(UriKind.RelativeOrAbsolute, _stringParser.Parse <UriKind>("RelativeOrAbsolute")); Assert.Equal(UriKind.Absolute, _stringParser.Parse <UriKind?>("Absolute")); Assert.Equal(null, _stringParser.Parse <UriKind?>(string.Empty)); Assert.Equal(NumberStyles.AllowExponent | NumberStyles.AllowParentheses, _stringParser.Parse <NumberStyles?>("AllowExponent , AllowParentheses ")); Assert.Equal((ushort?)1, _stringParser.Parse <ushort?>("0")); Assert.NotEqual(null, _stringParser.Parse <UriKind?>("Absolute")); Assert.True(_stringParser.TryParse <bool?>("True").IsValid); Assert.True(_stringParser.TryParse <UriKind?>(string.Empty).IsValid); Assert.True(_stringParser.TryParse <int?>(string.Empty).IsValid); Assert.True(_stringParser.TryParse <string>("Nope!").IsValid); Assert.True(_stringParser.TryParse <char>("!").IsValid); Assert.True(_stringParser.TryParse <NumberStyles>("AllowExponent , AllowParentheses ").IsValid); Assert.False(_stringParser.TryParse <UriKind>("Absolute!").IsValid); Assert.False(_stringParser.TryParse <UriKind>(string.Empty).IsValid); Assert.False(_stringParser.TryParse <int>(string.Empty).IsValid); Assert.False(_stringParser.TryParse <int?>("Nope!").IsValid); Assert.False(_stringParser.TryParse <int>("Nope!").IsValid); Assert.False(_stringParser.TryParse <int>("Nope!").IsValid); Assert.False(_stringParser.TryParse <char>("!!").IsValid); Assert.False(_stringParser.TryParse <Type>(GetType().FullName).IsValid); Assert.False(_stringParser.TryParse <Type>("System.String").IsValid); Assert.False(_stringParser.TryParse <Type>("!!").IsValid); Assert.False(_stringParser.TryParse <object>("Test").IsValid); }