Exemple #1
0
        public void PlacingCustomNodeInstanceFromPackageRetainsCorrectPackageInfoState()
        {
            var loader        = GetPackageLoader();
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            var packageDirectory = Path.Combine(TestDirectory, "pkgs", "EvenOdd");
            var package1         = Package.FromDirectory(packageDirectory, CurrentDynamoModel.Logger);

            loader.LoadPackages(new Package[] { package1 });


            var packageInfo   = new PackageInfo("EvenOdd", new System.Version(1, 0, 0));
            var matchingNodes = CurrentDynamoModel.CustomNodeManager.NodeInfos.Where(x => x.Value.PackageInfo.Equals(packageInfo)).ToList();

            //the node should have the correct package info and should be marked a packageMember.
            Assert.AreEqual(1, matchingNodes.Count);
            Assert.IsTrue(matchingNodes.All(x => x.Value.IsPackageMember == true));

            var cninst = CurrentDynamoModel.CustomNodeManager.CreateCustomNodeInstance(matchingNodes.FirstOrDefault().Key, null, true);

            this.CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(cninst);

            matchingNodes = CurrentDynamoModel.CustomNodeManager.NodeInfos.Where(x => x.Value.PackageInfo.Equals(packageInfo)).ToList();
            Assert.AreEqual(1, matchingNodes.Count);
            Assert.IsTrue(matchingNodes.All(x => x.Value.IsPackageMember == true));
        }
Exemple #2
0
        public void LoadingConflictingCustomNodePackageDoesNotGetLoaded()
        {
            var loader        = new PackageLoader(PackagesDirectory);
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            // This test needs the "isTestMode" flag to be turned off as an exception to be able
            // to test duplicate custom node def loading.
            loader.RequestLoadCustomNodeDirectory +=
                (dir, pkgInfo) => CurrentDynamoModel.CustomNodeManager.AddUninitializedCustomNodesInPath(dir, isTestMode: false, packageInfo: pkgInfo);

            loader.LoadAll(new LoadPackageParams
            {
                Preferences = CurrentDynamoModel.PreferenceSettings,
                PathManager = CurrentDynamoModel.PathManager
            });

            // There are 15 packages in "GitHub\Dynamo\test\pkgs"
            Assert.AreEqual(15, loader.LocalPackages.Count());

            var entries = CurrentDynamoModel.SearchModel.SearchEntries.OfType <CustomNodeSearchElement>();

            // Check that conflicting custom node package "EvenOdd2" is not installed
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd2\dyf")) == 0);
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd\dyf") &&
                                        x.FullName == "Test.EvenOdd") == 1);
        }
Exemple #3
0
        public void LoadingPackageDoesNotAffectLoadedSearchEntries()
        {
            var loader        = new PackageLoader(PackagesDirectory);
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            loader.LoadAll(new LoadPackageParams
            {
                Preferences = CurrentDynamoModel.PreferenceSettings,
                PathManager = CurrentDynamoModel.PathManager
            });

            // There are 15 packages in "GitHub\Dynamo\test\pkgs"
            Assert.AreEqual(15, loader.LocalPackages.Count());

            // Simulate loading new package from PM
            string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\ZTTestPackage");
            var    pkg = loader.ScanPackageDirectory(packageDirectory);

            loader.LoadPackages(new List <Package> {
                pkg
            });

            // Assert that node belonging to new package is imported
            var node = GetNodeInstance("ZTTestPackage.RRTestClass.RRTestClass");

            Assert.IsNotNull(node);

            // Check that node belonging to one of the preloaded packages exists and is unique
            var entries = CurrentDynamoModel.SearchModel.SearchEntries.ToList();

            Assert.IsTrue(entries.Count(x => x.FullName == "AnotherPackage.AnotherPackage.AnotherPackage.HelloAnotherWorld") == 1);
        }
