< Summary

Information
Class: IceRpc.Internal.BugFixStreamPipeReaderDecorator
Assembly: IceRpc.Compressor
File(s): /home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Compressor/Internal/BugFixStreamPipeReaderDecorator.cs
Tag: 275_13775359185
Line coverage
33%
Covered lines: 8
Uncovered lines: 16
Coverable lines: 24
Total lines: 61
Line coverage: 33.3%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage
50%
Covered methods: 5
Total methods: 10
Method coverage: 50%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AdvanceTo(...)100%11100%
AdvanceTo(...)100%210%
CancelPendingRead()100%210%
Complete(...)100%11100%
CopyToAsync(...)100%210%
CopyToAsync(...)100%210%
ReadAsync()100%1.13150%
TryRead(...)100%11100%
ReadAtLeastAsyncCore()100%210%
.ctor(...)100%11100%

File(s)

/home/runner/work/icerpc-csharp/icerpc-csharp/src/IceRpc.Compressor/Internal/BugFixStreamPipeReaderDecorator.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3using System.IO.Pipelines;
 4
 5namespace IceRpc.Internal;
 6
 7/// <summary>A PipeReader decorator to workaround a bug from the System.IO.Pipelines StreamPipeReader implementation,
 8/// see https://github.com/dotnet/runtime/issues/82594.</summary>
 9internal sealed class BugFixStreamPipeReaderDecorator : PipeReader
 10{
 11    private readonly PipeReader _decoratee;
 12
 213    public override void AdvanceTo(SequencePosition consumed) => _decoratee.AdvanceTo(consumed);
 14
 15    public override void AdvanceTo(SequencePosition consumed, SequencePosition examined) =>
 016        _decoratee.AdvanceTo(consumed, examined);
 17
 018    public override void CancelPendingRead() => _decoratee.CancelPendingRead();
 19
 420    public override void Complete(Exception? exception = null) => _decoratee.Complete(exception);
 21
 22    public override Task CopyToAsync(Stream destination, CancellationToken cancellationToken) =>
 023        _decoratee.CopyToAsync(destination, cancellationToken);
 24
 25    public override Task CopyToAsync(PipeWriter writer, CancellationToken cancellationToken) =>
 026        _decoratee.CopyToAsync(writer, cancellationToken);
 27
 28    public override async ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
 429    {
 30        try
 431        {
 432            return await _decoratee.ReadAsync(cancellationToken).ConfigureAwait(false);
 33        }
 034        catch (OperationCanceledException exception) when (exception.CancellationToken != cancellationToken)
 035        {
 36            // Workaround
 037            cancellationToken.ThrowIfCancellationRequested();
 038            throw;
 39        }
 440    }
 41
 242    public override bool TryRead(out ReadResult result) => _decoratee.TryRead(out result);
 43
 44    protected override async ValueTask<ReadResult> ReadAtLeastAsyncCore(
 45        int minimumSize,
 46        CancellationToken cancellationToken)
 047    {
 48        try
 049        {
 050            return await _decoratee.ReadAtLeastAsync(minimumSize, cancellationToken).ConfigureAwait(false);
 51        }
 052        catch (OperationCanceledException exception) when (exception.CancellationToken != cancellationToken)
 053        {
 54            // Workaround
 055            cancellationToken.ThrowIfCancellationRequested();
 056            throw;
 57        }
 058    }
 59
 860    internal BugFixStreamPipeReaderDecorator(PipeReader decoratee) => _decoratee = decoratee;
 61}