Esempio n. 1
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);
        }
Esempio n. 2
0
        /// <summary>
        /// Applies previously captured state delta to view, effectively replaying cached fragment
        /// </summary>
        /// <param name="memento">memento captured in previous begin/end calls</param>
        public void DoMemento(CacheMemento memento)
        {
            memento.SpoolOutput.WriteTo(_state.Output);

            foreach (var content in memento.Content)
            {
                // create named content if it doesn't exist
                TextWriter writer;
                if (_state.Content.TryGetValue(content.Key, out writer) == false)
                {
                    writer = new SpoolWriter();
                    _state.Content.Add(content.Key, writer);
                }

                // and in any case apply the delta
                var originator = TextWriterOriginator.Create(writer);
                originator.DoMemento(content.Value);
            }

            // add recorded once deltas that were not yet in this subject's table
            var newItems = memento.OnceTable.Where(once => _state.OnceTable.ContainsKey(once.Key) == false);

            foreach (var once in newItems)
            {
                _state.OnceTable.Add(once.Key, once.Value);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Applies previously captured state delta to view, effectively replaying cached fragment
        /// </summary>
        /// <param name="memento">memento captured in previous begin/end calls</param>
        public void DoMemento(CacheMemento memento)
        {
            memento.SpoolOutput.WriteTo(_state.Output);

            foreach (var content in memento.Content)
            {
                // create named content if it doesn't exist
                TextWriter writer;
                if (_state.Content.TryGetValue(content.Key, out writer) == false)
                {
                    writer = new SpoolWriter();
                    _state.Content.Add(content.Key, writer);
                }

                // and in any case apply the delta
                var originator = TextWriterOriginator.Create(writer);
                originator.DoMemento(content.Value);
            }

            // add recorded once deltas that were not yet in this subject's table
            var newItems = memento.OnceTable.Where(once => _state.OnceTable.ContainsKey(once.Key) == false);
            foreach (var once in newItems)
            {
                _state.OnceTable.Add(once.Key, once.Value);
            }
        }
Esempio 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);
        }
Esempio n. 5
0
 public InlineBlockOutputScope(SparkViewBase sparkView, IResourceRegistry resourceRegistry)
 {
     _sparkView        = sparkView;
     _resourceRegistry = resourceRegistry;
     _previousWriter   = sparkView.Output;
     _blockWriter      = new SpoolWriter();
     _sparkView.Output = _blockWriter;
 }
Esempio n. 6
0
 public InlineBlockOutputScope(SparkViewBase sparkView, IResourceRegistry resourceRegistry)
 {
     _sparkView = sparkView;
     _resourceRegistry = resourceRegistry;
     _previousWriter = sparkView.Output;
     _blockWriter = new SpoolWriter();
     _sparkView.Output = _blockWriter;
 }
Esempio n. 7
0
        public void ToStringCombinesResults()
        {
            TextWriter writer = new SpoolWriter();

            writer.Write("hello");
            writer.Write("world");
            Assert.AreEqual("helloworld", writer.ToString());
        }
Esempio n. 8
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());
        }
 public override void RenderView(TextWriter writer)
 {
     if (this._decorated != null)
     {
         SpoolWriter writer2 = new SpoolWriter();
         this._decorated.RenderView(writer2);
         base.Content["view"] = writer2;
     }
     base.RenderView(writer);
 }
Esempio n. 10
0
        public void MultiplePagesCombinedResult()
        {
            TextWriter writer = new SpoolWriter();

            for (int index = 0; index != 5000; ++index)
            {
                writer.Write(index);
            }
            Assert.AreEqual(_FiveThousandNumbers, writer.ToString());
        }
Esempio n. 11
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"));
        }
Esempio n. 12
0
 public IDisposable OutputScope(string name)
 {
     TextWriter writer;
     if (!_content.TryGetValue(name, out writer))
     {
         writer = new SpoolWriter();
         _content.Add(name, writer);
     }
     return new OutputScopeImpl(this, writer);
 }
