1/*
2 * [The "BSD licence"]
3 * Copyright (c) 2005-2008 Terence Parr
4 * All rights reserved.
5 *
6 * Conversion to C#:
7 * Copyright (c) 2008-2009 Sam Harwell, Pixel Mine, Inc.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote products
19 *    derived from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33namespace Antlr3.Runtime.Test
34{
35    using System;
36    using Antlr.Runtime;
37    using Antlr.Runtime.Tree;
38    using Microsoft.VisualStudio.TestTools.UnitTesting;
39
40    [TestClass]
41    public class TestDotTreeGenerator
42    {
43        [TestMethod]
44        public void TestCreateDot()
45        {
46            ANTLRStringStream input = new ANTLRStringStream( "3 * x" );
47            SimpleExpressionLexer lexer = new SimpleExpressionLexer( input );
48            CommonTokenStream tokens = new CommonTokenStream( lexer );
49            SimpleExpressionParser parser = new SimpleExpressionParser( tokens );
50            var result = parser.expression();
51
52            var tree = result.Tree;
53            var adaptor = parser.TreeAdaptor;
54
55            DotTreeGenerator gen = new DotTreeGenerator();
56            string output = gen.ToDot( tree, adaptor );
57            string newline = Environment.NewLine;
58            string expected =
59                @"digraph {" + newline
60                + newline
61                + @"	ordering=out;" + newline
62                + @"	ranksep=.4;" + newline
63                + @"	bgcolor=""lightgrey""; node [shape=box, fixedsize=false, fontsize=12, fontname=""Helvetica-bold"", fontcolor=""blue""" + newline
64                + @"		width=.25, height=.25, color=""black"", fillcolor=""white"", style=""filled, solid, bold""];" + newline
65                + @"	edge [arrowsize=.5, color=""black"", style=""bold""]" + newline
66                + newline
67                + @"  n0 [label=""""];" + newline
68                + @"  n1 [label=""*""];" + newline
69                + @"  n1 [label=""*""];" + newline
70                + @"  n2 [label=""3""];" + newline
71                + @"  n3 [label=""x""];" + newline
72                + @"  n4 [label=""""];" + newline
73                + newline
74                + @"  n0 -> n1 // """" -> ""*""" + newline
75                + @"  n1 -> n2 // ""*"" -> ""3""" + newline
76                + @"  n1 -> n3 // ""*"" -> ""x""" + newline
77                + @"  n0 -> n4 // """" -> """"" + newline
78                + newline
79                + @"}" + newline
80                + @"";
81
82            Assert.AreEqual( expected, output );
83        }
84    }
85}
86