public void EndExpression_WhenInsideKleene_SetsExpression() { // Arrange: var stack = new Stack <IAstNode>(); var kleeneToken = new Token { TokenKind = TokenKind.LeftBrace, Image = "{" }; var kleene = new KleeneNode(kleeneToken, _tracerMock.Object); stack.Push(kleene); var exprToken = new Token { TokenKind = TokenKind.String, Image = "<T>" }; var expr = _nodeFactoryMock.Object.Create(AstNodeType.Expression, exprToken); stack.Push(expr); var builder = new AstBuilder(null, null, stack, _tracerMock.Object); // Act: builder.EndExpression(); // Assert: Assert.That(stack.Count, Is.EqualTo(1)); Assert.That(stack.Peek(), Is.InstanceOf(typeof(IKleeneStarNode))); Assert.That((stack.Peek() as IKleeneStarNode)?.Expression, Is.Not.Null); }
public IAstNode BuildTree() { var kleeneNode = new KleeneNode(new Token(), _tracer); var exprNode = _expr.BuildTree(); kleeneNode.Expression = exprNode; return(kleeneNode); }
public void KleeneNode_WithExpression_ReturnsCorrectString() { // Arranged: var exprNodeMock = new Mock <IExpressionNode>(); exprNodeMock.Setup(exprNode => exprNode.AstNodeType).Returns(AstNodeType.Expression); exprNodeMock.Setup(exprNode => exprNode.ToString()).Returns(() => "<T>"); var node = new KleeneNode(new Token(TokenKind.LeftBrace, "("), _tracer) { Expression = exprNodeMock.Object }; // Act: var actual = node.ToString(); // Assert: Assert.That(actual, Is.EqualTo("{ <T> }")); }
private Mock <IAstNodeFactory> BuildNodeFactory() { var mock = new Mock <IAstNodeFactory>(); // Syntax mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Syntax), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new SyntaxNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Statement mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Statement), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new StatementNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Expression mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Expression), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new ExpressionNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Term mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Term), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new TermNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Factor mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Factor), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new FactorNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Paren mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Paren), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new ParenNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Option mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Option), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new OptionNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Kleene mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.KleeneStar), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new KleeneNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // ProdRef mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.ProdRef), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new ProdRefNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Terminal mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Terminal), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new TerminalNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); // Action mock.Setup(factory => factory.Create(It.Is <AstNodeType>(nodeType => nodeType == AstNodeType.Action), It.IsAny <IToken>())) .Returns((AstNodeType nodeType, IToken token) => { var node = new ActionNode(token, _tracerMock.Object); _allNodes.Add(node); return(node); }); mock.Setup(factory => factory.AllNodes).Returns(_allNodes); return(mock); }