< Summary

Information
Class: System.IO.Compression.PositionPreservingWriteOnlyStreamWrapper
Assembly: System.IO.Compression
File(s): D:\runner\runtime\src\libraries\System.IO.Compression\src\System\IO\Compression\PositionPreservingWriteOnlyStreamWrapper.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 57
Coverable lines: 57
Total lines: 119
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
Write(...)100%110%
Write(...)100%110%
BeginWrite(...)100%110%
EndWrite(...)100%110%
WriteByte(...)100%110%
WriteAsync(...)100%110%
WriteAsync(...)100%110%
Flush()100%110%
FlushAsync(...)100%110%
Close()100%110%
Dispose(...)0%220%
DisposeAsync()100%110%
Seek(...)100%110%
SetLength(...)100%110%
Read(...)100%110%
ReadAsync(...)100%110%
ReadAsync(...)100%110%

File(s)

D:\runner\runtime\src\libraries\System.IO.Compression\src\System\IO\Compression\PositionPreservingWriteOnlyStreamWrapper.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Threading;
 5using System.Threading.Tasks;
 6
 7namespace System.IO.Compression
 8{
 9    internal sealed class PositionPreservingWriteOnlyStreamWrapper : Stream
 10    {
 11        private readonly Stream _stream;
 12        private long _position;
 13
 14        /// <summary>
 15        /// Creates a wrapper for write-only (non-readable, non-seekable) streams that keeps track of <see cref="Positio
 16        /// </summary>
 17        /// <param name="stream">The underlying stream, which handles all actual writes.</param>
 018        public PositionPreservingWriteOnlyStreamWrapper(Stream stream)
 019        {
 020            _stream = stream;
 021        }
 22
 023        public override bool CanRead => false;
 024        public override bool CanSeek => false;
 025        public override bool CanWrite => true;
 26
 27        public override long Position
 28        {
 029            get { return _position; }
 030            set { throw new NotSupportedException(SR.NotSupported); }
 31        }
 32        public override void Write(byte[] buffer, int offset, int count)
 033        {
 034            _position += count;
 035            _stream.Write(buffer, offset, count);
 036        }
 37
 38        public override void Write(ReadOnlySpan<byte> buffer)
 039        {
 040            _position += buffer.Length;
 041            _stream.Write(buffer);
 042        }
 43
 44        public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? callback, object? s
 045        {
 046            _position += count;
 047            return _stream.BeginWrite(buffer, offset, count, callback, state);
 048        }
 49
 050        public override void EndWrite(IAsyncResult asyncResult) => _stream.EndWrite(asyncResult);
 51
 52        public override void WriteByte(byte value)
 053        {
 054            _position += 1;
 055            _stream.WriteByte(value);
 056        }
 57
 58        public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
 059        {
 060            _position += count;
 061            return _stream.WriteAsync(buffer, offset, count, cancellationToken);
 062        }
 63
 64        public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken = default(
 065        {
 066            _position += buffer.Length;
 067            return _stream.WriteAsync(buffer, cancellationToken);
 068        }
 69
 070        public override bool CanTimeout => _stream.CanTimeout;
 71        public override int ReadTimeout
 72        {
 073            get { return _stream.ReadTimeout; }
 074            set { _stream.ReadTimeout = value; }
 75        }
 76        public override int WriteTimeout
 77        {
 078            get { return _stream.WriteTimeout; }
 079            set { _stream.WriteTimeout = value; }
 80        }
 81
 082        public override void Flush() => _stream.Flush();
 083        public override Task FlushAsync(CancellationToken cancellationToken) => _stream.FlushAsync(cancellationToken);
 84
 85        public override void Close()
 086        {
 087            _stream.Close();
 088        }
 89
 90        protected override void Dispose(bool disposing)
 091        {
 092            if (disposing)
 093                _stream.Dispose();
 094        }
 95
 096        public override ValueTask DisposeAsync() => _stream.DisposeAsync();
 97
 98        public override long Length
 99        {
 0100            get { throw new NotSupportedException(SR.NotSupported); }
 101        }
 102
 103        public override long Seek(long offset, SeekOrigin origin)
 0104        {
 0105            throw new NotSupportedException(SR.NotSupported);
 106        }
 107
 108        public override void SetLength(long value)
 0109        {
 0110            throw new NotSupportedException(SR.NotSupported);
 111        }
 112
 0113        public override int Read(byte[] buffer, int offset, int count) => throw new NotSupportedException(SR.NotSupporte
 114
 0115        public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) =
 116
 0117        public override ValueTask<int> ReadAsync(Memory<byte> buffer, CancellationToken cancellationToken = default) => 
 118    }
 119}