public void TypeTraversalTraverseTest() { string fullName = string.Empty; Dictionary <string, MethodInfo> methods = new Dictionary <string, MethodInfo>(); Dictionary <string, PropertyInfo> properties = new Dictionary <string, PropertyInfo>(); Dictionary <string, PropertyInfo> delegateProperties = new Dictionary <string, PropertyInfo>(); Dictionary <string, FieldInfo> fields = new Dictionary <string, FieldInfo>(); Dictionary <string, Type> nestedTypes = new Dictionary <string, Type>(); Type type = typeof(SimpleType); TypeTraversal typeTraversal = new TypeTraversal { // Excluded types IsExcludedType = t => { return(false); }, // No types are excluded // OnType handler OnBeginType = (trav, t) => { fullName = t.FullName; return(true); }, // OnMethod handler OnMethod = (trav, t, methodInfo) => { methods.Add(methodInfo.Name, methodInfo); }, // OnProperty handler OnProperty = (trav, t, propertyInfo) => { properties.Add(propertyInfo.Name, propertyInfo); }, // OnProperty delegate handler OnPropertyDelegate = (trav, t, propertyInfo) => { delegateProperties.Add(propertyInfo.Name, propertyInfo); }, // OnField handler OnField = (trav, t, fieldInfo) => { fields.Add(fieldInfo.Name, fieldInfo); }, // Nested type handler OnNestedType = (trav, nestedType) => { nestedTypes.Add(nestedType.Name, nestedType); } }; typeTraversal.Traverse(type); Assert.AreEqual(type.FullName, fullName); Assert.IsNotNull(methods["AMethod"]); Assert.IsNotNull(properties["StringProperty"]); Assert.IsNotNull(delegateProperties["DelegateProperty"]); Assert.IsNotNull(fields["integerField"]); Assert.IsNotNull(nestedTypes["AnEnumeration"]); }
public Traversal(TypeTraversal type, TreeBinaryNode <T> t) { switch ((int)type) { case 0: preOrderTraversal(t); break; case 1: inOrderTraversal(t); break; case 2: postOrderTraversal(t); break; } }