using System; using NUnit.Framework; using Python.Runtime; namespace Python.EmbeddingTest { public class TestPythonEngineProperties { [Test] public static void GetBuildinfoDoesntCrash() { using (Py.GIL()) { string s = PythonEngine.BuildInfo; Assert.True(s.Length > 5); Assert.True(s.Contains(",")); } } [Test] public static void GetCompilerDoesntCrash() { using (Py.GIL()) { string s = PythonEngine.Compiler; Assert.True(s.Length > 0); Assert.True(s.Contains("[")); Assert.True(s.Contains("]")); } } [Test] public static void GetCopyrightDoesntCrash() { using (Py.GIL()) { string s = PythonEngine.Copyright; Assert.True(s.Length > 0); Assert.True(s.Contains("Python Software Foundation")); } } [Test] public static void GetPlatformDoesntCrash() { using (Py.GIL()) { string s = PythonEngine.Platform; Assert.True(s.Length > 0); Assert.True(s.Contains("x") || s.Contains("win")); } } [Test] public static void GetVersionDoesntCrash() { using (Py.GIL()) { string s = PythonEngine.Version; Assert.True(s.Length > 0); Assert.True(s.Contains(",")); } } [Test] public static void GetPythonPathDefault() { PythonEngine.Initialize(); string s = PythonEngine.PythonPath; StringAssert.Contains("python", s.ToLower()); PythonEngine.Shutdown(); } [Test] public static void GetProgramNameDefault() { PythonEngine.Initialize(); string s = PythonEngine.PythonHome; Assert.NotNull(s); PythonEngine.Shutdown(); } /// /// Test default behavior of PYTHONHOME. If ENVVAR is set it will /// return the same value. If not, returns EmptyString. /// /// /// AppVeyor.yml has been update to tests with ENVVAR set. /// [Test] public static void GetPythonHomeDefault() { string envPythonHome = Environment.GetEnvironmentVariable("PYTHONHOME") ?? ""; PythonEngine.Initialize(); string enginePythonHome = PythonEngine.PythonHome; Assert.AreEqual(envPythonHome, enginePythonHome); PythonEngine.Shutdown(); } [Test] public void SetPythonHome() { // We needs to ensure that engine was started and shutdown at least once before setting dummy home. // Otherwise engine will not run with dummy path with random problem. if (!PythonEngine.IsInitialized) { PythonEngine.Initialize(); } PythonEngine.Shutdown(); var pythonHomeBackup = PythonEngine.PythonHome; var pythonHome = "/dummypath/"; PythonEngine.PythonHome = pythonHome; PythonEngine.Initialize(); PythonEngine.Shutdown(); // Restoring valid pythonhome. PythonEngine.PythonHome = pythonHomeBackup; } [Test] public void SetPythonHomeTwice() { // We needs to ensure that engine was started and shutdown at least once before setting dummy home. // Otherwise engine will not run with dummy path with random problem. if (!PythonEngine.IsInitialized) { PythonEngine.Initialize(); } PythonEngine.Shutdown(); var pythonHomeBackup = PythonEngine.PythonHome; var pythonHome = "/dummypath/"; PythonEngine.PythonHome = "/dummypath2/"; PythonEngine.PythonHome = pythonHome; PythonEngine.Initialize(); Assert.AreEqual(pythonHome, PythonEngine.PythonHome); PythonEngine.Shutdown(); PythonEngine.PythonHome = pythonHomeBackup; } [Test] public void SetProgramName() { if (PythonEngine.IsInitialized) { PythonEngine.Shutdown(); } var programNameBackup = PythonEngine.ProgramName; var programName = "FooBar"; PythonEngine.ProgramName = programName; PythonEngine.Initialize(); Assert.AreEqual(programName, PythonEngine.ProgramName); PythonEngine.Shutdown(); PythonEngine.ProgramName = programNameBackup; } [Test] public void SetPythonPath() { if (Runtime.Runtime.pyversion == "2.7") { // Assert.Skip outputs as a warning (ie. pending to fix) Assert.Pass(); } PythonEngine.Initialize(); string path = PythonEngine.PythonPath; PythonEngine.Shutdown(); PythonEngine.PythonPath = path; PythonEngine.Initialize(); Assert.AreEqual(path, PythonEngine.PythonPath); PythonEngine.Shutdown(); } [Test] public void SetPythonPathExceptionOn27() { if (Runtime.Runtime.pyversion != "2.7") { Assert.Pass(); } PythonEngine.Initialize(); string path = PythonEngine.PythonPath; PythonEngine.Shutdown(); var ex = Assert.Throws(() => PythonEngine.PythonPath = "foo"); Assert.AreEqual("Set PythonPath not supported on Python 2", ex.Message); PythonEngine.Initialize(); Assert.AreEqual(path, PythonEngine.PythonPath); PythonEngine.Shutdown(); } } }