public void UpdateValueOutOfVisitorTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var v = act.ToVisitor();

            Assert.Equal("Hu", v.GetValue <string>("Name"));
            Assert.Equal(22, v.GetValue <int>("Age"));
            Assert.Equal(Country.China, v.GetValue <Country>("Country"));
            Assert.Equal(DateTime.Today, v.GetValue <DateTime>("Birthday"));
            Assert.False(v.GetValue <bool>("IsValid"));

            act.Name     = "Du";
            act.Age      = 55;
            act.Country  = Country.USA;
            act.Birthday = DateTime.Today.AddDays(-1);
            act.IsValid  = true;

            Assert.Equal("Du", v.GetValue <string>("Name"));
            Assert.Equal(55, v.GetValue <int>("Age"));
            Assert.Equal(Country.USA, v.GetValue <Country>("Country"));
            Assert.Equal(DateTime.Today.AddDays(-1), v.GetValue <DateTime>("Birthday"));
            Assert.True(v.GetValue <bool>("IsValid"));
        }
Beispiel #2
0
        public void DirectInstanceWithValueApiValidTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = LeoVisitorFactory.Create(type, act);

            var context = v.ValidationEntry;

            Assert.NotNull(context);

            context.ForMember("Name",
                              c => c.NotEmpty().MinLength(4).MaxLength(15));

            var r1 = v.Verify();

            Assert.False(r1.IsValid);
            Assert.Single(r1.Errors);
            Assert.Single(r1.Errors[0].Details);

            v["Name"] = "Hulu"; //4

            var r2 = v.Verify();

            Assert.True(r2.IsValid);

            v["Name"] = "HuluWayaJavaPojoNovaLomo"; //16,greater than 15

            var r3 = v.Verify();

            Assert.False(r3.IsValid);
            Assert.Single(r3.Errors);
            Assert.Single(r3.Errors[0].Details);

            v["Name"] = ""; //0

            var r4 = v.Verify();

            Assert.False(r4.IsValid);
            Assert.Single(r4.Errors);
            Assert.Equal(2, r4.Errors[0].Details.Count);

            v["Name"] = null; //nil

            var r5 = v.Verify();

            Assert.False(r5.IsValid);
            Assert.Single(r5.Errors);
            Assert.Equal(2, r5.Errors[0].Details.Count);
        }
Beispiel #3
0
        public void DirectInstanceWithStrategyValidTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu", //2
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = LeoVisitorFactory.Create(type, act);

            var context = v.ValidationEntry;

            Assert.NotNull(context);

            context.SetStrategy <NormalNiceActValidationStrategy>();

            var r1 = v.Verify();

            Assert.False(r1.IsValid);
            Assert.Single(r1.Errors);
            Assert.Single(r1.Errors[0].Details);

            v["Name"] = "Hulu"; //4

            var r2 = v.Verify();

            Assert.True(r2.IsValid);

            v["Name"] = "HuluWayaJavaPojoNovaLomo"; //16,greater than 15

            var r3 = v.Verify();

            Assert.False(r3.IsValid);
            Assert.Single(r3.Errors);
            Assert.Single(r3.Errors[0].Details);

            v["Name"] = ""; //0

            var r4 = v.Verify();

            Assert.False(r4.IsValid);
            Assert.Single(r4.Errors);
            Assert.Equal(2, r4.Errors[0].Details.Count);

            v["Name"] = null; //nil

            var r5 = v.Verify();

            Assert.False(r5.IsValid);
            Assert.Single(r5.Errors);
            Assert.Equal(2, r5.Errors[0].Details.Count);
        }
