Exemple #1
0
        public void Create_ObjectStringEqualNull_Expression()
        {
            // arrange
            var value = new ObjectValueNode(
                new ObjectFieldNode("foo",
                                    new ObjectValueNode(
                                        new ObjectFieldNode("fooNested",
                                                            new ObjectValueNode(
                                                                new ObjectFieldNode("bar",
                                                                                    new StringValueNode("a")))))));

            EvenDeeperFilterType fooType = CreateType(new EvenDeeperFilterType());

            // act
            var filterContext = new QueryableFilterVisitorContext(
                fooType,
                typeof(EvenDeeper),
                MockFilterConvention.Default.GetExpressionDefinition(),
                TypeConversion.Default,
                true);

            QueryableFilterVisitor.Default.Visit(value, filterContext);
            Func <EvenDeeper, bool> func = filterContext.CreateOrAssert <EvenDeeper>().Compile();

            // assert
            var a = new EvenDeeper {
                Foo = null
            };

            Assert.False(func(a));

            var b = new EvenDeeper {
                Foo = new Foo {
                    FooNested = null
                }
            };

            Assert.False(func(b));

            var c = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = null
                    }
                }
            };

            Assert.False(func(c));

            var d = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = "a"
                    }
                }
            };

            Assert.True(func(d));
        }
        public void Create_ObjectStringEqualDeep_Expression()
        {
            // arrange
            var value = new ObjectValueNode(
                new ObjectFieldNode("foo",
                                    new ObjectValueNode(
                                        new ObjectFieldNode("fooNested",
                                                            new ObjectValueNode(
                                                                new ObjectFieldNode("bar",
                                                                                    new StringValueNode("a")
                                                                                    )
                                                                )
                                                            )
                                        )
                                    )
                );

            var fooType = CreateType(new EvenDeeperFilterType());

            // act
            var filter = new QueryableFilterVisitor(
                fooType,
                typeof(EvenDeeper),
                TypeConversion.Default,
                true);

            filter.Visit(value, null);
            Func <EvenDeeper, bool> func = filter.CreateFilter <EvenDeeper>().Compile();

            // assert
            var a = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = "a"
                    }
                }
            };

            Assert.True(func(a));

            var b = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = "b"
                    }
                }
            };

            Assert.False(func(b));
        }
        public void Create_ObjectStringEqualNullWithMultipleFilters_Expression()
        {
            // arrange
            var value = new ObjectValueNode(
                new ObjectFieldNode("foo",
                                    new ObjectValueNode(
                                        new ObjectFieldNode("fooNested",
                                                            new ObjectValueNode(
                                                                new ObjectFieldNode("bar",
                                                                                    new StringValueNode("a")
                                                                                    ),

                                                                new ObjectFieldNode("bar_not",
                                                                                    new StringValueNode("c")
                                                                                    )
                                                                )
                                                            )
                                        )
                                    )
                );

            var fooType = CreateType(new EvenDeeperFilterType());

            // act
            var filter = new QueryableFilterVisitor(
                fooType,
                typeof(EvenDeeper),
                TypeConversion.Default);

            value.Accept(filter);
            Func <EvenDeeper, bool> func = filter.CreateFilter <EvenDeeper>().Compile();

            // assert
            var a = new EvenDeeper {
                Foo = null
            };

            Assert.False(func(a));

            var b = new EvenDeeper {
                Foo = new Foo {
                    FooNested = null
                }
            };

            Assert.False(func(b));

            var c = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = null
                    }
                }
            };

            Assert.False(func(c));

            var d = new EvenDeeper {
                Foo = new Foo {
                    FooNested = new FooNested {
                        Bar = "a"
                    }
                }
            };

            Assert.True(func(d));
        }