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