Esempio n. 13
0
 public override void RenderView(System.IO.TextWriter writer)
 {
     if (_decorated != null)
     {
         var spooled = new SpoolWriter();
         _decorated.RenderView(spooled);
         Content["view"] = spooled;
     }
     base.RenderView(writer);
 }
Esempio n. 14
0
 public override void RenderView(System.IO.TextWriter writer)
 {
     if (_decorated != null)
     {
         var spooled = new SpoolWriter();
         _decorated.RenderView(spooled);
         Content["view"] = spooled;
     }
     base.RenderView(writer);
 }
Esempio n. 15
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);
        }
Esempio 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"));
        }
Esempio n. 17
0
        public IDisposable OutputScope(string name)
        {
            TextWriter writer;

            if (!Content.TryGetValue(name, out writer))
            {
                writer = new SpoolWriter();
                Content.Add(name, writer);
            }
            return(new OutputScopeImpl(this, writer));
        }
Esempio n. 18
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"));
        }
Esempio n. 19
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"));
        }
Esempio n. 20
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"));
        }
Esempio 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());
        }
Esempio n. 22
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"));
        }
Esempio n. 23
0
            public void Render(ViewContext viewContext, TextWriter writer)
            {
                // generate view in memory
                var spoolWriter = new SpoolWriter();

                _result.View.Render(viewContext, spoolWriter);

                // detect itext (or html) format of response
                XmlParser parser;

                using (var reader = GetXmlReader(spoolWriter))
                {
                    while (reader.Read() && reader.NodeType != XmlNodeType.Element)
                    {
                        // no-op
                    }

                    if (reader.NodeType == XmlNodeType.Element && reader.Name == "itext")
                    {
                        parser = new XmlParser();
                    }
                    else
                    {
                        parser = new HtmlParser();
                    }
                }

                // Create a document processing context
                var document = new Document();

                document.Open();

                // associate output with response stream
                var pdfWriter = PdfWriter.GetInstance(document, viewContext.HttpContext.Response.OutputStream);

                pdfWriter.CloseStream = false;

                // this is as close as we can get to being "success" before writing output
                // so set the content type now
                viewContext.HttpContext.Response.ContentType = "application/pdf";

                // parse memory through document into output
                using (var reader = GetXmlReader(spoolWriter))
                {
                    parser.Go(document, reader);
                }

                pdfWriter.Close();
            }
Esempio n. 24
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));
        }
 public void BeginMemento()
 {
     foreach (KeyValuePair <string, TextWriter> pair in this._state.Content)
     {
         TextWriterOriginator originator = TextWriterOriginator.Create(pair.Value);
         this._priorContent.Add(pair.Key, originator);
         originator.BeginMemento();
     }
     this._priorOnceTable = this._state.OnceTable.ToDictionary <KeyValuePair <string, string>, string, string>(kv => kv.Key, kv => kv.Value);
     if (!this._state.Content.Any <KeyValuePair <string, TextWriter> >(kv => object.ReferenceEquals(kv.Value, this._state.Output)))
     {
         this._priorOutput  = this._state.Output;
         this._spoolOutput  = new SpoolWriter();
         this._state.Output = this._spoolOutput;
     }
 }
Esempio n. 26
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));
        }