Exemple #4
0
        public void LoadingCustomNodeFromPackageSetsNodeInfoPackageInfoCorrectly()
        {
            var loader        = new PackageLoader(PackagesDirectory);
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            // This test needs the "isTestMode" flag to be turned off as an exception to be able
            // to test duplicate custom node def loading.
            loader.RequestLoadCustomNodeDirectory +=
                (dir, pkgInfo) => CurrentDynamoModel.CustomNodeManager.AddUninitializedCustomNodesInPath(dir, isTestMode: false, packageInfo: pkgInfo);

            loader.LoadAll(new LoadPackageParams
            {
                Preferences = CurrentDynamoModel.PreferenceSettings,
                PathManager = CurrentDynamoModel.PathManager
            });

            var packageInfo   = new PackageInfo("EvenOdd", new System.Version(1, 0, 0));
            var matchingNodes = CurrentDynamoModel.CustomNodeManager.NodeInfos.Where(x => x.Value.PackageInfo.Equals(packageInfo)).ToList();

            //the node should have the correct package info and should be marked a packageMember.
            Assert.AreEqual(1, matchingNodes.Count);
            Assert.IsTrue(matchingNodes.All(x => x.Value.IsPackageMember == true));
        }
Exemple #5
0
        public void EnableCustomPackagePathsLoadsPackagesOnClosingPreferences()
        {
            var setting = new PreferenceSettings()
            {
                CustomPackageFolders = { PackagesDirectory }
            };

            var vm            = CreatePackagePathViewModel(setting);
            var libraryLoader = new ExtensionLibraryLoader(ViewModel.Model);

            vm.packageLoader.PackagesLoaded         += libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary += libraryLoader.LoadLibraryAndSuppressZTSearchImport;

            (setting as IDisablePackageLoadingPreferences).DisableCustomPackageLocations = true;

            // Load packages in package path.
            vm.packageLoader.LoadAll(vm.loadPackageParams);

            Assert.AreEqual(0, vm.packageLoader.LocalPackages.Count());

            // simulate turning off "disable custom package paths" toggle.
            vm.SetPackagesScheduledState(setting.CustomPackageFolders.First(), false);

            // simulate closing preferences dialog by saving changes to packagepathviewmodel
            vm.SaveSettingCommand.Execute(null);

            // packages are expected to load from 'PackagesDirectory' above when toggle is turned off
            Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count());

            vm.packageLoader.PackagesLoaded         -= libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary -= libraryLoader.LoadLibraryAndSuppressZTSearchImport;
        }
Exemple #6
0
        public void LoadPackagesReturnsAllValidPackagesInValidDirectory()
        {
            var loader        = new PackageLoader(PackagesDirectory);
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            loader.LoadAll(new LoadPackageParams
            {
                Preferences = CurrentDynamoModel.PreferenceSettings,
                PathManager = CurrentDynamoModel.PathManager
            });

            // There are 15 packages in "GitHub\Dynamo\test\pkgs"
            Assert.AreEqual(15, loader.LocalPackages.Count());

            // Verify that interdependent packages are resolved successfully
            var libs = CurrentDynamoModel.LibraryServices.ImportedLibraries.ToList();

            Assert.IsTrue(libs.Any(x => File.Exists(Path.Combine(PackagesDirectory, "AnotherPackage", "bin", "AnotherPackage.dll"))));
            Assert.IsTrue(libs.Any(x => File.Exists(Path.Combine(PackagesDirectory, "Dependent Package", "bin", "DependentPackage.dll"))));
            Assert.IsTrue(libs.Any(x => File.Exists(Path.Combine(PackagesDirectory, "Package", "bin", "Package.dll"))));

            // Verify that interdependent packages are imported successfully
            var entries = CurrentDynamoModel.SearchModel.SearchEntries.ToList();

            Assert.IsTrue(entries.Any(x => x.FullName == "AnotherPackage.AnotherPackage.AnotherPackage.HelloAnotherWorld"));
            Assert.IsTrue(entries.Any(x => x.FullName == "DependentPackage.DependentPackage.DependentPackage.HelloWorld"));
            Assert.IsTrue(entries.Any(x => x.FullName == "Package.Package.Package.Hello"));
        }
