public void Dispatch_IdentifierExpAndStringList_CorrectIdentifierExpPassedToVisitIdentifier()
        {
            IdentifierExpression expected = new IdentifierExpression("id", 1, 1);
            IdentifierExpression input1   = expected;
            List <string>        input2   = new List <string>()
            {
                "id"
            };
            IReferenceHelper     helper     = Substitute.For <IReferenceHelper>();
            ReferenceHandler     refHandler = new ReferenceHandler(helper);
            IdentifierExpression res        = null;

            helper.VisitIdentifier(Arg.Do <IdentifierExpression>(x => res = x), Arg.Any <List <string> >());

            refHandler.Dispatch(input1, input2);

            res.Should().BeEquivalentTo(expected);
        }
        public void Dispatch(ExpressionNode node, List <string> parameters)
        {
            Try(() =>
            {
                switch (node)
                {
                case IdentifierExpression e: _helper.VisitIdentifier(e, parameters); break;

                case INonIdentifierExpression e: _helper.VisitNonIdentifier(e, parameters); break;

                case FunctionCallExpression e: _helper.VisitFunctionCall(e, parameters); break;

                case SetExpression e: _helper.VisitSet(e, parameters); break;

                case AnonymousFunctionExpression e: _helper.VisitAnonymousFunction(e, parameters); break;

                default: throw new UnimplementedReferenceHandlerException(node);
                }
            });
        }