コード例 #1
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void GetNotExistPropWillReturnNull()
        {
            var val  = new { A = 3 };
            var prop = DynamicRuntimeMacros.GetProp(val, "A.A");

            Assert.Null(prop);
        }
コード例 #2
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void CanGetNextedObjectValue()
        {
            var val    = new { A = new { B = 4 } };
            var getted = DynamicRuntimeMacros.GetPropValue(val, "A.B");

            Assert.Equal(4, getted);
        }
コード例 #3
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void GetSimplePropOk()
        {
            var val  = new { A = 3 };
            var prop = DynamicRuntimeMacros.GetProp(val, "A");

            Assert.NotNull(prop);
        }
コード例 #4
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void GetNestedPropOk()
        {
            var val  = new { A = new { A = 3 } };
            var prop = DynamicRuntimeMacros.GetProp(val, "A.A");

            Assert.NotNull(prop);
        }
コード例 #5
0
        public void HelloWorld()
        {
            var val    = "Hello World";
            var actual = DynamicRuntimeMacros.Val(OneCallContext.CreateEmpty(), "", val, null);

            Assert.True(actual.IsSuccess);
            Assert.Equal(val, actual.Value);
        }
コード例 #6
0
        public void InputNullWillBeEmpty()
        {
            string val    = null;
            var    actual = DynamicRuntimeMacros.Val(OneCallContext.CreateEmpty(), "", val, null);

            Assert.True(actual.IsSuccess);
            Assert.Equal(string.Empty, actual.Value);
        }
コード例 #7
0
ファイル: IifTest.cs プロジェクト: sdcb/sdmap
        public void NotExistPropShouldFail()
        {
            var val = DynamicRuntimeMacros.Iif(OneCallContext.CreateEmpty(),
                                               "",
                                               new { A = new bool?() },
                                               new object[] { "B", "true", "false" });

            Assert.False(val.IsSuccess);
        }
コード例 #8
0
ファイル: IsEqualTest.cs プロジェクト: emilefraser/PyroSQL
 private Result <string> CallIsNotEqual(object self, string prop, object val, string result)
 {
     if (val is int)
     {
         val = Convert.ToDouble(val);
     }
     return(DynamicRuntimeMacros.IsNotEqual(OneCallContext.CreateEmpty(),
                                            "", self, new object[] { prop, val, result }));
 }
コード例 #9
0
        public void WillEmitPropNameWhenFail()
        {
            var val = DynamicRuntimeMacros.IsNotEmpty(OneCallContext.CreateEmpty(),
                                                      "",
                                                      new { A = DateTime.Now },
                                                      new object[] { "ThePropertyName", "Ok" });

            Assert.True(val.IsFailure);
            Assert.Contains("ThePropertyName", val.Error);
        }
コード例 #10
0
        public void ValueIsNotEmpty()
        {
            var val = DynamicRuntimeMacros.IsNotEmpty(OneCallContext.CreateEmpty(),
                                                      "",
                                                      new { A = DateTime.Now },
                                                      new object[] { "A", "Ok" });

            Assert.True(val.IsSuccess);
            Assert.Equal("Ok", val.Value);
        }
コード例 #11
0
ファイル: IifTest.cs プロジェクト: sdcb/sdmap
        public void Smoke()
        {
            var val = DynamicRuntimeMacros.Iif(OneCallContext.CreateEmpty(),
                                               "",
                                               new { A = true },
                                               new object[] { "A", "true", "false" });

            Assert.True(val.IsSuccess);
            Assert.Equal("true", val.Value);
        }
コード例 #12
0
ファイル: IifTest.cs プロジェクト: sdcb/sdmap
        public void EmptyNullShouldTreatFalsy()
        {
            var val = DynamicRuntimeMacros.Iif(OneCallContext.CreateEmpty(),
                                               "",
                                               new { A = new bool?() },
                                               new object[] { "A", "true", "false" });

            Assert.True(val.IsSuccess);
            Assert.Equal("false", val.Value);
        }
コード例 #13
0
        public static bool PropertyExistsAndEvalToTrue(object obj, string propName)
        {
            var val = DynamicRuntimeMacros.GetPropValue(obj, propName);

            if (val is bool)
            {
                return((bool)val);
            }
            if (val is bool?)
            {
                return(((bool?)val).GetValueOrDefault());
            }

            return(false);
        }
コード例 #14
0
        private Result <string> CallCompare(object self, string op, string prop, int val, string result)
        {
            switch (op)
            {
            case ">":
                return(DynamicRuntimeMacros.IsGreaterThan(OneCallContext.CreateEmpty(),
                                                          "", self, new object[] { prop, val, result }));

            case "<":
                return(DynamicRuntimeMacros.IsLessThan(OneCallContext.CreateEmpty(),
                                                       "", self, new object[] { prop, val, result }));

            case ">=":
                return(DynamicRuntimeMacros.IsGreaterEqual(OneCallContext.CreateEmpty(),
                                                           "", self, new object[] { prop, val, result }));

            case "<=":
                return(DynamicRuntimeMacros.IsLessEqual(OneCallContext.CreateEmpty(),
                                                        "", self, new object[] { prop, val, result }));

            default:
                throw new ArgumentOutOfRangeException(nameof(op));
            }
        }
