Пример #1
0
 static void Main(string[] args)
 {
     var theFoo = new Foo();
     int count  = theFoo.Accept(new CountVisitor());
 }
Пример #2
0
        public void TestVisitor()
        {
            Foo root = new Foo(0);
            Foo foo1 = new Foo(1);
            Foo foo2 = new Foo(2);
            Foo foo3 = new Foo(3);
            Foo foo4 = new Foo(4);
            Foo foo5 = new Foo(5);

            // root
            //   foo1
            //     foo3
            //     foo4
            //       foo5
            //   foo2
            root.Children.Add(foo1);
            root.Children.Add(foo2);
            foo1.Children.Add(foo3);
            foo1.Children.Add(foo4);
            foo4.Children.Add(foo5);

            ResultCollectingVisitor visitor = new ResultCollectingVisitor();

            root.Accept(visitor, NextVisitOrder.PositiveOrder);

            Result[] results = new Result[] {
                new Result()
                {
                    Foo = root, IsEnd = false
                },
                new Result()
                {
                    Foo = foo1, IsEnd = false
                },
                new Result()
                {
                    Foo = foo3, IsEnd = false
                },
                new Result()
                {
                    Foo = foo3, IsEnd = true
                },
                new Result()
                {
                    Foo = foo4, IsEnd = false
                },
                new Result()
                {
                    Foo = foo5, IsEnd = false
                },
                new Result()
                {
                    Foo = foo5, IsEnd = true
                },
                new Result()
                {
                    Foo = foo4, IsEnd = true
                },
                new Result()
                {
                    Foo = foo1, IsEnd = true
                },
                new Result()
                {
                    Foo = foo2, IsEnd = false
                },
                new Result()
                {
                    Foo = foo2, IsEnd = true
                },
                new Result()
                {
                    Foo = root, IsEnd = true
                },
            };

            for (int i = 0; i < visitor.Result.Count; ++i)
            {
                Assert.AreEqual(results[i], visitor.Result[i]);
            }
        }