示例#1
0
        // Internal for testing
        internal static string ResolveTagHelperTypeName(TagHelperAttributeDescriptionInfo info)
        {
            // A BoundAttributeDescriptor does not have a direct reference to its parent TagHelper.
            // However, when it was constructed the parent TagHelper's type name was embedded into
            // its DisplayName. In VSCode we can't use the DisplayName verbatim for descriptions
            // because the DisplayName is typically too long to display properly. Therefore we need
            // to break it apart and then reconstruct it in a reduced format.
            // i.e. this is the format the display name comes in:
            // ReturnTypeName SomeTypeName.SomePropertyName

            // We must simplify the return type name before using it to determine the type name prefix
            // because that is how the display name was originally built (a little hacky).
            var simpleReturnType = GetSimpleName(info.ReturnTypeName);

            // "ReturnTypeName "
            var typeNamePrefixLength = simpleReturnType.Length + 1 /* space */;

            // ".SomePropertyName"
            var typeNameSuffixLength = /* . */ 1 + info.PropertyName.Length;

            // "SomeTypeName"
            var typeNameLength    = info.DisplayName.Length - typeNamePrefixLength - typeNameSuffixLength;
            var tagHelperTypeName = info.DisplayName.Substring(typeNamePrefixLength, typeNameLength);

            return(tagHelperTypeName);
        }
        public void ResolveTagHelperTypeName_ExtractsTypeName_ComplexReturnType()
        {
            // Arrange
            var info = new TagHelperAttributeDescriptionInfo(
                displayName: "SomeReturnTypeName SomeTypeName.SomePropertyName",
                propertyName: "SomePropertyName",
                returnTypeName: "SomeReturnTypeName",
                documentation: string.Empty);

            // Act
            var typeName = DefaultTagHelperDescriptionFactory.ResolveTagHelperTypeName(info);

            // Assert
            Assert.Equal("SomeTypeName", typeName);
        }