Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 0 additions & 72 deletions test/DynamoCoreTests/PackageDependencyTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,10 @@
using Dynamo.Graph.Workspaces;
using Dynamo.Interfaces;
using Dynamo.Models;
using Dynamo.PythonServices;
using Dynamo.Scheduler;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NUnit.Framework;
using PythonNodeModels;

namespace Dynamo.Tests
{
Expand All @@ -30,13 +28,6 @@ protected override void GetLibrariesToPreload(List<string> libraries)
base.GetLibrariesToPreload(libraries);
}

private void UpdatePythonEngineAndRun(PythonNode pythonNode, string pythonEngineVersion)
{
pythonNode.EngineName = pythonEngineVersion;
//to kick off a run node modified must be called
pythonNode.OnNodeModified();
}

private PackageDependencyInfo GetPackageInfo(string packageName)
{
var loader = GetPackageLoader();
Expand Down Expand Up @@ -106,69 +97,6 @@ public void ZeroTouchPackageDependencyIsCollectedAndSerialized()
Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes);
}

[Test]
public void PythonEnginePackageDependencyIsCollectedAndSerialized()
{
// Load JSON file graph
string path = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonDependency.dyn");

// Assert package dependency is not already serialized to .dyn
using (StreamReader file = new StreamReader(path))
{
var data = file.ReadToEnd();
var json = (JObject)JsonConvert.DeserializeObject(data);
Assert.IsEmpty(json[WorkspaceReadConverter.NodeLibraryDependenciesPropString]);
}

string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonEnginePackage");
LoadPackage(packageDirectory);

OpenModel(path);

//TO-DO: Force load binaries or mock the python engine instead of loading a package
//assert that default python engine was selected, and 2 different engines are loaded
var currentws = CurrentDynamoModel.CurrentWorkspace;
var pyNode = currentws.Nodes.OfType<PythonNode>().FirstOrDefault();
Assert.IsNotNull(pyNode);
Assert.AreEqual(pyNode.EngineName, PythonEngineManager.PythonNet3EngineName);
Assert.AreEqual(PythonEngineManager.Instance.AvailableEngines.Count, 2);

currentws.ForceComputeWorkspaceReferences = true;
var packageDependencies = currentws.NodeLibraryDependencies;
// PythonNet3 is loaded as a default package, ww should have a single package dependency.
Assert.AreEqual(1, packageDependencies.Count);

// Change engine to IronPython2, which is loaded as a package.
UpdatePythonEngineAndRun(pyNode, "IronPython2");
currentws.ForceComputeWorkspaceReferences = true;

//assert that python engine imported from a package gets added to NodeLibraryDependencies
packageDependencies = currentws.NodeLibraryDependencies;
Assert.AreEqual(1, packageDependencies.Count);
var package = packageDependencies.First();
Assert.AreEqual(new PackageDependencyInfo("DynamoIronPython2.7", new Version("3.2.1")), package);
Assert.AreEqual(1, package.Nodes.Count);

Assert.IsTrue(package.IsLoaded);
if (package is PackageDependencyInfo)
{
var packageDependencyState = ((PackageDependencyInfo)package).State;
Assert.AreEqual(PackageDependencyState.Loaded, packageDependencyState);
}

// Assert package dependency is serialized
var ToJson = currentws.ToJson(CurrentDynamoModel.EngineController);
var JObject = (JObject)JsonConvert.DeserializeObject(ToJson);
var deserializedPackageDependencies = JObject[WorkspaceReadConverter.NodeLibraryDependenciesPropString];
Assert.AreEqual(1, deserializedPackageDependencies.Count());
var name = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NamePropString].Value<string>();
Assert.AreEqual(package.Name, name);
var version = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.VersionPropString].Value<string>();
Assert.AreEqual(package.Version.ToString(), version);
var nodes = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NodesPropString].Values<string>();
Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes);
}

