Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

        /// <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));
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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}");
            });
        }
Esempio n. 5
0
        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
}");
            });
        }
Esempio n. 6
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;
        }
Esempio n. 7
0
        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
}");
            });
        }
Esempio n. 8
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));
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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);
            }
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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
}");
            });
        }
Esempio n. 13
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
}");
            });
        }
Esempio n. 14
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));
        }
Esempio n. 15
0
        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
}");
            });
        }
Esempio n. 16
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
}");
            });
        }