public virtual void testOnceTopDownIsLeaf()
 {
     IVisitor isLeaf = new All(new Fail());
     OnceTopDown onceTopDown = new OnceTopDown(logVisitor(isLeaf));
     Logger expected = new Logger(isLeaf, new IVisitable[]{n0,n1,n11});
     try
     {
         IVisitable nodeReturned = onceTopDown.visit(n0);
         Assertion.AssertEquals("visit trace",expected, logger);
         Assertion.AssertEquals("return value",n0, nodeReturned);
     }
     catch (VisitFailure)
     {
         Assertion.Fail("VisitFailure should not occur!");
     }
 }
 public virtual void testOnceTopDownFail()
 {
     IVisitor f = new Fail();
     OnceTopDown onceTopDown = new OnceTopDown(logVisitor(f));
     Logger expected = new Logger(f, new IVisitable[]{n0,n1,n11,n12,n2});
     IVisitable nodeReturned = null;
     try
     {
         nodeReturned = onceTopDown.visit(n0);
         Assertion.Fail("VisitFailure should have occured!");
     }
     catch (VisitFailure)
     {
         Assertion.AssertEquals("visit trace",expected, logger);
         Assertion.AssertNull("return value",nodeReturned);
     }
 }