[Test]
public void CustomNodePackageDependencyIsCollected()
{
Expand Down
80 changes: 77 additions & 3 deletions test/Libraries/DynamoPythonTests/PythonEngineSelectorTests.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@
using System;
using System.Collections;
using System.Linq;
using Dynamo;
using Dynamo.Graph.Workspaces;
using Dynamo.PythonServices;
using Dynamo.PythonServices.EventHandlers;
using Dynamo.Utilities;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NUnit.Framework;
using PythonNodeModels;
using System;
using System.Collections;
using System.IO;
using System.Linq;
using static Dynamo.Models.DynamoModel;

namespace DynamoPythonTests
{
[TestFixture]
class PythonEngineSelectorTests : DynamoModelTestBase
{
private void UpdatePythonEngineAndRun(PythonNode pythonNode, string pythonEngineVersion)
{
pythonNode.EngineName = pythonEngineVersion;
//to kick off a run node modified must be called
pythonNode.OnNodeModified();
}

/// <summary>
/// This test will cover the use case of the API to query certain Python engine ability for evaluation
/// </summary>
Expand All @@ -24,6 +35,69 @@ public void TestEngineSelectorInitialization()
Assert.AreEqual(false, PythonEngineManager.Instance.AvailableEngines.Any(x => x.Name == PythonEngineManager.IronPython2EngineName));
}

[Test]
public void PythonEnginePackageDependencyIsCollectedAndSerialized()
{
// Load JSON file graph
string path = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonDependency.dyn");

// Assert package dependency is not already serialized to .dyn
using (StreamReader file = new StreamReader(path))
{
var data = file.ReadToEnd();
var json = (JObject)JsonConvert.DeserializeObject(data);
Assert.IsEmpty(json[WorkspaceReadConverter.NodeLibraryDependenciesPropString]);
}

string packageDirectory = Path.Combine(TestDirectory, @"core\packageDependencyTests\PythonEnginePackage");
LoadPackage(packageDirectory);

OpenModel(path);

//TO-DO: Force load binaries or mock the python engine instead of loading a package
//assert that default python engine was selected, and 2 different engines are loaded
var currentws = CurrentDynamoModel.CurrentWorkspace;
var pyNode = currentws.Nodes.OfType<PythonNode>().FirstOrDefault();
Assert.IsNotNull(pyNode);
Assert.AreEqual(pyNode.EngineName, PythonEngineManager.PythonNet3EngineName);
Assert.AreEqual(PythonEngineManager.Instance.AvailableEngines.Count, 2);

currentws.ForceComputeWorkspaceReferences = true;
var packageDependencies = currentws.NodeLibraryDependencies;
// PythonNet3 is loaded as a default package, ww should have a single package dependency.
Assert.AreEqual(1, packageDependencies.Count);

// Change engine to IronPython2, which is loaded as a package.
UpdatePythonEngineAndRun(pyNode, "IronPython2");
currentws.ForceComputeWorkspaceReferences = true;

//assert that python engine imported from a package gets added to NodeLibraryDependencies
packageDependencies = currentws.NodeLibraryDependencies;
Assert.AreEqual(1, packageDependencies.Count);
var package = packageDependencies.First();
Assert.AreEqual(new PackageDependencyInfo("DynamoIronPython2.7", new Version("3.2.1")), package);
Assert.AreEqual(1, package.Nodes.Count);

Assert.IsTrue(package.IsLoaded);
if (package is PackageDependencyInfo)
{
var packageDependencyState = ((PackageDependencyInfo)package).State;
Assert.AreEqual(PackageDependencyState.Loaded, packageDependencyState);
}

// Assert package dependency is serialized
var ToJson = currentws.ToJson(CurrentDynamoModel.EngineController);
var JObject = (JObject)JsonConvert.DeserializeObject(ToJson);
var deserializedPackageDependencies = JObject[WorkspaceReadConverter.NodeLibraryDependenciesPropString];
Assert.AreEqual(1, deserializedPackageDependencies.Count());
var name = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NamePropString].Value<string>();
Assert.AreEqual(package.Name, name);
var version = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.VersionPropString].Value<string>();
Assert.AreEqual(package.Version.ToString(), version);
var nodes = deserializedPackageDependencies.First()[NodeLibraryDependencyConverter.NodesPropString].Values<string>();
Assert.AreEqual(package.Nodes.Select(n => n.ToString("N")), nodes);
}

[Test]
public void CanCopydAndPasteAndUndoPythonEngine()
{
Expand Down
Loading