public void NullNodesCallVisitNullNode() { foreach (Type type in typeof(AstNode).Assembly.GetExportedTypes()) { if (type.IsSubclassOf(typeof(AstNode))) { var nullField = type.GetField("Null"); if (nullField != null) { AstNode nullNode = (AstNode)nullField.GetValue(null); Assert.IsTrue(nullNode.IsNull, nullNode.GetType().Name + " should be a null node"); var v1 = new VisitNullNodeTest(); var v2 = new VisitNullNodeTest<string>(); var v3 = new VisitNullNodeTest<string, string>(); nullNode.AcceptVisitor(v1); nullNode.AcceptVisitor(v2); nullNode.AcceptVisitor(v3, null); Assert.IsTrue(v1.called, nullNode.GetType().Name + " should call 'void VisitNullNode();'"); Assert.IsTrue(v2.called, nullNode.GetType().Name + " should call 'T VisitNullNode();'"); Assert.IsTrue(v3.called, nullNode.GetType().Name + " should call 'S VisitNullNode(T data);'"); } } } }
public void NullNodesCallVisitNullNode() { foreach (Type type in typeof(AstNode).Assembly.GetExportedTypes()) { if (type.IsSubclassOf(typeof(AstNode))) { var nullField = type.GetField("Null"); if (nullField != null) { AstNode nullNode = (AstNode)nullField.GetValue(null); Assert.IsTrue(nullNode.IsNull, nullNode.GetType().Name + " should be a null node"); var v1 = new VisitNullNodeTest(); var v2 = new VisitNullNodeTest <string>(); var v3 = new VisitNullNodeTest <string, string>(); nullNode.AcceptVisitor(v1); nullNode.AcceptVisitor(v2); nullNode.AcceptVisitor(v3, null); Assert.IsTrue(v1.called, nullNode.GetType().Name + " should call 'void VisitNullNode();'"); Assert.IsTrue(v2.called, nullNode.GetType().Name + " should call 'T VisitNullNode();'"); Assert.IsTrue(v3.called, nullNode.GetType().Name + " should call 'S VisitNullNode(T data);'"); } } } }