Ejemplo n.º 1
0
        public void AppendingOwnsBuffer()
        {
            var countBefore = _cache.Count;

            TextWriter writer1 = new SpoolWriter();

            writer1.Write("hello");

            TextWriter writer2 = new SpoolWriter();

            writer2.Write("before");
            writer2.Write(writer1);
            writer2.Write("after");

            writer1.Write("world");

            Assert.AreEqual("helloworld", writer1.ToString());
            Assert.AreEqual("beforehelloafter", writer2.ToString());

            var _first       = typeof(SpoolWriter).GetField("_first", BindingFlags.NonPublic | BindingFlags.Instance);
            var _readonly    = typeof(SpoolPage).GetField("_readonly", BindingFlags.NonPublic | BindingFlags.Instance);
            var _nonreusable = typeof(SpoolPage).GetField("_nonreusable", BindingFlags.NonPublic | BindingFlags.Instance);

            var pages1 = (SpoolPage)_first.GetValue(writer1);
            var pages2 = (SpoolPage)_first.GetValue(writer2);

            Assert.IsTrue((bool)_readonly.GetValue(pages1));
            Assert.IsTrue((bool)_nonreusable.GetValue(pages1));

            Assert.IsFalse((bool)_readonly.GetValue(pages1.Next));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages1.Next));
            Assert.IsNull(pages1.Next.Next);


            Assert.IsTrue((bool)_readonly.GetValue(pages2));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages2));

            Assert.IsTrue((bool)_readonly.GetValue(pages2.Next));
            Assert.IsTrue((bool)_nonreusable.GetValue(pages2.Next));

            Assert.IsFalse((bool)_readonly.GetValue(pages2.Next.Next));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages2.Next.Next));

            Assert.IsNull(pages2.Next.Next.Next);

            var countBeforeCollect = _cache.Count;

            // ReSharper disable RedundantAssignment
            writer1 = null;
            writer2 = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            GC.WaitForPendingFinalizers();
            var countAfterCollect = _cache.Count;

            Assert.AreEqual(0, countBefore);
            Assert.AreEqual(0, countBeforeCollect);
            Assert.AreEqual(3, countAfterCollect);
        }
Ejemplo n.º 2
0
        public void ToStringCombinesResults()
        {
            TextWriter writer = new SpoolWriter();

            writer.Write("hello");
            writer.Write("world");
            Assert.AreEqual("helloworld", writer.ToString());
        }
Ejemplo n.º 3
0
        public void WritingCharacters()
        {
            TextWriter writer = new SpoolWriter();

            writer.Write('a');
            writer.Write(new[] { 'b', 'c', 'd' });
            writer.Write(new[] { 'x', 'e', 'f', 'g', 'x' }, 1, 3);
            Assert.AreEqual("abcdefg", writer.ToString());
        }
Ejemplo n.º 4
0
        public void AppendingOwnsBuffer()
        {
            var countBefore = _cache.Count;

            TextWriter writer1 = new SpoolWriter();
            writer1.Write("hello");

            TextWriter writer2 = new SpoolWriter();
            writer2.Write("before");
            writer2.Write(writer1);
            writer2.Write("after");

            writer1.Write("world");

            Assert.AreEqual("helloworld", writer1.ToString());
            Assert.AreEqual("beforehelloafter", writer2.ToString());

            var _first = typeof(SpoolWriter).GetField("_first", BindingFlags.NonPublic | BindingFlags.Instance);
            var _readonly = typeof(SpoolPage).GetField("_readonly", BindingFlags.NonPublic | BindingFlags.Instance);
            var _nonreusable = typeof(SpoolPage).GetField("_nonreusable", BindingFlags.NonPublic | BindingFlags.Instance);

            var pages1 = (SpoolPage)_first.GetValue(writer1);
            var pages2 = (SpoolPage)_first.GetValue(writer2);

            Assert.IsTrue((bool)_readonly.GetValue(pages1));
            Assert.IsTrue((bool)_nonreusable.GetValue(pages1));

            Assert.IsFalse((bool)_readonly.GetValue(pages1.Next));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages1.Next));
            Assert.IsNull(pages1.Next.Next);

            Assert.IsTrue((bool)_readonly.GetValue(pages2));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages2));

            Assert.IsTrue((bool)_readonly.GetValue(pages2.Next));
            Assert.IsTrue((bool)_nonreusable.GetValue(pages2.Next));

            Assert.IsFalse((bool)_readonly.GetValue(pages2.Next.Next));
            Assert.IsFalse((bool)_nonreusable.GetValue(pages2.Next.Next));

            Assert.IsNull(pages2.Next.Next.Next);

            var countBeforeCollect = _cache.Count;
            // ReSharper disable RedundantAssignment
            writer1 = null;
            writer2 = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            GC.WaitForPendingFinalizers();
            var countAfterCollect = _cache.Count;

            Assert.AreEqual(0, countBefore);
            Assert.AreEqual(0, countBeforeCollect);
            Assert.AreEqual(3, countAfterCollect);
        }