Beispiel #4
0
        public void DirectInstanceSelectTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = LeoVisitorFactory.Create(type, act);

            var z0 = v.Select((s, o) => s);
            var z1 = v.Select((s, o, m) => s);
            var z2 = v.Select(c => c.Name);
            var z3 = v.Select <(string, int)>(c => (c.Name, c.Index));
            var z4 = v.Select(c => new { c.Name, c.Value, c.Index });

            Assert.NotNull(z0);
            Assert.NotNull(z1);
            Assert.NotNull(z2);
            Assert.NotNull(z3);
            Assert.NotNull(z4);

            var l0 = z0.FireAndReturn();
            var l1 = z1.FireAndReturn();
            var l2 = z2.FireAndReturn();
            var l3 = z3.FireAndReturn();
            var l4 = z4.FireAndReturn();

            Assert.Equal(5, l0.Count());
            Assert.Equal(5, l1.Count());
            Assert.Equal(5, l2.Count());
            Assert.Equal(5, l3.Count());
            Assert.Equal(5, l4.Count());

            var f0 = l0.First();
            var f1 = l1.First();
            var f2 = l2.First();
            var f3 = l3.First();
            var f4 = l4.First();

            Assert.Equal("Name", f0);
            Assert.Equal("Name", f1);
            Assert.Equal("Name", f2);
            Assert.Equal("Name", f3.Item1);
            Assert.Equal(0, f3.Item2);
            Assert.Equal("Name", f4.Name);
            Assert.Equal("Hu", f4.Value);
            Assert.Equal(0, f4.Index);
        }
        public void GenericInstanceWithValueApiValidTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hulu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var v = ObjectVisitor.Create <NiceAct>(act);

            var context = v.VerifiableEntry;

            Assert.NotNull(context);

            context.ForMember(x => x.Name,
                              c => c.NotEmpty().MinLength(4).MaxLength(15));

            var r1 = v.Verify();

            Assert.True(r1.IsValid);

            v.VerifiableEntry
            .ForMember("Name", c => c.Empty().OverwriteRule());

            var r2 = v.Verify();

            Assert.False(r2.IsValid);
            Assert.Single(r2.Errors);
            Assert.Single(r2.Errors[0].Details);

            v["Name"] = "";

            var r3 = v.Verify();

            Assert.True(r3.IsValid);

            v["Name"] = null;

            var r4 = v.Verify();

            Assert.True(r4.IsValid);
        }
Beispiel #6
0
        public void DirectInstanceLoopTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = ObjectVisitor.Create(type, act);

            string s0 = "", s1 = "", s2 = "";
            int    i2 = 0;
            var    ss = "NameAgeBirthdayCountryIsValid";
            var    ii = 0 + 1 + 2 + 3 + 4;

            var l0 = v.ForEach((s, o) => { s0 += s; });
            var l1 = v.ForEach((s, o, m) => { s1 += s; });
            var l2 = v.ForEach(c =>
            {
                s2 += c.Name;
                i2 += c.Index;
            });

            Assert.Equal("", s0);
            Assert.Equal("", s1);
            Assert.Equal("", s2);
            Assert.Equal(0, i2);

            l0.Fire();
            l1.Fire();
            l2.Fire();

            Assert.Equal(ss, s0);
            Assert.Equal(ss, s1);
            Assert.Equal(ss, s2);
            Assert.Equal(ii, i2);

            l2.Fire();
            Assert.Equal($"{ss}{ss}", s2);
            Assert.Equal(ii + ii, i2);
        }
Beispiel #7
0
        public void DirectInstanceWithValueApiValidTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hulu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = LeoVisitorFactory.Create(type, act);

            v.ValidationEntry
            .ForMember("Name", c => c.NotEmpty().MinLength(4).MaxLength(15));

            var r1 = v.Verify();

            Assert.True(r1.IsValid);

            v.ValidationEntry
            .ForMember("Name", c => c.Empty().OverwriteRule());

            var r2 = v.Verify();

            Assert.False(r2.IsValid);
            Assert.Single(r2.Errors);
            Assert.Single(r2.Errors[0].Details);

            v["Name"] = "";

            var r3 = v.Verify();

            Assert.True(r3.IsValid);

            v["Name"] = null;

            var r4 = v.Verify();

            Assert.True(r4.IsValid);
        }
        public void FluentGetterTest()
        {
            var type = typeof(NiceAct);
            var act  = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var d = new Dictionary <string, object>();

            d["Name"]     = "Ax";
            d["Age"]      = 10086;
            d["Country"]  = Country.China;
            d["Birthday"] = DateTime.Today.AddDays(10);
            d["IsValid"]  = true;

            var g1 = ObjectGetter.Type(type).Instance(act);
            var g2 = ObjectGetter.Type(type).InitialValues(d);
            var g3 = ObjectGetter.Type <NiceAct>().Instance(act);
            var g4 = ObjectGetter.Type <NiceAct>().InitialValues(d);

            var g5 = ObjectGetter.Type(type).Value("Name");
            var g6 = ObjectGetter.Type <NiceAct>().Value("Name");
            var g7 = ObjectGetter.Type <NiceAct>().Value(t => t.Name);
            var g8 = ObjectGetter.Type <NiceAct>().Value <string>(t => t.Name);

            Assert.Equal("Hu", g1.GetValue <string>("Name"));
            Assert.Equal("Ax", g2.GetValue <string>("Name"));
            Assert.Equal("Hu", g3.GetValue <string>("Name"));
            Assert.Equal("Ax", g4.GetValue <string>("Name"));

            Assert.Equal("Hu", g5.Instance(act).Value);
            Assert.Equal("Hu", g6.Instance(act).Value);
            Assert.Equal("Hu", g7.Instance(act).Value);
            Assert.Equal("Hu", g8.Instance(act).Value);
        }
