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);
        }
示例#3
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }