public void MetadataControlResolver_AttributeNames_ActiveProperties()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            var tagNameHierarchy = new List <string>()
            {
                "html"
            };
            bool combineWithHtmlCompletions;
            var  completions =
                resolver.GetControlAttributeNames(context, tagNameHierarchy, out combineWithHtmlCompletions)
                .Concat(resolver.GetAttachedPropertyNames(context))
                .ToList();

            Assert.IsTrue(combineWithHtmlCompletions);
            Assert.IsTrue(completions.Any(c => c.CompletionText == "DataContext"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "Visible"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "Validate.Enabled"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "Validate.Target"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "RenderSettings.Mode"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "PostBack.Update"));

            Assert.IsTrue(completions.Any(c => c.CompletionText == "ValidationMessage.ValidatedValue"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "ValidationMessage.HideWhenValid"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "ValidationMessage.InvalidCssClass"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "ValidationMessage.SetToolTipText"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "ValidationMessage.ShowErrorMessageText"));
        }
 private void FireWorkspaceChanged()
 {
     foreach (var provider in CompletionProviders)
     {
         provider.OnWorkspaceChanged();
     }
     MetadataControlResolver.OnWorkspaceChanged();
 }
        public void MetadataControlResolver_ReloadAttachedProperties()
        {
            TestInit();

            var resolver           = new MetadataControlResolver();
            var attachedProperties = resolver.GetAttachedPropertyNames(context);

            Assert.IsTrue(attachedProperties.Any(c => c.DisplayText == "RenderSettings.Mode"));
        }
        public void MetadataControlResolver_ReloadAllControls()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            Assert.IsTrue(allControls.Any(c => c.DisplayText == "dot:TextBox"));
        }
        public void MetadataControlResolver_AttachedPropertyEnumValues()
        {
            TestInit();

            var resolver = new MetadataControlResolver();
            var values   = resolver.GetControlAttributeValues(context, new List <string>()
            {
                "html"
            }, "RenderSettings.Mode");

            Assert.IsTrue(values.Any(v => v.DisplayText == "Server"));
            Assert.IsTrue(values.Any(v => v.DisplayText == "Client"));
        }
        public void MetadataControlResolver_ReloadAllControls_PropertyMetadata()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            var repeater = allControls.FirstOrDefault(c => c.DisplayText == "dot:Repeater");

            var itemTemplateProperty =
                resolver.GetMetadata("dot:Repeater").Properties.FirstOrDefault(p => p.Name == "ItemTemplate");

            Assert.IsTrue(itemTemplateProperty.IsTemplate);
            Assert.IsTrue(itemTemplateProperty.IsElement);
        }
        public void MetadataControlResolver_ElementNames_ControlWithoutContent()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            var tagNameHierarchy = new List <string>()
            {
                "html", "body", "dot:TextBox"
            };
            var completions = resolver.GetElementNames(context, tagNameHierarchy).ToList();

            Assert.IsTrue(completions.Count == 0);
        }
        private void FixElement(StringBuilder edit, MetadataControlResolver metadataControlResolver, ITextBuffer textBuffer, DothtmlElementNode element)
        {
            // fix element name
            var metadata = metadataControlResolver.GetMetadata(element.FullTagName);

            if (metadata != null)
            {
                // we have found the metadata for the control
                if (metadata.FullTagName != element.FullTagName)
                {
                    // the used name differs from the correct, fix the tag name
                    edit.SetRange(element.TagPrefixNode.StartPosition, element.TagPrefixNode.Length, metadata.TagPrefix);
                    edit.SetRange(element.TagNameNode.StartPosition, element.TagNameNode.Length, metadata.TagName);

                    if (element.CorrespondingEndTag != null)
                    {
                        edit.SetRange(element.CorrespondingEndTag.TagPrefixNode.StartPosition, element.CorrespondingEndTag.TagPrefixNode.Length, metadata.TagPrefix);
                        edit.SetRange(element.CorrespondingEndTag.TagNameNode.StartPosition, element.CorrespondingEndTag.TagNameNode.Length, metadata.TagName);
                    }
                }

                // fix attribute names
                foreach (var attribute in element.Attributes)
                {
                    var property = metadata.GetProperty(attribute.AttributeName);
                    if (property != null && property.Name != attribute.AttributeName)
                    {
                        // the used name differs from the correct, fix the tag name
                        edit.SetRange(attribute.AttributeNameNode.StartPosition, attribute.AttributeNameNode.Length, property.Name);
                    }
                }

                // fix property elements
                foreach (var child in element.Content.OfType <DothtmlElementNode>())
                {
                    var property = metadata.GetProperty(child.FullTagName);
                    if (property != null && property.IsElement && property.Name != child.FullTagName)
                    {
                        // the used name differs from the correct, fix the tag name
                        edit.SetRange(child.TagPrefixNode.StartPosition, child.TagPrefixNode.Length, property.Name);
                        if (child.CorrespondingEndTag != null)
                        {
                            edit.SetRange(child.CorrespondingEndTag.TagNameNode.StartPosition, child.CorrespondingEndTag.TagNameNode.Length, property.Name);
                        }
                    }
                }
            }
        }
        public void MetadataControlResolver_ElementNames_DefaultContentPropertySpecified()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            var tagNameHierarchy = new List <string>()
            {
                "html", "body", "dot:Repeater", "ItemTemplate"
            };
            var completions = resolver.GetElementNames(context, tagNameHierarchy).ToList();

            Assert.IsFalse(completions.Any(c => c.CompletionText == "ItemTemplate"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "dot:Button"));
        }
        public void MetadataControlResolver_ElementNames_TypedCollectionProperty()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            var tagNameHierarchy = new List <string>()
            {
                "html", "body", "dot:GridView", "Columns"
            };
            var completions = resolver.GetElementNames(context, tagNameHierarchy).ToList();

            Assert.IsFalse(completions.Any(c => c.CompletionText == "dot:Button"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "dot:GridViewTextColumn"));
            Assert.IsTrue(completions.Any(c => c.CompletionText == "dot:GridViewTemplateColumn"));
        }
        public void MetadataControlResolver_ElementContext_Control()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            ControlMetadata         control;
            ControlPropertyMetadata property;

            resolver.GetElementContext(new List <string>()
            {
                "html", "body", "dot:Button"
            }, out control, out property);

            Assert.IsNotNull(control);
            Assert.IsNull(property);
        }
        public void MetadataControlResolver_ElementContext_AttributeProperty()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            ControlMetadata         control;
            ControlPropertyMetadata property;

            resolver.GetElementContext(new List <string>()
            {
                "html", "body", "dot:Repeater", "WrapperTagName"
            },
                                       out control, out property);

            Assert.IsNotNull(control);
            Assert.IsNull(property); // the property cannot be used as element
        }
