public void CanVisitLocalsAndArguments()
        {
            //-- Arrange

            DeriveClassFrom <object>()
            .DefaultConstructor()
            .ImplementInterface <AncestorRepository.IFewMethods>()
            .Method <int, string>(intf => intf.Five).Implement((w, n) => {
                var s = w.Local <string>();
                s.Assign(n.Func <string>(x => x.ToString));
                w.Return(s);
            })
            .AllMethods().Throw <NotImplementedException>()
            .Flush();

            var method = base.Class.GetAllMembers().OfType <MethodMember>().Single(m => m.Name == "Five");

            method.Write();

            //-- Act

            var visitor = new TestVisitor();

            method.AcceptVisitor(visitor);

            var visitedOperandStrings = visitor.GetVisitedOperands().Select(op => op.ToString()).ToArray();

            //-- Assert

            CollectionAssert.Contains(visitedOperandStrings, "Loc0");
            CollectionAssert.Contains(visitedOperandStrings, "Arg1[n]");
        }
        public void CanVisitThisAndFields()
        {
            //-- Arrange

            Field <int> fieldOne;

            DeriveClassFrom <object>()
            .Field("m_One", out fieldOne)
            .DefaultConstructor()
            .ImplementInterface <AncestorRepository.IFewMethods>()
            .Method <int, string>(intf => intf.Five).Implement((w, n) => {
                fieldOne.Assign(n);
                w.Return(fieldOne.Func <string>(x => x.ToString));
            })
            .AllMethods().Throw <NotImplementedException>()
            .Flush();

            var method = base.Class.GetAllMembers().OfType <MethodMember>().Single(m => m.Name == "Five");

            method.Write();

            //-- Act

            var visitor = new TestVisitor();

            method.AcceptVisitor(visitor);

            var visitedOperandStrings = visitor.GetVisitedOperands().Select(op => op.ToString()).ToArray();

            //-- Assert

            CollectionAssert.Contains(visitedOperandStrings, "this");
            CollectionAssert.Contains(visitedOperandStrings, "this.Field[m_One]");
        }
        public void CanReturnEmptyListIfNoOperandsFound()
        {
            //-- Arrange

            DeriveClassFrom <object>()
            .DefaultConstructor()
            .ImplementInterface <AncestorRepository.IFewMethods>()
            .Method(intf => intf.One).Implement(w => Static.Void(Console.WriteLine))
            .AllMethods().Throw <NotImplementedException>()
            .Flush();

            var method = base.Class.GetAllMembers().OfType <MethodMember>().Single(m => m.Name == "One");

            method.Write();

            //-- Act

            var visitor = new TestVisitor();

            method.AcceptVisitor(visitor);
            var visitedOperands = visitor.GetVisitedOperands();

            //-- Assert

            Assert.That(visitedOperands, Is.Empty);
        }