public void GetDescriptionAndText_WithMissingCommentInInput_ReturnsEmptyDescriptionAndValidText() { SnippetsProvider snippetsProvider = new SnippetsProvider(); string template = @"resource dnsZone 'Microsoft.Network/dnsZones@2018-05-01' = { name: '${1:dnsZone}' location: 'global' tags: { displayName: '${1:dnsZone}' } }"; (string description, string text) = snippetsProvider.GetDescriptionAndText(template, @"C:\foo.bicep"); string expectedText = @"resource dnsZone 'Microsoft.Network/dnsZones@2018-05-01' = { name: '${1:dnsZone}' location: 'global' tags: { displayName: '${1:dnsZone}' } }"; Assert.IsTrue(description.Equals(string.Empty)); Assert.AreEqual(expectedText, text); }
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = /// <summary> /// Populates the Favorites menu /// </summary> /// <param name="control"></param> /// <returns></returns> public string GetFavoritesContent(IRibbonControl control) { //logger.WriteLine($"GetFavoritesContent({control.Id}) culture:{AddIn.Culture.Name}"); // TODO: this doesn't seem to work! System.Threading.Thread.CurrentThread.CurrentCulture = AddIn.Culture; System.Threading.Thread.CurrentThread.CurrentUICulture = AddIn.Culture; var favorites = new FavoritesProvider(ribbon).LoadFavoritesMenu(); var sep = favorites.Elements() .FirstOrDefault(e => e.Attribute("id").Value == "omFavoritesSeparator"); if (sep != null) { var snippets = new SnippetsProvider().MakeSnippetsMenu(ns); sep.AddAfterSelf(snippets); var plugins = new PluginsProvider().MakePluginsMenu(ns); if (plugins != null) { snippets.AddAfterSelf(plugins); } } return(favorites.ToString(SaveOptions.DisableFormatting)); }
public void GetDescriptionAndText_WithValidInput_ReturnsDescriptionAndText() { SnippetsProvider snippetsProvider = new SnippetsProvider(); string template = @"// DNS Zone resource dnsZone 'Microsoft.Network/dnsZones@2018-05-01' = { name: '${1:dnsZone}' location: 'global' tags: { displayName: '${1:dnsZone}' } }"; (string description, string text) = snippetsProvider.GetDescriptionAndText(template, @"C:\foo.bicep"); string expectedText = @"resource dnsZone 'Microsoft.Network/dnsZones@2018-05-01' = { name: '${1:dnsZone}' location: 'global' tags: { displayName: '${1:dnsZone}' } }"; Assert.AreEqual("DNS Zone", description); Assert.AreEqual(expectedText, text); }
public void GetResourceBodyCompletionSnippets_WithDiscriminatedObjectTypeAndNoRequiredProperties_ShouldReturnEmptySnippet() { SnippetsProvider snippetsProvider = new SnippetsProvider(); var objectTypeA = new ObjectType("objA", TypeSymbolValidationFlags.Default, new[] { new TypeProperty("discKey", new StringLiteralType("keyA")), new TypeProperty("keyAProp", LanguageConstants.String), }, null); var objectTypeB = new ObjectType("objB", TypeSymbolValidationFlags.Default, new[] { new TypeProperty("discKey", new StringLiteralType("keyB")), new TypeProperty("keyBProp", LanguageConstants.String), }, null); var discriminatedObjectType = new DiscriminatedObjectType("discObj", TypeSymbolValidationFlags.Default, "discKey", new[] { objectTypeA, objectTypeB }); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("microsoft.aadiam/azureADMetrics@2020-07-01-preview"), ResourceScope.ResourceGroup, discriminatedObjectType); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }); }
public void GetModuleBodyCompletionSnippets_WithRequiredProperties_ShouldReturnEmptyAndRequiredPropertiesSnippets() { SnippetsProvider snippetsProvider = new SnippetsProvider(); var objectType = new ObjectType("objA", TypeSymbolValidationFlags.Default, new[] { new TypeProperty("name", LanguageConstants.String, TypePropertyFlags.Required), new TypeProperty("location", LanguageConstants.String, TypePropertyFlags.Required), new TypeProperty("id", LanguageConstants.String) }, null); TypeSymbol typeSymbol = new ModuleType("module", ResourceScope.Module, objectType); IEnumerable <Snippet> snippets = snippetsProvider.GetModuleBodyCompletionSnippets(typeSymbol); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("required-properties"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 location: $2 $0 }"); }); }
public SnippetsSheet(SettingsProvider provider, IRibbonUI ribbon) : base(provider) { InitializeComponent(); Name = "SnippetsSheet"; Title = Resx.SnippetsSheet_Text; if (NeedsLocalizing()) { Localize(new string[] { "introLabel", "deleteLabel", "deleteButton", "okButton", "cancelButton" }); nameColumn.HeaderText = Resx.SnippetsSheet_nameColumn_HeaderText; } toolStrip.Rescale(); gridView.AutoGenerateColumns = false; gridView.Columns[0].DataPropertyName = "Name"; this.ribbon = ribbon; snipsProvider = new SnippetsProvider(); snippets = new BindingList <Snippet>(LoadSnippets()); gridView.DataSource = snippets; }
public void GetResourceBodyCompletionSnippets_WithDiscriminatedObjectTypeAndRequiredProperties_ShouldReturnRequiredPropertiesSnippet() { SnippetsProvider snippetsProvider = new SnippetsProvider(); var objectTypeA = new ObjectType("objA", TypeSymbolValidationFlags.Default, new[] { new TypeProperty("discKey", new StringLiteralType("keyA")), new TypeProperty("name", new StringLiteralType("keyA"), TypePropertyFlags.Required), new TypeProperty("location", LanguageConstants.String, TypePropertyFlags.Required), new TypeProperty("id", LanguageConstants.String) }, null); var objectTypeB = new ObjectType("objB", TypeSymbolValidationFlags.Default, new[] { new TypeProperty("discKey", new StringLiteralType("keyB")), new TypeProperty("name", LanguageConstants.String, TypePropertyFlags.Required), new TypeProperty("kind", new StringLiteralType("discKey"), TypePropertyFlags.ReadOnly), new TypeProperty("hostPoolType", LanguageConstants.String) }, null); var discriminatedObjectType = new DiscriminatedObjectType("discObj", TypeSymbolValidationFlags.Default, "discKey", new[] { objectTypeA, objectTypeB }); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("microsoft.aadiam/azureADMetrics@2020-07-01-preview"), ResourceScope.ResourceGroup, discriminatedObjectType); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("required-properties-keyA"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: 'keyA' location: $1 $0 }"); }, x => { x.Prefix.Should().Be("required-properties-keyB"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 $0 }"); }); }
public void GetDescriptionAndText_WithOnlyWhitespaceInput_ReturnsEmptyDescriptionAndText() { SnippetsProvider snippetsProvider = new SnippetsProvider(); (string description, string text) = snippetsProvider.GetDescriptionAndText(" ", @"C:\foo.bicep"); Assert.IsTrue(description.Equals(string.Empty)); Assert.IsTrue(text.Equals(string.Empty)); }
public void GetDescriptionAndText_WithNullInput_ReturnsEmptyDescriptionAndText() { SnippetsProvider snippetsProvider = new SnippetsProvider(); (string description, string text) = snippetsProvider.GetDescriptionAndText(null); Assert.IsTrue(description.Equals(string.Empty)); Assert.IsTrue(text.Equals(string.Empty)); }
public void CompletionPriorityOfNonResourceSnippets_ShouldBeMedium() { SnippetsProvider snippetsProvider = new SnippetsProvider(); IEnumerable <Snippet> snippets = snippetsProvider.GetTopLevelNamedDeclarationSnippets() .Where(x => !x.Prefix.StartsWith("resource")); foreach (Snippet snippet in snippets) { Assert.AreEqual(CompletionPriority.Medium, snippet.CompletionPriority); } }
public void GetDescriptionAndText_WithCommentAndMissingDeclarations_ReturnsEmptyDescriptionAndText() { SnippetsProvider snippetsProvider = new SnippetsProvider(); string template = @"// DNS Zone"; (string description, string text) = snippetsProvider.GetDescriptionAndText(template, @"C:\foo.bicep"); Assert.IsTrue(description.Equals(string.Empty)); Assert.IsTrue(text.Equals(string.Empty)); }
public void GetResourceBodyCompletionSnippets_WithStaticTemplateAndResourceDependencies_ShouldReturnSnippets() { SnippetsProvider snippetsProvider = new SnippetsProvider(); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("Microsoft.Automation/automationAccounts/modules@2015-10-31"), ResourceScope.ResourceGroup, CreateObjectType("Microsoft.Automation/automationAccounts/modules@2015-10-31", ("name", LanguageConstants.String, TypePropertyFlags.Required), ("location", LanguageConstants.String, TypePropertyFlags.Required))); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("snippet"); x.Detail.Should().Be("Automation Module"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ parent: automationAccount name: ${3:'name'} properties: { contentLink: { uri: ${4:'https://content-url.nupkg'} } } } resource automationAccount 'Microsoft.Automation/automationAccounts@2015-10-31' = { name: ${1:'name'} } "); }, x => { x.Prefix.Should().Be("required-properties"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 location: $2 $0 }"); }); }
public void GetResourceBodyCompletionSnippets_WithNoStaticTemplate_ShouldReturnSnippets() { SnippetsProvider snippetsProvider = new SnippetsProvider(); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("microsoft.aadiam/azureADMetrics@2020-07-01-preview"), ResourceScope.ResourceGroup, CreateObjectType("microsoft.aadiam/azureADMetrics@2020-07-01-preview", ("name", LanguageConstants.String, TypePropertyFlags.Required), ("location", LanguageConstants.String, TypePropertyFlags.Required), ("kind", LanguageConstants.String, TypePropertyFlags.Required), ("id", LanguageConstants.String, TypePropertyFlags.ReadOnly), ("hostPoolType", LanguageConstants.String, TypePropertyFlags.Required), ("sku", CreateObjectType("applicationGroup", ("friendlyName", LanguageConstants.String, TypePropertyFlags.None), ("properties", CreateObjectType("properties", ("loadBalancerType", LanguageConstants.String, TypePropertyFlags.Required), ("preferredAppGroupType", LanguageConstants.String, TypePropertyFlags.WriteOnly)), TypePropertyFlags.Required), ("name", LanguageConstants.String, TypePropertyFlags.Required)), TypePropertyFlags.Required))); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("required-properties"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 location: $2 sku: { name: $3 properties: { loadBalancerType: $4 } } kind: $5 hostPoolType: $6 $0 }"); }); }
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = /// <summary> /// Populates the Favorites menu /// </summary> /// <param name="control"></param> /// <returns></returns> public string GetFavoritesContent(IRibbonControl control) { //logger.WriteLine($"GetFavoritesContent({control.Id})"); var favorites = new FavoritesProvider(ribbon).LoadFavoritesMenu(); var snippets = new SnippetsProvider().MakeSnippetsMenu(ns); var sep = favorites.Elements() .FirstOrDefault(e => e.Attribute("id").Value == "omFavoritesSeparator"); if (sep != null) { sep.AddAfterSelf(snippets); } return(favorites.ToString(SaveOptions.DisableFormatting)); }
public void GetResourceBodyCompletionSnippets_WithStaticTemplateAndNoResourceDependencies_ShouldReturnSnippets() { SnippetsProvider snippetsProvider = new SnippetsProvider(); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("Microsoft.DataLakeStore/accounts@2016-11-01"), ResourceScope.ResourceGroup, CreateObjectType("Microsoft.DataLakeStore/accounts@2016-11-01", ("name", LanguageConstants.String, TypePropertyFlags.Required), ("location", LanguageConstants.String, TypePropertyFlags.Required))); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("snippet"); x.Detail.Should().Be("Data Lake Store Account"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: ${2:'name'} location: resourceGroup().location properties: { newTier: ${3|'Consumption','Commitment_1TB','Commitment_10TB','Commitment_100TB','Commitment_500TB','Commitment_1PB','Commitment_5PB'|} encryptionState: ${4|'Enabled','Disabled'|} } } "); }, x => { x.Prefix.Should().Be("required-properties"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 location: $2 $0 }"); }); }
public void GetResourceBodyCompletionSnippets_WithNoRequiredProperties_ShouldReturnEmptySnippet() { SnippetsProvider snippetsProvider = new SnippetsProvider(); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("microsoft.aadiam/azureADMetrics@2020-07-01-preview"), ResourceScope.ResourceGroup, CreateObjectType("microsoft.aadiam/azureADMetrics@2020-07-01-preview")); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }); }
public void GetResourceBodyCompletionSnippets_WithStaticTemplateAndNoResourceDependencies_ShouldReturnSnippets() { SnippetsProvider snippetsProvider = new SnippetsProvider(); TypeSymbol typeSymbol = new ResourceType( ResourceTypeReference.Parse("Microsoft.Network/dnsZones@2018-05-01"), ResourceScope.ResourceGroup, CreateObjectType("Microsoft.Network/dnsZones@2018-05-01", ("name", LanguageConstants.String, TypePropertyFlags.Required), ("location", LanguageConstants.String, TypePropertyFlags.Required))); IEnumerable <Snippet> snippets = snippetsProvider.GetResourceBodyCompletionSnippets(typeSymbol, false); snippets.Should().SatisfyRespectively( x => { x.Prefix.Should().Be("{}"); x.Detail.Should().Be("{}"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().Be("{\n\t$0\n}"); }, x => { x.Prefix.Should().Be("snippet"); x.Detail.Should().Be("DNS Zone"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: ${2:'name'} location: 'global' } "); }, x => { x.Prefix.Should().Be("required-properties"); x.Detail.Should().Be("Required properties"); x.CompletionPriority.Should().Be(CompletionPriority.Medium); x.Text.Should().BeEquivalentToIgnoringNewlines(@"{ name: $1 location: $2 $0 }"); }); }