summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2001-02-02 05:57:15 (GMT)
committerTim Peters <tim.peters@gmail.com>2001-02-02 05:57:15 (GMT)
commit9ea17ac59570faab41e290f900057882f816fda6 (patch)
tree8d6800b525705c975703e5cd191f479d4fbd9a2a
parent6270031f4e457ed8f1335e1a46c11104eb4c308b (diff)
downloadcpython-9ea17ac59570faab41e290f900057882f816fda6.zip
cpython-9ea17ac59570faab41e290f900057882f816fda6.tar.gz
cpython-9ea17ac59570faab41e290f900057882f816fda6.tar.bz2
Patch derived from Trent's 101162: a Python/C API testing framework.
STILL NEEDS UNIX BUILD CHANGES.
-rw-r--r--Lib/test/output/test_capi1
-rw-r--r--Lib/test/test_capi.py16
-rw-r--r--Misc/NEWS13
-rw-r--r--Modules/_testmodule.c68
-rw-r--r--PCbuild/_test.dsp99
-rw-r--r--PCbuild/pcbuild.dsw12
-rw-r--r--PCbuild/readme.txt3
7 files changed, 210 insertions, 2 deletions
diff --git a/Lib/test/output/test_capi b/Lib/test/output/test_capi
new file mode 100644
index 0000000..c095219
--- /dev/null
+++ b/Lib/test/output/test_capi
@@ -0,0 +1 @@
+test_capi
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
new file mode 100644
index 0000000..8b39829
--- /dev/null
+++ b/Lib/test/test_capi.py
@@ -0,0 +1,16 @@
+# Run the _test module tests (tests for the Python/C API): by defn, these
+# are all functions _test exports whose name begins with 'test_'.
+
+import sys
+import test_support
+import _test
+
+for name in dir(_test):
+ if name.startswith('test_'):
+ test = getattr(_test, name)
+ if test_support.verbose:
+ print "internal", name
+ try:
+ test()
+ except _test.error:
+ raise test_support.TestFailed, sys.exc_info()[1]
diff --git a/Misc/NEWS b/Misc/NEWS
index 86cb703..0e7a1ff 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -60,7 +60,7 @@ Core language, builtins, and interpreter
- A 'continue' statement can now appear in a try block within the body
of a loop. It is still not possible to use continue in a finally
- clause.
+ clause.
Standard library
@@ -94,12 +94,21 @@ Standard library
- The socket module now supports raw packets on Linux. The socket
family is AF_PACKET.
+- test_capi.py is a start at running tests of the Python C API. The tests
+ are implemented by the new Modules/_testmodule.c.
+
Windows changes
- Build procedure: the zlib project is built in a different way that
ensures the zlib header files used can no longer get out of synch with
- the zlib binary used. See PCbuild\readme.txt for details.
+ the zlib binary used. See PCbuild\readme.txt for details. Your old
+ zlib-related directories can be deleted; you'll need to download fresh
+ source for zlib and unpack it into a new directory.
+
+- Build: New subproject _test for the benefit of test_capi.py (see above).
+- Build: subproject ucnhash is gone, since the code was folded into the
+ unicodedata subproject.
What's New in Python 2.1 alpha 1?
=================================
diff --git a/Modules/_testmodule.c b/Modules/_testmodule.c
new file mode 100644
index 0000000..e4c9c75
--- /dev/null
+++ b/Modules/_testmodule.c
@@ -0,0 +1,68 @@
+/*
+ * C Extension module to test Python interpreter C APIs.
+ *
+ * The 'test_*' functions exported by this module are run as part of the
+ * standard Python regression test, via Lib/test/test_capi.py.
+ */
+
+#include "Python.h"
+
+static PyObject *TestError; /* set to exception object in init */
+
+/* Test #defines from config.h (particularly the SIZEOF_* defines).
+
+ The ones derived from autoconf on the UNIX-like OSes can be relied
+ upon (in the absence of sloppy cross-compiling), but the Windows
+ platforms have these hardcoded. Better safe than sorry.
+*/
+static PyObject*
+sizeof_error(const char* fatname, const char* typename,
+ int expected, int got)
+{
+ char buf[1024];
+ sprintf(buf, "%s #define == %d but sizeof(%s) == %d",
+ fatname, expected, typename, got);
+ PyErr_SetString(TestError, buf);
+ return (PyObject*)NULL;
+}
+
+static PyObject*
+test_config(PyObject *self, PyObject *args)
+{
+ if (!PyArg_ParseTuple(args, ":test_config"))
+ return NULL;
+
+#define CHECK_SIZEOF(FATNAME, TYPE) \
+ if (FATNAME != sizeof(TYPE)) \
+ return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE))
+
+ CHECK_SIZEOF(SIZEOF_INT, int);
+ CHECK_SIZEOF(SIZEOF_LONG, long);
+ CHECK_SIZEOF(SIZEOF_VOID_P, void*);
+ CHECK_SIZEOF(SIZEOF_TIME_T, time_t);
+#ifdef HAVE_LONG_LONG
+ CHECK_SIZEOF(SIZEOF_LONG_LONG, LONG_LONG);
+#endif
+
+#undef CHECK_SIZEOF
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyMethodDef TestMethods[] = {
+ {"test_config", test_config, METH_VARARGS},
+ {NULL, NULL} /* sentinel */
+};
+
+DL_EXPORT(void)
+init_test(void)
+{
+ PyObject *m, *d;
+
+ m = Py_InitModule("_test", TestMethods);
+
+ TestError = PyErr_NewException("_test.error", NULL, NULL);
+ d = PyModule_GetDict(m);
+ PyDict_SetItemString(d, "error", TestError);
+}
diff --git a/PCbuild/_test.dsp b/PCbuild/_test.dsp
new file mode 100644
index 0000000..6bf5666
--- /dev/null
+++ b/PCbuild/_test.dsp
@@ -0,0 +1,99 @@
+# Microsoft Developer Studio Project File - Name="_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "_test.mak" CFG="_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "_test - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "_test - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName "_test"
+# PROP Scc_LocalPath ".."
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "x86-temp-release\_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+F90=df.exe
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\Include" /I "..\PC" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc09 /d "NDEBUG"
+# ADD RSC /l 0xc09 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /machine:I386 /out:"./_test.pyd" /export:init_test
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "."
+# PROP Intermediate_Dir "x86-temp-debug\_test"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+F90=df.exe
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\Include" /I "..\PC" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MMAP_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0xc09 /d "_DEBUG"
+# ADD RSC /l 0xc09 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /base:"0x1e1F0000" /dll /debug /machine:I386 /out:"./_test_d.pyd" /pdbtype:sept /export:init_test
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "_test - Win32 Release"
+# Name "_test - Win32 Debug"
+# Begin Source File
+
+SOURCE=..\Modules\_testmodule.c
+# End Source File
+# End Target
+# End Project
diff --git a/PCbuild/pcbuild.dsw b/PCbuild/pcbuild.dsw
index 1e521ad..87c9ad9 100644
--- a/PCbuild/pcbuild.dsw
+++ b/PCbuild/pcbuild.dsw
@@ -33,6 +33,18 @@ Package=<4>
###############################################################################
+Project: "_test"=.\_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Project: "_tkinter"=.\_tkinter.dsp - Package Owner=<4>
Package=<5>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 255a53b..f7a6e8c 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -55,6 +55,9 @@ winreg
Windows registry API
winsound
play sounds (typically .wav files) under Windows
+_test
+ tests of the Python C API, run via Lib/test/test_capi.py, and
+ implemented by module Modules/_testmodule.c
The following subprojects will generally NOT build out of the box. They
wrap code Python doesn't control, and you'll need to download the base