public bool MoveNext() { if (copyManager.IsEndOfTheLine) { if (isEndOfTheLine) { return(false); } var hasAny = source.MoveNext(); if (hasAny) { copyManager.Add(source.Current); } else { isEndOfTheLine = true; source.Dispose(); } return(hasAny); } else { /* the return value must be ignored and "true" returned because the presence of * of an item will be checked on next invocation of the current method. * if there isn't any, it will attempt to read it from the source enumerable */ copyManager.MoveNext(); return(true); } }
public void IteratingOverItems__When_SourceIsNotEmpty_ShouldReturnAllItemsInTheSource(IList <string> values) { target = new WritingEnumerator <string>(values); foreach (var value in values) { target.MoveNext(); Assert.AreEqual(value, target.Current); } }
public void Current__When_SourceIsNotEmptyInitially_WhenAnItemIsAdded_TheItemMustBeTheCurrentItem( IList <string> source, IList <string> values) { target = new WritingEnumerator <string>(values); foreach (var value in values) { target.MoveNext(); Assert.AreEqual(value, target.Current); } }
public void FullEnumeration__When_SourceIsEmptyInitially_When_ItemsAreAdded__AndPositionIsReset__MustReturnEveryItem_InTheOriginalSequence( IList <string> values) { var source = new List <string>(); target = new WritingEnumerator <string>(source); foreach (var value in values) { target.Add(value); } target.ResetPosition(); foreach (var value in values) { target.MoveNext(); Assert.AreEqual(value, target.Current); } }