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");
        }