Exemple #7
0
        public void ScanPackageDirectoryWithCheckingCertificatesEnabledWillLoadPackageWithValidCertificate()
        {
            var loader        = new PackageLoader(new[] { PackagesDirectory }, new[] { PackagesDirectorySigned });
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += libraryLoader.LoadNodeLibrary;

            var pkgDir = Path.Combine(PackagesDirectorySigned, "Signed Package");
            var pkg    = loader.ScanPackageDirectory(pkgDir, true);

            // Assert that ScanPackageDirectory returns a package
            Assert.IsNotNull(pkg);
            Assert.IsTrue(pkg.RequiresSignedEntryPoints);
            loader.LoadPackages(new List <Package> {
                pkg
            });

            // Verify that package resolved successfully
            var libs = CurrentDynamoModel.LibraryServices.ImportedLibraries.ToList();

            Assert.IsTrue(libs.Contains(Path.Combine(PackagesDirectorySigned, "Signed Package", "bin", "SignedPackage.dll")));

            // Verify that the package are imported successfully
            var entries = CurrentDynamoModel.SearchModel.SearchEntries.ToList();

            Assert.IsTrue(entries.Any(x => x.FullName == "SignedPackage.SignedPackage.SignedPackage.Hello"));
        }
Exemple #8
0
        public void LoadingAPackageThatConflictsWithLooseLoadedCustomNodeWillOverwriteLocalCustomNode()
        {
            var customNodeWS = CurrentDynamoModel.CustomNodeManager.CreateCustomNode("aConlictingNode",
                                                                                     "aCategory",
                                                                                     "a node that will conflict via id with loaded package",
                                                                                     Guid.Parse("3f19c484-d3f3-49ba-88c2-6c386a41f6ac"));

            customNodeWS.AddAndRegisterNode(new Output());
            Assert.AreEqual(1, customNodeWS.Nodes.Count());
            //var tempPath = GetNewFileNameOnTempPath(".dyf");
            //customNodeWS.Save(tempPath);

            //var customNodeInstance = CurrentDynamoModel.CustomNodeManager.CreateCustomNodeInstance(Guid.Parse("3f19c484-d3f3-49ba-88c2-6c386a41f6ac"));
            //this will reset the info.
            //this.CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(customNodeInstance);


            var loader        = GetPackageLoader();
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;

            var packageDirectory = Path.Combine(TestDirectory, "pkgs", "EvenOdd");
            var package1         = Package.FromDirectory(packageDirectory, CurrentDynamoModel.Logger);

            loader.LoadPackages(new Package[] { package1 });

            // There is 1 package loaded directly
            Assert.AreEqual(1, loader.LocalPackages.Count());

            var entries = CurrentDynamoModel.SearchModel.SearchEntries.OfType <CustomNodeSearchElement>();

            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd\dyf") &&
                                        x.FullName == "Test.EvenOdd") == 1);

            Assert.IsTrue(entries.Count(x => x.FullName == "aCategory.aConlictingNode") == 0);

            var customNodeInstance2 = CurrentDynamoModel.CustomNodeManager.CreateCustomNodeInstance(Guid.Parse("3f19c484-d3f3-49ba-88c2-6c386a41f6ac"), "Test.EvenOdd", true);

            //this will reset the info.
            this.CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(customNodeInstance2);
            Assert.AreEqual(3, customNodeInstance2.InPorts.Count());
            //the definition now points to the updated function
            //Assert.AreEqual(4, this.CurrentDynamoModel.CurrentWorkspace.Nodes.OfType<Function>().LastOrDefault().Definition.FunctionBody.Count());
            //Assert.AreEqual(4, this.CurrentDynamoModel.CustomNodeManager.LoadedDefinitions.Where(x => x.FunctionId == customNodeInstance2.Definition.FunctionId).Count());


            var matchingNode = CurrentDynamoModel.CustomNodeManager.NodeInfos[customNodeInstance2.Definition.FunctionId];

            Assert.IsNotNull(matchingNode);
            //This still points to the package the guid came from - should it?
            Assert.True(matchingNode.IsPackageMember);
        }
Exemple #9
0
        public void ScanPackageDirectoryWithCheckingCertificatesEnabledWillNotLoadPackageWithAlteredCertificate()
        {
            var loader        = new PackageLoader(new[] { PackagesDirectory }, new[] { PackagesDirectorySigned });
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += libraryLoader.LoadNodeLibrary;

            var pkgDir = Path.Combine(PackagesDirectorySigned, "Modfied Signed Package");
            var pkg    = loader.ScanPackageDirectory(pkgDir, true);

            // Assert that ScanPackageDirectory returns no packages
            Assert.IsNull(pkg);
        }
