public static void ParseElementExpression()
        {
            var expression = "providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]";
            var actual     = ArmExpressionParser.Parse(expression);
            var expected   = new ArmElementAccessExpressionAst(
                expression: new ArmMemberAccessExpressionAst(
                    expression: new ArmInvocationExpressionAst(
                        expression: new ArmFunctionReferenceAst(
                            name: new IdentifierToken("providers")
                            ),
                        argumentList: new ArmArgumentListAst(
                            openParen: new OpenParenToken(),
                            arguments: new List <ArmExpressionAst>()
            {
                new ArmStringLiteralExpressionAst(
                    new StringLiteralToken("Microsoft.Storage")
                    ),
                new ArmStringLiteralExpressionAst(
                    new StringLiteralToken("storageAccounts")
                    )
            },
                            closeParen: new CloseParenToken()
                            )),
                    operatorToken: new DotOperatorToken(),
                    name: new IdentifierToken("apiVersions")
                    ),
                argumentList: new ArmBracketedArgumentListAst(
                    openBracket: new OpenBracketToken(),
                    arguments: new List <ArmExpressionAst>()
            {
                new ArmNumericLiteralExpressionAst(
                    new IntegerToken(0)
                    ),
            },
                    closeBracket: new CloseBracketToken()
                    )
                );

            ParserHelper.AssertAreEqual(expected, actual);
            Assert.AreEqual(expression, actual.ToArmText());
        }
 private static void Evaluate(ArmElementAccessExpressionAst node)
 {
     throw new NotImplementedException();
 }