Esempio n. 27
0
        /// <summary>
        /// Establishes original state for memento capturing purposes
        /// </summary>
        public void BeginMemento()
        {
            foreach (var content in _state.Content)
            {
                var writerOriginator = TextWriterOriginator.Create(content.Value);
                _priorContent.Add(content.Key, writerOriginator);
                writerOriginator.BeginMemento();
            }

            _priorOnceTable = _state.OnceTable.ToDictionary(kv => kv.Key, kv => kv.Value);

            // capture current output also if it's not locked into a named output at the moment
            // this could be a case in view's output, direct to network, or various macro or content captures
            if (_state.Content.Any(kv => ReferenceEquals(kv.Value, _state.Output)) == false)
            {
                _priorOutput  = _state.Output;
                _spoolOutput  = new SpoolWriter();
                _state.Output = _spoolOutput;
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Establishes original state for memento capturing purposes
        /// </summary>
        public void BeginMemento()
        {
            foreach (var content in _state.Content)
            {
                var writerOriginator = TextWriterOriginator.Create(content.Value);
                _priorContent.Add(content.Key, writerOriginator);
                writerOriginator.BeginMemento();
            }

            _priorOnceTable = _state.OnceTable.ToDictionary(kv => kv.Key, kv => kv.Value);

            // capture current output also if it's not locked into a named output at the moment
            // this could be a case in view's output, direct to network, or various macro or content captures
            if (_state.Content.Any(kv => ReferenceEquals(kv.Value, _state.Output)) == false)
            {
                _priorOutput = _state.Output;
                _spoolOutput = new SpoolWriter();
                _state.Output = _spoolOutput;
            }
        }
 public void DoMemento(CacheMemento memento)
 {
     memento.SpoolOutput.WriteTo(this._state.Output);
     foreach (KeyValuePair <string, TextWriterMemento> pair in memento.Content)
     {
         TextWriter writer;
         if (!this._state.Content.TryGetValue(pair.Key, out writer))
         {
             writer = new SpoolWriter();
             this._state.Content.Add(pair.Key, writer);
         }
         TextWriterOriginator.Create(writer).DoMemento(pair.Value);
     }
     foreach (KeyValuePair <string, string> pair2 in from once in memento.OnceTable
              where !this._state.OnceTable.ContainsKey(once.Key)
              select once)
     {
         this._state.OnceTable.Add(pair2.Key, pair2.Value);
     }
 }
Esempio n. 30
0
            public void Render(ViewContext viewContext, TextWriter writer)
            {
                // generate view in memory
                var spoolWriter = new SpoolWriter();
                _result.View.Render(viewContext, spoolWriter);

                // detect itext (or html) format of response
                XmlParser parser;
                using (var reader = GetXmlReader(spoolWriter))
                {
                    while (reader.Read() && reader.NodeType != XmlNodeType.Element)
                    {
                        // no-op
                    }

                    if (reader.NodeType == XmlNodeType.Element && reader.Name == "itext")
                        parser = new XmlParser();
                    else
                        parser = new HtmlParser();
                }

                // Create a document processing context
                var document = new Document();
                document.Open();

                // associate output with response stream
                var pdfWriter = PdfWriter.GetInstance(document, viewContext.HttpContext.Response.OutputStream);
                pdfWriter.CloseStream = false;

                // this is as close as we can get to being "success" before writing output
                // so set the content type now
                viewContext.HttpContext.Response.ContentType = "application/pdf";

                // parse memory through document into output
                using (var reader = GetXmlReader(spoolWriter))
                {
                    parser.Go(document, reader);
                }

                pdfWriter.Close();
            }
Esempio n. 31
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"));
        }
        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"));
        }
Esempio n. 33
0
 public void MultiplePagesCombinedResult()
 {
     TextWriter writer = new SpoolWriter();
     for (int index = 0; index != 5000; ++index)
     {
         writer.Write(index);
     }
     Assert.AreEqual(_FiveThousandNumbers, writer.ToString());
 }
Esempio n. 34
0
        public void EncodingShouldBeUtf8ByDefault()
        {
            var writer = new SpoolWriter();

            Assert.AreEqual(65001, writer.Encoding.CodePage);
        }
Esempio n. 35
0
 public SpoolWriterOriginator(SpoolWriter writer)
 {
     _writer = writer;
 }
Esempio n. 36
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);
        }
Esempio n. 37
0
 public void EncodingShouldBeUtf8ByDefault()
 {
     var writer = new SpoolWriter();
     Assert.AreEqual(65001, writer.Encoding.CodePage);
 }
Esempio n. 38
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());
 }
Esempio n. 39
0
 public void ToStringCombinesResults()
 {
     TextWriter writer = new SpoolWriter();
     writer.Write("hello");
     writer.Write("world");
     Assert.AreEqual("helloworld", writer.ToString());
 }
Esempio n. 40
0
 public SpoolWriterOriginator(SpoolWriter writer)
 {
     _writer = writer;
 }
Esempio n. 41
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());
 }