Ejemplo n.º 5
0
        public void Empty_and_null_writes_are_acceptable()
        {
            var writer = new SpoolWriter();
            writer.Write("a");
            writer.Write("");
            writer.Write((string)null);
            writer.Write("b");

            var reader = new SpoolReader(writer);
            var content = reader.ReadToEnd();
            Assert.That(content, Is.EqualTo("ab"));
        }
Ejemplo n.º 6
0
        public void Multiple_writes_are_combined()
        {
            var writer = new SpoolWriter();
            writer.Write("Hello");
            writer.Write(' ');
            writer.Write("World");

            var reader = new SpoolReader(writer);
            var content = reader.ReadToEnd();

            Assert.That(content, Is.EqualTo("Hello World"));
        }
Ejemplo n.º 7
0
        public void Multiple_writes_are_combined()
        {
            var writer = new SpoolWriter();

            writer.Write("Hello");
            writer.Write(' ');
            writer.Write("World");

            var reader  = new SpoolReader(writer);
            var content = reader.ReadToEnd();

            Assert.That(content, Is.EqualTo("Hello World"));
        }
Ejemplo n.º 8
0
        public void StringWriterToSpoolWriter()
        {
            TextWriter writer1 = new StringWriter();
            TextWriter writer2 = new SpoolWriter();

            for (int index = 0; index != 5000; ++index)
            {
                writer1.Write(index);
            }
            writer2.Write("before");
            writer1.WriteTo(writer2);
            writer2.Write("after");
            Assert.AreEqual("before" + _FiveThousandNumbers + "after", writer2.ToString());
        }
Ejemplo n.º 9
0
        public void Empty_and_null_writes_are_acceptable()
        {
            var writer = new SpoolWriter();

            writer.Write("a");
            writer.Write("");
            writer.Write((string)null);
            writer.Write("b");

            var reader  = new SpoolReader(writer);
            var content = reader.ReadToEnd();

            Assert.That(content, Is.EqualTo("ab"));
        }
Ejemplo n.º 10
0
        public void Peek_and_read_return_characters_and_advance_appropriately()
        {
            var writer = new SpoolWriter();
            writer.Write("ab");
            writer.Write("c");

            var reader = new SpoolReader(writer);
            Assert.That(reader.Peek(), Is.EqualTo((int)'a'));
            Assert.That(reader.Read(), Is.EqualTo((int)'a'));
            Assert.That(reader.Peek(), Is.EqualTo((int)'b'));
            Assert.That(reader.Read(), Is.EqualTo((int)'b'));
            Assert.That(reader.Peek(), Is.EqualTo((int)'c'));
            Assert.That(reader.Read(), Is.EqualTo((int)'c'));
            Assert.That(reader.Peek(), Is.EqualTo(-1));
            Assert.That(reader.Read(), Is.EqualTo(-1));
        }
Ejemplo n.º 11
0
 public override void DoMemento(TextWriterMemento memento)
 {
     foreach (var written in memento.Written)
     {
         _writer.Write(written);
     }
 }
Ejemplo n.º 12
0
        public void DisposingWriter()
        {
            var countBefore = _cache.Count;

            using (TextWriter writer = new SpoolWriter())
            {
                writer.Write("sending to the pool");
            }
            var countBetween = _cache.Count;

            using (TextWriter writer = new SpoolWriter())
            {
                writer.Write("taking and returning to pool");
            }

            // force GC to ensure finalize doesn't push buffers into allocator again
            GC.Collect();
            GC.WaitForPendingFinalizers();

            var countAfter = _cache.Count;

            Assert.AreEqual(0, countBefore);
            Assert.AreEqual(1, countBetween);
            Assert.AreEqual(1, countAfter);
        }
Ejemplo n.º 13
0
        public void Peek_and_read_return_characters_and_advance_appropriately()
        {
            var writer = new SpoolWriter();

            writer.Write("ab");
            writer.Write("c");

            var reader = new SpoolReader(writer);

            Assert.That(reader.Peek(), Is.EqualTo((int)'a'));
            Assert.That(reader.Read(), Is.EqualTo((int)'a'));
            Assert.That(reader.Peek(), Is.EqualTo((int)'b'));
            Assert.That(reader.Read(), Is.EqualTo((int)'b'));
            Assert.That(reader.Peek(), Is.EqualTo((int)'c'));
            Assert.That(reader.Read(), Is.EqualTo((int)'c'));
            Assert.That(reader.Peek(), Is.EqualTo(-1));
            Assert.That(reader.Read(), Is.EqualTo(-1));
        }
