Ejemplo n.º 1
0
        public void TestInliningOfBasicProperty()
        {
            Expression <Func <ClassWithNames, bool> > predicate = c => c.FullNameSimple.Contains("Test"); // not a recommended database scenario
            var inliner = new Inliner(ExpressiveEngine.GetDecompiler());

            var inlined = inliner.Inline(predicate, p => p.Name == "FullNameSimple");

            Assert.AreEqual("c => String.Concat(c.FirstName, \" \", c.LastName).Contains(\"Test\")", ToStringVisitor.ToString(inlined));
        }
Ejemplo n.º 2
0
        private IEnumerable <object[]> GetAllSupportedMethods()
        {
            var disassembler = ExpressiveEngine.GetDisassembler();

            return(GetAllNonGenericMethods()
                   .Select(method => new { method, instructions = disassembler.Disassemble(method).ToList() })
                   .Where(x => !x.instructions.Any(i => UnsupportedOpCodes.Contains(i.OpCode)))
                   .Select(x => new object[] { x.method, x.instructions }));
        }
Ejemplo n.º 3
0
        public void TestAllInstructionsExceptSpecificOnesAreProcessed()
        {
            var pipeline     = new DefaultPipeline().Without <LambdaInliningVisitor>();
            var disassembler = ExpressiveEngine.GetDisassembler();
            var visitor      = new InstructionCollectingVisitor();

            foreach (var method in GetAllNonGenericMethods())
            {
                var elements = disassembler.Disassemble(method)
                               .Select(i => (IElement) new InstructionElement(i)).ToList();
                try { ApplyPipeline(pipeline, elements, method); } catch { continue; }
                visitor.VisitList(elements);
            }

            Assert.AreElementsEqual(
                new OpCode[0],
                visitor.OpCodes.Except(UnsupportedOpCodes).OrderBy(code => code.Name)
                );
        }
Ejemplo n.º 4
0
        public void TestAllInstructionsCanBeDisassembled(IManagedMethod method)
        {
            var disassembler = ExpressiveEngine.GetDisassembler();

            Assert.DoesNotThrow(() => disassembler.Disassemble(method));
        }