public void GetSupportedContentTypes(string actualContentType, string expectedContentType)
        {
            IApiRequestFormatMetadataProvider apiRequestFormatMetadataProvider = new CborInputFormatter(null);
            IReadOnlyList <string>            contentTypes
                = apiRequestFormatMetadataProvider.GetSupportedContentTypes(
                      actualContentType, typeof(object));

            if (string.IsNullOrEmpty(expectedContentType))
            {
                Assert.Null(contentTypes);
            }
            else
            {
                Assert.Equal(1, contentTypes.Count);
                Assert.Equal(expectedContentType, contentTypes[0]);
            }
        }
        public async Task ReadSimpleObject()
        {
            const string hexBuffer = "AE67426F6F6C65616EF56553427974650D64427974650C65496E7431360E6655496E7431360F65496E743332106655496E7433321165496E743634126655496E7436341366537472696E6766737472696E676653696E676C65FA41A1AE1466446F75626C65FB40363AE147AE147B684461746554696D6574323031342D30322D32315431393A30303A30305A64456E756D6656616C756531";

            byte[] buffer = hexBuffer.HexToBytes();

            Mock <HttpRequest> httpRequest = new Mock <HttpRequest>(MockBehavior.Strict);

            httpRequest.Setup(r => r.ContentType).Returns("application/cbor");
            httpRequest.Setup(r => r.ContentLength).Returns(buffer.Length);
            httpRequest.Setup(r => r.Body).Returns(new MemoryStream(buffer));
#if (NETCOREAPP3_0 || NETCOREAPP3_1)
            httpRequest.Setup(r => r.BodyReader).Returns(await CreatePipeReader());

            async Task <PipeReader> CreatePipeReader()
            {
                Pipe          pipe        = new Pipe();
                Memory <byte> writeBuffer = pipe.Writer.GetMemory(buffer.Length);

                buffer.CopyTo(writeBuffer);
                pipe.Writer.Advance(buffer.Length);
                await pipe.Writer.FlushAsync();

                await pipe.Writer.CompleteAsync();

                return(pipe.Reader);
            }
#endif

            Mock <HttpContext> httpContext = new Mock <HttpContext>(MockBehavior.Strict);
            httpContext.Setup(c => c.Request).Returns(httpRequest.Object);

            Mock <ModelMetadata> modelMetadata = new Mock <ModelMetadata>(
                MockBehavior.Strict,
                ModelMetadataIdentity.ForType(typeof(SimpleObject)));

            InputFormatterContext context = new InputFormatterContext(
                httpContext.Object,
                nameof(SimpleObject),
                new ModelStateDictionary(),
                modelMetadata.Object,
                (stream, encoding) => new StreamReader(stream, encoding));

            IInputFormatter inputFormatter = new CborInputFormatter(null);

            Assert.True(inputFormatter.CanRead(context));

            InputFormatterResult result = await inputFormatter.ReadAsync(context);

            Assert.False(result.HasError);
            Assert.True(result.IsModelSet);

            SimpleObject obj = (SimpleObject)result.Model;

            Assert.NotNull(obj);
            Assert.True(obj.Boolean);
            Assert.Equal(12, obj.Byte);
            Assert.Equal(13, obj.SByte);
            Assert.Equal(14, obj.Int16);
            Assert.Equal(15, obj.UInt16);
            Assert.Equal(16, obj.Int32);
            Assert.Equal(17u, obj.UInt32);
            Assert.Equal(18, obj.Int64);
            Assert.Equal(19ul, obj.UInt64);
            Assert.Equal(20.21f, obj.Single);
            Assert.Equal(22.23, obj.Double);
            Assert.Equal("string", obj.String);
            Assert.Equal(new DateTime(2014, 02, 21, 19, 0, 0, DateTimeKind.Utc), obj.DateTime);
            Assert.Equal(EnumTest.Value1, obj.Enum);
        }