コード例 #15
0
ファイル: AddMacroTest.cs プロジェクト: sdcb/sdmap
        public void CanImplementDepInMacro()
        {
            var code = "sql v1{#def<B, 'Nice'>#isNotEmptyWithDeps<A, sql {ABCDEFG}, B>}";
            var rt   = new SdmapCompiler();

            rt.AddSourceCode(code);
            string id = "isNotEmptyWithDeps";

            rt.AddMacro(id, (context, ns, self, arguments) =>
            {
                if (self == null)
                {
                    return(Result.Fail <string>($"Query requires not null in macro '{id}'."));
                }
                ;

                var prop = self.GetType().GetProperty((string)arguments[0]);
                if (prop == null)
                {
                    return(Result.Fail <string>($"Query requires property '{prop}' in macro '{id}'."));
                }

                if (!DynamicRuntimeMacros.IsEmpty(DynamicRuntimeMacros.GetPropValue(self, (string)arguments[0])))
                {
                    foreach (var dep in arguments.Skip(2).OfType <string>())
                    {
                        context.Deps.Add(dep);
                    }
                    return(((EmitFunction)arguments[1])(context.DupNewFragments()));
                }
                return(Result.Ok(string.Empty));
            });
            var result = rt.Emit("v1", new { A = new[] { 1, 2, 3 } });

            Assert.Equal("NiceABCDEFG", result);
        }
コード例 #16
0
 private Result <string> CallIsNotNull(object self, string prop, string result)
 {
     return(DynamicRuntimeMacros.IsNotNull(OneCallContext.CreateEmpty(), "", self, new[] { prop, result }));
 }
コード例 #17
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
 public void BoolEqualBool()
 {
     Assert.True(DynamicRuntimeMacros.IsEqual(true, true));
 }
コード例 #18
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
 public void DecimalEqualToDecimal()
 {
     Assert.True(DynamicRuntimeMacros.IsEqual(3.14m, 3.14m));
 }
コード例 #19
0
ファイル: IterateTest.cs プロジェクト: emilefraser/PyroSQL
 private Result <string> CallEach(object self,
                                  string prop, string joiner, EmitFunction ef)
 {
     return(DynamicRuntimeMacros.Each(OneCallContext.CreateEmpty(),
                                      "", self, new object[] { prop, joiner, ef }));
 }
コード例 #20
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
 public void GetNotExistPropWillNotThrow()
 {
     var val  = new { A = 3 };
     var prop = DynamicRuntimeMacros.GetProp(val, "B.C.D");
 }
コード例 #21
0
 public static object LoadProp(object obj, string propName)
 => DynamicRuntimeMacros.GetPropValue(obj, propName);
コード例 #22
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void CanDetectNotEmptyArray()
        {
            var arr = Enumerable.Range(1, 10);

            Assert.False(DynamicRuntimeMacros.ArrayEmpty(arr));
        }
コード例 #23
0
ファイル: IterateTest.cs プロジェクト: sdcb/sdmap
 private Result<string> CallIterate(object self, string joiner, string text)
 {
     return DynamicRuntimeMacros.Iterate(OneCallContext.CreateByObj(self),
         "", self, new object[] { joiner, text });
 }
コード例 #24
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
 public void NumberEqualsNumber()
 {
     Assert.True(DynamicRuntimeMacros.IsEqual(3.11m, 3.11));
 }
コード例 #25
0
ファイル: IterateTest.cs プロジェクト: sdcb/sdmap
 private Result<string> CallEach(object self, 
     string prop, string joiner, string text)
 {
     return DynamicRuntimeMacros.Each(OneCallContext.CreateEmpty(),
         "", self, new object[] { prop, joiner, text });
 }
コード例 #26
0
ファイル: MacroUtilTest.cs プロジェクト: sdcb/sdmap
        public void DateEqualsDate()
        {
            var date = new DateTime(2016, 1, 1);

            Assert.True(DynamicRuntimeMacros.IsEqual(date, DateUtil.Parse("2016/1/1").Value));
        }
コード例 #27
0
ファイル: IterateTest.cs プロジェクト: emilefraser/PyroSQL
 private Result <string> CallIterate(object self, string joiner, EmitFunction ef)
 {
     return(DynamicRuntimeMacros.Iterate(OneCallContext.CreateByObj(self),
                                         "", self, new object[] { joiner, ef }));
 }