private Stats GenerateAndParse(Stats original)
        {
            StringWriter sWriter = new StringWriter();
            XmlWriter xmlWriter = new XmlTextWriter(sWriter);
            original.Save(xmlWriter);
            xmlWriter.Close();

            return Parse(sWriter.ToString());
        }
        public void TestGenerate()
        {
            Stats stats = new Stats();
            stats.Impressions.Total = 500;
            stats.Impressions["hello"] = 3;
            stats.PageViews.Total = 9;

            Stats stats2 = GenerateAndParse(stats);
            Assert.AreEqual(500, stats2.Impressions.Total);
            Assert.AreEqual(0, stats2.Clicks.Total);
            Assert.AreEqual(9, stats2.PageViews.Total);
            Assert.AreEqual(3, stats2.Impressions["hello"]);
        }
        ///////////////////////////////////////////////////////////////////////
        /// <summary>Parses an XML representation and creates an object</summary>
        ///////////////////////////////////////////////////////////////////////
        public static Stats Parse(XmlNode xml)
        {
            Stats retval = new Stats();
            for (XmlNode child = xml.FirstChild; child != null; child = child.NextSibling)
            {
                if (GBaseNameTable.NSGBaseMeta.Equals(child.NamespaceURI))
                {
                    switch (child.LocalName)
                    {
                        case "impressions":
                            retval.Impressions.Parse(child);
                            break;

                        case "clicks":
                            retval.Clicks.Parse(child);
                            break;

                        case "page_views":
                            retval.PageViews.Parse(child);
                            break;
                    }
                }
            }
            return retval;
        }