Exemple #10
0
        public void ExtensionLoader_LoadNodeLibraryAddsZTNodesToSearch()
        {
            var assemPath     = Path.Combine(testpkgPath, "Dynamo Samples", "bin", "SampleLibraryZeroTouch.dll");
            var assembly      = Assembly.LoadFrom(assemPath);
            var libraryLoader = new ExtensionLibraryLoader(model);

            libraryLoader.LoadNodeLibrary(assembly);

            var entries    = model.SearchModel.SearchEntries.ToList();
            var nodesInLib = entries.Where(x => x.Assembly.Contains("SampleLibraryZeroTouch")).Select(y => y.FullName).ToList();

            Assert.AreEqual(13, nodesInLib.Count());
            Assert.IsTrue(entries.Count(x => x.FullName == "SampleLibraryZeroTouch.Examples.TransformableExample.TransformObject") == 1);
        }
Exemple #11
0
        public void LoadingConflictingCustomNodePackage_AfterPlacingNode_DoesNotGetLoaded()
        {
            var loader        = GetPackageLoader();
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += (libraryLoader as ExtensionLibraryLoader).LoadLibraryAndSuppressZTSearchImport;


            var packageDirectory  = Path.Combine(TestDirectory, "pkgs", "EvenOdd");
            var packageDirectory2 = Path.Combine(TestDirectory, "pkgs", "EvenOdd2");
            var package1          = Package.FromDirectory(packageDirectory, CurrentDynamoModel.Logger);
            var package2          = Package.FromDirectory(packageDirectory2, CurrentDynamoModel.Logger);

            loader.LoadPackages(new Package[] { package1, package2 });

            // 2 packages loaded as expected
            var expectedLoadedPackageNum = 0;

            foreach (var pkg in loader.LocalPackages)
            {
                if (pkg.Name == "EvenOdd" || pkg.Name == "EvenOdd2")
                {
                    expectedLoadedPackageNum++;
                }
            }
            Assert.AreEqual(2, expectedLoadedPackageNum);

            var entries = CurrentDynamoModel.SearchModel.SearchEntries.OfType <CustomNodeSearchElement>();

            // Check that conflicting custom node package "EvenOdd2" is not installed
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd2\dyf")) == 0);
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd\dyf") &&
                                        x.FullName == "Test.EvenOdd") == 1);

            var customNodeInstance = CurrentDynamoModel.CustomNodeManager.CreateCustomNodeInstance(Guid.Parse("3f19c484-d3f3-49ba-88c2-6c386a41f6ac"));

            //this will reset the info.
            this.CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(customNodeInstance);

            //load again.
            loader.LoadPackages(new Package[] { package1, package2 });

            //reassert conflicting package not loaded.
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd2\dyf")) == 0);
            Assert.IsTrue(entries.Count(x => Path.GetDirectoryName(x.Path).EndsWith(@"EvenOdd\dyf") &&
                                        x.FullName == "Test.EvenOdd") == 1);
        }
Exemple #12
0
        public void LocalizedPackageLocalizedCorrectly()
        {
            var esculture = CultureInfo.CreateSpecificCulture("es-ES");

            // Save current culture - usually "en-US"
            var currentCulture   = Thread.CurrentThread.CurrentCulture;
            var currentUICulture = Thread.CurrentThread.CurrentUICulture;

            // Set "es-ES"
            Thread.CurrentThread.CurrentCulture   = esculture;
            Thread.CurrentThread.CurrentUICulture = esculture;

            var loader        = new PackageLoader(new[] { PackagesDirectory }, new[] { string.Empty });
            var libraryLoader = new ExtensionLibraryLoader(CurrentDynamoModel);

            loader.PackagesLoaded         += libraryLoader.LoadPackages;
            loader.RequestLoadNodeLibrary += libraryLoader.LoadNodeLibrary;

            var pkgDir = Path.Combine(PackagesDirectory, "Dynamo Samples");
            var pkg    = loader.ScanPackageDirectory(pkgDir, false);

            // Assert that ScanPackageDirectory returns a package
            Assert.IsNotNull(pkg);
            loader.LoadPackages(new List <Package> {
                pkg
            });

            // Verify that the package are imported successfully
            var entries = CurrentDynamoModel.SearchModel.SearchEntries.ToList();
            var nse     = entries.Where(x => x.FullName == "SampleLibraryUI.Examples.LocalizedNode").FirstOrDefault();

            Assert.IsNotNull(nse);

            //verify that the node has the correctly localized description
            Assert.AreEqual("Un nodo de interfaz de usuario de muestra que muestra una interfaz de usuario personalizada."
                            , nse.Description);
            var node = nse.CreateNode();

            Assert.AreEqual("Un nodo de interfaz de usuario de muestra que muestra una interfaz de usuario personalizada."
                            , nse.Description);

            // Restore "en-US"
            Thread.CurrentThread.CurrentCulture   = currentCulture;
            Thread.CurrentThread.CurrentUICulture = currentUICulture;
        }
