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)); }
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 })); }
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) ); }
public void TestAllInstructionsCanBeDisassembled(IManagedMethod method) { var disassembler = ExpressiveEngine.GetDisassembler(); Assert.DoesNotThrow(() => disassembler.Disassemble(method)); }