public void Should_transform_def_symbol_node_into_variable_declaration_node()
        {
            var inputText        = "(def text \"Hello, World!\")";
            var originalRootNode = inputText.CreateAstNodes();

            IVisitor <INode <AstNode>, INode <AstNode> > converter = new VariableDeclarationConverter();
            var outputNode = converter.Visit(originalRootNode);

            outputNode.Descendants().Any(d => d is VariableDefinitionNode).ShouldBe(true);
            var declarationNode =
                outputNode.Descendants()
                .Where(d => d is VariableDefinitionNode)
                .Cast <VariableDefinitionNode>()
                .First();

            declarationNode.Symbol.ShouldBe("text");
            declarationNode.Value.ShouldBeOfType <StringNode>();

            var stringNode = (StringNode)declarationNode.Value;

            stringNode.Text.ShouldBe("Hello, World!");
        }
        public void Should_transform_more_than_one_variable_declaration()
        {
            var inputText        = "((def x 321) (def y 123))";
            var originalRootNode = inputText.CreateAstNodes();

            IVisitor <INode <AstNode>, INode <AstNode> > converter = new VariableDeclarationConverter();
            var outputNode = converter.Visit(originalRootNode);

            var declarationNodes =
                outputNode.Descendants()
                .Where(d => d is VariableDefinitionNode)
                .Cast <VariableDefinitionNode>().ToArray();

            declarationNodes.Count().ShouldBe(2);
            declarationNodes[0].Symbol.ShouldBe("x");
            declarationNodes[1].Symbol.ShouldBe("y");

            var numberNodes = new[] { declarationNodes[0].Value, declarationNodes[1].Value }.Select(node => node as NumberNode).Where(n => n != null).ToArray();

            numberNodes.ShouldNotBeEmpty();

            numberNodes[0].Number.ShouldBe("321");
            numberNodes[1].Number.ShouldBe("123");
        }