コード例 #1
0
ファイル: TestProperties.cs プロジェクト: sunthx/CodeNav
        public void ShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestProperties.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have 1 member
            Assert.AreEqual(1, (document.First() as IMembers).Members.Count);

            // Inner item should be a class
            var innerClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            // Inheriting class should have properties
            var propertyGetSet = innerClass.Members.First() as CodeFunctionItem;

            Assert.AreEqual(" {get,set}", propertyGetSet.Parameters);

            var propertyGet = innerClass.Members[1] as CodeFunctionItem;

            Assert.AreEqual(" {get}", propertyGet.Parameters);

            var propertySet = innerClass.Members[2] as CodeFunctionItem;

            Assert.AreEqual(" {set}", propertySet.Parameters);

            var property = innerClass.Members.Last() as CodeFunctionItem;

            Assert.IsNull(property.Parameters);
        }
コード例 #2
0
        internal static string FormatCode(string script, ref int caret)
        {
            Output.WriteLine("FormatCode");

            string code = File.ReadAllText(script);

            if (code.IsEmpty())
            {
                throw new Exception("The file containing code is empty");
            }

            bool escape_vs_template_var = code.Contains("$safeprojectname$");

            if (escape_vs_template_var)
            {
                code = code.Replace("$safeprojectname$", "_safeprojectname_");
            }

            string formattedCode = RoslynIntellisense.Formatter.FormatHybrid(code, "code.cs");

            if (escape_vs_template_var)
            {
                formattedCode = formattedCode.Replace("_safeprojectname_", "$safeprojectname$");
            }

            caret = SyntaxMapper.MapAbsPosition(code, caret, formattedCode);

            fullyLoaded = true;

            return(formattedCode);
        }
コード例 #3
0
        public void ShouldBeOkVB()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestProperties.vb"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Class, document.First().Kind);

            // Inner item should be a class
            var innerClass = document.First() as CodeClassItem;

            // Class should have properties
            var propertyGetSet = innerClass.Members.First() as CodeFunctionItem;

            Assert.AreEqual(" {get,set}", propertyGetSet.Parameters);

            var propertyGet = innerClass.Members[1] as CodeFunctionItem;

            Assert.AreEqual(" {get}", propertyGet.Parameters);

            var propertySet = innerClass.Members[2] as CodeFunctionItem;

            Assert.AreEqual(" {set}", propertySet.Parameters);

            var property = innerClass.Members[3] as CodeFunctionItem;

            Assert.IsNull(property.Parameters);

            var propertyShorthand = innerClass.Members[4] as CodeFunctionItem;

            Assert.AreEqual("String", property.Type);
        }
コード例 #4
0
        public void TestInterfaceShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestInterface.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have 2 members
            Assert.AreEqual(3, (document.First() as IMembers).Members.Count);

            // First item should be an interface
            var innerInterface = (document.First() as IMembers).Members.First() as CodeInterfaceItem;

            Assert.AreEqual(3, innerInterface.Members.Count);

            // Second item should be the implementing class
            var implementingClass = (document.First() as IMembers).Members[1] as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, implementingClass.Kind);
            Assert.AreEqual(3, implementingClass.Members.Count);

            var implementedInterface = implementingClass.Members.Last() as CodeImplementedInterfaceItem;

            Assert.AreEqual(CodeItemKindEnum.ImplementedInterface, implementedInterface.Kind);
            Assert.AreEqual(3, implementedInterface.Members.Count);
            Assert.IsFalse(implementedInterface.Name.StartsWith("#"));

            // Items should have proper start lines
            Assert.AreEqual(12, implementedInterface.Members[0].StartLine);
            Assert.AreEqual(17, implementedInterface.Members[1].StartLine);
            Assert.AreEqual(34, implementedInterface.Members[2].StartLine);
        }