Beispiel #9
0
        public void GenericInstanceTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var v = LeoVisitorFactory.Create <NiceAct>(act);

            Assert.False(v.IsStatic);
            Assert.Equal(typeof(NiceAct), v.SourceType);
            Assert.Equal(AlgorithmKind.Precision, v.AlgorithmKind);

            Assert.Equal("Hu", v.GetValue <string>("Name"));
            Assert.Equal(22, v.GetValue <int>("Age"));
            Assert.Equal(Country.China, v.GetValue <Country>("Country"));
            Assert.Equal(DateTime.Today, v.GetValue <DateTime>("Birthday"));
            Assert.False(v.GetValue <bool>("IsValid"));

            v.SetValue("Name", "Du");
            v.SetValue("Age", 55);
            v.SetValue("Country", Country.USA);
            v.SetValue("Birthday", DateTime.Today.AddDays(-1));
            v.SetValue("IsValid", true);

            Assert.Equal("Du", v.GetValue <string>("Name"));
            Assert.Equal(55, v.GetValue <int>("Age"));
            Assert.Equal(Country.USA, v.GetValue <Country>("Country"));
            Assert.Equal(DateTime.Today.AddDays(-1), v.GetValue <DateTime>("Birthday"));
            Assert.True(v.GetValue <bool>("IsValid"));

            v["Name"]     = "Au";
            v["Age"]      = 77;
            v["Country"]  = Country.China;
            v["Birthday"] = DateTime.Today.AddDays(1);
            v["IsValid"]  = false;

            Assert.Equal("Au", v.GetValue <string>("Name"));
            Assert.Equal(77, v.GetValue <int>("Age"));
            Assert.Equal(Country.China, v.GetValue <Country>("Country"));
            Assert.Equal(DateTime.Today.AddDays(1), v.GetValue <DateTime>("Birthday"));
            Assert.False(v.GetValue <bool>("IsValid"));

            v.SetValue <NiceAct>(x => x.Name, "Zu");
            v.SetValue <NiceAct>(x => x.Age, 99);
            v.SetValue <NiceAct>(x => x.Country, Country.USA);
            v.SetValue <NiceAct>(x => x.Birthday, DateTime.Today.AddDays(2));
            v.SetValue <NiceAct>(x => x.IsValid, true);

            Assert.Equal("Zu", v.GetValue <NiceAct>(x => x.Name));
            Assert.Equal(99, v.GetValue <NiceAct>(x => x.Age));
            Assert.Equal(Country.USA, v.GetValue <NiceAct>(x => x.Country));
            Assert.Equal(DateTime.Today.AddDays(2), v.GetValue <NiceAct>(x => x.Birthday));
            Assert.True((bool)v.GetValue <NiceAct>(x => x.IsValid));

            v.SetValue <NiceAct, string>(x => x.Name, "Xu");
            v.SetValue <NiceAct, int>(x => x.Age, 199);
            v.SetValue <NiceAct, Country>(x => x.Country, Country.China);
            v.SetValue <NiceAct, DateTime>(x => x.Birthday, DateTime.Today.AddDays(-2));
            v.SetValue <NiceAct, bool>(x => x.IsValid, false);

            Assert.Equal("Xu", v.GetValue <NiceAct, string>(x => x.Name));
            Assert.Equal(199, v.GetValue <NiceAct, int>(x => x.Age));
            Assert.Equal(Country.China, v.GetValue <NiceAct, Country>(x => x.Country));
            Assert.Equal(DateTime.Today.AddDays(-2), v.GetValue <NiceAct, DateTime>(x => x.Birthday));
            Assert.False(v.GetValue <NiceAct, bool>(x => x.IsValid));

            v.SetValue <string>(x => x.Name, "Lu");
            v.SetValue <int>(x => x.Age, 11);
            v.SetValue <Country>(x => x.Country, Country.USA);
            v.SetValue <DateTime>(x => x.Birthday, DateTime.Today);
            v.SetValue <bool>(x => x.IsValid, true);

            Assert.Equal("Lu", v.GetValue(x => x.Name));
            Assert.Equal(11, v.GetValue(x => x.Age));
            Assert.Equal(Country.USA, v.GetValue(x => x.Country));
            Assert.Equal(DateTime.Today, v.GetValue(x => x.Birthday));
            Assert.True(v.GetValue(x => x.IsValid));

            var d = v.ToDictionary();

            Assert.Equal("Lu", d["Name"]);
            Assert.Equal(11, d["Age"]);
            Assert.Equal(Country.USA, d["Country"]);
            Assert.Equal(DateTime.Today, d["Birthday"]);
            Assert.True((bool)d["IsValid"]);

            d["Name"]     = "Ax";
            d["Age"]      = 10086;
            d["Country"]  = Country.China;
            d["Birthday"] = DateTime.Today.AddDays(10);
            d["IsValid"]  = true;

            v.SetValue(d);

            Assert.Equal("Ax", d["Name"]);
            Assert.Equal(10086, d["Age"]);
            Assert.Equal(Country.China, d["Country"]);
            Assert.Equal(DateTime.Today.AddDays(10), d["Birthday"]);
            Assert.True((bool)d["IsValid"]);
        }
        public void DirectInstanceWithValueApiValidTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hulu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = ObjectVisitor.Create(type, act);

            v.VerifiableEntry
            .ForMember("Name", c => c.NotEmpty().MinLength(4).MaxLength(15));

            var r1 = v.Verify();

            Assert.True(r1.IsValid);

            v.VerifiableEntry
            .ForMember("Name", c => c.Empty().OverwriteRule());

            var r2 = v.Verify();

            Assert.False(r2.IsValid);
            Assert.Single(r2.Errors);
            Assert.Single(r2.Errors[0].Details);

            v["Name"] = "";

            var r3 = v.Verify();

            Assert.True(r3.IsValid);

            v["Name"] = null;

            var r4 = v.Verify();

            Assert.True(r4.IsValid);

            // NotEqual is not mutually exclusive, so these three tokens can be added. The default is AppendRule mode.
            v.VerifiableEntry.ForMember("Name", c => c.Length(4, 15).NotEqual("Huhuhu").NotEqual("Lululu").NotEqual("Hu"));

            r1 = v.Verify();
            Assert.True(r1.IsValid);

            // NotEqual is not mutually exclusive, so these three tokens can be added.
            v.VerifiableEntry.ForMember("Name", c => c.Length(4, 15).NotEqual("Huhuhu").NotEqual("Lululu").NotEqual("Hu").OverwriteRule());

            v["Name"] = "Hululu";
            r1        = v.Verify();
            Assert.True(r1.IsValid);

            v["Name"] = "Huhuhu";
            r1        = v.Verify();
            Assert.False(r1.IsValid);
            Assert.Single(r1.Errors);
            Assert.Single(r1.Errors[0].Details);

            v["Name"] = "Lululu";
            r1        = v.Verify();
            Assert.False(r1.IsValid);
            Assert.Single(r1.Errors);
            Assert.Single(r1.Errors[0].Details);

            v["Name"] = "Hu";
            r1        = v.Verify();
            Assert.False(r1.IsValid);
            Assert.Single(r1.Errors);
            Assert.Equal(2, r1.Errors[0].Details.Count);

            // Revert to RequiredNull token to test the mutual exclusion under AppendRule
            v.VerifiableEntry
            .ForMember("Name", c => c.Empty().OverwriteRule());

            // Due to mutual exclusion, these conditions will all fail to take effect (because of the AppendRule mode).
            v.VerifiableEntry
            .ForMember("Name", c => c.NotEmpty().MinLength(4).MaxLength(15).AppendRule());

            v["Name"] = "";

            r1 = v.Verify();
            Assert.True(r1.IsValid);

            v["Name"] = null;

            r1 = v.Verify();
            Assert.True(r1.IsValid);
        }
