private Statement ParseActionsDeclarationStatement() { _scanResult.Next().Is(TokenType.Actions); var expressionList = ParseExpressionList(); var accoladeOpen = _scanResult.Next(); if (accoladeOpen.tokenType != TokenType.AccoladeOpen) { throw new ParsingException(); } var result = new ActionsDeclarationStatement() { Name = expressionList.Last().As <LiteralExpression>().Value, Modifiers = expressionList.Take(expressionList.Length - 1).ToNodeList(), Actions = _scanResult.Next().literal }; _scanResult.Next().Is(TokenType.AccoladeClose); return(result); }
public void ActionsDeclarationStatement() { ActionsDeclarationStatement actionsDeclarationStatement = ParseStatement <ActionsDeclarationStatement>(@" actions response myactionname { echo something echo somethingelse echo ""harry"" echo \pieter }"); Assert.AreEqual("myactionname", actionsDeclarationStatement.Name); CollectionAssert.AreEqual(new[] { "response" }, actionsDeclarationStatement.Modifiers.Cast <LiteralExpression>().Select(le => le.Value)); Assert.IsTrue(actionsDeclarationStatement.Actions.Contains("echo something")); Assert.IsTrue(actionsDeclarationStatement.Actions.Contains("echo somethingelse")); //preserve quotes: Assert.IsTrue(actionsDeclarationStatement.Actions.Contains("echo \"harry\"")); //preserve backslash Assert.IsTrue(actionsDeclarationStatement.Actions.Contains("echo \\pieter")); }