コード例 #5
0
        public void ShouldHaveCorrectStructure()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestNestedNamespaces.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have members
            Assert.IsTrue((document.First() as IMembers).Members.Any());

            // Inner item should also be a namespace
            var innerNamespace = (document.First() as IMembers).Members.First() as CodeNamespaceItem;

            Assert.AreEqual(CodeItemKindEnum.Namespace, innerNamespace.Kind);

            // That inner namespace should have members
            Assert.IsTrue(innerNamespace.Members.Any());

            // That member should be a class
            var innerClass = (innerNamespace as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, innerClass.Kind);
            Assert.AreEqual("ClassInNestedNamespace", innerClass.Name);
        }
コード例 #6
0
        public void TestInterfaceInRegionShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestInterface.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have 2 members
            Assert.AreEqual(3, (document.First() as IMembers).Members.Count);

            // Third item should be a implementing class
            var implementingClass = (document.First() as IMembers).Members.Last() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, implementingClass.Kind);
            Assert.AreEqual(3, implementingClass.Members.Count);

            var region = implementingClass.Members.Last() as CodeRegionItem;

            var implementedInterface = region.Members.First() as CodeImplementedInterfaceItem;

            Assert.AreEqual(CodeItemKindEnum.ImplementedInterface, implementedInterface.Kind);
            Assert.AreEqual(3, implementedInterface.Members.Count);
        }
コード例 #7
0
        public void TestRegionsSpan()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestRegions.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // There should be a single class
            var regionClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.NotNull(regionClass);

            // The class should have a function in it
            Assert.NotNull(regionClass.Members.FirstOrDefault(m => m.Name.Equals("OutsideRegionFunction")));

            // The class should have a region in it
            var regionR1 = regionClass.Members.FirstOrDefault(m => m.Name.Equals("#R1")) as CodeRegionItem;

            Assert.NotNull(regionR1, "Region #R1 not found");

            // The region should have correct span for outlining usages
            Assert.AreEqual(101, regionR1.Span.Start);
            Assert.AreEqual(111, regionR1.Span.End);
        }
コード例 #8
0
ファイル: TestSealed.cs プロジェクト: emonney/CodeNav
        public void TestSealedShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestSealed.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have 3 members
            Assert.AreEqual(3, (document.First() as IMembers).Members.Count);

            // Inner item should be a sealed class
            var sealedBaseClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, sealedBaseClass.Kind);
            Assert.AreEqual("SealedBaseClass", sealedBaseClass.Name);
            Assert.AreEqual(CodeItemAccessEnum.Sealed, sealedBaseClass.Access);

            // Inheriting Class should be there
            var inheritingClass = (document.First() as IMembers).Members.Last() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, inheritingClass.Kind);
            Assert.AreEqual("InheritingClass", inheritingClass.Name);
            Assert.AreEqual(CodeItemAccessEnum.Public, inheritingClass.Access);
            Assert.AreEqual(" : BaseClass", inheritingClass.Parameters);

            // Inheriting class should have sealed property
            var sealedProperty = inheritingClass.Members.Last() as CodeFunctionItem;

            Assert.AreEqual(CodeItemKindEnum.Property, sealedProperty.Kind);
            Assert.AreEqual("BaseProperty", sealedProperty.Name);
            Assert.AreEqual(CodeItemAccessEnum.Sealed, sealedProperty.Access);
            Assert.AreEqual("BaseProperty {get,set}", sealedProperty.Parameters);
        }
コード例 #9
0
        public void TestRegions()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestRegions.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // There should be a single class
            var regionClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.NotNull(regionClass);

            // The class should have a function in it
            Assert.NotNull(regionClass.Members.FirstOrDefault(m => m.Name.Equals("OutsideRegionFunction")));

            // The class should have a region in it
            var regionR1 = regionClass.Members.FirstOrDefault(m => m.Name.Equals("#R1")) as CodeRegionItem;

            Assert.NotNull(regionR1);

            // Region R1 should have a nested region R15 with a constant in it
            var regionR15 = regionR1.Members.FirstOrDefault(m => m.Name.Equals("#R15")) as CodeRegionItem;

            Assert.NotNull(regionR15);
            Assert.NotNull(regionR15.Members.FirstOrDefault(m => m.Name.Equals("nestedRegionConstant")));

            // Region R1 should have a function Test1 and Test2 in it
            Assert.NotNull(regionR1.Members.FirstOrDefault(m => m.Name.Equals("Test1")));
            Assert.NotNull(regionR1.Members.FirstOrDefault(m => m.Name.Equals("Test2")));
        }
