public void CultureTest()
        {
            var config = new YamlConfig();
            config.Register(new LegacyTypeConverterFactory());
            config.LookupAssemblies.Add(typeof(System.Drawing.PointF).Assembly);

            config.Culture = new System.Globalization.CultureInfo("da-DK");

            var serializer = new Serializer(config);
            object obj = new System.Drawing.PointF(1.2f, 3.1f);
            var yaml = serializer.Serialize(obj);
            Assert.AreEqual(
                BuildResult(
                    "!System.Drawing.PointF",
                    "X: 1,2",
                    "Y: 3,1"
                    ),
                yaml
                );
            var restore = serializer.Deserialize(yaml)[0];
            Assert.AreEqual(obj, restore);

            obj = new System.Drawing.Point(1, 3);
            yaml = serializer.Serialize(obj);
            Assert.AreEqual(
                BuildResult(
                    "!System.Drawing.Point 1; 3"
                    ),
                yaml
                );
            restore = serializer.Deserialize(yaml)[0];
            Assert.AreEqual(obj, restore);

            YamlNode.DefaultConfig.Culture = System.Globalization.CultureInfo.CurrentCulture;
        }
 public YamlConstructorTest()
 {
     serializer= new Serializer();
 }
        public void TagResolver()
        {
            var serialiser = new Serializer();
            var m = ( new Regex(@"([-+]?)([0-9]+)") ).Match("0123");
            
            Assert.AreEqual(123, serialiser.Deserialize("123")[0]);
            Assert.AreEqual(123, serializer.Deserialize("12_3")[0]);
            Assert.AreEqual(-123, serializer.Deserialize("-123")[0]);
            Assert.AreEqual(-123, serializer.Deserialize("-12_3")[0]);
            Assert.AreEqual(Convert.ToInt32("123", 8), serializer.Deserialize("0123")[0]);
            Assert.AreEqual(Convert.ToInt32("123", 8), serializer.Deserialize("012_3")[0]);
            Assert.AreEqual(-Convert.ToInt32("123", 8), serializer.Deserialize("-0123")[0]);
            Assert.AreEqual(-Convert.ToInt32("123", 8), serializer.Deserialize("-012_3")[0]);
            Assert.AreEqual(Convert.ToInt32("123", 8), serializer.Deserialize("0o123")[0]);
            Assert.AreEqual(Convert.ToInt32("123", 8), serializer.Deserialize("0o12_3")[0]);
            Assert.AreEqual(-Convert.ToInt32("123", 8), serializer.Deserialize("-0o123")[0]);
            Assert.AreEqual(-Convert.ToInt32("123", 8), serializer.Deserialize("-0o12_3")[0]);
            Assert.AreEqual(14, serializer.Deserialize("0b1110")[0]);
            Assert.AreEqual(14, serializer.Deserialize("0b11_10")[0]);
            Assert.AreEqual(-14, serializer.Deserialize("-0b1110")[0]);
            Assert.AreEqual(-14, serializer.Deserialize("-0b1_110")[0]);
            Assert.AreEqual(0xF110, serializer.Deserialize("0xF110")[0]);
            Assert.AreEqual(0x11A0, serializer.Deserialize("0x11_A0")[0]);
            Assert.AreEqual(-0x11A0, serializer.Deserialize("-0x11A0")[0]);
            Assert.AreEqual(-0x1F10, serializer.Deserialize("-0x1_F10")[0]);

            Assert.AreEqual(0.1, serializer.Deserialize("0.1")[0]);
            Assert.AreEqual(.01, serializer.Deserialize(".01")[0]);
            Assert.AreEqual(0.1e2, serializer.Deserialize("0.1E2")[0]);
            Assert.AreEqual(.1e2, serializer.Deserialize(".1E2")[0]);
            Assert.AreEqual(0.1e2, serializer.Deserialize("0.1e2")[0]);
            Assert.AreEqual(.1e2, serializer.Deserialize(".1e2")[0]);
            Assert.AreEqual(-0.1e2, serializer.Deserialize("-0.1E2")[0]);
            Assert.AreEqual(-.1e2, serializer.Deserialize("-.1E2")[0]);
            Assert.AreEqual(-0.1e2, serializer.Deserialize("-0.1e2")[0]);
            Assert.AreEqual(-.1e2, serializer.Deserialize("-.1e2")[0]);

            Assert.AreEqual(0.1e-2, serializer.Deserialize("0.1E-2")[0]);
            Assert.AreEqual(.1e-2, serializer.Deserialize(".1E-2")[0]);
            Assert.AreEqual(0.1e-2, serializer.Deserialize("0.1e-2")[0]);
            Assert.AreEqual(.1e-2, serializer.Deserialize(".1e-2")[0]);
            Assert.AreEqual(-0.1e-2, serializer.Deserialize("-0.1E-2")[0]);
            Assert.AreEqual(-.1e-2, serializer.Deserialize("-.1E-2")[0]);
            Assert.AreEqual(-0.1e-2, serializer.Deserialize("-0.1e-2")[0]);
            Assert.AreEqual(-.1e-2, serializer.Deserialize("-.1e-2")[0]);

            Assert.AreEqual(0.1e+2, serializer.Deserialize("0.1E+2")[0]);
            Assert.AreEqual(.1e+2, serializer.Deserialize(".1E+2")[0]);
            Assert.AreEqual(0.1e+2, serializer.Deserialize("0.1e+2")[0]);
            Assert.AreEqual(.1e+2, serializer.Deserialize(".1e+2")[0]);
            Assert.AreEqual(-0.1e+2, serializer.Deserialize("-0.1E+2")[0]);
            Assert.AreEqual(-.1e+2, serializer.Deserialize("-.1E+2")[0]);
            Assert.AreEqual(-0.1e+2, serializer.Deserialize("-0.1e+2")[0]);
            Assert.AreEqual(-.1e+2, serializer.Deserialize("-.1e+2")[0]);

            Assert.AreEqual(100.1e-2, serializer.Deserialize("10_0.1E-2")[0]);
            Assert.AreEqual(10.1e-2, serializer.Deserialize("10_.1E-2")[0]);
            Assert.AreEqual(100.1e-2, serializer.Deserialize("10_0.1e-2")[0]);
            Assert.AreEqual(10.1e-2, serializer.Deserialize("10_.1e-2")[0]);
            Assert.AreEqual(-100.1e-2, serializer.Deserialize("-10_0.1E-2")[0]);
            Assert.AreEqual(-10.1e-2, serializer.Deserialize("-10_.1E-2")[0]);
            Assert.AreEqual(-100.1e-2, serializer.Deserialize("-10_0.1e-2")[0]);
            Assert.AreEqual(-10.1e-2, serializer.Deserialize("-10_.1e-2")[0]);

            Assert.AreEqual(100.1e-2, serializer.Deserialize("10_0._1E-2")[0]);
            Assert.AreEqual(10.1e-2, serializer.Deserialize("10_._1E-2")[0]);
            Assert.AreEqual(100.1e-2, serializer.Deserialize("10_0._1e-2")[0]);
            Assert.AreEqual(10.1e-2, serializer.Deserialize("10_.1_e-2")[0]);
            Assert.AreEqual(-100.1e-2, serializer.Deserialize("-10_0.1_E-2")[0]);
            Assert.AreEqual(-10.1e-2, serializer.Deserialize("-10_.1_E-2")[0]);
            Assert.AreEqual(-100.1e-2, serializer.Deserialize("-10_0._1e-2")[0]);
            Assert.AreEqual(-10.1e-2, serializer.Deserialize("-10_._1e-2")[0]);

            Assert.AreEqual("-012.1", serializer.Deserialize("-012.1")[0]); // not float

            Assert.IsTrue(double.IsNaN((double)serializer.Deserialize(".nan")[0]));
            Assert.IsTrue(double.IsNaN((double)serializer.Deserialize(".NaN")[0]));
            Assert.IsTrue(double.IsNaN((double)serializer.Deserialize(".NAN")[0]));

            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize(".inf")[0]));
            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize(".Inf")[0]));
            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize(".INF")[0]));
            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize("+.inf")[0]));
            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize("+.Inf")[0]));
            Assert.IsTrue(double.IsPositiveInfinity((double)serializer.Deserialize("+.INF")[0]));
            Assert.IsTrue(double.IsNegativeInfinity((double)serializer.Deserialize("-.inf")[0]));
            Assert.IsTrue(double.IsNegativeInfinity((double)serializer.Deserialize("-.Inf")[0]));
            Assert.IsTrue(double.IsNegativeInfinity((double)serializer.Deserialize("-.INF")[0]));

            var time = DateTime.Now;
            var utctime = time.ToUniversalTime();
            Assert.AreEqual(time, utctime.ToLocalTime());

            Assert.AreEqual(new DateTime(1999, 12, 31, 0, 0, 0), serializer.Deserialize("1999-12-31")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 12, 00, 00), serializer.Deserialize("1999-12-31 12:00:00")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 12, 00, 00, 010), serializer.Deserialize("1999-12-31 12:00:00.010")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 12, 00, 00, 010), serializer.Deserialize("1999-12-31T12:00:00.010")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 21, 00, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010-9")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 12, 00, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010Z")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 21, 00, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010 -9")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 21, 20, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010 -9:20")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 3, 00, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010 +9")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 31, 2, 40, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 12:00:00.010 +9:20")[0]);
            Assert.AreEqual(new DateTime(1999, 12, 30, 23, 00, 00, 010, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 1:00:00.010 +2")[0]);
            Assert.AreEqual(new DateTime(2000, 1, 1, 1, 00, 00, 000, DateTimeKind.Utc).ToLocalTime(), serializer.Deserialize("1999-12-31 23:00:00 -2")[0]);

            Assert.AreEqual("1999/12/30 23:00:00", (new DateTime(1999, 12, 30, 23, 00, 00, 010)).ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture));
            YamlScalar node;
            YamlNode.DefaultConfig.TagResolver.Encode(time, out node);
            var recovered = DateTime.Parse(node.Value);
            Assert.IsTrue(time - recovered < new TimeSpan(0,0,0,0,1));
            recovered = DateTime.Parse("1999-12-31T00:00:01Z");
            recovered = DateTime.Parse("1999-12-31T00:00:01+9");
            recovered = DateTime.Parse("1999-12-31T00:00:01+9:00");
            recovered = DateTime.Parse("1999-12-31T00:00:01+09");
            recovered = DateTime.Parse("1999-12-31T00:00:01 +09");
            recovered = DateTime.Parse("1999-12-31T00:00:01.123 +09");
            recovered = DateTime.Parse("1999-12-31T00:00:01.123 +3");
            Assert.IsTrue(time - (DateTime)serializer.Deserialize(serializer.Serialize(time))[0] < new TimeSpan(0, 0, 0, 0, 1));
        }
        public void TestOmitRootNodesTag()
        {
            var obj = new TestClass();
            obj.list.Add(new ChildClass());
            var serializer = new Serializer();
            var yaml= serializer.Serialize(obj);
            Assert.AreEqual(
                BuildResult(
                    "!YamlSerializerTest.TestClass",
                    "list: ",
                    "  Capacity: 4",
                    "  ICollection.Items: ",
                    "    - !YamlSerializerTest.ChildClass",
                    "      list: ",
                    "        Capacity: 0"
                ), yaml
            );

            var config = new YamlConfig();
            config.OmitTagForRootNode = true;
            serializer = new Serializer(config);
            yaml = serializer.Serialize(obj);
            Assert.AreEqual(
                BuildResult(
                    "list: ",
                    "  Capacity: 4",
                    "  ICollection.Items: ",
                    "    - !YamlSerializerTest.ChildClass",
                    "      list: ",
                    "        Capacity: 0"
                ), yaml
            );
        }
        public void TestCustomActivator()
        {
            var config = new YamlConfig();
            config.Register(new LegacyTypeConverterFactory());
            config.LookupAssemblies.Add(typeof(System.Drawing.SolidBrush).Assembly);
            config.LookupAssemblies.Add(typeof(YamlSerializerTest).Assembly);

            var serializer = new Serializer(config);
            var yaml =
              @"%YAML 1.2
---
!System.Drawing.SolidBrush
Color: Red
...
";

            SolidBrush b = null;
            try {
                b = (SolidBrush)serializer.Deserialize(yaml)[0];
            } catch ( MissingMethodException ) {
                // SolidBrush has no default constructor!
            }

            config.AddActivator<SolidBrush>(() => new SolidBrush(Color.Black));
            serializer = new Serializer(config);

            // Now the serializer knows how to activate an instance of SolidBrush.
            b = (SolidBrush)serializer.Deserialize(yaml)[0];

            Assert.AreEqual(b.Color, Color.Red);
        
        }
 public void InitSerializer()
 {
     var config = new YamlConfig();
     config.Register(new LegacyTypeConverterFactory());
     config.LookupAssemblies.Add(typeof(System.Drawing.SolidBrush).Assembly);
     config.LookupAssemblies.Add(typeof(YamlSerializerTest).Assembly);
     serializer = new Serializer(config);
 }