static void Main(string[] args) { var theFoo = new Foo(); int count = theFoo.Accept(new CountVisitor()); }
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]); } }