コード例 #10
0
        public void ShouldMapPositionInFormattedCode()
        {
            string rawCode =
                @"void main()
{
      Cons|ole.WriteLine(""Hello World!"");
    Debug.WriteLine(""Hello World!"");
}";

            string formattedCode =
                @"void main()
{
    Cons|ole.WriteLine(""Hello World!"");
    Debug.WriteLine(""Hello World!"");
}";
            int pos            = rawCode.IndexOf('|');
            int expectedNewPos = formattedCode.IndexOf('|');

            rawCode       = rawCode.Replace("|", "");
            formattedCode = formattedCode.Replace("|", "");

            int newPos = SyntaxMapper.MapAbsPosition(rawCode, pos, formattedCode);

            Assert.Equal(expectedNewPos, newPos);
        }
コード例 #11
0
        public void ShouldBeOk()
        {
            SettingsHelper.UseXMLComments = true;

            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestMethodsWithComments.vb"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Class, document.First().Kind);

            // Inner item should be a class
            var innerClass = document.First() as CodeClassItem;

            // Class should have a method
            var methodWithComment = innerClass.Members.First() as CodeFunctionItem;

            Assert.AreEqual("Super important summary", methodWithComment.Tooltip);

            // Class should have a method
            var methodWithoutComment = innerClass.Members[1] as CodeFunctionItem;

            Assert.AreEqual("Private Object FunctionWithoutComment ()", methodWithoutComment.Tooltip);

            // Class should have a method
            var methodWithMultipleComment = innerClass.Members[2] as CodeFunctionItem;

            Assert.AreEqual("Multiple comment - summary", methodWithMultipleComment.Tooltip);

            // Class should have a method
            var methodWithReorderedComment = innerClass.Members[3] as CodeFunctionItem;

            Assert.AreEqual("Multiple comment - summary", methodWithReorderedComment.Tooltip);
        }
コード例 #12
0
        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                var result = e.Result as BackgroundWorkerResult;

                if (result?.CodeItems == null)
                {
                    LogHelper.Log($"CodeNav for '{DocumentHelper.GetName(_window)}' updated, no results");
                    return;
                }

                // Filter all null items from the code document
                SyntaxMapper.FilterNullItems(result.CodeItems);

                // Do we need to update the DataContext?
                var areEqual = AreDocumentsEqual(CodeDocumentViewModel.CodeDocument, result.CodeItems);
                if (result.ForceUpdate == false && areEqual)
                {
                    LogHelper.Log($"CodeNav for '{DocumentHelper.GetName(_window)}' updated, document did not change");

                    // Should the margin be shown and are there any items to show, if not hide the margin
                    VisibilityHelper.SetMarginWidth(_column, CodeDocumentViewModel.CodeDocument);

                    return;
                }

                // Set the new list of codeitems as DataContext
                CodeDocumentViewModel.CodeDocument = result.CodeItems;
                _cache = result.CodeItems;

                // Set currently active codeitem
                HighlightHelper.SetForeground(CodeDocumentViewModel.CodeDocument);

                // Should the margin be shown and are there any items to show, if not hide the margin
                VisibilityHelper.SetMarginWidth(_column, CodeDocumentViewModel.CodeDocument);

                // Apply current visibility settings to the document
                VisibilityHelper.SetCodeItemVisibility(CodeDocumentViewModel.CodeDocument);

                // Sync all regions
                OutliningHelper.SyncAllRegions(OutliningManager, TextView, CodeDocumentViewModel.CodeDocument);

                // Sort items
                CodeDocumentViewModel.SortOrder = Settings.Default.SortOrder;
                SortHelper.Sort(CodeDocumentViewModel);

                // Apply bookmarks
                LoadBookmarksFromStorage();
                BookmarkHelper.ApplyBookmarks(CodeDocumentViewModel, Dte?.Solution?.FileName);

                LogHelper.Log($"CodeNav for '{DocumentHelper.GetName(_window)}' updated");
            }
            catch (ObjectDisposedException ex)
            {
                LogHelper.Log($"CodeNav: RunWorkerCompleted exception: {ex.Message}");
                LogHelper.Log("RunWorkerCompleted exception", ex);
            }
        }
