public void Serialiser_Can_Write_A_Simple_Nested_Hierarchy_To_A_String() { var immlDocument = new ImmlDocument(); immlDocument.Author = Guid.NewGuid().ToString(); var model = new Model(); model.Name = Guid.NewGuid().ToString(); model.Source = string.Format("http://{0}", Guid.NewGuid().ToString()); var primitive = new Primitive(); primitive.Name = Guid.NewGuid().ToString(); var camera = new Camera(); camera.Name = Guid.NewGuid().ToString(); primitive.Add(camera); model.Add(primitive); immlDocument.Add(model); var immlSerialiser = new ImmlSerialiser(); var immlString = immlSerialiser.Write(immlDocument); var textReader = new StringReader(immlString); var xDoc = XDocument.Load(textReader); //verify the model is in the correct place var xElementModel = xDoc.Descendants(XName.Get("Model", immlSerialiser.Namespace)).Where(e => e.Attribute(XName.Get("Name")).Value == model.Name).FirstOrDefault(); Assert.NotNull(xElementModel); Assert.Equal(immlDocument.Name, xElementModel.Parent.Attribute(XName.Get("Name")).Value); //verify the primitive is in the correct place var xElementPrimitive = xDoc.Descendants(XName.Get("Primitive", immlSerialiser.Namespace)).Where(e => e.Attribute(XName.Get("Name")).Value == primitive.Name).FirstOrDefault(); Assert.NotNull(xElementPrimitive); Assert.Equal(model.Name, xElementPrimitive.Parent.Attribute(XName.Get("Name")).Value); //verify the camera is in the correct place var xElementCamera = xDoc.Descendants(XName.Get("Camera", immlSerialiser.Namespace)).Where(e => e.Attribute(XName.Get("Name")).Value == camera.Name).FirstOrDefault(); Assert.NotNull(xElementCamera); Assert.Equal(primitive.Name, xElementCamera.Parent.Attribute(XName.Get("Name")).Value); }
public void Serialiser_Can_Write_A_File_With_A_Flat_Hierarchy_Of_Ten_Thousand_Elements_In_Under_Five_Seconds() { var tmpFile = Path.GetTempFileName(); try { //10k elements produces ~2mb of IMML var elementsToGenerate = 10000; var elementTypeArray = new string[] { "Primitive", "Model", "Camera" }; var random = new Random(); var immlContext = new ImmlDocument(); for (int i = 0; i < elementsToGenerate; i++) { var index = random.Next(0, elementTypeArray.Length); var typeToCreate = elementTypeArray[index]; var element = ElementFactory.Create(typeToCreate); immlContext.Add(element); } using (var fs = new FileStream(tmpFile, FileMode.Create)) { var stopWatch = new Stopwatch(); stopWatch.Start(); new ImmlSerialiser().Write(immlContext, fs); stopWatch.Stop(); Console.WriteLine(fs.Length); Assert.NotInRange(stopWatch.Elapsed.TotalSeconds, 5, int.MaxValue); } } finally { System.IO.File.Delete(tmpFile); } }