From f21d3cd5a717941d78e0b15b0f0ff0598fa88985 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Mon, 30 Oct 2023 21:07:20 -0400 Subject: [PATCH 01/15] fix first test --- .../PackageManager/PackageManagerUITests.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs index 0cb77a60a7a..987a2ecc1fd 100644 --- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs +++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerUITests.cs @@ -1279,7 +1279,7 @@ public void InstallsPackagesEvenIfSomeFailToDownloadShouldNotThrow() } - [Test, Category("Failure")] + [Test] [Description("User tries to download packages that might conflict with an unloaded builtIn package")] public void PackageManagerConflictsUnloadedWithBltInPackage() { @@ -1294,7 +1294,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() var bltInPackage = pkgLoader.LocalPackages.Where(x => x.Name == "SignedPackage").FirstOrDefault(); Assert.IsNotNull(bltInPackage); - string expectedDownloadPath = "download/" + bltInPackage.Name + "/" + bltInPackage.VersionName; + string expectedDownloadPath = "download/" + bltInPackage.ID + "/" + bltInPackage.VersionName; // Simulate the user downloading the same package from PM var mockGreg = new Mock(); mockGreg.Setup(x => x.Execute(It.IsAny())).Callback((Request x) => @@ -1314,8 +1314,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() // 1. User downloads the exact version of a builtIn package // { - var id = "test-123"; - var deps = new List() { new Dependency() { _id = id, name = bltInPackage.Name } }; + var deps = new List() { new Dependency() { _id = bltInPackage.ID, name = bltInPackage.Name } }; var depVers = new List() { bltInPackage.VersionName }; mockGreg.Setup(m => m.ExecuteAndDeserializeWithContent(It.IsAny())) @@ -1326,7 +1325,7 @@ public void PackageManagerConflictsUnloadedWithBltInPackage() version = bltInPackage.VersionName, engine_version = bltInPackage.EngineVersion, name = bltInPackage.Name, - id = id, + id = bltInPackage.ID, full_dependency_ids = deps, full_dependency_versions = depVers }, From 26c6e279a876f64530c02ca3a1bef7ef4895ea48 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Wed, 1 Nov 2023 15:56:27 -0400 Subject: [PATCH 02/15] work on docs browser remove test only code one actual test failure --- .../DocumentationBrowserViewExtension.cs | 46 +++++-------------- .../DocumentationBrowserViewExtensionTests.cs | 9 ++-- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs index 7e293c1d00a..b4ab8cf7908 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs @@ -208,13 +208,17 @@ private void OnInsertFile(object sender, InsertDocumentationLinkEventArgs e) if (!DynamoSelection.Instance.Selection.Any()) return; - GroupInsertedGraph(existingGroups, e.Name); - DoEvents(); - - // We have selected all the nodes and notes from the inserted graph - // Now is the time to auto layout the inserted nodes - this.DynamoViewModel.GraphAutoLayoutCommand.Execute(null); - this.DynamoViewModel.FitViewCommand.Execute(false); + Dispatcher.CurrentDispatcher.BeginInvoke(() => + { + GroupInsertedGraph(existingGroups, e.Name); + }); + Dispatcher.CurrentDispatcher.BeginInvoke(() => + { + // We have selected all the nodes and notes from the inserted graph + // Now is the time to auto layout the inserted nodes + this.DynamoViewModel.GraphAutoLayoutCommand.Execute(null); + this.DynamoViewModel.FitViewCommand.Execute(false); + }); } @@ -522,33 +526,5 @@ public override void Closed() this.documentationBrowserMenuItem.IsChecked = false; } } - - #region helper methods - - /// - /// Force the Dispatcher to empty it's queue - /// - [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] - public static void DoEvents() - { - var frame = new DispatcherFrame(); - Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, - new DispatcherOperationCallback(ExitFrame), frame); - Dispatcher.PushFrame(frame); - } - - /// - /// Helper method for DispatcherUtil - /// - /// - /// - private static object ExitFrame(object frame) - { - ((DispatcherFrame)frame).Continue = false; - return null; - } - - #endregion - } } diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index 2aeb2ef082c..fc4d13a96ba 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -21,7 +21,7 @@ namespace DynamoCoreWpfTests { - [TestFixture, Category("Failure")] + [TestFixture] public class DocumentationBrowserViewExtensionTests : DynamoTestUIBase { private const string docsTabName = "Documentation Browser"; @@ -142,6 +142,7 @@ public void CanCreatePackageNodeDocumentationAndLoadImages() // Assert Assert.IsTrue(!string.IsNullOrEmpty(browserView.VirtualFolderPath)); + //TODO this is false because package image loading is now broken. Assert.IsTrue(Directory.Exists(browserView.VirtualFolderPath)); //Check that the virtual folder will be created in the Package/doc folder so images will be loaded correctly Assert.IsTrue(browserView.VirtualFolderPath.Replace("\\", "/").Contains(packageDocPath.Replace("\\", "/"))); @@ -497,7 +498,7 @@ public void GetResourceNameWithCultureNameWorksWithValidCultureAndInputName() Assert.AreEqual("MyPage.en-US.html", result); } - [Test] + [Test, Apartment(ApartmentState.STA)] public void CanCreateNodeDocumenationHtmlFromNodeAnnotationEventArgsWithOOTBNodeWithoutAddtionalDocumentation() { // Arrange @@ -710,7 +711,7 @@ private string RequestNodeDocs(Dynamo.Graph.Nodes.NodeModel node) return GetSidebarDocsBrowserContents(); } - [Test] + [Test, Apartment(ApartmentState.STA)] public void AddGraphInSpecificLocationToWorkspace() { var testDirectory = GetTestDirectory(ExecutingDirectory); @@ -760,7 +761,7 @@ public void AddGraphInSpecificLocationToWorkspace() } //Validates that we have 5 nodes the CurrentWorkspace (after the graph was added) - Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); + //Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); } [Test] From 7bc8727741ff22f2939857b6a4945207b7553770 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Wed, 1 Nov 2023 18:08:53 -0400 Subject: [PATCH 03/15] fix test and broken docs image loading from pkgs dyn files still broken. --- .../DocumentationBrowserView.xaml.cs | 21 ++++++--- .../DocumentationBrowserViewExtension.cs | 4 +- .../DocumentationBrowserViewModel.cs | 45 ++++++++++--------- 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs index 75dcee02c63..766261cab34 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserView.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using System.IO; +using System.Reflection; using System.Web; using System.Windows; using System.Windows.Controls; @@ -132,16 +133,24 @@ async void InitializeAsync() VirtualFolderPath = string.Empty; try { - if (viewModel.Link != null && !string.IsNullOrEmpty(viewModel.CurrentPackageName)) + //if this node is from a package then we set the virtual host path to the packages docs directory. + if (viewModel.Link != null && !string.IsNullOrEmpty(viewModel.CurrentPackageName) && viewModel.IsOwnedByPackage) { - var absolutePath = Path.GetDirectoryName(HttpUtility.UrlDecode(viewModel.Link.AbsolutePath)); - //We move two levels up so it will be located in same level than the the NodeHelpSharedDocs directory - var imagesLocation = new DirectoryInfo(absolutePath).Parent.Parent.FullName; - //Adds the NodeHelpSharedDocs directory to the path - VirtualFolderPath = Path.Combine(imagesLocation, SharedDocsDirectoryName); + VirtualFolderPath = Path.GetDirectoryName(HttpUtility.UrlDecode(viewModel.Link.AbsolutePath)); } + //if the node is not from a package, then set the virtual host path to the shared docs folder. + else if (viewModel.Link != null && !viewModel.IsOwnedByPackage) + { + VirtualFolderPath = Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, SharedDocsDirectoryName); + } + //unclear what would cause this. else + { VirtualFolderPath = FallbackDirectoryName; + } + //TODO - the above will not handle the case that a package's images/dyns are located in the shared folder + //we may have to do some inspection of the package docs folder and decide to fallback in some cases, or mark the package + //in some way. } catch (Exception ex) { diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs index b4ab8cf7908..b56498864e5 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewExtension.cs @@ -212,13 +212,15 @@ private void OnInsertFile(object sender, InsertDocumentationLinkEventArgs e) { GroupInsertedGraph(existingGroups, e.Name); }); + //we want to wait for the new group to be inserted and actually rendered, so we add the layout command + //as a background priority task on the ui dispatcher. Dispatcher.CurrentDispatcher.BeginInvoke(() => { // We have selected all the nodes and notes from the inserted graph // Now is the time to auto layout the inserted nodes this.DynamoViewModel.GraphAutoLayoutCommand.Execute(null); this.DynamoViewModel.FitViewCommand.Execute(false); - }); + },DispatcherPriority.Background); } diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs index 07dd12fad5d..912bcceaeae 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Web; using System.Windows; +using System.Windows.Documents; using Dynamo.Core; using Dynamo.DocumentationBrowser.Properties; using Dynamo.Logging; @@ -86,23 +87,20 @@ private set private Uri link; private string graphPath; private string content; - private string currentPackageName; /// - /// Package Name + /// Package Name of the current node for docs display, if this node is from a package. /// - internal string CurrentPackageName - { - get - { - return currentPackageName; - } - set - { - currentPackageName = value; - } - } + internal string CurrentPackageName { get; set; } + /// + /// True if the current node for docs display is owned by a package. + /// + internal bool IsOwnedByPackage { get; set; } + /// + /// Name of the current node's sample dyn for docs display, this is the currently always the node name. + /// + internal string CurrentGraphName { get; set; } private MarkdownHandler MarkdownHandlerInstance => markdownHandler ?? (markdownHandler = new MarkdownHandler()); public bool HasContent => !string.IsNullOrWhiteSpace(this.content); @@ -202,9 +200,12 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) try { string targetContent; - string graph; + string graphPath; string graphName; + bool ownedByPackage = false; + string packageName = string.Empty; Uri link; + switch (e) { case OpenNodeAnnotationEventArgs openNodeAnnotationEventArgs: @@ -213,14 +214,16 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) openNodeAnnotationEventArgs.PackageName); link = string.IsNullOrEmpty(mdLink) ? new Uri(String.Empty, UriKind.Relative) : new Uri(mdLink); - graph = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link); targetContent = CreateNodeAnnotationContent(openNodeAnnotationEventArgs); graphName = openNodeAnnotationEventArgs.MinimumQualifiedName; + packageName = openNodeAnnotationEventArgs.PackageName; + ownedByPackage = !string.IsNullOrEmpty(openNodeAnnotationEventArgs.PackageName); break; case OpenDocumentationLinkEventArgs openDocumentationLink: link = openDocumentationLink.Link; - graph = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link); targetContent = ResourceUtilities.LoadContentFromResources(openDocumentationLink.Link.ToString(), GetType().Assembly); graphName = null; break; @@ -228,7 +231,7 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) default: // Navigate to unsupported targetContent = null; - graph = null; + graphPath = null; link = null; graphName = null; break; @@ -241,8 +244,10 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) else { this.content = targetContent; - this.graphPath = graph; - this.currentPackageName = graphName; + this.graphPath = graphPath; + IsOwnedByPackage = ownedByPackage; + CurrentPackageName = packageName; + CurrentGraphName = graphName; this.Link = link; } } @@ -429,7 +434,7 @@ internal void InsertGraph() { if (graphPath != null) { - var graphName = this.currentPackageName ?? Path.GetFileNameWithoutExtension(graphPath); + var graphName = CurrentPackageName ?? Path.GetFileNameWithoutExtension(graphPath); raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(graphPath, graphName)); } else From dd080a2db567c2900e93681a301963d65549f36d Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Wed, 1 Nov 2023 18:57:18 -0400 Subject: [PATCH 04/15] add another test, fix dyn loading --- .../DocumentationBrowserViewModel.cs | 49 +++++++++++------ .../DocumentationBrowserViewExtensionTests.cs | 55 +++++++++++++++---- .../doc/Package.Package.Hello.dyn | 1 + 3 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.dyn diff --git a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs index 912bcceaeae..7bcac36b885 100644 --- a/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs +++ b/src/DocumentationBrowserViewExtension/DocumentationBrowserViewModel.cs @@ -85,7 +85,6 @@ private set } private Uri link; - private string graphPath; private string content; @@ -102,6 +101,9 @@ private set /// internal string CurrentGraphName { get; set; } + //path to the current node's sample dyn, usually extracted from the .md file. + internal string GraphPath { get; set; } + private MarkdownHandler MarkdownHandlerInstance => markdownHandler ?? (markdownHandler = new MarkdownHandler()); public bool HasContent => !string.IsNullOrWhiteSpace(this.content); @@ -209,21 +211,23 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) switch (e) { case OpenNodeAnnotationEventArgs openNodeAnnotationEventArgs: + packageName = openNodeAnnotationEventArgs.PackageName; + ownedByPackage = !string.IsNullOrEmpty(openNodeAnnotationEventArgs.PackageName); + var mdLink = packageManagerDoc.GetAnnotationDoc( openNodeAnnotationEventArgs.MinimumQualifiedName, openNodeAnnotationEventArgs.PackageName); link = string.IsNullOrEmpty(mdLink) ? new Uri(String.Empty, UriKind.Relative) : new Uri(mdLink); - graphPath = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link, ownedByPackage); targetContent = CreateNodeAnnotationContent(openNodeAnnotationEventArgs); graphName = openNodeAnnotationEventArgs.MinimumQualifiedName; - packageName = openNodeAnnotationEventArgs.PackageName; - ownedByPackage = !string.IsNullOrEmpty(openNodeAnnotationEventArgs.PackageName); + break; case OpenDocumentationLinkEventArgs openDocumentationLink: link = openDocumentationLink.Link; - graphPath = GetGraphLinkFromMDLocation(link); + graphPath = GetGraphLinkFromMDLocation(link, false); targetContent = ResourceUtilities.LoadContentFromResources(openDocumentationLink.Link.ToString(), GetType().Assembly); graphName = null; break; @@ -244,7 +248,7 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) else { this.content = targetContent; - this.graphPath = graphPath; + this.GraphPath = graphPath; IsOwnedByPackage = ownedByPackage; CurrentPackageName = packageName; CurrentGraphName = graphName; @@ -269,13 +273,13 @@ private void HandleLocalResource(OpenDocumentationLinkEventArgs e) this.shouldLoadDefaultContent = false; } - private string GetGraphLinkFromMDLocation(Uri link) + private string GetGraphLinkFromMDLocation(Uri link,bool isOwnedByPackage) { if (link == null || link.Equals(new Uri(String.Empty, UriKind.Relative))) return string.Empty; try { - string graphPath = DynamoGraphFromMDFilePath(link.AbsolutePath); - return File.Exists(graphPath) ? graphPath : null; + string gp = DynamoGraphFromMDFilePath(link.AbsolutePath, isOwnedByPackage); + return File.Exists(gp) ? gp : null; } catch (Exception) { @@ -320,7 +324,7 @@ private void OnCurrentMdFileChanged(object sender, FileSystemEventArgs e) var nodeAnnotationArgs = openDocumentationLinkEventArgs as OpenNodeAnnotationEventArgs; this.content = CreateNodeAnnotationContent(nodeAnnotationArgs); this.Link = new Uri(e.FullPath); - this.graphPath = GetGraphLinkFromMDLocation(this.Link); + this.GraphPath = GetGraphLinkFromMDLocation(this.Link,nodeAnnotationArgs.PackageName != string.Empty); } private string CreateNodeAnnotationContent(OpenNodeAnnotationEventArgs e) @@ -432,14 +436,15 @@ internal void InsertGraph() if (raiseInsertGraph != null) { - if (graphPath != null) + if (GraphPath != null) { - var graphName = CurrentPackageName ?? Path.GetFileNameWithoutExtension(graphPath); - raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(graphPath, graphName)); + var graphName = CurrentPackageName ?? Path.GetFileNameWithoutExtension(GraphPath); + raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(GraphPath, graphName)); } else { - raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(Resources.FileNotFoundFailureMessage, DynamoGraphFromMDFilePath(this.Link.AbsolutePath))); + raiseInsertGraph(this, new InsertDocumentationLinkEventArgs(Resources.FileNotFoundFailureMessage, + DynamoGraphFromMDFilePath(this.Link.AbsolutePath,IsOwnedByPackage))); return; } } @@ -448,12 +453,20 @@ internal void InsertGraph() internal delegate void InsertDocumentationLinkEventHandler(object sender, InsertDocumentationLinkEventArgs e); internal event InsertDocumentationLinkEventHandler HandleInsertFile; - private string DynamoGraphFromMDFilePath(string path) + private string DynamoGraphFromMDFilePath(string path, bool IsOwnedByPackage) { path = HttpUtility.UrlDecode(path); - var rootLevelDir = Path.GetDirectoryName(path); - var imagesLocation = Path.Combine(new DirectoryInfo(rootLevelDir).Parent.Parent.FullName, DocumentationBrowserView.SharedDocsDirectoryName); - return Path.Combine(imagesLocation, Path.GetFileNameWithoutExtension(path)) + ".dyn"; + if (!IsOwnedByPackage) + { + + var sharedDocsLocation = Path.Combine(new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, + DocumentationBrowserView.SharedDocsDirectoryName); + return Path.Combine(sharedDocsLocation, Path.GetFileNameWithoutExtension(path)) + ".dyn"; + } + else + { + return Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path)) + ".dyn"; + } } diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index fc4d13a96ba..45e297122e8 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -145,7 +145,7 @@ public void CanCreatePackageNodeDocumentationAndLoadImages() //TODO this is false because package image loading is now broken. Assert.IsTrue(Directory.Exists(browserView.VirtualFolderPath)); //Check that the virtual folder will be created in the Package/doc folder so images will be loaded correctly - Assert.IsTrue(browserView.VirtualFolderPath.Replace("\\", "/").Contains(packageDocPath.Replace("\\", "/"))); + Assert.IsTrue(browserView.VirtualFolderPath.Contains(packageDocPath)); Assert.IsTrue(htmlContent.Contains(expectedImageContent)); } @@ -498,7 +498,7 @@ public void GetResourceNameWithCultureNameWorksWithValidCultureAndInputName() Assert.AreEqual("MyPage.en-US.html", result); } - [Test, Apartment(ApartmentState.STA)] + [Test] public void CanCreateNodeDocumenationHtmlFromNodeAnnotationEventArgsWithOOTBNodeWithoutAddtionalDocumentation() { // Arrange @@ -711,7 +711,7 @@ private string RequestNodeDocs(Dynamo.Graph.Nodes.NodeModel node) return GetSidebarDocsBrowserContents(); } - [Test, Apartment(ApartmentState.STA)] + [Test] public void AddGraphInSpecificLocationToWorkspace() { var testDirectory = GetTestDirectory(ExecutingDirectory); @@ -752,9 +752,8 @@ public void AddGraphInSpecificLocationToWorkspace() var docsView = GetDocsTabItem().Content as DocumentationBrowserView; var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; - //Using reflection change the path of the dyn file for using the created directory (which has empty spaces in the name) - FieldInfo fi = typeof(DocumentationBrowserViewModel).GetField("graphPath", BindingFlags.NonPublic | BindingFlags.Instance); - fi.SetValue(docsViewModel, insertDynFilePath); + + docsViewModel.GraphPath = insertDynFilePath; //Insert the Graph into the current workspace docsViewModel.InsertGraph(); @@ -786,20 +785,52 @@ public void Validate_GetGraphLinkFromMDLocation() var docsView = GetDocsTabItem().Content as DocumentationBrowserView; var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; - //Due that graphPath is a private we use reflection to get the value. - FieldInfo type = typeof(DocumentationBrowserViewModel).GetField("graphPath", BindingFlags.NonPublic | BindingFlags.Instance); - var graphPathValue = type.GetValue(docsViewModel); + var graphPathValue = docsViewModel.GraphPath; var dynFileName = Path.GetFileNameWithoutExtension(docsViewModel.Link.AbsolutePath) + ".dyn"; - //This will return a path with the NodeHelpSharedDocs + dyn file name + //This will return a path with the pkg doc + dyn file name var sharedFilesPath = Path.Combine(DocumentationBrowserView.SharedDocsDirectoryName, dynFileName); Assert.IsNotNull(graphPathValue); Assert.IsTrue(!string.IsNullOrEmpty(graphPathValue.ToString())); - //Chech that the pathPath contains "NodeHelpSharedDocs//dynfilename" - Assert.That(graphPathValue.ToString().Contains(sharedFilesPath)); + //check that the pathPath contains "NodeHelpSharedDocs//dynfilename" + Assert.That(graphPathValue.Contains(sharedFilesPath)); + } + [Test] + public void Validate_GetGraphLinkFromPackage() + { + var nodeName = "Package.Hello"; + + // Act + this.ViewModel.ExecuteCommand( + new DynamoModel.CreateNodeCommand( + Guid.NewGuid().ToString(), nodeName, 0, 0, false, false) + ); + + //Validates that we have just one node in the CurrentWorkspace + Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 1); + + var node = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(); + + //In this call the GetGraphLinkFromMDLocation() method is executed internally + RequestNodeDocs(node); + + // Show the DocumentationBrowser so we can get the DocumentationBrowserViewModel + ShowDocsBrowser(); + var docsView = GetDocsTabItem().Content as DocumentationBrowserView; + var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; + + var graphPathValue = docsViewModel.GraphPath; + + var dynFileName = Path.GetFileNameWithoutExtension(docsViewModel.Link.AbsolutePath) + ".dyn"; + + Assert.IsNotNull(graphPathValue); + Assert.IsTrue(!string.IsNullOrEmpty(graphPathValue)); + + //check that the path contains "packageWithDocumentation" + Assert.That(graphPathValue.Contains("PackageWithNodeDocumentation\\doc")); } #region Helpers diff --git a/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.dyn b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.dyn new file mode 100644 index 00000000000..98f7422125b --- /dev/null +++ b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/Package.Package.Hello.dyn @@ -0,0 +1 @@ +I am a .dyn file. From 7ddb5b30ff206e91b9054679e2a8e2c9ba4c27fc Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Thu, 2 Nov 2023 21:44:09 -0400 Subject: [PATCH 05/15] fix asm version rename method --- .../ViewModels/Search/NodeAutoCompleteSearchViewModel.cs | 2 +- src/DynamoPackages/PackageLoader.cs | 4 ++-- src/DynamoPackages/PackageManagerExtension.cs | 2 +- src/DynamoUtilities/PathHelper.cs | 2 +- src/Notifications/NotificationCenterController.cs | 4 ++-- test/Libraries/TestServices/TestSessionConfiguration.cs | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs index 003b50517ab..512cd8693c9 100644 --- a/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/Search/NodeAutoCompleteSearchViewModel.cs @@ -436,7 +436,7 @@ private MLNodeAutoCompletionResponse GetMLNodeAutocompleteResults(string request { try { - var uri = DynamoUtilities.PathHelper.getServiceBackendAddress(this, nodeAutocompleteMLEndpoint); + var uri = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, nodeAutocompleteMLEndpoint); var client = new RestClient(uri); var request = new RestRequest(string.Empty,Method.Post); diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index 95ee95b09e2..cb3bf82824e 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -3,7 +3,7 @@ using System.IO; using System.Linq; using System.Reflection; -using Dynamo.Configuration; +using System.Runtime.Loader; using Dynamo.Core; using Dynamo.Exceptions; using Dynamo.Extensions; @@ -777,7 +777,7 @@ internal static bool TryLoadFrom(string filename, out Assembly assem) { try { - assem = Assembly.LoadFrom(filename); + assem = alc.LoadFromAssemblyPath(filename); return true; } catch (FileLoadException e) diff --git a/src/DynamoPackages/PackageManagerExtension.cs b/src/DynamoPackages/PackageManagerExtension.cs index fe50bd10cf5..4015d0fdb72 100644 --- a/src/DynamoPackages/PackageManagerExtension.cs +++ b/src/DynamoPackages/PackageManagerExtension.cs @@ -120,7 +120,7 @@ public void Dispose() /// public void Startup(StartupParams startupParams) { - string url = DynamoUtilities.PathHelper.getServiceBackendAddress(this, "packageManagerAddress"); + string url = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "packageManagerAddress"); OnMessageLogged(LogMessage.Info("Dynamo will use the package manager server at : " + url)); diff --git a/src/DynamoUtilities/PathHelper.cs b/src/DynamoUtilities/PathHelper.cs index 393ac19df9b..d1a296ff761 100644 --- a/src/DynamoUtilities/PathHelper.cs +++ b/src/DynamoUtilities/PathHelper.cs @@ -465,7 +465,7 @@ internal static bool IsSubDirectoryOfDirectory(string subdirectory, string direc /// Service or feature for which the address is being requested. /// It should match the key specified in the config file. /// Path that will be used to fetch resources - public static string getServiceBackendAddress(object o, string serviceKey) + public static string GetServiceBackendAddress(object o, string serviceKey) { string url = null; if (o != null) diff --git a/src/Notifications/NotificationCenterController.cs b/src/Notifications/NotificationCenterController.cs index b5dfeeaf65f..2706ab97bd0 100644 --- a/src/Notifications/NotificationCenterController.cs +++ b/src/Notifications/NotificationCenterController.cs @@ -161,7 +161,7 @@ private void AddNotifications(List notifications) private void RequestNotifications() { - var uri = DynamoUtilities.PathHelper.getServiceBackendAddress(this, "notificationAddress"); + var uri = DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "notificationAddress"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; @@ -310,7 +310,7 @@ public void RefreshNotifications(string url="") { InvokeJS(@"window.RequestNotifications('" + url + "');"); } else { - InvokeJS(@"window.RequestNotifications('" + DynamoUtilities.PathHelper.getServiceBackendAddress(this, "notificationAddress") + "');"); + InvokeJS(@"window.RequestNotifications('" + DynamoUtilities.PathHelper.GetServiceBackendAddress(this, "notificationAddress") + "');"); } } } diff --git a/test/Libraries/TestServices/TestSessionConfiguration.cs b/test/Libraries/TestServices/TestSessionConfiguration.cs index ae4b2befdf9..54404deedd8 100644 --- a/test/Libraries/TestServices/TestSessionConfiguration.cs +++ b/test/Libraries/TestServices/TestSessionConfiguration.cs @@ -18,8 +18,8 @@ public class TestSessionConfiguration private const string CONFIG_FILE_NAME = "TestServices.dll.config"; private List supportedLibGVersions = new List { + new Version(230,0,0), new Version(229,0,0), - new Version(228,6,0), }; public string DynamoCorePath { get; private set; } @@ -31,7 +31,7 @@ public class TestSessionConfiguration /// If the key is not present in the config file a default value will be selected. /// public Version RequestedLibraryVersion2 { get; private set; } - + /// /// This constructor does not read configuration from a config file, the configuration properties are /// set directly by the parameters passed to this constructor. From b76d815f4c51af790f866df9d9a30a2d70d40def Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Thu, 2 Nov 2023 22:13:07 -0400 Subject: [PATCH 06/15] replace binary with renamed one --- src/DynamoPackages/PackageLoader.cs | 2 +- .../bin/{Package.dll => Package_New.dll} | Bin 4096 -> 4096 bytes 2 files changed, 1 insertion(+), 1 deletion(-) rename test/pkgs/Pack'age/bin/{Package.dll => Package_New.dll} (50%) diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index cb3bf82824e..9dcd9d60e7f 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -777,7 +777,7 @@ internal static bool TryLoadFrom(string filename, out Assembly assem) { try { - assem = alc.LoadFromAssemblyPath(filename); + assem = Assembly.LoadFrom(filename); return true; } catch (FileLoadException e) diff --git a/test/pkgs/Pack'age/bin/Package.dll b/test/pkgs/Pack'age/bin/Package_New.dll similarity index 50% rename from test/pkgs/Pack'age/bin/Package.dll rename to test/pkgs/Pack'age/bin/Package_New.dll index 58050bf72fc19d52531dcabdebf0b36eef896704..3f1b396e76d9b883da066fc5eb79dce46d73e768 100644 GIT binary patch delta 658 zcmYk4%WD%+6vn@EC-X>J24luFtuAJm*0!{imhpkOiB?F1Akk2zD6Q#(SR?h3fT+;M z-~+*h;Vu;1yO%8NN;kUEf54^xfeUd{6g~G;#cw#jd%kb(y#se{J8Xx~o<~t1O#>bP zhl{mwkP({BsEF?NoL}Iqx@&R8>PET#%RoN|KSqE9I#QE*fksu!(H+{PiYAq_pV|QF zZ2G9Ks39WVP~%J61jL)bu;QJ$;%e*G`bNEJwq8vEdw7iJt7!f0OY`MZoIPOgnYAac zU0*hnS-d<`3KY`D>`;RId;Lw#3{0w5o*)*qdC$a{15()qzdU!GVl`Bn&1lnRMFJ>ZT7Hh0;5{0Ch5 zh|Y}Yi@mJ>l6rn-$5J delta 800 zcmYk4&ubGw6vw|aNp`nCNE>2HQb9I`{<0yqHW0O!)`tF|qNz&?r3<=AmzX9tF+UFe zplwQ3yfu!Xe}Tt>=AZ}BQ%`~y!GkC1$y){WQY!j(O2xOl&%E!Od2fc<+0Zxi?Pnpq zjST}D0EL{4_Y-vTadM!u@n*)m(+6C2)Hra{)d>09ZvgG2fA#|BMTkelBJ1axDmK{~ z+Y^lYJzE}tiMkdSN#4UcM4k^`f6IXI8Zf|t7DEGX-hpa1bA8=P}o`M?r+Y5Or7A zx*ro@^d)tt@FCu_ep1;Z71*UJMm={KgO8{nNNlA}yQ~uAKzSCmzqM54L<%(GDp{ hC#JLkI_jTZ=;& Date: Thu, 2 Nov 2023 23:33:11 -0400 Subject: [PATCH 07/15] try to fix tests --- test/DynamoCoreWpfTests/DynamoViewTests.cs | 19 +------------------ .../DocumentationBrowserViewExtensionTests.cs | 7 ++++--- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/test/DynamoCoreWpfTests/DynamoViewTests.cs b/test/DynamoCoreWpfTests/DynamoViewTests.cs index 0de1fcf4698..79294e37f2f 100644 --- a/test/DynamoCoreWpfTests/DynamoViewTests.cs +++ b/test/DynamoCoreWpfTests/DynamoViewTests.cs @@ -40,26 +40,11 @@ protected override void GetLibrariesToPreload(List libraries) libraries.Add("FFITarget.dll"); } - public override void Open(string path) - { - base.Open(path); - - DispatcherUtil.DoEvents(); - } - - public override void Run() - { - base.Run(); - - DispatcherUtil.DoEvents(); - } - [Test] public void FooterNotificationControlTest() { // Arrange Open(@"UI\ZoomNodeColorStates.dyn"); - var workspace = ViewModel.Model.CurrentWorkspace as HomeWorkspaceModel; Debug.Assert(workspace != null, nameof(workspace) + " != null"); workspace.Run(); @@ -116,7 +101,6 @@ public void OpeningWorkspaceWithTclsrustWarning() // Open workspace with test mode as false, to verify trust warning. DynamoModel.IsTestMode = false; Open(@"core\CustomNodes\TestAdd.dyn"); - Assert.IsTrue(ViewModel.FileTrustViewModel.ShowWarningPopup); // Close workspace @@ -138,7 +122,7 @@ public void ElementBinding_SaveAs() var filePath = Path.Combine(GetTestDirectory(ExecutingDirectory), pathInTestsDir); // Always start with a fresh workspace with no binding data for this test. - File.Copy(prebindingPath, filePath); + File.Copy(prebindingPath, filePath,true); OpenAndRun(pathInTestsDir); // Assert that the node doesn't have trace data the first time it's run. @@ -176,7 +160,6 @@ public void TestToastNotificationClosingBehavior() { var preferencesWindow = new PreferencesView(View); preferencesWindow.Show(); - DispatcherUtil.DoEvents(); string selectedLanguage = (string)((ComboBox)preferencesWindow.FindName("LanguageCmb")).SelectedItem; var english = Configurations.SupportedLocaleDic.FirstOrDefault(x => x.Value == "en-US").Key; var spanish = Configurations.SupportedLocaleDic.FirstOrDefault(x => x.Value == "es-ES").Key; diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index 45e297122e8..cff5dfc88d7 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -17,6 +17,7 @@ using Dynamo.Utilities; using Dynamo.ViewModels; using Dynamo.Wpf.Extensions; +using DynamoCoreWpfTests.Utility; using NUnit.Framework; namespace DynamoCoreWpfTests @@ -745,20 +746,20 @@ public void AddGraphInSpecificLocationToWorkspace() Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 1); var node = ViewModel.Model.CurrentWorkspace.Nodes.FirstOrDefault(); - RequestNodeDocs(node); + // Show the DocumentationBrowser so we can get the DocumentationBrowserViewModel ShowDocsBrowser(); + RequestNodeDocs(node); + var docsView = GetDocsTabItem().Content as DocumentationBrowserView; var docsViewModel = docsView.DataContext as DocumentationBrowserViewModel; - docsViewModel.GraphPath = insertDynFilePath; //Insert the Graph into the current workspace docsViewModel.InsertGraph(); } - //Validates that we have 5 nodes the CurrentWorkspace (after the graph was added) //Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); } From ec946b6b619c090e235ad48a6a8f658b8df0703b Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Fri, 3 Nov 2023 16:54:44 -0400 Subject: [PATCH 08/15] rename package with node docs assembly and namespace --- .../DocumentationBrowserViewExtensionTests.cs | 4 ++-- .../bin/PackageWithDocs.dll} | Bin 4096 -> 4096 bytes ....dyn => PackageWithDocs.Package.Hello.dyn} | 0 ...lo.md => PackageWithDocs.Package.Hello.md} | 0 .../PackageWithNodeDocumentation/pkg.json | 2 +- .../Pack'age}/bin/Package.dll | Bin 6 files changed, 3 insertions(+), 3 deletions(-) rename test/{pkgs/Pack'age/bin/Package_New.dll => core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll} (77%) rename test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/{Package.Package.Hello.dyn => PackageWithDocs.Package.Hello.dyn} (100%) rename test/core/docbrowser/pkgs/PackageWithNodeDocumentation/doc/{Package.Package.Hello.md => PackageWithDocs.Package.Hello.md} (100%) rename test/{core/docbrowser/pkgs/PackageWithNodeDocumentation => pkgs/Pack'age}/bin/Package.dll (100%) diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index cff5dfc88d7..acecada09f4 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -551,7 +551,7 @@ public void CanCreateNodeDocumenationHtmlFromNodeAnnotationEventArgsWithPackageN var nodeName = "Package.Hello"; var nodeRename = "New node name"; var expectedNodeDocumentationTitle = $"

{nodeRename}

"; - var expectedNodeDocumentationNamespace = $"

Package.{nodeName}

"; + var expectedNodeDocumentationNamespace = $"

PackageWithDocs.{nodeName}

"; var expectedAddtionalNodeDocumentationHeader = @"

Hello Dynamo!

"; var expectedAddtionalNodeDocumentationImage = String.Format(@"", Path.GetFileName(localImagePath)); @@ -592,7 +592,7 @@ public void CanGetNodeDocumentationMarkdownFromPackageDocumentationManager() { // Arrange var packageName = "Package"; - var nodeWithDocumentation = "Package.Package.Hello"; + var nodeWithDocumentation = "PackageWithDocs.Package.Hello"; var nodeWithoutDocumentation = "Package.Package.Package"; // Assert diff --git a/test/pkgs/Pack'age/bin/Package_New.dll b/test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll similarity index 77% rename from test/pkgs/Pack'age/bin/Package_New.dll rename to test/core/docbrowser/pkgs/PackageWithNodeDocumentation/bin/PackageWithDocs.dll index 3f1b396e76d9b883da066fc5eb79dce46d73e768..400efff6e17fa1adae2e409404e3c62703f15f9d 100644 GIT binary patch delta 204 zcmZorXi!+d$S0%5z~IjS1P%-g8O#$Eg?SPf7$cAhXylLz}W7go-RPKj>%`4!X<5(mNBw1 zd}ZKeVq-{R1d*Byrx}GAbSK*~8?wIx%1JZ4n_SAQ$aIf!@(kuDKx%Ux%NIu8fW+kN m#Prng%#sY3{K@%j5t}cwIWn@!a4;~qOqS#@-5kWRjvWA4$SiaK delta 202 zcmZorXi!+d$S0x3z!1y;1P%-g8O#$Eg?SPf7djC^Ij;7^svXg@u7Z07xr`1~Zhv*zTd8E Date: Mon, 6 Nov 2023 14:04:21 -0500 Subject: [PATCH 09/15] review comments --- .../ViewExtensions/DocumentationBrowserViewExtensionTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index acecada09f4..bbe5fa5fcf4 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -143,7 +143,6 @@ public void CanCreatePackageNodeDocumentationAndLoadImages() // Assert Assert.IsTrue(!string.IsNullOrEmpty(browserView.VirtualFolderPath)); - //TODO this is false because package image loading is now broken. Assert.IsTrue(Directory.Exists(browserView.VirtualFolderPath)); //Check that the virtual folder will be created in the Package/doc folder so images will be loaded correctly Assert.IsTrue(browserView.VirtualFolderPath.Contains(packageDocPath)); @@ -761,7 +760,7 @@ public void AddGraphInSpecificLocationToWorkspace() docsViewModel.InsertGraph(); } //Validates that we have 5 nodes the CurrentWorkspace (after the graph was added) - //Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); + Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); } [Test] @@ -831,7 +830,7 @@ public void Validate_GetGraphLinkFromPackage() Assert.IsTrue(!string.IsNullOrEmpty(graphPathValue)); //check that the path contains "packageWithDocumentation" - Assert.That(graphPathValue.Contains("PackageWithNodeDocumentation\\doc")); + Assert.That(graphPathValue.Contains(Path.Combine("PackageWithNodeDocumentation","doc",dynFileName))); } #region Helpers From 8abc4fe4e451e435cfd91acc59d799bdf2190372 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Mon, 6 Nov 2023 14:06:59 -0500 Subject: [PATCH 10/15] merge undid my changes --- .../ViewExtensions/DocumentationBrowserViewExtensionTests.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs index c2132104af2..bbe5fa5fcf4 100644 --- a/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs +++ b/test/DynamoCoreWpfTests/ViewExtensions/DocumentationBrowserViewExtensionTests.cs @@ -143,7 +143,6 @@ public void CanCreatePackageNodeDocumentationAndLoadImages() // Assert Assert.IsTrue(!string.IsNullOrEmpty(browserView.VirtualFolderPath)); - //TODO this is false because package image loading is now broken. Assert.IsTrue(Directory.Exists(browserView.VirtualFolderPath)); //Check that the virtual folder will be created in the Package/doc folder so images will be loaded correctly Assert.IsTrue(browserView.VirtualFolderPath.Contains(packageDocPath)); @@ -761,7 +760,7 @@ public void AddGraphInSpecificLocationToWorkspace() docsViewModel.InsertGraph(); } //Validates that we have 5 nodes the CurrentWorkspace (after the graph was added) - //Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); + Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Nodes.Count(), 5); } [Test] From 4c590435ecfd1112273579c7d05a6dfac5d0a114 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Mon, 6 Nov 2023 17:37:25 -0500 Subject: [PATCH 11/15] fix pkg publish version tests --- src/DynamoCoreWpf/DynamoCoreWpf.csproj | 1 + .../PackageManager/PublishPackageViewModel.cs | 90 ++++++++++++------- src/DynamoPackages/DynamoPackages.csproj | 1 + src/DynamoPackages/Package.cs | 3 +- src/DynamoPackages/PackageLoader.cs | 41 +++++---- .../PublishPackageViewModelTests.cs | 4 +- 6 files changed, 88 insertions(+), 52 deletions(-) diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj index 58b9ea68aaa..f2321cdf926 100644 --- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj +++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj @@ -148,6 +148,7 @@ + ..\..\extern\Microsoft.Xaml.Behaviors\$(TargetFramework)\Dynamo.Microsoft.Xaml.Behaviors.dll diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs index b45a5779253..1f4b3ad0561 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs @@ -25,6 +25,7 @@ using String = System.String; using NotificationObject = Dynamo.Core.NotificationObject; using Prism.Commands; +using System.Runtime.InteropServices; namespace Dynamo.PackageManager { @@ -865,11 +866,11 @@ private void ThisPropertyChanged(object sender, PropertyChangedEventArgs e) } } - public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoViewModel, Package l) + public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoViewModel, Package pkg) { var defs = new List(); - foreach (var x in l.LoadedCustomNodes) + foreach (var x in pkg.LoadedCustomNodes) { CustomNodeDefinition def; if (dynamoViewModel.Model.CustomNodeManager.TryGetFunctionDefinition( @@ -881,44 +882,67 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie } } - var vm = new PublishPackageViewModel(dynamoViewModel) + var pkgViewModel = new PublishPackageViewModel(dynamoViewModel) { - Group = l.Group, - Description = l.Description, - Keywords = l.Keywords != null ? String.Join(" ", l.Keywords) : "", + Group = pkg.Group, + Description = pkg.Description, + Keywords = pkg.Keywords != null ? String.Join(" ", pkg.Keywords) : "", CustomNodeDefinitions = defs, - Name = l.Name, - RepositoryUrl = l.RepositoryUrl ?? "", - SiteUrl = l.SiteUrl ?? "", - Package = l, - License = l.License, - SelectedHosts = l.HostDependencies as List, - CopyrightHolder = l.CopyrightHolder, - CopyrightYear = l.CopyrightYear + Name = pkg.Name, + RepositoryUrl = pkg.RepositoryUrl ?? "", + SiteUrl = pkg.SiteUrl ?? "", + Package = pkg, + License = pkg.License, + SelectedHosts = pkg.HostDependencies as List, + CopyrightHolder = pkg.CopyrightHolder, + CopyrightYear = pkg.CopyrightYear }; // add additional files - l.EnumerateAdditionalFiles(); - foreach (var file in l.AdditionalFiles) + pkg.EnumerateAdditionalFiles(); + foreach (var file in pkg.AdditionalFiles) { - vm.AdditionalFiles.Add(file.Model.FullName); + pkgViewModel.AdditionalFiles.Add(file.Model.FullName); } - var nodeLibraryNames = l.Header.node_libraries; + var nodeLibraryNames = pkg.Header.node_libraries; var assembliesLoadedTwice = new List(); // load assemblies into reflection only context - foreach (var file in l.EnumerateAssemblyFilesInBinDirectory()) + + //TODO unclear how many MLC there should be - if we want to recreate the behavior from before - + //maybe only 1? For now one per package publish. + + // Retrieve the location of the assembly and the referenced assemblies used by the domain + var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"); + // Create the list of assembly paths consisting of runtime assemblies. + var assemblyPaths = new List(runtimeAssemblies); + + //and all the package assemblies. + foreach (var assemblyFile in pkg.EnumerateAssemblyFilesInPackage()) + { + assemblyPaths.Add(assemblyFile); + } + + // Create PathAssemblyResolver that can resolve assemblies using the created list. + var resolver = new PathAssemblyResolver(assemblyPaths); + var mlc = new MetadataLoadContext(resolver); + + //TODO for now, we leak the mlc, but it's unlikely users will publish + //enough packages in a single Dynamo session for this ever to be an issue. + //The assemblies are also long lived so it's not clear we could really clean them up anyway. + //using (mlc) + foreach (var file in pkg.EnumerateAssemblyFilesInPackage()) { Assembly assem; - var result = PackageLoader.TryReflectionOnlyLoadFrom(file, out assem); + var result = PackageLoader.TryMetaDataContextLoad(file, mlc, out assem); switch (result) { case AssemblyLoadingState.Success: { var isNodeLibrary = nodeLibraryNames == null || nodeLibraryNames.Contains(assem.FullName); - vm.Assemblies.Add(new PackageAssembly() + pkgViewModel.Assemblies.Add(new PackageAssembly() { IsNodeLibrary = isNodeLibrary, Assembly = assem @@ -928,7 +952,7 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie case AssemblyLoadingState.NotManagedAssembly: { // if it's not a .NET assembly, we load it as an additional file - vm.AdditionalFiles.Add(file); + pkgViewModel.AdditionalFiles.Add(file); break; } case AssemblyLoadingState.AlreadyLoaded: @@ -940,24 +964,24 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie } //after dependencies are loaded refresh package contents - vm.RefreshPackageContents(); - vm.UpdateDependencies(); + pkgViewModel.RefreshPackageContents(); + pkgViewModel.UpdateDependencies(); if (assembliesLoadedTwice.Any()) { - vm.UploadState = PackageUploadHandle.State.Error; - vm.ErrorString = Resources.OneAssemblyWasLoadedSeveralTimesErrorMessage + string.Join("\n", assembliesLoadedTwice); + pkgViewModel.UploadState = PackageUploadHandle.State.Error; + pkgViewModel.ErrorString = Resources.OneAssemblyWasLoadedSeveralTimesErrorMessage + string.Join("\n", assembliesLoadedTwice); } - if (l.VersionName == null) return vm; + if (pkg.VersionName == null) return pkgViewModel; - var parts = l.VersionName.Split('.'); - if (parts.Count() != 3) return vm; + var parts = pkg.VersionName.Split('.'); + if (parts.Count() != 3) return pkgViewModel; - vm.MajorVersion = parts[0]; - vm.MinorVersion = parts[1]; - vm.BuildVersion = parts[2]; - return vm; + pkgViewModel.MajorVersion = parts[0]; + pkgViewModel.MinorVersion = parts[1]; + pkgViewModel.BuildVersion = parts[2]; + return pkgViewModel; } diff --git a/src/DynamoPackages/DynamoPackages.csproj b/src/DynamoPackages/DynamoPackages.csproj index ef52d420fb4..eb2b313c6eb 100644 --- a/src/DynamoPackages/DynamoPackages.csproj +++ b/src/DynamoPackages/DynamoPackages.csproj @@ -33,6 +33,7 @@ + diff --git a/src/DynamoPackages/Package.cs b/src/DynamoPackages/Package.cs index f6b1f6b9d61..54b6f27a6a2 100644 --- a/src/DynamoPackages/Package.cs +++ b/src/DynamoPackages/Package.cs @@ -327,7 +327,8 @@ public void EnumerateAdditionalFiles() AdditionalFiles.AddRange(nonDyfDllFiles); } - public IEnumerable EnumerateAssemblyFilesInBinDirectory() + //TODO can we make this internal? + public IEnumerable EnumerateAssemblyFilesInPackage() { if (String.IsNullOrEmpty(RootDirectory) || !Directory.Exists(RootDirectory)) return new List(); diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index 9dcd9d60e7f..413cfd7c027 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -748,23 +748,32 @@ private void CheckPackageNodeLibraryCertificates(string packageDirectoryPath, Pa /// The filename of a DLL /// out Assembly - the passed value does not matter and will only be set if loading succeeds /// Returns Success if success, NotManagedAssembly if BadImageFormatException, AlreadyLoaded if FileLoadException - internal static AssemblyLoadingState TryReflectionOnlyLoadFrom(string filename, out Assembly assem) + internal static AssemblyLoadingState TryMetaDataContextLoad(string filename,MetadataLoadContext mlc, out Assembly assem) { - try - { - assem = Assembly.ReflectionOnlyLoadFrom(filename); - return AssemblyLoadingState.Success; - } - catch (BadImageFormatException) - { - assem = null; - return AssemblyLoadingState.NotManagedAssembly; - } - catch (FileLoadException) - { - assem = null; - return AssemblyLoadingState.AlreadyLoaded; - } + + try + { + var assemName = new AssemblyName(filename); + //MLC will return assembly if names and mvid match + //where reflection only context would throw FileLoadException + //we try to maintain that legacy behavior for Dynamo 3.0. + if (mlc.GetAssemblies().Select(x => x.GetName() == assemName).Any()) { + throw new FileLoadException(filename); + } + assem = mlc.LoadFromAssemblyPath(filename); + + return AssemblyLoadingState.Success; + } + catch (BadImageFormatException) + { + assem = null; + return AssemblyLoadingState.NotManagedAssembly; + } + catch (FileLoadException) + { + assem = null; + return AssemblyLoadingState.AlreadyLoaded; + } } /// diff --git a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs index a40615af684..4ab9c359918 100644 --- a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs +++ b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs @@ -99,7 +99,7 @@ public void CanPublishLateInitializedJsonCustomNode() } - [Test, Category("Failure")] + [Test] public void NewPackageVersionUpload_DoesNotThrowExceptionWhenDLLIsLoadedSeveralTimes() { string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); @@ -123,7 +123,7 @@ public void NewPackageVersionUpload_DoesNotThrowExceptionWhenDLLIsLoadedSeveralT Assert.AreEqual(PackageUploadHandle.State.Error, vm.UploadState); } - [Test, Category("Failure")] + [Test] public void NewPackageVersionUpload_CanAddAndRemoveFiles() { string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); From b22c889153e188206545e6ede0c734bb01674535 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Wed, 8 Nov 2023 21:11:12 -0500 Subject: [PATCH 12/15] add test --- .../PublishPackageViewModelTests.cs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs index 4ab9c359918..aacabea0ebe 100644 --- a/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs +++ b/test/DynamoCoreWpfTests/PublishPackageViewModelTests.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using Dynamo; using Dynamo.Graph.Nodes.CustomNodes; using Dynamo.Graph.Workspaces; @@ -17,7 +18,7 @@ namespace DynamoCoreWpfTests public class PublishPackageViewModelTests: DynamoViewModelUnitTest { - [Test, Category("Failure")] + [Test] public void AddingDyfRaisesCanExecuteChangeOnDelegateCommand() { @@ -99,6 +100,33 @@ public void CanPublishLateInitializedJsonCustomNode() } + [Test] + public void NewPackageDoesNotThrow_NativeBinaryIsAddedAsAdditionalFile_NotBinary() + { + string packagesDirectory = Path.Combine(TestDirectory, "pkgs"); + + var pathManager = new Mock(); + pathManager.SetupGet(x => x.PackagesDirectories).Returns(() => new List { packagesDirectory }); + + var loader = new PackageLoader(pathManager.Object); + loader.LoadAll(new LoadPackageParams + { + Preferences = ViewModel.Model.PreferenceSettings + }); + + PublishPackageViewModel vm = null; + var package = loader.LocalPackages.FirstOrDefault(x => x.Name == "package with native assembly"); + Assert.DoesNotThrow(() => + { + vm = PublishPackageViewModel.FromLocalPackage(ViewModel, package); + }); + + Assert.AreEqual(1, vm.AdditionalFiles.Count); + Assert.AreEqual(0, vm.Assemblies.Count); + + Assert.AreEqual(PackageUploadHandle.State.Ready, vm.UploadState); + } + [Test] public void NewPackageVersionUpload_DoesNotThrowExceptionWhenDLLIsLoadedSeveralTimes() { From a4ef81c5bf0af3f9e860037ff597164a6878c468 Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Wed, 8 Nov 2023 21:14:07 -0500 Subject: [PATCH 13/15] add package with native dep --- .../PackageManager/PublishPackageViewModel.cs | 51 +++++++++--------- src/DynamoPackages/PackageLoader.cs | 23 ++++---- .../bin/nativeassembly.dll | Bin 0 -> 59904 bytes .../package with native assembly/pkg.json | 1 + 4 files changed, 39 insertions(+), 36 deletions(-) create mode 100644 test/pkgs/package with native assembly/bin/nativeassembly.dll create mode 100644 test/pkgs/package with native assembly/pkg.json diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs index 1f4b3ad0561..d7fb5d0462c 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PublishPackageViewModel.cs @@ -739,6 +739,22 @@ public string CurrentWarningMessage } } + private static MetadataLoadContext sharedMetaDataLoadContext = null; + /// + /// A shared MetaDataLoadContext that is used for assembly inspection during package publishing. + /// This member is shared so the behavior is similar to the ReflectionOnlyLoadContext this is replacing. + /// TODO - eventually it would be good to move to separate publish load contexts that are cleaned up at the appropriate time(?). + /// + private static MetadataLoadContext SharedPublishLoadContext + { + get + { + sharedMetaDataLoadContext ??= InitSharedPublishLoadContext(); + return sharedMetaDataLoadContext; + } + } + + #endregion internal PublishPackageViewModel() @@ -908,34 +924,10 @@ public static PublishPackageViewModel FromLocalPackage(DynamoViewModel dynamoVie var nodeLibraryNames = pkg.Header.node_libraries; var assembliesLoadedTwice = new List(); - // load assemblies into reflection only context - - //TODO unclear how many MLC there should be - if we want to recreate the behavior from before - - //maybe only 1? For now one per package publish. - - // Retrieve the location of the assembly and the referenced assemblies used by the domain - var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"); - // Create the list of assembly paths consisting of runtime assemblies. - var assemblyPaths = new List(runtimeAssemblies); - - //and all the package assemblies. - foreach (var assemblyFile in pkg.EnumerateAssemblyFilesInPackage()) - { - assemblyPaths.Add(assemblyFile); - } - - // Create PathAssemblyResolver that can resolve assemblies using the created list. - var resolver = new PathAssemblyResolver(assemblyPaths); - var mlc = new MetadataLoadContext(resolver); - - //TODO for now, we leak the mlc, but it's unlikely users will publish - //enough packages in a single Dynamo session for this ever to be an issue. - //The assemblies are also long lived so it's not clear we could really clean them up anyway. - //using (mlc) foreach (var file in pkg.EnumerateAssemblyFilesInPackage()) { Assembly assem; - var result = PackageLoader.TryMetaDataContextLoad(file, mlc, out assem); + var result = PackageLoader.TryMetaDataContextLoad(file, SharedPublishLoadContext, out assem); switch (result) { @@ -1892,5 +1884,14 @@ internal void EnableInvalidNameWarningState(string warningMessage) CurrentWarningMessage = warningMessage; IsWarningEnabled = true; } + + private static MetadataLoadContext InitSharedPublishLoadContext() + { + // Retrieve the location of the assembly and the referenced assemblies used by the domain + var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll"); + // Create PathAssemblyResolver that can resolve assemblies using the created list. + var resolver = new PathAssemblyResolver(runtimeAssemblies); + return new MetadataLoadContext(resolver); + } } } diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs index 413cfd7c027..6e28e734ae7 100644 --- a/src/DynamoPackages/PackageLoader.cs +++ b/src/DynamoPackages/PackageLoader.cs @@ -743,25 +743,26 @@ private void CheckPackageNodeLibraryCertificates(string packageDirectoryPath, Pa } /// - /// Attempt to load a managed assembly in to ReflectionOnlyLoadFrom context. + /// Attempt to load a managed assembly in to MetaDataLoad context. /// /// The filename of a DLL + /// The MetaDataLoadContext to load the package assemblies into for inspection. /// out Assembly - the passed value does not matter and will only be set if loading succeeds /// Returns Success if success, NotManagedAssembly if BadImageFormatException, AlreadyLoaded if FileLoadException internal static AssemblyLoadingState TryMetaDataContextLoad(string filename,MetadataLoadContext mlc, out Assembly assem) { - try { - var assemName = new AssemblyName(filename); - //MLC will return assembly if names and mvid match - //where reflection only context would throw FileLoadException - //we try to maintain that legacy behavior for Dynamo 3.0. - if (mlc.GetAssemblies().Select(x => x.GetName() == assemName).Any()) { - throw new FileLoadException(filename); - } - assem = mlc.LoadFromAssemblyPath(filename); - + var mlcAssemblies = mlc.GetAssemblies(); + assem = mlc.LoadFromAssemblyPath(filename); + var mlcAssemblies2 = mlc.GetAssemblies(); + //if loading the assembly did not actually add a new assembly to the MLC + //then we've loaded it already, and our current behavior is to + //disable publish when a package contains the same assembly twice. + if (mlcAssemblies2.Count() == mlcAssemblies.Count()) + { + throw new FileLoadException(filename); + } return AssemblyLoadingState.Success; } catch (BadImageFormatException) diff --git a/test/pkgs/package with native assembly/bin/nativeassembly.dll b/test/pkgs/package with native assembly/bin/nativeassembly.dll new file mode 100644 index 0000000000000000000000000000000000000000..f37cbf13b693e88dd1dfd833fa8df42dca769ea1 GIT binary patch literal 59904 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 literal 0 HcmV?d00001 diff --git a/test/pkgs/package with native assembly/pkg.json b/test/pkgs/package with native assembly/pkg.json new file mode 100644 index 00000000000..42c66b92bc5 --- /dev/null +++ b/test/pkgs/package with native assembly/pkg.json @@ -0,0 +1 @@ +{"license":"","file_hash":null,"name":"package with native assembly","version":"1.0.0","description":"package","group":"","keywords":null,"dependencies":[],"contents":"","engine_version":"2.1.0.7733","engine":"dynamo","engine_metadata":"","site_url":"","repository_url":"","contains_binaries":true,"node_libraries":[]} \ No newline at end of file From c77be09c80fbf87bbb040449ede8f05f95c10aee Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Thu, 9 Nov 2023 13:56:05 -0500 Subject: [PATCH 14/15] fix some tests --- .../PackageManagerTests/PackageLoaderTests.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/Libraries/PackageManagerTests/PackageLoaderTests.cs b/test/Libraries/PackageManagerTests/PackageLoaderTests.cs index 46144791c91..153497466f1 100644 --- a/test/Libraries/PackageManagerTests/PackageLoaderTests.cs +++ b/test/Libraries/PackageManagerTests/PackageLoaderTests.cs @@ -141,7 +141,7 @@ public void PackageDoesNotReloadOnAbsenceOfNewPackagePath() }; loader.LoadAll(loadPackageParams); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var entries = CurrentDynamoModel.SearchModel.Entries.ToList(); @@ -150,7 +150,7 @@ public void PackageDoesNotReloadOnAbsenceOfNewPackagePath() packagesLoaded = false; // This function is called upon addition of new package paths in the UI. loader.LoadNewCustomNodesAndPackages(new List(), CurrentDynamoModel.CustomNodeManager); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); // Assert packages are not reloaded if there are no new package paths. Assert.False(packagesLoaded); @@ -187,7 +187,7 @@ public void NoPackageNodeDuplicatesOnAddingNewPackagePath() Preferences =settings, }; loader.LoadAll(loadPackageParams); - Assert.AreEqual(19, loader.LocalPackages.Count()); + Assert.AreEqual(20, loader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var entries = CurrentDynamoModel.SearchModel.Entries.ToList(); @@ -198,7 +198,7 @@ public void NoPackageNodeDuplicatesOnAddingNewPackagePath() var newPaths = new List { Path.Combine(TestDirectory, "builtinpackages testdir") }; // This function is called upon addition of new package paths in the UI. loader.LoadNewCustomNodesAndPackages(newPaths, CurrentDynamoModel.CustomNodeManager); - Assert.AreEqual(20, loader.LocalPackages.Count()); + Assert.AreEqual(21, loader.LocalPackages.Count()); // Assert packages are reloaded if there are new package paths. Assert.True(packagesLoaded); @@ -503,8 +503,8 @@ public void LoadPackagesReturnsAllValidPackagesInValidDirectory() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); // Verify that interdependent packages are resolved successfully // TODO: Review these assertions. Lambdas are not using x, so they are basically just checking that test files exist. @@ -541,8 +541,8 @@ public void LoadingPackageDoesNotAffectLoadedSearchEntries() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); // Simulate loading new package from PM string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\ZTTestPackage"); @@ -669,8 +669,8 @@ public void LoadingConflictingCustomNodePackageDoesNotGetLoaded() Preferences = CurrentDynamoModel.PreferenceSettings, }); - // There are 19 packages in "Dynamo\test\pkgs" - Assert.AreEqual(19, loader.LocalPackages.Count()); + // There are 20 packages in "Dynamo\test\pkgs" + Assert.AreEqual(20, loader.LocalPackages.Count()); var entries = CurrentDynamoModel.SearchModel.Entries.OfType(); From 8d7ed18eda57b012c9abbed7e9b3dd44c1e5513b Mon Sep 17 00:00:00 2001 From: "mjk.kirschner" Date: Thu, 9 Nov 2023 15:16:18 -0500 Subject: [PATCH 15/15] fix tests --- test/DynamoCoreWpfTests/PackagePathTests.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/DynamoCoreWpfTests/PackagePathTests.cs b/test/DynamoCoreWpfTests/PackagePathTests.cs index d3c5f1aadfa..3c2f4fcb444 100644 --- a/test/DynamoCoreWpfTests/PackagePathTests.cs +++ b/test/DynamoCoreWpfTests/PackagePathTests.cs @@ -1,4 +1,4 @@ - + using System.IO; using System.Linq; using System.Reflection; @@ -233,17 +233,17 @@ public void InstalledPackagesContainsCorrectNumberOfPackages() vm.packageLoader.PackagesLoaded += pkgsLoadedDelegate; vm.packageLoader.LoadAll(vm.loadPackageParams); - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); Assert.AreEqual(true, packagesLoaded); var installedPackagesViewModel = new InstalledPackagesViewModel(ViewModel, vm.packageLoader); - Assert.AreEqual(19, installedPackagesViewModel.LocalPackages.Count); + Assert.AreEqual(20, installedPackagesViewModel.LocalPackages.Count); var installedPackagesView = new Dynamo.Wpf.Controls.InstalledPackagesControl(); installedPackagesView.DataContext = installedPackagesViewModel; DispatcherUtil.DoEvents(); - Assert.AreEqual(19, installedPackagesView.SearchResultsListBox.Items.Count); + Assert.AreEqual(20, installedPackagesView.SearchResultsListBox.Items.Count); Assert.AreEqual(2, installedPackagesView.Filters.Items.Count); vm.packageLoader.PackagesLoaded -= libraryLoader.LoadPackages; @@ -267,7 +267,7 @@ public void RemoveAddPackagePathChangesInstalledPackageState() // Load packages in package path. vm.packageLoader.LoadAll(vm.loadPackageParams); - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); // Remove package path. vm.DeletePathCommand.Execute(0); @@ -323,7 +323,7 @@ public void EnableCustomPackagePathsLoadsPackagesOnClosingPreferences() vm.SaveSettingCommand.Execute(null); // packages are expected to load from 'PackagesDirectory' above when toggle is turned off - Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count()); + Assert.AreEqual(20, vm.packageLoader.LocalPackages.Count()); vm.packageLoader.PackagesLoaded -= libraryLoader.LoadPackages; vm.packageLoader.RequestLoadNodeLibrary -= libraryLoader.LoadLibraryAndSuppressZTSearchImport;