コード例 #13
0
        public void ShouldHaveCorrectStructure()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestNoNamespace.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a class
            Assert.AreEqual(CodeItemKindEnum.Class, document.First().Kind);
        }
コード例 #14
0
        public static List <CodeItem> MapFunction(Node function, NodeArray <ParameterDeclaration> parameters, string id, ICodeViewUserControl control)
        {
            if (function == null)
            {
                return(null);
            }

            List <CodeItem> children;

            try
            {
                children = function.Children
                           .FirstOrDefault(c => c.Kind == SyntaxKind.Block)?.Children
                           .SelectMany(SyntaxMapperJS.MapMember)
                           .ToList();
            }
            catch (NullReferenceException)
            {
                return(new List <CodeItem>());
            }

            if (children != null && children.Any())
            {
                SyntaxMapper.FilterNullItems(children);

                var item = BaseMapperJS.MapBase <CodeClassItem>(function, id, control);

                item.BorderColor = Colors.DarkGray;

                item.Kind       = CodeItemKindEnum.Method;
                item.Parameters = $"({string.Join(", ", parameters.Select(p => p.IdentifierStr))})";
                item.Tooltip    = TooltipMapper.Map(item.Access, null, item.Name, item.Parameters);
                item.Id         = IdMapper.MapId(item.FullName, parameters);
                item.Moniker    = IconMapper.MapMoniker(item.Kind, item.Access);

                item.Members = children;

                return(new List <CodeItem> {
                    item
                });
            }

            CodeFunctionItem functionItem = BaseMapperJS.MapBase <CodeFunctionItem>(function, id, control);

            functionItem.Kind       = CodeItemKindEnum.Method;
            functionItem.Parameters = $"({string.Join(", ", parameters.Select(p => p.IdentifierStr))})";
            functionItem.Tooltip    = TooltipMapper.Map(functionItem.Access, null, functionItem.Name, functionItem.Parameters);
            functionItem.Id         = IdMapper.MapId(functionItem.FullName, parameters);
            functionItem.Moniker    = IconMapper.MapMoniker(functionItem.Kind, functionItem.Access);

            return(new List <CodeItem> {
                functionItem
            });
        }
コード例 #15
0
        public void Setup()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestMethods.vb"));

            Assert.IsTrue(document.Any());

            // First item should be a class
            Assert.AreEqual(CodeItemKindEnum.Class, document.First().Kind);

            // Inner item should be a class
            _innerClass = document.First() as CodeClassItem;
        }
コード例 #16
0
        public void TestInterfaceShouldBeOkVB()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestInterfaces.vb"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Interface, document.First().Kind);

            // Namespace item should have 1 member
            Assert.AreEqual(1, (document.First() as IMembers).Members.Count);
        }
コード例 #17
0
        public void ShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestEmptyInterface.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should not have members
            Assert.IsTrue(!(document.First() as IMembers).Members.Any());
        }
コード例 #18
0
        public void ShouldMapPositionInFormattedCodeLineStart()
        {
            string rawCode =
                @"void main()
{
}";
            string formattedCode = rawCode;

            int pos    = 0;
            int newPos = SyntaxMapper.MapAbsPosition(rawCode, pos, formattedCode);

            Assert.Equal(pos, newPos);
        }