Beispiel #11
0
        public void GenericFutureTest()
        {
            var v = ObjectVisitor.Create <NiceAct>();

            v.SetValue("Name", "Du");
            v.SetValue("Age", 55);
            v.SetValue("Country", Country.USA);
            v.SetValue("Birthday", DateTime.Today.AddDays(-1));
            v.SetValue("IsValid", true);

            var n1  = new NiceAct();
            var b1  = v.TryRepeat(n1, out var o1);
            var to1 = (NiceAct)o1;

            Assert.True(b1);
            Assert.Equal("Du", to1.Name);
            Assert.Equal(55, to1.Age);
            Assert.Equal(Country.USA, to1.Country);
            Assert.Equal(DateTime.Today.AddDays(-1), to1.Birthday);
            Assert.True(to1.IsValid);

            v["Name"]     = "Au";
            v["Age"]      = 77;
            v["Country"]  = Country.China;
            v["Birthday"] = DateTime.Today.AddDays(1);
            v["IsValid"]  = false;

            var n2 = new NiceAct();
            var b2 = v.TryRepeat(n2, out var o2);

            var b3 = v.TryRepeat(n1, out var o3);

            var b4 = v.TryRepeat(out var o4);

            var b5 = v.TryRepeatAs <NiceAct>(out var o5);

            var n6 = new NiceAct();
            var b6 = v.TryRepeatAs <NiceAct>(n6, out var o6);

            Assert.True(b2);
            Assert.Equal("Au", o2.Name);
            Assert.Equal(77, o2.Age);
            Assert.Equal(Country.China, o2.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o2.Birthday);
            Assert.False(o2.IsValid);

            Assert.True(b3);
            Assert.Equal("Au", o3.Name);
            Assert.Equal(77, o3.Age);
            Assert.Equal(Country.China, o3.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o3.Birthday);
            Assert.False(o3.IsValid);

            Assert.True(b4);
            Assert.Equal("Au", o4.Name);
            Assert.Equal(77, o4.Age);
            Assert.Equal(Country.China, o4.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o4.Birthday);
            Assert.False(o4.IsValid);

            Assert.True(b5);
            Assert.Equal("Au", o5.Name);
            Assert.Equal(77, o5.Age);
            Assert.Equal(Country.China, o5.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o5.Birthday);
            Assert.False(o5.IsValid);

            Assert.True(b6);
            Assert.Equal("Au", o6.Name);
            Assert.Equal(77, o6.Age);
            Assert.Equal(Country.China, o6.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o6.Birthday);
            Assert.False(o6.IsValid);

            var repeater = v.ForRepeat();
            var n7       = new NiceAct();
            var o7       = repeater.Play(n7);
            var o8       = repeater.NewAndPlay();

            Assert.Equal("Au", o7.Name);
            Assert.Equal(77, o7.Age);
            Assert.Equal(Country.China, o7.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o7.Birthday);
            Assert.False(o7.IsValid);

            Assert.Equal("Au", o8.Name);
            Assert.Equal(77, o8.Age);
            Assert.Equal(Country.China, o8.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o8.Birthday);
            Assert.False(o8.IsValid);

            var d = new Dictionary <string, object>();

            d["Name"]     = "AuX";
            d["Age"]      = 707;
            d["Country"]  = Country.USA;
            d["Birthday"] = DateTime.Today.AddDays(10);
            d["IsValid"]  = true;

            var b10 = v.TryRepeat(d, out var to10);

            var b11 = v.TryRepeatAs <NiceAct>(d, out var o11);

            var o12 = repeater.Play(d);

            Assert.True(b10);
            Assert.Equal("Au", to10.Name);
            Assert.Equal(77, to10.Age);
            Assert.Equal(Country.China, to10.Country);
            Assert.Equal(DateTime.Today.AddDays(1), to10.Birthday);
            Assert.False(to10.IsValid);

            Assert.True(b11);
            Assert.Equal("Au", o11.Name);
            Assert.Equal(77, o11.Age);
            Assert.Equal(Country.China, o11.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o11.Birthday);
            Assert.False(o11.IsValid);

            Assert.Equal("Au", o12.Name);
            Assert.Equal(77, o12.Age);
            Assert.Equal(Country.China, o12.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o12.Birthday);
            Assert.False(o12.IsValid);
        }
