private CustomAnalysisTag RepurposeTagForSupplementaryAction(CustomAnalysisTag tag, AnalysisAction suppAction, string elementXaml) { var ae = RapidXamlElementExtractor.GetElement(elementXaml, tag.AnalyzedElement.Location.Start); var catd = new CustomAnalysisTagDependencies { AnalyzedElement = ae, Action = suppAction, ElementName = ae.Name, FileName = tag.FileName, InsertPos = tag.InsertPosition, Logger = tag.Logger, ProjectFilePath = tag.ProjectFilePath, Snapshot = tag.Snapshot, //// Don't need to set VsAbstraction as tags only need it for referencing settings but supplementary actions don't need to know about settings. }; if (suppAction.Location == null) { if (tag.Action == ActionType.RenameElement) { catd.Span = new Span(tag.Span.Start, tag.Name.Length); } else { catd.Span = tag.Span; } } else { catd.Span = suppAction.Location.ToSpanPlusStartPos(tag.InsertPosition); } return(new CustomAnalysisTag(catd)); }
public void FooElement_WithXmlns() { var xaml = @"<demo:Foo />"; var expected = RapidXamlElement.Build("demo:Foo"); var actual = RapidXamlElementExtractor.GetElement(xaml); RapidXamlElementAssert.AreEqual(expected, actual); }
public void RapidXamlAttribute_FormatElementValue() { var xaml = "<TestElement><TestElement.MyAttr>Something</TestElement.MyAttr></TestElement>"; var element = RapidXamlElementExtractor.GetElement(xaml); var sut = element.Attributes[0]; var actual = sut.ToString(); Assert.AreEqual("MyAttr=\"Something\"", actual); }
private string AddXmlns(CustomAnalysisTag faTag, string xaml, List <string> output) { var element = RapidXamlElementExtractor.GetElement(xaml); bool exists = false; foreach (var attr in element.InlineAttributes) { if (attr.Name.StartsWith("xmlns:")) { var alias = attr.Name.Substring(6); if (alias == faTag.Name) { if (attr.StringValue == faTag.Value) { output.Add("XMLNS is already specified in the document."); } else { output.Add("XMLNS is already specified in the document but with a different value."); } exists = true; break; } } } if (!exists) { var insertPos = element.InlineAttributes?.LastOrDefault()?.Location?.End(); output.Add($"Adding xmlns alias for '{faTag.Name}'"); if (insertPos != null) { xaml = xaml.Insert(insertPos.Value, $" xmlns:{faTag.Name}=\"{faTag.Value}\""); } else { xaml = xaml.Insert( element.Location.Start + element.Name.Length + 1, $" xmlns:{faTag.Name}=\"{faTag.Value}\""); } } return(xaml); }
internal AnalysisActions GetActions <T>(string xaml, ProjectType projectType = ProjectType.Any) where T : ICustomAnalyzer { var sut = (T)Activator.CreateInstance(typeof(T)); var element = RapidXamlElementExtractor.GetElement(xaml); var details = new ExtraAnalysisDetails( "test.xaml", ProjectFrameworkHelper.FromType(projectType)); var result = sut.Analyze(element, details); return(result); }
public void RapidXamlAttribute_FormatSingleChildElement() { var xaml = "<Grid>" + Environment.NewLine + " <Grid.ColumnDefinitions> " + Environment.NewLine + " <ColumnDefinition Width=\"Auto\" />" + Environment.NewLine + " </Grid.ColumnDefinitions>" + Environment.NewLine + "</Grid>"; var element = RapidXamlElementExtractor.GetElement(xaml); var sut = element.Attributes[0]; var actual = sut.ToString(); Assert.AreEqual("ColumnDefinitions=\"1 child element\"", actual); }
public void RapidXamlElement_ToStringOverride() { var xaml = "<Grid Height=\"100\" Width=\"200\">" + Environment.NewLine + " <TextBlock Text=\"hello\" />" + Environment.NewLine + " <TextBlock Text=\"world\" />" + Environment.NewLine + " <StackPanel>" + Environment.NewLine + " <TextBlock Text=\"hello again\" />" + Environment.NewLine + " <Image />" + Environment.NewLine + " </StackPanel>" + Environment.NewLine + "</Grid>"; var sut = RapidXamlElementExtractor.GetElement(xaml); var actual = sut.ToString(); Assert.AreEqual("Grid (2 attributes, 3 children)", actual); }
public void Grid_RowDefinitions() { var xaml = @"<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=""*"" /> <ColumnDefinition Width=""50"" /> <ColumnDefinition Width=""*"" /> </Grid.ColumnDefinitions> <TextBlock Text=""Some content"" /> </Grid>"; var sut = RapidXamlElementExtractor.GetElement(xaml); Assert.AreEqual(1, sut.Attributes.Count); Assert.AreEqual(1, sut.Children.Count); var attr = sut.Attributes.First(); Assert.AreEqual("ColumnDefinitions", attr.Name); Assert.IsFalse(attr.HasStringValue); Assert.AreEqual(3, attr.Children.Count); }