public void WriteValue_IStreamProvider() { byte[] data = Encoding.UTF8.GetBytes("Hello, Worlds!!"); int getStreamCount = 0; int releaseStreamCount = 0; var provider = new DummyStreamProvider { Stream = new MemoryStream(data) }; provider.GetStreamEvent += (o, e) => { ++getStreamCount; }; provider.ReleaseStreamEvent += (o, e) => { ++releaseStreamCount; Assert.IsTrue(object.ReferenceEquals(provider.Stream, e.Stream)); }; writer.WriteValue(provider); writer.Flush(); Assert.AreEqual(1, getStreamCount); Assert.AreEqual(1, releaseStreamCount); Assert.AreEqual(data.Length, provider.Stream.Position); Assert.AreEqual(Convert.ToBase64String(data), contents.ToString()); provider.Stream.Position = 0; writer.WriteBase64Event += (o, e) => { throw new Exception("incomplete!"); }; getStreamCount = 0; releaseStreamCount = 0; Exception thrown = null; try { writer.WriteValue(provider); } catch (Exception e) { thrown = e; } Assert.IsNotNull(thrown); Assert.AreEqual(1, getStreamCount); Assert.AreEqual(0, releaseStreamCount); }
public void WriteValue_IStreamProvider () { byte[] data = Encoding.UTF8.GetBytes ("Hello, Worlds!!"); int getStreamCount = 0; int releaseStreamCount = 0; var provider = new DummyStreamProvider { Stream = new MemoryStream (data) }; provider.GetStreamEvent += (o, e) => { ++getStreamCount; }; provider.ReleaseStreamEvent += (o, e) => { ++releaseStreamCount; Assert.IsTrue (object.ReferenceEquals (provider.Stream, e.Stream)); }; writer.WriteValue (provider); writer.Flush (); Assert.AreEqual (1, getStreamCount); Assert.AreEqual (1, releaseStreamCount); Assert.AreEqual (data.Length, provider.Stream.Position); Assert.AreEqual (Convert.ToBase64String (data), contents.ToString ()); provider.Stream.Position = 0; writer.WriteBase64Event += (o, e) => { throw new Exception ("incomplete!"); }; getStreamCount = 0; releaseStreamCount = 0; Exception thrown = null; try { writer.WriteValue (provider); } catch (Exception e) { thrown = e; } Assert.IsNotNull (thrown); Assert.AreEqual (1, getStreamCount); Assert.AreEqual (0, releaseStreamCount); }