Ejemplo n.º 14
0
        public void StringReader_should_return_written_data()
        {
            var writer = new SpoolWriter();
            writer.Write("Hello world");

            var reader = new SpoolReader(writer);
            var content = reader.ReadToEnd();

            Assert.That(content, Is.EqualTo("Hello world"));
        }
Ejemplo n.º 15
0
        public void MultiplePagesCombinedResult()
        {
            TextWriter writer = new SpoolWriter();

            for (int index = 0; index != 5000; ++index)
            {
                writer.Write(index);
            }
            Assert.AreEqual(_FiveThousandNumbers, writer.ToString());
        }
Ejemplo n.º 16
0
        public void StringReader_should_return_written_data()
        {
            var writer = new SpoolWriter();

            writer.Write("Hello world");

            var reader  = new SpoolReader(writer);
            var content = reader.ReadToEnd();

            Assert.That(content, Is.EqualTo("Hello world"));
        }
Ejemplo n.º 17
0
        public void SpoolWriterOriginatorBuildsMementoWithChanges()
        {
            var writer = new SpoolWriter();
            var originator = TextWriterOriginator.Create(writer);

            writer.Write("Alpha");
            originator.BeginMemento();
            writer.Write("B");
            writer.Write("e");
            writer.Write("t");
            writer.Write("a");
            var memento = originator.EndMemento();
            writer.Write("Gamma");

            var writer2 = new SpoolWriter();
            writer2.Write("Delta");
            TextWriterOriginator.Create(writer2).DoMemento(memento);
            writer2.Write("Epsilon");

            Assert.That(writer.ToString(), Is.EqualTo("AlphaBetaGamma"));
            Assert.That(writer2.ToString(), Is.EqualTo("DeltaBetaEpsilon"));
        }
Ejemplo n.º 18
0
        public void SpoolWriterOriginatorBuildsMementoWithChanges()
        {
            var writer     = new SpoolWriter();
            var originator = TextWriterOriginator.Create(writer);

            writer.Write("Alpha");
            originator.BeginMemento();
            writer.Write("B");
            writer.Write("e");
            writer.Write("t");
            writer.Write("a");
            var memento = originator.EndMemento();

            writer.Write("Gamma");

            var writer2 = new SpoolWriter();

            writer2.Write("Delta");
            TextWriterOriginator.Create(writer2).DoMemento(memento);
            writer2.Write("Epsilon");

            Assert.That(writer.ToString(), Is.EqualTo("AlphaBetaGamma"));
            Assert.That(writer2.ToString(), Is.EqualTo("DeltaBetaEpsilon"));
        }
Ejemplo n.º 19
0
 public void WritingCharacters()
 {
     TextWriter writer = new SpoolWriter();
     writer.Write('a');
     writer.Write(new[] { 'b', 'c', 'd' });
     writer.Write(new[] { 'x', 'e', 'f', 'g', 'x' }, 1, 3);
     Assert.AreEqual("abcdefg", writer.ToString());
 }
Ejemplo n.º 20
0
 public void ToStringCombinesResults()
 {
     TextWriter writer = new SpoolWriter();
     writer.Write("hello");
     writer.Write("world");
     Assert.AreEqual("helloworld", writer.ToString());
 }
Ejemplo n.º 21
0
 public void StringWriterToSpoolWriter()
 {
     TextWriter writer1 = new StringWriter();
     TextWriter writer2 = new SpoolWriter();
     for (int index = 0; index != 5000; ++index)
     {
         writer1.Write(index);
     }
     writer2.Write("before");
     writer1.WriteTo(writer2);
     writer2.Write("after");
     Assert.AreEqual("before" + _FiveThousandNumbers + "after", writer2.ToString());
 }
Ejemplo n.º 22
0
 public void MultiplePagesCombinedResult()
 {
     TextWriter writer = new SpoolWriter();
     for (int index = 0; index != 5000; ++index)
     {
         writer.Write(index);
     }
     Assert.AreEqual(_FiveThousandNumbers, writer.ToString());
 }
Ejemplo n.º 23
0
        public void DisposingWriter()
        {
            var countBefore = _cache.Count;
            using (TextWriter writer = new SpoolWriter())
            {
                writer.Write("sending to the pool");
            }
            var countBetween = _cache.Count;
            using (TextWriter writer = new SpoolWriter())
            {
                writer.Write("taking and returning to pool");
            }

            // force GC to ensure finalize doesn't push buffers into allocator again
            GC.Collect();
            GC.WaitForPendingFinalizers();

            var countAfter = _cache.Count;

            Assert.AreEqual(0, countBefore);
            Assert.AreEqual(1, countBetween);
            Assert.AreEqual(1, countAfter);
        }