コード例 #19
0
        public void EnumsShouldBeOkVB()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestModules.vb"));

            Assert.IsTrue(document.Any());

            var innerEnum = (document.First() as IMembers).Members.First() as CodeClassItem;

            // First inner item should be an enum
            Assert.AreEqual(CodeItemKindEnum.Enum, innerEnum.Kind);

            // Enum should have 5 members
            Assert.AreEqual(5, innerEnum.Members.Count());
        }
コード例 #20
0
        public void CurrentItemShouldBeHighlighted()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestProperties.cs"));

            HighlightHelper.HighlightCurrentItem(document, 13, Brushes.Red, Brushes.Blue, Brushes.Green, Brushes.White);

            var highlightedClass = (document.First() as IMembers).Members.First() as CodeClassItem;
            var highlightedItem  = highlightedClass.Members[2];

            Assert.AreEqual(FontWeights.Bold, highlightedItem.FontWeight);
            Assert.AreEqual(Brushes.Red, highlightedItem.Foreground);
            Assert.AreEqual(Brushes.Blue, highlightedItem.HighlightBackground);

            Assert.AreEqual(Brushes.Green, highlightedClass.BorderBrush);
        }
コード例 #21
0
        public void OnlyOneItemShouldBeHighlighted()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestProperties.cs"));

            HighlightHelper.HighlightCurrentItem(document, 13, Brushes.Red, Brushes.Blue, Brushes.Green, Brushes.White);

            HighlightHelper.HighlightCurrentItem(document, 18, Brushes.Red, Brushes.Blue, Brushes.Green, Brushes.White);


            var highlightedItems = new List <CodeItem>();

            FindHighlightedItems(highlightedItems, document);

            Assert.AreEqual(1, highlightedItems.Count);
        }
コード例 #22
0
 private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     if (!_backgroundWorker.CancellationPending)
     {
         var request = e.Argument as BackgroundWorkerRequest;
         if (request == null)
         {
             return;
         }
         var codeItems = SyntaxMapper.MapDocument(request.Document, this, _workspace);
         e.Result = new BackgroundWorkerResult {
             CodeItems = codeItems, ForceUpdate = request.ForceUpdate
         };
     }
 }
コード例 #23
0
        public void ClassInheritanceShouldBeOkVB()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestClasses.vb"));

            Assert.IsTrue(document.Any());

            // First item should be a base class
            Assert.AreEqual(CodeItemKindEnum.Class, document.First().Kind);
            var innerClass = document.First() as CodeClassItem;

            // Second item should be an inheriting class
            Assert.AreEqual(CodeItemKindEnum.Class, document.Last().Kind);
            var inheritingClass = document.Last() as CodeClassItem;

            Assert.AreEqual(" : Class1", inheritingClass.Parameters);
        }
コード例 #24
0
        public void ItemsSorting(SortOrderEnum sortOrder, string[] methodNames)
        {
            var document  = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestSorting.cs"));
            var viewModel = new CodeDocumentViewModel {
                CodeDocument = document, SortOrder = sortOrder
            };

            viewModel.CodeDocument = SortHelper.Sort(viewModel);

            var sortingClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(methodNames[0], sortingClass.Members.First().Name);
            Assert.AreEqual(methodNames[1], sortingClass.Members[1].Name);
            Assert.AreEqual(methodNames[2], sortingClass.Members.Last().Name);

            Assert.AreEqual(sortOrder, viewModel.SortOrder);
        }
コード例 #25
0
        public void TestBaseImplementedInterfaceShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestInterface3.cs"));

            Assert.IsTrue(document.Any());

            // last item should be the implementing class
            var implementingClass = (document.First() as IMembers).Members.Last() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, implementingClass.Kind);
            Assert.AreEqual(1, implementingClass.Members.Count);

            var implementedInterface = implementingClass.Members.First() as CodeImplementedInterfaceItem;

            Assert.AreEqual(CodeItemKindEnum.ImplementedInterface, implementedInterface.Kind);
            Assert.AreEqual(1, implementedInterface.Members.Count);
        }