Esempio n. 13
0
 public DothtmlCompletionSource(DothtmlCompletionSourceProvider sourceProvider, DothtmlParser parser,
                                DothtmlClassifier classifier, ITextBuffer textBuffer, VisualStudioWorkspace workspace,
                                IGlyphService glyphService, DTE2 dte, DotvvmConfigurationProvider configurationProvider,
                                MetadataControlResolver metadataControlResolver, ICompletionSourceProvider[] completionProviders,
                                IProjectionBufferFactoryService projectionBufferFactoryService, ITaggerProvider[] taggerProviders)
 {
     this.sourceProvider                 = sourceProvider;
     this.textBuffer                     = textBuffer;
     this.classifier                     = classifier;
     this.parser                         = parser;
     this.workspace                      = workspace;
     this.glyphService                   = glyphService;
     this.dte                            = dte;
     this.configurationProvider          = configurationProvider;
     this.MetadataControlResolver        = metadataControlResolver;
     this.completionProviders            = completionProviders;
     this.projectionBufferFactoryService = projectionBufferFactoryService;
     this.taggerProviders                = taggerProviders;
 }
        public void MetadataControlResolver_ElementContext_HtmlGenericControl()
        {
            TestInit();

            var resolver    = new MetadataControlResolver();
            var allControls = resolver.ReloadAllControls(context);

            ControlMetadata         control;
            ControlPropertyMetadata property;

            resolver.GetElementContext(new List <string>()
            {
                "html"
            }, out control, out property);

            Assert.IsNotNull(control);
            Assert.IsNull(property);

            Assert.IsTrue(control.Properties.Any(p => p.Name == "Visible"));
            Assert.IsTrue(control.Properties.Any(p => p.Name == "DataContext"));
        }
        public ICompletionSource TryCreateCompletionSource(ITextBuffer textBuffer)
        {
            return(textBuffer.Properties.GetOrCreateSingletonProperty(() =>
            {
                var classifierProvider = new DothtmlClassifierProvider()
                {
                    Registry = Registry
                };

                ConfigurationProvider = new DotvvmConfigurationProvider();
                MetadataControlResolver = new MetadataControlResolver();

                WatchWorkspaceChanges();

                Parser = new DothtmlParser();
                Classifier = (DothtmlClassifier)classifierProvider.GetClassifier(textBuffer);

                return new DothtmlCompletionSource(this, Parser, Classifier, textBuffer,
                                                   Workspace, GlyphService, DTEHelper.DTE, ConfigurationProvider, MetadataControlResolver, AllCompletionProviders, ProjectionBufferFactoryService, AllTaggerProviders);
            }));
        }