cpy3/import_test.go

264 lines
5.7 KiB
Go

/*
Unless explicitly stated otherwise all files in this repository are licensed
under the MIT License.
This product includes software developed at Datadog (https://www.datadoghq.com/).
Copyright 2018 Datadog, Inc.
*/
package python3
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestImportModule(t *testing.T) {
Py_Initialize()
os := PyImport_ImportModule("os")
assert.NotNil(t, os)
os.DecRef()
}
func TestImportModuleEx(t *testing.T) {
Py_Initialize()
test := PyImport_ImportModuleEx("test", nil, nil, nil)
assert.NotNil(t, test)
test.DecRef()
}
func TestImportModuleLevelObject(t *testing.T) {
Py_Initialize()
mathName := PyUnicode_FromString("math")
defer mathName.DecRef()
math := PyImport_ImportModuleLevelObject(mathName, nil, nil, nil, 0)
assert.NotNil(t, math)
math.DecRef()
}
func TestImportModuleLevel(t *testing.T) {
Py_Initialize()
sys := PyImport_ImportModuleLevel("sys", nil, nil, nil, 0)
assert.NotNil(t, sys)
sys.DecRef()
}
func TestImportImport(t *testing.T) {
Py_Initialize()
platformName := PyUnicode_FromString("platform")
defer platformName.DecRef()
platform := PyImport_Import(platformName)
assert.NotNil(t, platform)
platform.DecRef()
}
func TestReloadModule(t *testing.T) {
Py_Initialize()
os := PyImport_ImportModule("os")
assert.NotNil(t, os)
defer os.DecRef()
newOs := PyImport_ReloadModule(os)
assert.NotNil(t, newOs)
defer newOs.DecRef()
// PyImport_ReloadModule return a new reference, pointer should be the same
assert.Equal(t, os, newOs)
}
func TestAddModuleObject(t *testing.T) {
Py_Initialize()
os := PyImport_ImportModule("os")
assert.NotNil(t, os)
defer os.DecRef()
pyName := PyUnicode_FromString("os.new")
defer pyName.DecRef()
new := PyImport_AddModuleObject(pyName)
assert.NotNil(t, new)
}
func TestAddModule(t *testing.T) {
Py_Initialize()
os := PyImport_ImportModule("os")
assert.NotNil(t, os)
defer os.DecRef()
new := PyImport_AddModule("os.new")
assert.NotNil(t, new)
}
func TestExecCodeModule(t *testing.T) {
Py_Initialize()
// fake module
source := PyUnicode_FromString("__version__ = '2.0'")
defer source.DecRef()
filename := PyUnicode_FromString("test_module.py")
defer filename.DecRef()
mode := PyUnicode_FromString("exec")
defer mode.DecRef()
// perform module load
builtins := PyEval_GetBuiltins()
assert.True(t, PyDict_Check(builtins))
compile := PyDict_GetItemString(builtins, "compile")
assert.True(t, PyCallable_Check(compile))
code := compile.CallFunctionObjArgs(source, filename, mode)
assert.NotNil(t, code)
defer code.DecRef()
module := PyImport_ExecCodeModule("test_module", code)
assert.NotNil(t, module)
}
func TestExecCodeModuleEx(t *testing.T) {
Py_Initialize()
// fake module
source := PyUnicode_FromString("__version__ = '2.0'")
defer source.DecRef()
filename := PyUnicode_FromString("test_module.py")
defer filename.DecRef()
mode := PyUnicode_FromString("exec")
defer mode.DecRef()
// perform module load
builtins := PyEval_GetBuiltins()
assert.True(t, PyDict_Check(builtins))
compile := PyDict_GetItemString(builtins, "compile")
assert.True(t, PyCallable_Check(compile))
code := compile.CallFunctionObjArgs(source, filename, mode)
assert.NotNil(t, code)
defer code.DecRef()
module := PyImport_ExecCodeModuleEx("test_module", code, "test_module.py")
assert.NotNil(t, module)
}
func TestExecCodeModuleWithPathnames(t *testing.T) {
Py_Initialize()
// fake module
source := PyUnicode_FromString("__version__ = '2.0'")
defer source.DecRef()
filename := PyUnicode_FromString("test_module.py")
defer filename.DecRef()
mode := PyUnicode_FromString("exec")
defer mode.DecRef()
// perform module load
builtins := PyEval_GetBuiltins()
assert.True(t, PyDict_Check(builtins))
compile := PyDict_GetItemString(builtins, "compile")
assert.True(t, PyCallable_Check(compile))
code := compile.CallFunctionObjArgs(source, filename, mode)
assert.NotNil(t, code)
defer code.DecRef()
module := PyImport_ExecCodeModuleWithPathnames("test_module", code, "test_module.py", "test_module.py")
assert.NotNil(t, module)
}
func TestExecCodeModuleObject(t *testing.T) {
Py_Initialize()
// fake module
source := PyUnicode_FromString("__version__ = '2.0'")
defer source.DecRef()
filename := PyUnicode_FromString("test_module.py")
defer filename.DecRef()
mode := PyUnicode_FromString("exec")
defer mode.DecRef()
// perform module load
builtins := PyEval_GetBuiltins()
assert.True(t, PyDict_Check(builtins))
compile := PyDict_GetItemString(builtins, "compile")
assert.True(t, PyCallable_Check(compile))
code := compile.CallFunctionObjArgs(source, filename, mode)
assert.NotNil(t, code)
defer code.DecRef()
moduleName := PyUnicode_FromString("test_module")
defer moduleName.DecRef()
module := PyImport_ExecCodeModuleObject(moduleName, code, filename, filename)
assert.NotNil(t, module)
}
func TestGetMagicNumber(t *testing.T) {
Py_Initialize()
magicNumber := PyImport_GetMagicNumber()
assert.NotNil(t, magicNumber)
}
func TestGetMagicTag(t *testing.T) {
Py_Initialize()
magicTag := PyImport_GetMagicTag()
assert.NotNil(t, magicTag)
}
func TestGetModuleDict(t *testing.T) {
Py_Initialize()
moduleDict := PyImport_GetModuleDict()
defer moduleDict.DecRef()
assert.True(t, PyDict_Check(moduleDict))
}
func TestGetModule(t *testing.T) {
Py_Initialize()
os := PyImport_ImportModule("os")
assert.NotNil(t, os)
defer os.DecRef()
name := PyUnicode_FromString("os")
defer name.DecRef()
new := PyImport_GetModule(name)
assert.Equal(t, new, os)
}
func TestGetImporter(t *testing.T) {
Py_Initialize()
paths := PySys_GetObject("path")
path := PyList_GetItem(paths, 0)
assert.NotNil(t, path)
importer := PyImport_GetImporter(path)
defer importer.DecRef()
assert.NotNil(t, importer)
}