コード例 #26
0
        public void ShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestIndexers.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Inner item should be a class
            var innerClass = (document.First() as CodeNamespaceItem).Members.First() as CodeClassItem;

            // Class should have an indexer
            var indexer = innerClass.Members.First() as CodeFunctionItem;

            Assert.AreEqual(CodeItemKindEnum.Indexer, indexer.Kind);
        }
コード例 #27
0
        public void TestRegionsNoName()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestRegionsNoName.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // There should be a single class
            var regionClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.NotNull(regionClass);

            // The class should have a region in it
            var regionR1 = regionClass.Members.FirstOrDefault(m => m.Name.Equals("#Region")) as CodeRegionItem;

            Assert.NotNull(regionR1, "Region #Region not found");
        }
コード例 #28
0
        public void TestUsingsInNamespaceShouldBeOk()
        {
            var document = SyntaxMapper.MapDocument(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\TestUsingsInNamespace.cs"));

            Assert.IsTrue(document.Any());

            // First item should be a namespace
            Assert.AreEqual(CodeItemKindEnum.Namespace, document.First().Kind);

            // Namespace item should have 1 member
            Assert.AreEqual(1, (document.First() as IMembers).Members.Count);

            // Item should be a class
            var innerClass = (document.First() as IMembers).Members.First() as CodeClassItem;

            Assert.AreEqual(CodeItemKindEnum.Class, innerClass.Kind);
            Assert.AreEqual(2, innerClass.Members.Count);

            Assert.AreEqual(CodeItemKindEnum.Constructor, innerClass.Members.First().Kind);
            Assert.AreEqual(CodeItemKindEnum.Method, innerClass.Members.Last().Kind);
        }
コード例 #29
0
        private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            var result = e.Result as BackgroundWorkerResult;

            if (result?.CodeItems == null)
            {
                LogHelper.Log($"CodeNav for '{_window.Document.Name}' updated, no results");
                return;
            }

            // Filter all null items from the code document
            SyntaxMapper.FilterNullItems(result.CodeItems);

            // Do we need to update the DataContext?
            var areEqual = AreDocumentsEqual(CodeDocumentViewModel.CodeDocument, result.CodeItems);

            if (result.ForceUpdate == false && areEqual)
            {
                LogHelper.Log($"CodeNav for '{_window.Document.Name}' updated, document did not change");
                return;
            }

            // Set the new list of codeitems as DataContext
            CodeDocumentViewModel.CodeDocument = result.CodeItems;
            _cache = result.CodeItems;

            // Set currently active codeitem
            HighlightHelper.SetForeground(CodeDocumentViewModel.CodeDocument);

            // Are there any items to show, if not hide the margin
            VisibilityHelper.SetMarginWidth(_column, CodeDocumentViewModel.CodeDocument);

            // Apply current visibility settings to the document
            VisibilityHelper.SetCodeItemVisibility(CodeDocumentViewModel.CodeDocument);

            // Sync all regions
            OutliningHelper.SyncAllRegions(_outliningManager, _textView, CodeDocumentViewModel.CodeDocument);

            LogHelper.Log($"CodeNav for '{_window.Document.Name}' updated");
        }
コード例 #30
0
        public void TestRegionsVB()
        {
            var document = SyntaxMapper.MapDocumentVB(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\Files\\VisualBasic\\TestRegions.vb"));

            Assert.IsTrue(document.Any());

            // There should be a single class
            var regionClass = document.First() as CodeClassItem;

            Assert.NotNull(regionClass);

            // The class should have a property in it
            Assert.NotNull(regionClass.Members.FirstOrDefault(m => m.Name.Equals("outsideRegion$")));

            // The class should have a region in it
            var regionR1 = regionClass.Members.FirstOrDefault(m => m.Name.Equals("#FirstRegion")) as CodeRegionItem;

            Assert.NotNull(regionR1, "Region #FirstRegion not found");

            // Region R1 should have a property in it
            Assert.NotNull(regionR1.Members.FirstOrDefault(m => m.Name.Equals("insideRegion$")), "No property inside region found");
        }