Beispiel #12
0
        public void DirectInstanceRepeatTest()
        {
            var act = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var type = typeof(NiceAct);
            var v    = LeoVisitorFactory.Create(type, act);

            v.SetValue("Name", "Du");
            v.SetValue("Age", 55);
            v.SetValue("Country", Country.USA);
            v.SetValue("Birthday", DateTime.Today.AddDays(-1));
            v.SetValue("IsValid", true);

            var n1  = new NiceAct();
            var b1  = v.TryRepeat(n1, out var o1);
            var to1 = (NiceAct)o1;

            Assert.True(b1);
            Assert.Equal("Du", to1.Name);
            Assert.Equal(55, to1.Age);
            Assert.Equal(Country.USA, to1.Country);
            Assert.Equal(DateTime.Today.AddDays(-1), to1.Birthday);
            Assert.True(to1.IsValid);

            v["Name"]     = "Au";
            v["Age"]      = 77;
            v["Country"]  = Country.China;
            v["Birthday"] = DateTime.Today.AddDays(1);
            v["IsValid"]  = false;

            var n2  = new NiceAct();
            var b2  = v.TryRepeat(n2, out var o2);
            var to2 = (NiceAct)o2;

            var b3  = v.TryRepeat(n1, out var o3);
            var to3 = (NiceAct)o3;

            var b4  = v.TryRepeat(out var o4);
            var to4 = (NiceAct)o4;

            var b5 = v.TryRepeatAs <NiceAct>(out var o5);

            var n6 = new NiceAct();
            var b6 = v.TryRepeatAs <NiceAct>(n6, out var o6);

            Assert.True(b2);
            Assert.Equal("Au", to2.Name);
            Assert.Equal(77, to2.Age);
            Assert.Equal(Country.China, to2.Country);
            Assert.Equal(DateTime.Today.AddDays(1), to2.Birthday);
            Assert.False(to2.IsValid);

            Assert.True(b3);
            Assert.Equal("Au", to3.Name);
            Assert.Equal(77, to3.Age);
            Assert.Equal(Country.China, to3.Country);
            Assert.Equal(DateTime.Today.AddDays(1), to3.Birthday);
            Assert.False(to3.IsValid);

            Assert.True(b4);
            Assert.Equal("Au", to4.Name);
            Assert.Equal(77, to4.Age);
            Assert.Equal(Country.China, to4.Country);
            Assert.Equal(DateTime.Today.AddDays(1), to4.Birthday);
            Assert.False(to4.IsValid);

            Assert.True(b5);
            Assert.Equal("Au", o5.Name);
            Assert.Equal(77, o5.Age);
            Assert.Equal(Country.China, o5.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o5.Birthday);
            Assert.False(o5.IsValid);

            Assert.True(b6);
            Assert.Equal("Au", o6.Name);
            Assert.Equal(77, o6.Age);
            Assert.Equal(Country.China, o6.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o6.Birthday);
            Assert.False(o6.IsValid);

            var repeater = v.ForRepeat();
            var n7       = new NiceAct();
            var o7       = (NiceAct)repeater.Play(n7);
            var o8       = (NiceAct)repeater.NewAndPlay();

            Assert.Equal("Au", o7.Name);
            Assert.Equal(77, o7.Age);
            Assert.Equal(Country.China, o7.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o7.Birthday);
            Assert.False(o7.IsValid);

            Assert.Equal("Au", o8.Name);
            Assert.Equal(77, o8.Age);
            Assert.Equal(Country.China, o8.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o8.Birthday);
            Assert.False(o8.IsValid);

            var d = new Dictionary <string, object>();

            d["Name"]     = "AuX";
            d["Age"]      = 707;
            d["Country"]  = Country.USA;
            d["Birthday"] = DateTime.Today.AddDays(10);
            d["IsValid"]  = true;

            var b10  = v.TryRepeat(d, out var o10);
            var to10 = (NiceAct)o10;

            var b11 = v.TryRepeatAs <NiceAct>(d, out var o11);

            var o12 = (NiceAct)repeater.Play(d);

            Assert.True(b10);
            Assert.Equal("Au", to10.Name);
            Assert.Equal(77, to10.Age);
            Assert.Equal(Country.China, to10.Country);
            Assert.Equal(DateTime.Today.AddDays(1), to10.Birthday);
            Assert.False(to10.IsValid);

            Assert.True(b11);
            Assert.Equal("Au", o11.Name);
            Assert.Equal(77, o11.Age);
            Assert.Equal(Country.China, o11.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o11.Birthday);
            Assert.False(o11.IsValid);

            Assert.Equal("Au", o12.Name);
            Assert.Equal(77, o12.Age);
            Assert.Equal(Country.China, o12.Country);
            Assert.Equal(DateTime.Today.AddDays(1), o12.Birthday);
            Assert.False(o12.IsValid);
        }
        public void FluentSetterTest()
        {
            var type = typeof(NiceAct);
            var act  = new NiceAct()
            {
                Name     = "Hu",
                Age      = 22,
                Country  = Country.China,
                Birthday = DateTime.Today
            };

            var d = new Dictionary <string, object>();

            d["Name"]     = "Ax";
            d["Age"]      = 10086;
            d["Country"]  = Country.China;
            d["Birthday"] = DateTime.Today.AddDays(10);
            d["IsValid"]  = true;

            var s1 = ObjectSetter.Type(type).Instance(act);
            var s2 = ObjectSetter.Type(type).InitialValues(d);
            var s3 = ObjectSetter.Type(type).NewInstance();
            var s4 = ObjectSetter.Type <NiceAct>().Instance(act);
            var s5 = ObjectSetter.Type <NiceAct>().InitialValues(d);
            var s6 = ObjectSetter.Type <NiceAct>().NewInstance();

            var s7  = ObjectSetter.Type(type).Value("Name");
            var s8  = ObjectSetter.Type <NiceAct>().Value("Name");
            var s9  = ObjectSetter.Type <NiceAct>().Value(t => t.Name);
            var s10 = ObjectSetter.Type <NiceAct>().Value <string>(t => t.Name);

            s1.SetValue("Name", "LL0");
            Assert.Equal("LL0", ((NiceAct)s1.Instance).Name);
            Assert.Equal("LL0", act.Name);

            s2.SetValue("Name", "LL1");
            Assert.Equal("LL1", ((NiceAct)s2.Instance).Name);
            var act2 = (NiceAct)s2.Instance;

            Assert.Equal("LL1", act2.Name);

            s3.SetValue("Name", "LL2");
            Assert.Equal("LL2", ((NiceAct)s3.Instance).Name);
            var act3 = (NiceAct)s3.Instance;

            Assert.Equal("LL2", act3.Name);

            s4.SetValue("Name", "LL3");
            Assert.Equal("LL3", ((NiceAct)s4.Instance).Name);
            Assert.Equal("LL3", act.Name);

            s5.SetValue("Name", "LL4");
            Assert.Equal("LL4", ((NiceAct)s5.Instance).Name);
            var act5 = (NiceAct)s5.Instance;

            Assert.Equal("LL4", act5.Name);

            s6.SetValue("Name", "LL5");
            Assert.Equal("LL5", ((NiceAct)s6.Instance).Name);
            var act6 = (NiceAct)s6.Instance;

            Assert.Equal("LL5", act6.Name);

            s7.Instance(act).Value("LL6");
            Assert.Equal("LL6", act.Name);

            s8.Instance(act).Value("LL7");
            Assert.Equal("LL7", act.Name);

            s9.Instance(act).Value("LL8");
            Assert.Equal("LL8", act.Name);

            s10.Instance(act).Value("LL9");
            Assert.Equal("LL9", act.Name);
        }