using System;
using System.Collections.Generic;
using System.IO;
#if UNITTEST
using NUnit.Framework;
namespace Nuclex.Support.Serialization {
  /// Ensures that the binary serializer is working correctly
  [TestFixture]
  public class BinarySerializerTest {
    private class TestSerializable : IBinarySerializable {
      public void Load(BinaryReader reader) { this.Dummy = reader.ReadInt32(); }
      public void Save(BinaryWriter writer) { writer.Write(this.Dummy); }
      public int Dummy;
    }
    /// Prepares some test data for the unit test methods
    [TestFixtureSetUp]
    public void Setup() {
    }
    /// 
    ///   Tests wether a simple collection can be successfully saved and loaded again
    /// 
    [Test]
    public void TestSimpleCollection() {
      MemoryStream buffer = new MemoryStream();
      // Fill and save
      {
        List serializables = new List();
        
        serializables.Add(new TestSerializable());
        serializables.Add(new TestSerializable());
        serializables[0].Dummy = 123;
        serializables[1].Dummy = 456;
        BinarySerializer.Save(new BinaryWriter(buffer), serializables);
        buffer.Position = 0;
      }
      // Load and validate
      {
        List serializables = new List();
        BinarySerializer.Load(new BinaryReader(buffer), serializables);
        
        Assert.AreEqual(2, serializables.Count);
        Assert.AreEqual(123, serializables[0].Dummy);
        Assert.AreEqual(456, serializables[1].Dummy);
      }
    }
    
  }
} // namespace Nuclex.Support.Serialization
#endif // UNITTEST