public void EnsureThatPausingStreamUpdatesBitsPerSecondToZero()
        {
            byte[] inputContent           = new byte[1024];
            bool   isMoreThanZeroReported = false;
            bool   isNotifiedZero         = false;

            using (var inputStream = new MemoryStream(inputContent))
                using (var outputStream = new MemoryStream())
                    using (var underTest = new BandwidthNotifyingStream(inputStream)) {
                        underTest.PropertyChanged += delegate(object sender, System.ComponentModel.PropertyChangedEventArgs args) {
                            if ((sender as BandwidthNotifyingStream).BitsPerSecond > 0)
                            {
                                isMoreThanZeroReported = true;
                            }
                        };
                        underTest.PropertyChanged += delegate(object sender, System.ComponentModel.PropertyChangedEventArgs args) {
                            if ((sender as BandwidthNotifyingStream).BitsPerSecond == 0)
                            {
                                isNotifiedZero = true;
                            }
                        };
                        var task = Task.Factory.StartNew(() => {
                            underTest.CopyTo(outputStream);
                            System.Threading.Thread.Sleep(4200);
                        });
                        task.Wait(2200);
                        Assert.That(isMoreThanZeroReported, Is.True);
                        task.Wait();
                        Assert.That(underTest.BitsPerSecond, Is.EqualTo(0));
                        Assert.That(isNotifiedZero, Is.True);
                    }
        }
        public void EnsureBandwidthIsReportedIfProgressIsShorterThanOneSecond()
        {
            byte[] inputContent           = new byte[1024];
            bool   isMoreThanZeroReported = false;

            using (var inputStream = new MemoryStream(inputContent))
                using (var outputStream = new MemoryStream())
                    using (var underTest = new BandwidthNotifyingStream(inputStream)) {
                        underTest.PropertyChanged += delegate(object sender, System.ComponentModel.PropertyChangedEventArgs args) {
                            if ((sender as BandwidthNotifyingStream).BitsPerSecond > 0)
                            {
                                isMoreThanZeroReported = true;
                            }
                        };
                        underTest.CopyTo(outputStream);
                        Assert.That(outputStream.Length == inputContent.Length);
                    }

            Assert.That(isMoreThanZeroReported, Is.True);
        }