public void TestGraphWithEnumNode()
        {
            Node rootNode = new Node(1);
            Node intNode = new Node(42);
            Node enumNode = new Node(TestEnum.Two);

            rootNode.Nodes.Add(intNode);
            rootNode.Nodes.Add(enumNode);

            intNode.Nodes.Add(rootNode);

            Graph g = new Graph(rootNode);

            XmlSerializer s = new XmlSerializer();
            string result = s.Serialize(g);

            XmlDeserializer d = new XmlDeserializer();
            Graph newGraph = d.Deserialize<Graph>(result);

            Assert.IsNotNull(newGraph);
            Assert.AreEqual(g.Root.Data, newGraph.Root.Data);
            Assert.AreEqual(g.Root.Nodes[0].Data, newGraph.Root.Nodes[0].Data);
            Assert.AreEqual(g.Root.Nodes[1].Data, newGraph.Root.Nodes[1].Data);
            Assert.AreEqual(g.Root.Nodes[0].Nodes[0].Data, newGraph.Root.Nodes[0].Nodes[0].Data);
            Assert.AreSame(newGraph.Root, newGraph.Root.Nodes[0].Nodes[0]);
        }
        /// <summary>
        /// Saves the layout to the specified fileName
        /// </summary>
        /// <param name="fileName"></param>
        public void SaveLayout(string fileName)
        {
            //Creates the model xml document
            XmlDocument layoutXmlDoc = new XmlDocument();
            XmlElement root = layoutXmlDoc.CreateElement("DotSpatialLayout");
            layoutXmlDoc.AppendChild(root);

            //Creates a serializer to handle the backgrounds
            XmlSerializer backSerializer = new XmlSerializer();

            //Saves the printer paper settings
            XmlElement paperElement = layoutXmlDoc.CreateElement("Paper");
            paperElement.SetAttribute("Name", _printerSettings.DefaultPageSettings.PaperSize.PaperName);
            paperElement.SetAttribute("Landscape", TypeDescriptor.GetConverter(typeof(bool)).ConvertToInvariantString(_printerSettings.DefaultPageSettings.Landscape));
            paperElement.SetAttribute("Margins", TypeDescriptor.GetConverter(typeof(Margins)).ConvertToInvariantString(_printerSettings.DefaultPageSettings.Margins));
            root.AppendChild(paperElement);

            //Saves the Tools and their output configuration to the model
            foreach (LayoutElement le in _layoutElements)
            {
                XmlElement element = layoutXmlDoc.CreateElement("Element");
                element.SetAttribute("Name", le.Name);
                if (le is LayoutBitmap)
                {
                    LayoutBitmap lb = le as LayoutBitmap;
                    XmlElement bitmap = layoutXmlDoc.CreateElement("Bitmap");
                    bitmap.SetAttribute("Filename", lb.Filename);
                    bitmap.SetAttribute("PreserveAspectRatio", lb.PreserveAspectRatio.ToString());
                    bitmap.SetAttribute("Draft", lb.Draft.ToString());
                    bitmap.SetAttribute("Brightness", TypeDescriptor.GetConverter(typeof(int)).ConvertToInvariantString(lb.Brightness));
                    bitmap.SetAttribute("Contrast", TypeDescriptor.GetConverter(typeof(int)).ConvertToInvariantString(lb.Contrast));
                    element.AppendChild(bitmap);
                }
                else if (le is LayoutLegend)
                {
                    LayoutLegend ll = le as LayoutLegend;
                    XmlElement legend = layoutXmlDoc.CreateElement("Legend");
                    legend.SetAttribute("TextHint", ll.TextHint.ToString());
                    legend.SetAttribute("Color", TypeDescriptor.GetConverter(typeof(Color)).ConvertToInvariantString(ll.Color));
                    legend.SetAttribute("Font", TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(ll.Font));
                    legend.SetAttribute("Map", _layoutElements.IndexOf(ll.Map).ToString());
                    string layerString = string.Empty;
                    foreach (int i in ll.Layers)
                        layerString = layerString + TypeDescriptor.GetConverter(typeof(int)).ConvertToInvariantString(i) + "|";
                    legend.SetAttribute("Layers", layerString);
                    legend.SetAttribute("NumColumns", TypeDescriptor.GetConverter(typeof(int)).ConvertToInvariantString(ll.NumColumns));
                    element.AppendChild(legend);
                }
                else if (le is LayoutMap)
                {
                    LayoutMap lm = le as LayoutMap;
                    XmlElement map = layoutXmlDoc.CreateElement("Map");
                    map.SetAttribute("EnvelopeXmin", TypeDescriptor.GetConverter(typeof(double)).ConvertToInvariantString(lm.Envelope.Minimum.X));
                    map.SetAttribute("EnvelopeYmin", TypeDescriptor.GetConverter(typeof(double)).ConvertToInvariantString(lm.Envelope.Minimum.Y));
                    map.SetAttribute("EnvelopeXmax", TypeDescriptor.GetConverter(typeof(double)).ConvertToInvariantString(lm.Envelope.Maximum.X));
                    map.SetAttribute("EnvelopeYmax", TypeDescriptor.GetConverter(typeof(double)).ConvertToInvariantString(lm.Envelope.Maximum.Y));
                    element.AppendChild(map);
                }
                else if (le is LayoutNorthArrow)
                {
                    LayoutNorthArrow na = le as LayoutNorthArrow;
                    XmlElement northArrow = layoutXmlDoc.CreateElement("NorthArrow");
                    northArrow.SetAttribute("Color", TypeDescriptor.GetConverter(typeof(Color)).ConvertToInvariantString(na.Color));
                    northArrow.SetAttribute("Style", na.NorthArrowStyle.ToString());
                    northArrow.SetAttribute("Rotation", TypeDescriptor.GetConverter(typeof(float)).ConvertToInvariantString(na.Rotation));
                    element.AppendChild(northArrow);
                }
                else if (le is LayoutRectangle)
                {
                    // is this missing a few SetAttribute commands?
                    //LayoutRectangle lr = le as LayoutRectangle;
                    XmlElement rectangle = layoutXmlDoc.CreateElement("Rectangle");
                    element.AppendChild(rectangle);
                }
                else if (le is LayoutScaleBar)
                {
                    LayoutScaleBar lsc = le as LayoutScaleBar;
                    XmlElement scaleBar = layoutXmlDoc.CreateElement("ScaleBar");
                    scaleBar.SetAttribute("TextHint", lsc.TextHint.ToString());
                    scaleBar.SetAttribute("Color", TypeDescriptor.GetConverter(typeof(Color)).ConvertToInvariantString(lsc.Color));
                    scaleBar.SetAttribute("Font", TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(lsc.Font));
                    scaleBar.SetAttribute("BreakBeforeZero", lsc.BreakBeforeZero.ToString());
                    scaleBar.SetAttribute("NumberOfBreaks", lsc.NumberOfBreaks.ToString());
                    scaleBar.SetAttribute("Unit", lsc.Unit.ToString());
                    scaleBar.SetAttribute("UnitText", lsc.UnitText);
                    scaleBar.SetAttribute("Map", _layoutElements.IndexOf(lsc.Map).ToString());
                    element.AppendChild(scaleBar);
                }
                else if (le is LayoutText)
                {
                    LayoutText lt = le as LayoutText;
                    XmlElement layoutText = layoutXmlDoc.CreateElement("Text");
                    layoutText.SetAttribute("TextHint", lt.TextHint.ToString());
                    layoutText.SetAttribute("Color", TypeDescriptor.GetConverter(typeof(Color)).ConvertToInvariantString(lt.Color));
                    layoutText.SetAttribute("Font", TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(lt.Font));
                    layoutText.SetAttribute("ContentAlignment", lt.ContentAlignment.ToString());
                    layoutText.SetAttribute("Text", lt.Text);
                    element.AppendChild(layoutText);
                }

                element.SetAttribute("RectangleX", TypeDescriptor.GetConverter(typeof(float)).ConvertToInvariantString(le.Rectangle.X));
                element.SetAttribute("RectangleY", TypeDescriptor.GetConverter(typeof(float)).ConvertToInvariantString(le.Rectangle.Y));
                element.SetAttribute("RectangleWidth", TypeDescriptor.GetConverter(typeof(float)).ConvertToInvariantString(le.Rectangle.Width));
                element.SetAttribute("RectangleHeight", TypeDescriptor.GetConverter(typeof(float)).ConvertToInvariantString(le.Rectangle.Height));
                element.SetAttribute("Background", backSerializer.Serialize(le.Background));
                element.SetAttribute("ResizeStyle", le.ResizeStyle.ToString());
                root.AppendChild(element);
            }

            layoutXmlDoc.Save(fileName);
        }
        public void TestGraphWithStringNode()
        {
            Node rootNode = new Node(1);
            Node intNode = new Node(42);
            Node stringNode = new Node("test string with <invalid> characters!");

            rootNode.Nodes.Add(intNode);
            rootNode.Nodes.Add(stringNode);

            intNode.Nodes.Add(rootNode);

            Graph g = new Graph(rootNode);

            XmlSerializer s = new XmlSerializer();
            string result = s.Serialize(g);

            XmlDeserializer d = new XmlDeserializer();
            Graph newGraph = d.Deserialize<Graph>(result);

            Assert.IsNotNull(newGraph);
            Assert.AreEqual(g.Root.Data, newGraph.Root.Data);
            Assert.AreEqual(g.Root.Nodes[0].Data, newGraph.Root.Nodes[0].Data);
            Assert.AreEqual(g.Root.Nodes[1].Data, newGraph.Root.Nodes[1].Data);
            Assert.AreEqual(g.Root.Nodes[0].Nodes[0].Data, newGraph.Root.Nodes[0].Nodes[0].Data);
            Assert.AreSame(newGraph.Root, newGraph.Root.Nodes[0].Nodes[0]);
        }
        public void TestRectangleSerializationMap()
        {
            var rectangle = new Rectangle(1, 1, 2, 2);
            XmlSerializer s = new XmlSerializer();
            string xml = s.Serialize(rectangle);

            XmlDeserializer d = new XmlDeserializer();
            Rectangle result = d.Deserialize<Rectangle>(xml);

            Assert.AreEqual(1, result.X);
            Assert.AreEqual(1, result.Y);
            Assert.AreEqual(2, result.Width);
            Assert.AreEqual(2, result.Height);
        }
        public void TestPointSerializationMap()
        {
            var pt = new Point(1, 2);
            XmlSerializer s = new XmlSerializer();
            string xml = s.Serialize(pt);

            XmlDeserializer d = new XmlDeserializer();
            Point result = d.Deserialize<Point>(xml);

            Assert.AreEqual(1, result.X);
            Assert.AreEqual(2, result.Y);
        }
        public void TestFormatter()
        {
            ObjectWithIntMember obj = new ObjectWithIntMember(0xBEEF);
            XmlSerializer s = new XmlSerializer();
            string xml = s.Serialize(obj);

            XmlDeserializer d = new XmlDeserializer();
            ObjectWithIntMember result1 = d.Deserialize<ObjectWithIntMember>(xml);
            Assert.IsNotNull(result1);
            Assert.AreEqual(0xBEEF, result1.Number);

            ObjectWithIntMember result2 = new ObjectWithIntMember(0);
            d.Deserialize(result2, xml);
            Assert.IsNotNull(result2);
            Assert.AreEqual(0xBEEF, result2.Number);
        }
        public void TestMapPointLayer()
        {
            const string filename = @".\TestFiles\test-RandomPts.shp";

            IFeatureSet fs = FeatureSet.Open(filename);
            MapPointLayer l = new MapPointLayer(fs);
            XmlSerializer s = new XmlSerializer();
            string result = s.Serialize(l);

            XmlDeserializer d = new XmlDeserializer();
            MapPointLayer newPointLayer = d.Deserialize<MapPointLayer>(result);

            Assert.IsNotNull(newPointLayer);
            Assert.AreEqual(filename, newPointLayer.DataSet.Filename);
        }
        public void TestDictionary()
        {
            Dictionary<int, object> dictionary = new Dictionary<int, object>();
            dictionary.Add(1, new Node(42));
            dictionary.Add(2, "Hello <insert name here>!");

            XmlSerializer s = new XmlSerializer();
            string result = s.Serialize(dictionary);

            XmlDeserializer d = new XmlDeserializer();
            Dictionary<int, object> newDictionary = d.Deserialize<Dictionary<int, object>>(result);

            foreach (var key in dictionary.Keys)
            {
                Assert.AreEqual(dictionary[key], newDictionary[key]);
            }
        }
        public void TestMapPointLayer()
        {
            string filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "test-RandomPts.shp");

            IFeatureSet fs = FeatureSet.Open(filename);
            MapPointLayer l = new MapPointLayer(fs);
            XmlSerializer s = new XmlSerializer();
            string result = s.Serialize(l);

            XmlDeserializer d = new XmlDeserializer();
            MapPointLayer newPointLayer = d.Deserialize<MapPointLayer>(result);

            Assert.IsNotNull(newPointLayer);
            Assert.True(filename.Contains(newPointLayer.DataSet.Filename));
        }