Пример #1
0
        public void Can_build_predicate_with_in_list_through_null_property()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = new
                {
                    Bar = (object)null
                }
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo.Bar.Blah"] = new JObject()
                {
                    ["$in"] = new JArray("test1", "test2", "test3", "blah", "blah"),
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #2
0
        public void Can_navigate_two_paths_from_starting_point()
        {
            var e = new JObject()
            {
                ["Root"] = new JObject()
                {
                    ["PropertyOne"] = new JObject()
                    {
                        ["Value"] = "val2",
                    },
                    ["PropertyTwo"] = new JObject()
                    {
                        ["SubProperty"] = new JObject()
                        {
                            ["Category"] = "test",
                            ["Type"]     = "Value"
                        }
                    }
                }
            };

            var q = new JObject()
            {
                ["^.Root.PropertyOne.Value"] = "val2",
                ["<.Type"] = "Value"
            };

            JsonQueryCompiler.Matches(e["Root"]["PropertyOne"]["Value"], q).Should().BeFalse();
            JsonQueryCompiler.Matches(e["Root"]["PropertyTwo"]["SubProperty"]["Type"], q).Should().BeTrue();
        }
Пример #3
0
        public void Can_build_or_statement_that_fails()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = 123,
                Bar = 456
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["$or"] = new JArray()
                {
                    new JObject()
                    {
                        ["Foo"] = 1
                    },
                    new JObject()
                    {
                        ["Bar"] = 2
                    },
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #4
0
        public void Can_match_through_null_value()
        {
            var f = new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$is"] = "foo"
                }
            };

            JsonQueryCompiler.Matches((JObject)null, f).Should().BeFalse();
        }
Пример #5
0
        public void Can_navigate_to_parent_of_null_and_get_null()
        {
            var e = new JObject()
            {
            };

            var q = new JObject()
            {
                ["<.<.<.Value"] = "Value"
            };

            JsonQueryCompiler.Matches(e, q).Should().BeFalse();
        }
Пример #6
0
        public void Can_match_nested_property_through_null_dictionary_on_strongly_typed_object()
        {
            var o = new ObjectA()
            {
            };

            var e = new JObject()
            {
                ["Bar.Item1.Foo"] = new JObject()
                {
                    ["$in"] = new JArray("a", "b"),
                }
            };

            JsonQueryCompiler.Matches(o, e).Should().BeFalse();
        }
Пример #7
0
        public void Can_match_through_null_property_value_two_layers()
        {
            var d = new JObject()
            {
                ["Foo"] = null
            };

            var f = new JObject()
            {
                ["Foo.Bar"] = new JObject()
                {
                    ["$is"] = "foo"
                }
            };

            JsonQueryCompiler.Matches(d, f).Should().BeFalse();
        }
Пример #8
0
        public void Can_navigate_to_parent()
        {
            var e = new JObject()
            {
                ["Property"] = new JObject()
                {
                    ["Value"] = "Value"
                }
            };

            var q = new JObject()
            {
                ["<.Value"] = "Value"
            };

            JsonQueryCompiler.Matches(e["Property"]["Value"], q).Should().BeTrue();
        }
Пример #9
0
        public void Can_build_predicate_across_jobject_with_equality()
        {
            var b = new JsonQueryCompiler();
            var d = new JObject()
            {
                ["Foo"] = "bar"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = "bar"
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }
Пример #10
0
        public void Can_execute_predicate_function()
        {
            var d = new JObject()
            {
                ["Foo"] = "bar"
            };

            var f = new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$is"] = "bar"
                }
            };

            JsonQueryCompiler.PredicateFunc <JObject>(f)(d).Should().BeTrue();
            JsonQueryCompiler.PredicateFunc <JObject>(f)(d).Should().BeTrue();
        }
Пример #11
0
        public void Can_match_nested_property_through_null_returned_by_dictionary()
        {
            var d = new
            {
                Bar = new Dictionary <string, Tuple <string, string> >()
                {
                    ["Foo"] = null
                }
            };

            var e = new JObject()
            {
                ["Bar.Foo.Item1"] = new JObject()
                {
                    ["$in"] = new JArray("a", "b"),
                }
            };

            JsonQueryCompiler.Matches(d, e).Should().BeFalse();
        }
Пример #12
0
        public void Can_match_nested_property_value_not_equal_to()
        {
            var d = new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["Bar"] = "dsa"
                }
            };

            var e = new JObject()
            {
                ["Foo.Bar"] = new JObject()
                {
                    ["$is"] = "asd"
                }
            };

            JsonQueryCompiler.Matches(d, e).Should().BeFalse();
        }
Пример #13
0
        public void Can_match_nested_property_value()
        {
            var d = new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["Bar"] = "string"
                }
            };

            var e = new JObject()
            {
                ["Foo.Bar"] = new JObject()
                {
                    ["$is"] = "string"
                }
            };

            JsonQueryCompiler.Matches(d, e).Should().BeTrue();
        }
Пример #14
0
        public void Can_build_predicate_with_in_multitype_1()
        {
            var b = new JsonQueryCompiler();
            var d = new
            {
                Foo = 3
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$in"] = new JArray("test1", null, 3),
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #15
0
        public void Can_build_predicate_with_multiple_equality()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo1 = "bar",
                Foo2 = "joe",
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo1"] = "bar",
                ["Foo2"] = "joe"
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }
Пример #16
0
        public void Can_build_predicate_with_greaterthanequalto()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = 125
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$gte"] = 125,
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }
Пример #17
0
        public void Can_build_predicate_with_contains_string()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = "zebra's cannot be fuzzy"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$contains"] = "fuzzy",
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }
Пример #18
0
        public void Can_build_predicate_with_contains_string_failed_equality()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = "spinach salad"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$contains"] = "kale",
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #19
0
        public void Can_build_predicate_with_in_list_string_failed_equality()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = "randomTest"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$in"] = new JArray("test1", "test2", "test3", "test4", "test5"),
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #20
0
        public void Can_build_predicate_with_not_in_list_string()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = "kitten"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["!$in"] = new JArray("test1", "test2", "test3", "test4", "test5"),
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }
Пример #21
0
        public void Can_build_predicate_with_lessthanequalto_with_failed_equality()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = 125
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["$lte"] = 119,
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(false);
        }
Пример #22
0
        public void Can_build_predicate_with_not_contains_string()
        {
            var b = new JsonQueryCompiler();

            var d = new
            {
                Foo = "panda panda panda"
            };

            var p = Expression.Parameter(d.GetType());
            var e = b.Predicate(p, new JObject()
            {
                ["Foo"] = new JObject()
                {
                    ["!$contains"] = "black bear",
                }
            });

            var r = (bool)e.Compile().DynamicInvoke(d);

            r.Should().Be(true);
        }