public void SourceInfoAttribute_Valid_Usage() { // Ask for the base type's attributes object[] attributes = typeof(SourceInfoTestClass).GetCustomAttributes(false); SourceInfo sourceInfo = SourceInfo.GetSourceInfoFromAttributes(attributes); Assert.IsNotNull(sourceInfo, "Failed to get SourceInfo from type level attributes"); Assert.AreEqual("typeLevelFile", sourceInfo.FileName, "Wrong FileName for type level sourceInfo"); Assert.AreEqual(1, sourceInfo.Line, "Wrong Line for type level sourceInfo"); Assert.AreEqual(2, sourceInfo.Column, "Wrong Column for type level sourceInfo"); // And the derived type's attributes -- should *not* inherit attributes = typeof(SourceInfoDerivedTestClass).GetCustomAttributes(false); sourceInfo = SourceInfo.GetSourceInfoFromAttributes(attributes); Assert.IsNotNull(sourceInfo, "Failed to get SourceInfo from type level attributes"); Assert.AreEqual("typeLevelFileDerived", sourceInfo.FileName, "Wrong FileName for type level sourceInfo"); Assert.AreEqual(1, sourceInfo.Line, "Wrong Line for type level sourceInfo"); Assert.AreEqual(2, sourceInfo.Column, "Wrong Column for type level sourceInfo"); // Validate base ctor MethodBase methodBase = typeof(SourceInfoTestClass).GetConstructor(new Type[0]); Assert.IsNotNull(methodBase, "Could not find base ctor"); attributes = methodBase.GetCustomAttributes(false); sourceInfo = SourceInfo.GetSourceInfoFromAttributes(attributes); Assert.IsNotNull(sourceInfo, "Failed to get SourceInfo from ctor level attributes"); Assert.AreEqual("ctorLevelFile", sourceInfo.FileName, "Wrong FileName for type level sourceInfo"); Assert.AreEqual(3, sourceInfo.Line, "Wrong Line for ctor level sourceInfo"); Assert.AreEqual(4, sourceInfo.Column, "Wrong Column for ctor level sourceInfo"); // Validate derived ctor methodBase = typeof(SourceInfoDerivedTestClass).GetConstructor(new Type[0]); Assert.IsNotNull(methodBase, "Could not find derived ctor"); attributes = methodBase.GetCustomAttributes(false); sourceInfo = SourceInfo.GetSourceInfoFromAttributes(attributes); Assert.IsNotNull(sourceInfo, "Failed to get SourceInfo from ctor level attributes"); Assert.AreEqual("ctorLevelFileDerived", sourceInfo.FileName, "Wrong FileName for ctor level sourceInfo"); Assert.AreEqual(3, sourceInfo.Line, "Wrong Line for ctor level sourceInfo"); Assert.AreEqual(4, sourceInfo.Column, "Wrong Column for ctor level sourceInfo"); // Validate base property via derived type PropertyInfo propertyInfo = typeof(SourceInfoDerivedTestClass).GetProperty("TheValue"); Assert.IsNotNull(propertyInfo, "Could not locate TheValue property"); attributes = propertyInfo.GetCustomAttributes(false); sourceInfo = SourceInfo.GetSourceInfoFromAttributes(attributes); Assert.IsNotNull(sourceInfo, "Failed to get SourceInfo from ctor level attributes"); Assert.AreEqual("propertyLevelFile", sourceInfo.FileName, "Wrong FileName for property level level sourceInfo"); Assert.AreEqual(5, sourceInfo.Line, "Wrong Line for ctor level sourceInfo"); Assert.AreEqual(6, sourceInfo.Column, "Wrong Column for ctor level sourceInfo"); }