Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }