summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gi/pygi-basictype.c252
-rw-r--r--gi/pygi-util.c32
-rw-r--r--gi/pygi-util.h1
-rw-r--r--tests/test_everything.py211
-rw-r--r--tests/test_gi.py15
-rw-r--r--tests/test_overrides_glib.py2
6 files changed, 422 insertions, 91 deletions
diff --git a/gi/pygi-basictype.c b/gi/pygi-basictype.c
index 75db0b26..3dab06d5 100644
--- a/gi/pygi-basictype.c
+++ b/gi/pygi-basictype.c
@@ -23,6 +23,7 @@
#include "pygi-type.h"
#include "pygi-basictype.h"
#include "pygi-argument.h"
+#include "pygi-util.h"
#ifdef G_OS_WIN32
#include <math.h>
@@ -497,18 +498,25 @@ pygi_gint_from_py (PyObject *object, gint *result)
return FALSE;
long_value = PYGLIB_PyLong_AsLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
- return FALSE;
-
- if (long_value < G_MININT || long_value > G_MAXINT) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %d to %d",
- long_value, (int)G_MININT, (int)G_MAXINT);
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < G_MININT || long_value > G_MAXINT) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %d to %d",
+ number, (int)G_MININT, (int)G_MAXINT);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -528,18 +536,25 @@ pygi_guint_from_py (PyObject *object, guint *result)
return FALSE;
long_value = PyLong_AsUnsignedLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
- return FALSE;
-
- if (long_value > G_MAXUINT) {
- PyErr_Format (PyExc_OverflowError, "%lu not in range %ld to %lu",
- long_value, (long)0, (unsigned long)G_MAXUINT);
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value > G_MAXUINT) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %lu",
+ number, (long)0, (unsigned long)G_MAXUINT);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -565,12 +580,23 @@ pygi_glong_from_py (PyObject *object, glong *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred ())
+ if (long_value == -1 && PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ }
+ Py_DECREF (number);
*result = (glong)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)G_MINLONG, (long)G_MAXLONG);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -590,12 +616,23 @@ pygi_gulong_from_py (PyObject *object, gulong *result)
return FALSE;
long_value = PyLong_AsUnsignedLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ }
+ Py_DECREF (number);
*result = (gulong)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %lu",
+ number, (long)0, (unsigned long)G_MAXULONG);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -628,18 +665,25 @@ pygi_gint8_from_py (PyObject *object, gint8 *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred())
- return FALSE;
-
- if (long_value < G_MININT8 || long_value > G_MAXINT8) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %ld to %ld",
- long_value, (long)G_MININT8, (long)G_MAXINT8);
+ if (long_value == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < G_MININT8 || long_value > G_MAXINT8) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint8)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)G_MININT8, (long)G_MAXINT8);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -669,18 +713,25 @@ pygi_guint8_from_py (PyObject *object, guint8 *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred())
- return FALSE;
-
- if (long_value < 0 || long_value > G_MAXUINT8) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %ld to %ld",
- long_value, (long)0, (long)G_MAXUINT8);
+ if (long_value == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < 0 || long_value > G_MAXUINT8) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (guint8)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)0, (long)G_MAXUINT8);
+ Py_DECREF (number);
+ return FALSE;
}
PyObject *
@@ -700,18 +751,25 @@ pygi_gint16_from_py (PyObject *object, gint16 *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred())
- return FALSE;
-
- if (long_value < G_MININT16 || long_value > G_MAXINT16) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %ld to %ld",
- long_value, (long)G_MININT16, (long)G_MAXINT16);
+ if (long_value == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < G_MININT16 || long_value > G_MAXINT16) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint16)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)G_MININT16, (long)G_MAXINT16);
+ Py_DECREF (number);
+ return FALSE;
}
static PyObject *
@@ -731,18 +789,25 @@ pygi_guint16_from_py (PyObject *object, guint16 *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred())
- return FALSE;
-
- if (long_value < 0 || long_value > G_MAXUINT16) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %ld to %ld",
- long_value, (long)0, (long)G_MAXUINT16);
+ if (long_value == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < 0 || long_value > G_MAXUINT16) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (guint16)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)0, (long)G_MAXUINT16);
+ Py_DECREF (number);
+ return FALSE;
}
static PyObject *
@@ -762,18 +827,25 @@ pygi_gint32_from_py (PyObject *object, gint32 *result)
return FALSE;
long_value = PyLong_AsLong (number);
- Py_DECREF (number);
- if (long_value == -1 && PyErr_Occurred())
- return FALSE;
-
- if (long_value < G_MININT32 || long_value > G_MAXINT32) {
- PyErr_Format (PyExc_OverflowError, "%ld not in range %ld to %ld",
- long_value, (long)G_MININT32, (long)G_MAXINT32);
+ if (long_value == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < G_MININT32 || long_value > G_MAXINT32) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint32)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %ld",
+ number, (long)G_MININT32, (long)G_MAXINT32);
+ Py_DECREF (number);
+ return FALSE;
}
static PyObject *
@@ -793,18 +865,25 @@ pygi_guint32_from_py (PyObject *object, guint32 *result)
return FALSE;
long_value = PyLong_AsLongLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
- return FALSE;
-
- if (long_value < 0 || long_value > G_MAXUINT32) {
- PyErr_Format (PyExc_OverflowError, "%lld not in range %ld to %lu",
- long_value, (long)0, (unsigned long)G_MAXUINT32);
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < 0 || long_value > G_MAXUINT32) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (guint32)long_value;
return TRUE;
+
+overflow:
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %lu",
+ number, (long)0, (unsigned long)G_MAXUINT32);
+ Py_DECREF (number);
+ return FALSE;
}
static PyObject *
@@ -824,25 +903,36 @@ gboolean
pygi_gint64_from_py (PyObject *object, gint64 *result)
{
long long long_value;
- PyObject *number;
+ PyObject *number, *min, *max;
number = base_number_checks (object);
if (number == NULL)
return FALSE;
long_value = PyLong_AsLongLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
- return FALSE;
-
- if (long_value < G_MININT64 || long_value > G_MAXINT64) {
- PyErr_Format (PyExc_OverflowError, "%lld not in range %lld to %lld",
- long_value, (long long)G_MININT64, (long long)G_MAXINT64);
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value < G_MININT64 || long_value > G_MAXINT64) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (gint64)long_value;
return TRUE;
+
+overflow:
+ min = pygi_gint64_to_py (G_MININT64);
+ max = pygi_gint64_to_py (G_MAXINT64);
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %S to %S",
+ number, min, max);
+ Py_DECREF (number);
+ Py_DECREF (min);
+ Py_DECREF (max);
+ return FALSE;
}
PyObject *
@@ -858,26 +948,34 @@ gboolean
pygi_guint64_from_py (PyObject *object, guint64 *result)
{
unsigned long long long_value;
- PyObject *number;
+ PyObject *number, *max;
number = base_number_checks (object);
if (number == NULL)
return FALSE;
long_value = PyLong_AsUnsignedLongLong (number);
- Py_DECREF (number);
- if (PyErr_Occurred ())
- return FALSE;
-
- if (long_value > G_MAXUINT64) {
- PyErr_Format (PyExc_OverflowError, "%llu not in range %llu to %llu",
- long_value,
- (unsigned long long)0, (unsigned long long)G_MAXUINT64);
+ if (PyErr_Occurred ()) {
+ if (PyErr_ExceptionMatches (PyExc_OverflowError))
+ goto overflow;
+ Py_DECREF (number);
return FALSE;
+ } else if (long_value > G_MAXUINT64) {
+ goto overflow;
}
+ Py_DECREF (number);
*result = (guint64)long_value;
return TRUE;
+
+overflow:
+ max = pygi_guint64_to_py (G_MAXUINT64);
+ pygi_pyerr_format (
+ PyExc_OverflowError, "%S not in range %ld to %S",
+ number, (long)0, max);
+ Py_DECREF (number);
+ Py_DECREF (max);
+ return FALSE;
}
PyObject *
diff --git a/gi/pygi-util.c b/gi/pygi-util.c
index ee322238..c02a53c0 100644
--- a/gi/pygi-util.c
+++ b/gi/pygi-util.c
@@ -18,6 +18,38 @@
#include "pygi-util.h"
+/**
+ * Like PyErr_Format, but supports the format syntax of
+ * PyUnicode_FromFormat also under Python 2.
+ * Note: Python 2 doesn't support %lld and %llo there.
+ */
+PyObject*
+pygi_pyerr_format (PyObject *exception, const char *format, ...)
+{
+ PyObject *text;
+ va_list argp;
+ va_start(argp, format);
+ text = PyUnicode_FromFormatV (format, argp);
+ va_end(argp);
+
+ if (text != NULL) {
+#if PY_MAJOR_VERSION < 3
+ PyObject *str;
+ str = PyUnicode_AsUTF8String (text);
+ Py_DECREF (text);
+ if (str) {
+ PyErr_SetObject (exception, str);
+ Py_DECREF (str);
+ }
+#else
+ PyErr_SetObject (exception, text);
+ Py_DECREF (text);
+#endif
+ }
+
+ return NULL;
+}
+
gboolean
pygi_guint_from_pyssize (Py_ssize_t pyval, guint *result)
{
diff --git a/gi/pygi-util.h b/gi/pygi-util.h
index 592adf65..2f9847e6 100644
--- a/gi/pygi-util.h
+++ b/gi/pygi-util.h
@@ -12,6 +12,7 @@ PyObject * pyg_integer_richcompare(PyObject *v, PyObject *w, int op);
PyObject * pyg_ptr_richcompare(void* a, void *b, int op);
const gchar * pyg_constant_strip_prefix(const gchar *name, const gchar *strip_prefix);
PyObject * pygi_import_module (const char *name);
+PyObject * pygi_pyerr_format (PyObject *exception, const char *format, ...);
gboolean pygi_guint_from_pyssize (Py_ssize_t pyval, guint *result);
diff --git a/tests/test_everything.py b/tests/test_everything.py
index 429404a0..1dec539c 100644
--- a/tests/test_everything.py
+++ b/tests/test_everything.py
@@ -12,6 +12,8 @@ import sys
import os
import platform
+import pytest
+
from gi.repository import Regress as Everything
from gi.repository import GObject
from gi.repository import GLib
@@ -70,76 +72,214 @@ class TestEverything(unittest.TestCase):
GLib.MININT8)
self.assertRaises(OverflowError, Everything.test_int8, GLib.MAXINT8 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXINT8 + 1, GLib.MININT8, GLib.MAXINT8)):
+ Everything.test_int8(GLib.MAXINT8 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MININT8, GLib.MAXINT8)):
+ Everything.test_int8(GLib.MAXUINT64 * 2)
+
+ def test_uint8(self):
self.assertEqual(Everything.test_uint8(GLib.MAXUINT8),
GLib.MAXUINT8)
self.assertEqual(Everything.test_uint8(0), 0)
self.assertRaises(OverflowError, Everything.test_uint8, -1)
self.assertRaises(OverflowError, Everything.test_uint8, GLib.MAXUINT8 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT8 + 1, GLib.MAXUINT8)):
+ Everything.test_uint8(GLib.MAXUINT8 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUINT8)):
+ Everything.test_uint8(GLib.MAXUINT64 * 2)
+
def test_int16(self):
self.assertEqual(Everything.test_int16(GLib.MAXINT16),
GLib.MAXINT16)
self.assertEqual(Everything.test_int16(GLib.MININT16),
GLib.MININT16)
- self.assertRaises(OverflowError, Everything.test_int16, GLib.MAXINT16 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="32768 not in range -32768 to 32767"):
+ Everything.test_int16(GLib.MAXINT16 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="36893488147419103230 not in range -32768 to 32767"):
+ Everything.test_int16(GLib.MAXUINT64 * 2)
+
+ def test_uint16(self):
self.assertEqual(Everything.test_uint16(GLib.MAXUINT16),
GLib.MAXUINT16)
self.assertEqual(Everything.test_uint16(0), 0)
self.assertRaises(OverflowError, Everything.test_uint16, -1)
- self.assertRaises(OverflowError, Everything.test_uint16, GLib.MAXUINT16 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT16 + 1, GLib.MAXUINT16)):
+ Everything.test_uint16(GLib.MAXUINT16 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUINT16)):
+ Everything.test_uint16(GLib.MAXUINT64 * 2)
def test_int32(self):
self.assertEqual(Everything.test_int32(GLib.MAXINT32),
GLib.MAXINT32)
self.assertEqual(Everything.test_int32(GLib.MININT32),
GLib.MININT32)
- self.assertRaises(OverflowError, Everything.test_int32, GLib.MAXINT32 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="2147483648 not in range -2147483648 to 2147483647"):
+ Everything.test_int32(GLib.MAXINT32 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range -2147483648 to 2147483647" % (
+ GLib.MAXINT64 + 1,)):
+ Everything.test_int32(GLib.MAXINT64 + 1)
+
+ def test_uint32(self):
self.assertEqual(Everything.test_uint32(GLib.MAXUINT32),
GLib.MAXUINT32)
self.assertEqual(Everything.test_uint32(0), 0)
self.assertRaises(OverflowError, Everything.test_uint32, -1)
- self.assertRaises(OverflowError, Everything.test_uint32, GLib.MAXUINT32 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT32 + 1, GLib.MAXUINT32)):
+ Everything.test_uint32(GLib.MAXUINT32 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUINT32)):
+ Everything.test_uint32(GLib.MAXUINT64 * 2)
def test_int64(self):
self.assertEqual(Everything.test_int64(GLib.MAXINT64),
GLib.MAXINT64)
self.assertEqual(Everything.test_int64(GLib.MININT64),
GLib.MININT64)
- self.assertRaises(OverflowError, Everything.test_int64, GLib.MAXINT64 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXINT64 + 1, GLib.MININT64, GLib.MAXINT64)):
+ Everything.test_int64(GLib.MAXINT64 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MININT64, GLib.MAXINT64)):
+ Everything.test_int64(GLib.MAXUINT64 * 2)
+
+ def test_uint64(self):
self.assertEqual(Everything.test_uint64(GLib.MAXUINT64),
GLib.MAXUINT64)
self.assertEqual(Everything.test_uint64(0), 0)
self.assertRaises(OverflowError, Everything.test_uint64, -1)
self.assertRaises(OverflowError, Everything.test_uint64, GLib.MAXUINT64 + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 + 1, GLib.MAXUINT64)):
+ Everything.test_uint64(GLib.MAXUINT64 + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUINT64)):
+ Everything.test_uint64(GLib.MAXUINT64 * 2)
+
def test_int(self):
self.assertEqual(Everything.test_int(GLib.MAXINT),
GLib.MAXINT)
self.assertEqual(Everything.test_int(GLib.MININT),
GLib.MININT)
- self.assertRaises(OverflowError, Everything.test_int, GLib.MAXINT + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXINT + 1, GLib.MININT, GLib.MAXINT)):
+ Everything.test_int(GLib.MAXINT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MININT, GLib.MAXINT)):
+ Everything.test_int(GLib.MAXUINT64 * 2)
+
+ def test_uint(self):
self.assertEqual(Everything.test_uint(GLib.MAXUINT),
GLib.MAXUINT)
self.assertEqual(Everything.test_uint(0), 0)
self.assertRaises(OverflowError, Everything.test_uint, -1)
- self.assertRaises(OverflowError, Everything.test_uint, GLib.MAXUINT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT + 1, GLib.MAXUINT)):
+ Everything.test_uint(GLib.MAXUINT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUINT)):
+ Everything.test_uint(GLib.MAXUINT64 * 2)
def test_short(self):
self.assertEqual(Everything.test_short(GLib.MAXSHORT),
GLib.MAXSHORT)
self.assertEqual(Everything.test_short(GLib.MINSHORT),
GLib.MINSHORT)
- self.assertRaises(OverflowError, Everything.test_short, GLib.MAXSHORT + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXSHORT + 1, GLib.MINSHORT, GLib.MAXSHORT)):
+ Everything.test_short(GLib.MAXSHORT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MINSHORT, GLib.MAXSHORT)):
+ Everything.test_short(GLib.MAXUINT64 * 2)
+
+ def test_ushort(self):
self.assertEqual(Everything.test_ushort(GLib.MAXUSHORT),
GLib.MAXUSHORT)
self.assertEqual(Everything.test_ushort(0), 0)
self.assertRaises(OverflowError, Everything.test_ushort, -1)
- self.assertRaises(OverflowError, Everything.test_ushort, GLib.MAXUSHORT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUSHORT + 1, GLib.MAXUSHORT)):
+ Everything.test_ushort(GLib.MAXUSHORT + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXUSHORT)):
+ Everything.test_ushort(GLib.MAXUINT64 * 2)
def test_long(self):
self.assertEqual(Everything.test_long(GLib.MAXLONG),
@@ -148,25 +288,74 @@ class TestEverything(unittest.TestCase):
GLib.MINLONG)
self.assertRaises(OverflowError, Everything.test_long, GLib.MAXLONG + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXLONG + 1, GLib.MINLONG, GLib.MAXLONG)):
+ Everything.test_long(GLib.MAXLONG + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MINLONG, GLib.MAXLONG)):
+ Everything.test_long(GLib.MAXUINT64 * 2)
+
+ def test_ulong(self):
self.assertEqual(Everything.test_ulong(GLib.MAXULONG),
GLib.MAXULONG)
self.assertEqual(Everything.test_ulong(0), 0)
self.assertRaises(OverflowError, Everything.test_ulong, -1)
- self.assertRaises(OverflowError, Everything.test_ulong, GLib.MAXULONG + 1)
- def test_size(self):
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXULONG + 1, GLib.MAXULONG)):
+ Everything.test_ulong(GLib.MAXULONG + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXULONG)):
+ Everything.test_ulong(GLib.MAXUINT64 * 2)
+
+ def test_ssize(self):
self.assertEqual(Everything.test_ssize(GLib.MAXSSIZE),
GLib.MAXSSIZE)
self.assertEqual(Everything.test_ssize(GLib.MINSSIZE),
GLib.MINSSIZE)
self.assertRaises(OverflowError, Everything.test_ssize, GLib.MAXSSIZE + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXSSIZE + 1, GLib.MINSSIZE, GLib.MAXSSIZE)):
+ Everything.test_ssize(GLib.MAXSSIZE + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range %s to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MINSSIZE, GLib.MAXSSIZE)):
+ Everything.test_ssize(GLib.MAXUINT64 * 2)
+
+ def test_size(self):
self.assertEqual(Everything.test_size(GLib.MAXSIZE),
GLib.MAXSIZE)
self.assertEqual(Everything.test_size(0), 0)
self.assertRaises(OverflowError, Everything.test_size, -1)
self.assertRaises(OverflowError, Everything.test_size, GLib.MAXSIZE + 1)
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXSIZE + 1, GLib.MAXSIZE)):
+ Everything.test_size(GLib.MAXSIZE + 1)
+
+ with pytest.raises(
+ OverflowError,
+ match="%s not in range 0 to %s" % (
+ GLib.MAXUINT64 * 2, GLib.MAXSIZE)):
+ Everything.test_size(GLib.MAXUINT64 * 2)
+
def test_timet(self):
self.assertEqual(Everything.test_timet(42), 42)
self.assertRaises(OverflowError, Everything.test_timet, GLib.MAXUINT64 + 1)
diff --git a/tests/test_gi.py b/tests/test_gi.py
index 2a6466cf..51a9ecd0 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -1618,10 +1618,21 @@ class TestGValue(unittest.TestCase):
with pytest.raises(
OverflowError,
- match=r'.*(not in range %d to %d|too large to convert).*' % (
- GLib.MININT, GLib.MAXINT)):
+ match='Item 0: %d not in range %d to %d' % (
+ GLib.MAXINT + 1, GLib.MININT, GLib.MAXINT)):
GIMarshallingTests.gvalue_flat_array([GLib.MAXINT + 1, "42", True])
+ if PY2:
+ min_, max_ = GLib.MINLONG, GLib.MAXLONG
+ else:
+ min_, max_ = GLib.MININT, GLib.MAXINT
+
+ with pytest.raises(
+ OverflowError,
+ match='Item 0: %d not in range %d to %d' % (
+ GLib.MAXUINT64 * 2, min_, max_)):
+ GIMarshallingTests.gvalue_flat_array([GLib.MAXUINT64 * 2, "42", True])
+
def test_gvalue_flat_array_out(self):
values = GIMarshallingTests.return_gvalue_flat_array()
self.assertEqual(values, [42, '42', True])
diff --git a/tests/test_overrides_glib.py b/tests/test_overrides_glib.py
index 4fd8b1d6..34672535 100644
--- a/tests/test_overrides_glib.py
+++ b/tests/test_overrides_glib.py
@@ -577,7 +577,7 @@ class TestGVariant(unittest.TestCase):
gerror = GLib.Error(code=GLib.MAXUINT)
self.assertRaisesRegexp(OverflowError,
- ".*(not in range|too large to convert).*",
+ ".*not in range.*",
GLib.Variant.parse_error_print_context,
gerror, source_str)