Пример #1
0
        public void ProdRefNode_WithIdentifier_ReturnsCorrectString()
        {
            // Arranged:
            var node = new ProdRefNode(new Token(TokenKind.Identifier, "<T>"), _tracer);

            // Act:
            var actual = node.ToString();

            // Assert:
            Assert.That(actual, Is.EqualTo("<T>"));
        }
Пример #2
0
        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);
        }