public void ChangingLimitsNotifiesListener() {
using (var memory = new MemoryStream(this.buffer))
using (var underTest = new BandwidthLimitedStream(memory)) {
int readLimitNotified = 0;
int writeLimitNotified = 0;
long? expectedReadLimit = this.limit;
long? expectedWriteLimit = this.limit;
underTest.PropertyChanged += (sender, e) => {
Assert.That(sender, Is.EqualTo(underTest));
if (e.PropertyName == Utils.NameOf((BandwidthLimitedStream s) => s.ReadLimit)) {
readLimitNotified++;
Assert.That((sender as BandwidthLimitedStream).ReadLimit, Is.EqualTo(expectedReadLimit));
} else if (e.PropertyName == Utils.NameOf((BandwidthLimitedStream s) => s.WriteLimit)) {
writeLimitNotified++;
Assert.That((sender as BandwidthLimitedStream).WriteLimit, Is.EqualTo(expectedWriteLimit));
}
};
underTest.WriteLimit = expectedWriteLimit;
underTest.ReadLimit = expectedReadLimit;
Assert.That(readLimitNotified, Is.EqualTo(1));
Assert.That(writeLimitNotified, Is.EqualTo(1));
expectedReadLimit = null;
expectedWriteLimit = null;
underTest.DisableLimits();
Assert.That(readLimitNotified, Is.EqualTo(2));
Assert.That(writeLimitNotified, Is.EqualTo(2));
}
}