Exemple #13
0
        public void RemoveAddPackagePathChangesInstalledPackageState()
        {
            var setting = new PreferenceSettings()
            {
                CustomPackageFolders = { PackagesDirectory }
            };

            var vm            = CreatePackagePathViewModel(setting);
            var libraryLoader = new ExtensionLibraryLoader(ViewModel.Model);

            vm.packageLoader.PackagesLoaded         += libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary += libraryLoader.LoadLibraryAndSuppressZTSearchImport;

            // Load packages in package path.
            vm.packageLoader.LoadAll(vm.loadPackageParams);

            Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count());
            // Remove package path.
            vm.DeletePathCommand.Execute(0);

            foreach (var pkg in vm.packageLoader.LocalPackages)
            {
                Assert.True(pkg.LoadState.State == PackageLoadState.StateTypes.Loaded);
                Assert.True(pkg.LoadState.ScheduledState == PackageLoadState.ScheduledTypes.ScheduledForUnload);
            }

            var path = string.Empty;

            vm.RequestShowFileDialog += (sender, args) => { args.Path = path; };
            path = Path.Combine(GetTestDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)), "pkgs");

            //Add the path back.
            vm.AddPathCommand.Execute(null);

            foreach (var pkg in vm.packageLoader.LocalPackages)
            {
                Assert.True(pkg.LoadState.State == PackageLoadState.StateTypes.Loaded);
                Assert.True(pkg.LoadState.ScheduledState == PackageLoadState.ScheduledTypes.None);
            }

            vm.packageLoader.PackagesLoaded         -= libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary -= libraryLoader.LoadLibraryAndSuppressZTSearchImport;
        }
Exemple #14
0
        public void InstalledPackagesContainsCorrectNumberOfPackages()
        {
            var setting = new PreferenceSettings()
            {
                CustomPackageFolders = { PackagesDirectory }
            };
            var vm            = CreatePackagePathViewModel(setting);
            var libraryLoader = new ExtensionLibraryLoader(ViewModel.Model);

            vm.packageLoader.PackagesLoaded         += libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary += libraryLoader.LoadLibraryAndSuppressZTSearchImport;

            var packagesLoaded = false;

            Action <IEnumerable <Assembly> > pkgsLoadedDelegate = (x) => { packagesLoaded = true; };

            vm.packageLoader.PackagesLoaded += pkgsLoadedDelegate;

            vm.packageLoader.LoadAll(vm.loadPackageParams);
            Assert.AreEqual(19, vm.packageLoader.LocalPackages.Count());
            Assert.AreEqual(true, packagesLoaded);

            var installedPackagesViewModel = new InstalledPackagesViewModel(ViewModel, vm.packageLoader);

            Assert.AreEqual(19, installedPackagesViewModel.LocalPackages.Count);

            var installedPackagesView = new Dynamo.Wpf.Controls.InstalledPackagesControl();

            installedPackagesView.DataContext = installedPackagesViewModel;
            DispatcherUtil.DoEvents();

            Assert.AreEqual(19, installedPackagesView.SearchResultsListBox.Items.Count);
            Assert.AreEqual(2, installedPackagesView.Filters.Items.Count);

            vm.packageLoader.PackagesLoaded         -= libraryLoader.LoadPackages;
            vm.packageLoader.RequestLoadNodeLibrary -= libraryLoader.LoadLibraryAndSuppressZTSearchImport;
        }