summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog255
-rw-r--r--Makefile.am22
-rw-r--r--Makefile.in22
-rw-r--r--NEWS12
-rw-r--r--PKG-INFO4
-rwxr-xr-xconfigure44
-rw-r--r--configure.ac4
-rw-r--r--gi/pygi-argument.c16
-rw-r--r--gi/pygi-info.c30
-rw-r--r--pygobject-3.0-uninstalled.pc.in6
-rw-r--r--tests/test_everything.py55
-rw-r--r--tests/test_gi.py21
-rw-r--r--tests/test_properties.py90
-rw-r--r--tests/test_signal.py174
-rw-r--r--tests/testhelpermodule.c67
15 files changed, 675 insertions, 147 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d2b1b9..31e7256 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,258 @@
+commit 7e154cf01cf0ce7a8b52c45ba4db755f73b45d1d
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 17 22:48:13 2012 +0200
+
+ release 3.3.92
+
+ NEWS | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit adbe30dc72b4d88bb31055f6ee33fddf32638af9
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 17 22:32:55 2012 +0200
+
+ release-news: Generate HTML changelog
+
+ In addition to producing a NEWS paragraph from the changelog,
+ generate a
+ changelog HTML which can be put into blog announcements.
+
+ Update HACKING to point this out, too.
+
+ HACKING | 2 +-
+ Makefile.am | 22 ++++++++++++++++------
+ 2 files changed, 17 insertions(+), 7 deletions(-)
+
+commit be4a0682bdd189ee908ab1961001f759a80e133c
+Author: Simon Feltman <s.feltman@gmail.com>
+Date: Sun Sep 16 17:27:25 2012 -0700
+
+ [API add] Add ObjectInfo.get_abstract method
+
+ Adds exposure of g_object_info_get_abstract to python for
+ helping with analysis of non-constructable objects from
+ within python.
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=675581
+
+ gi/pygi-info.c | 8 ++++++++
+ tests/test_gi.py | 12 ++++++++++++
+ 2 files changed, 20 insertions(+)
+
+commit 3ada408434860d0c8eee6c6a869b5a3d801cfbc8
+Author: Simon Feltman <s.feltman@gmail.com>
+Date: Thu Sep 13 20:53:22 2012 -0700
+
+ Add deprecation warning when setting gpointers to anything other
+ than int.
+
+ This is a first pass which does not change anything except add
+ a warning
+ when anything other than an int is set on a gpointer on a boxed type.
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=683599
+
+ gi/pygi-info.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit a047f61f26d9c78b82d22948199313e5a389e918
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 17 09:41:24 2012 +0200
+
+ test_properties: Test accessing a property from a superclass
+
+ We already cover accessing the superclass' property if that was
+ defined in
+ Python. Add a corresponding test case for a property defined in C.
+
+ See https://bugzilla.gnome.org/show_bug.cgi?id=684058
+
+ tests/test_properties.py | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 3e6a4000cbc4b0cb503fcd89b50202ed0b70d3a7
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 17 09:31:05 2012 +0200
+
+ test_properties.py: Consistent test names
+
+ Use underscore style method/test case names consistently. Also rename
+ some test
+ cases to better describe what they do.
+
+ tests/test_properties.py | 78
+ +++++++++++++++++++++++-----------------------
+ 1 file changed, 39 insertions(+), 39 deletions(-)
+
+commit 4069c3d8547f35437e0cee175a5912febe25326d
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Wed Sep 12 06:51:24 2012 +0200
+
+ test_everything: Ensure TestSignals callback does get called
+
+ tests/test_everything.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 4e4c87e3868948743e0446abe2ba0cf5626374c4
+Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+Date: Fri Sep 7 17:17:09 2012 -0400
+
+ argument: Fix 64bit integer convertion from GValue
+
+ Trying to get a 64bit integer using the wrong getter was resulting
+ in an
+ assertion and 0 being returned.
+
+ Co-Authored-By: Martin Pitt <martinpitt@gnome.org>
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=683596
+
+ gi/pygi-argument.c | 8 +++++--
+ tests/test_everything.py | 52
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 58 insertions(+), 2 deletions(-)
+
+commit e474ce243ea7a58358af344ccadb1418f4d2c8eb
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Tue Sep 11 12:32:10 2012 +0200
+
+ Add Simon Feltman as a project maintainer
+
+ Signed-off-By: Martin Pitt <martinpitt@gnome.org>
+ Signed-off-By: Paolo Borelli <pborelli@gnome.org>
+
+ pygobject.doap | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit ee1fc78258f10e8a7872ee3da6c9ad6e7984706e
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Tue Sep 11 10:17:50 2012 +0200
+
+ test_signals.py: Drop global type variables
+
+ Just use the real types and flags from GObject instead of redefining
+ aliases
+ for them. They weren't used consistently, make the tests harder to
+ read, and we
+ really do not want global single-letter variables like "f" and "l".
+
+ tests/test_signal.py | 38 ++++++++++++++++----------------------
+ 1 file changed, 16 insertions(+), 22 deletions(-)
+
+commit 3688cf6efe7161585b943cfaafcfd4610b7ad768
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Tue Sep 11 10:11:58 2012 +0200
+
+ test_signals.py: Consistent test names
+
+ Use underscore style method/test case names consistently.
+
+ tests/test_signal.py | 88
+ +++++++++++++++++++++++++-------------------------
+ 1 file changed, 44 insertions(+), 44 deletions(-)
+
+commit 4559247553b792db956f69c9674c12344d719c82
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Tue Sep 11 09:43:14 2012 +0200
+
+ Add test cases for GValue signal arguments
+
+ These cover various types, (u)int(64) and string.
+
+ Keep the test case for implicit int64 GValues disabled, as this
+ currently does
+ not work and it is not clear whether it should:
+ https://bugzilla.gnome.org/show_bug.cgi?id=683775
+
+ tests/test_signal.py | 41 +++++++++++++++++++++++++++++++++++++++++
+ tests/testhelpermodule.c | 17 +++++++++++++++++
+ 2 files changed, 58 insertions(+)
+
+commit fddb01b0b71b68d154d130cf40fd5f38647b1a4d
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Tue Sep 11 09:31:18 2012 +0200
+
+ Add test for GValue signal return values
+
+ Another attempt to reproduce the reported error in
+ https://bugzilla.gnome.org/show_bug.cgi?id=683596
+ but this works already.
+
+ tests/test_signal.py | 13 +++++++++++++
+ tests/testhelpermodule.c | 36 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 49 insertions(+)
+
+commit 4f77c7798563ea436ff5b6306a987f03de50b211
+Author: Simon Feltman <s.feltman@gmail.com>
+Date: Fri Sep 7 02:32:15 2012 -0700
+
+ Improve setting pointer fields/arguments to NULL using None
+
+ Setting gi pointers will set them to the address of the python object.
+ This is good except in the case of None which should be used to NULL
+ the pointer out as a special case.
+
+ Commit 21b1d17d2a already fixed this. This improved patch
+ does that in a cleaner and safer way and adds more comments.
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=683150
+
+ gi/pygi-argument.c | 8 +-------
+ gi/pygi-info.c | 14 +++++++++++++-
+ 2 files changed, 14 insertions(+), 8 deletions(-)
+
+commit 15046b5a11f6c58a3e5a9c50cf0ce7f31f2cd55f
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 10 16:46:30 2012 +0200
+
+ Test gint64 C signal arguments and return values
+
+ tests/test_signal.py | 12 ++++++++++++
+ tests/testhelpermodule.c | 14 ++++++++++++++
+ 2 files changed, 26 insertions(+)
+
+commit 822d9e07a95f706a40f64335765293542787da90
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 10 16:29:32 2012 +0200
+
+ Test in/out int64 GValue method arguments.
+
+ See https://bugzilla.gnome.org/show_bug.cgi?id=683596
+
+ tests/test_gi.py | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 2d83e52233812618493af4b165615e8741ba41c8
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Wed Sep 5 08:54:53 2012 +0200
+
+ Bump g-i dependency to 1.33.10
+
+ To ensure we have all the Regress test APIs that we use.
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6a4f4dc9a3d21c3ac8a0aa51432fb8952b4e1ebf
+Author: Thibault Saunier <thibault.saunier@collabora.com>
+Date: Wed Aug 8 12:57:41 2012 -0400
+
+ Fix -uninstalled.pc.in file
+
+ https://bugzilla.gnome.org/show_bug.cgi?id=683379
+
+ pygobject-3.0-uninstalled.pc.in | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit d8f1398dbc7fa7803639c542a607f24f18614ad6
+Author: Martin Pitt <martinpitt@gnome.org>
+Date: Mon Sep 3 22:16:47 2012 +0200
+
+ post-release bump to 3.3.92
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
commit ea992324b8197b2d04ff2849b9ab46f8a04b4ed7
Author: Martin Pitt <martinpitt@gnome.org>
Date: Mon Sep 3 22:04:01 2012 +0200
diff --git a/Makefile.am b/Makefile.am
index 20dbf35..f21793f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -89,12 +89,22 @@ doc-dist:
release-news:
printf "%-8s%s\n" "$(VERSION)" "`LC_TIME=C date '+%d-%b-%Y'`" > NEWS.tmp
- last=`head -n1 NEWS | cut -f1 -d' '`; \
- git log --format='format: - %s (%aN)%n%b' $$last.. | \
- sed -n '/^ -/ p; /bugzilla.gnome.org/ { s/^.*id=\([0-9]\+\).*$$/ (#\1)/; p}' >> NEWS.tmp
- echo >> NEWS.tmp
- cat NEWS >> NEWS.tmp
- mv NEWS.tmp NEWS
+
+ @echo -e "\n\n\nFor blogging, you can copy&paste this HTML formatted news:"
+ @echo "-------------- 8< -------------"
+ @last=`head -n1 NEWS | cut -f1 -d' '`; \
+ echo "<ul>"; \
+ for commit in `git rev-list $$last..`; do \
+ data=`git log --format="format:%s%n%an%n%b" $$commit^..$$commit`; \
+ echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }}; print " <li>$$subj ($$author)"; if ($$bug) { print " (<a href=\"https://bugzilla.gnome.org/show_bug.cgi?id=$$bug\">#$$bug</a>)"; }; print "</li>\n"'; \
+ echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }}; print " - $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
+ done
+ @echo "</ul>"
+ @echo "-------------- 8< -------------"
+
+ @echo >> NEWS.tmp
+ @cat NEWS >> NEWS.tmp
+ @mv NEWS.tmp NEWS
.PHONY: ChangeLog release-news
diff --git a/Makefile.in b/Makefile.in
index 4a1f710..2acf879 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1000,12 +1000,22 @@ doc-dist:
release-news:
printf "%-8s%s\n" "$(VERSION)" "`LC_TIME=C date '+%d-%b-%Y'`" > NEWS.tmp
- last=`head -n1 NEWS | cut -f1 -d' '`; \
- git log --format='format: - %s (%aN)%n%b' $$last.. | \
- sed -n '/^ -/ p; /bugzilla.gnome.org/ { s/^.*id=\([0-9]\+\).*$$/ (#\1)/; p}' >> NEWS.tmp
- echo >> NEWS.tmp
- cat NEWS >> NEWS.tmp
- mv NEWS.tmp NEWS
+
+ @echo -e "\n\n\nFor blogging, you can copy&paste this HTML formatted news:"
+ @echo "-------------- 8< -------------"
+ @last=`head -n1 NEWS | cut -f1 -d' '`; \
+ echo "<ul>"; \
+ for commit in `git rev-list $$last..`; do \
+ data=`git log --format="format:%s%n%an%n%b" $$commit^..$$commit`; \
+ echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }}; print " <li>$$subj ($$author)"; if ($$bug) { print " (<a href=\"https://bugzilla.gnome.org/show_bug.cgi?id=$$bug\">#$$bug</a>)"; }; print "</li>\n"'; \
+ echo "$$data" | perl -e '$$subj = <>; chomp $$subj; $$author = <>; chomp $$author; while (<>) { if (/bugzilla.gnome.org.*id=([0-9]+)/) { $$bug = $$1 }}; print " - $$subj ($$author)"; if ($$bug) { print " (#$$bug)"; }; print "\n"' >> NEWS.tmp; \
+ done
+ @echo "</ul>"
+ @echo "-------------- 8< -------------"
+
+ @echo >> NEWS.tmp
+ @cat NEWS >> NEWS.tmp
+ @mv NEWS.tmp NEWS
.PHONY: ChangeLog release-news
diff --git a/NEWS b/NEWS
index 9a274c9..4931c99 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+3.3.92 17-Sep-2012
+ - [API add] Add ObjectInfo.get_abstract method (Simon Feltman) (#675581)
+ - Add deprecation warning when setting gpointers to anything other than
+ int. (Simon Feltman) (#683599)
+ - argument: Fix 64bit integer convertion from GValue (Nicolas Dufresne)
+ (#683596)
+ - Improve setting pointer fields/arguments to NULL using None
+ (Simon Feltman) (#683150)
+ - Bump g-i dependency to 1.33.10 (Martin Pitt)
+ - Fix -uninstalled.pc.in file (Thibault Saunier) (#683379)
+ - Various test suite additions and improvements (Martin Pitt)
+
3.3.91 03-Sep-2012
- Fix exception test case for Python 2 (Martin Pitt)
- Bump g-i dependency to >= 1.3.9 (Martin Pitt)
diff --git a/PKG-INFO b/PKG-INFO
index c1c5b71..81634ce 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: PyGObject
-Version: 3.3.91
+Version: 3.3.92
Summary: Python bindings for GObject
Home-page: http://www.pygtk.org/
Author: James Henstridge
@@ -8,7 +8,7 @@ Author-email: james@daa.com.au
Maintainer: Johan Dahlin
Maintainer-email: johan@gnome.org
License: GNU LGPL
-Download-url: ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/3.3/pygobject-3.3.91.tar.gz
+Download-url: ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/3.3/pygobject-3.3.92.tar.gz
Description: Python bindings for GLib and GObject
Platform: POSIX, Windows
Classifier: Development Status :: 5 - Production/Stable
diff --git a/configure b/configure
index 00acf48..3ad6a2e 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pygobject 3.3.91.
+# Generated by GNU Autoconf 2.69 for pygobject 3.3.92.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='pygobject'
PACKAGE_TARNAME='pygobject'
-PACKAGE_VERSION='3.3.91'
-PACKAGE_STRING='pygobject 3.3.91'
+PACKAGE_VERSION='3.3.92'
+PACKAGE_STRING='pygobject 3.3.92'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject'
PACKAGE_URL=''
@@ -1385,7 +1385,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures pygobject 3.3.91 to adapt to many kinds of systems.
+\`configure' configures pygobject 3.3.92 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1455,7 +1455,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of pygobject 3.3.91:";;
+ short | recursive ) echo "Configuration of pygobject 3.3.92:";;
esac
cat <<\_ACEOF
@@ -1584,7 +1584,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-pygobject configure 3.3.91
+pygobject configure 3.3.92
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1862,7 +1862,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by pygobject $as_me 3.3.91, which was
+It was created by pygobject $as_me 3.3.92, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2226,9 +2226,9 @@ $as_echo "#define PYGOBJECT_MINOR_VERSION 3" >>confdefs.h
PYGOBJECT_MINOR_VERSION=3
-$as_echo "#define PYGOBJECT_MICRO_VERSION 91" >>confdefs.h
+$as_echo "#define PYGOBJECT_MICRO_VERSION 92" >>confdefs.h
-PYGOBJECT_MICRO_VERSION=91
+PYGOBJECT_MICRO_VERSION=92
ac_config_headers="$ac_config_headers config.h"
@@ -2739,7 +2739,7 @@ fi
# Define the identity of the package.
PACKAGE='pygobject'
- VERSION='3.3.91'
+ VERSION='3.3.92'
cat >>confdefs.h <<_ACEOF
@@ -12130,7 +12130,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
-pygobject config.lt 3.3.91
+pygobject config.lt 3.3.92
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -15934,16 +15934,16 @@ if test -n "$GI_CFLAGS"; then
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
\""; } >&5
($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_GI_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
@@ -15957,16 +15957,16 @@ if test -n "$GI_LIBS"; then
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
\""; } >&5
($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_GI_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
@@ -15989,18 +15989,18 @@ else
fi
if test $_pkg_short_errors_supported = yes; then
GI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
" 2>&1`
else
GI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$GI_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (glib-2.0 >= 2.31.0
- gobject-introspection-1.0 >= 1.33.9
+ gobject-introspection-1.0 >= 1.33.10
) were not met:
$GI_PKG_ERRORS
@@ -17085,7 +17085,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by pygobject $as_me 3.3.91, which was
+This file was extended by pygobject $as_me 3.3.92, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -17151,7 +17151,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-pygobject config.status 3.3.91
+pygobject config.status 3.3.92
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index d70fe7a..037ddd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -12,11 +12,11 @@ m4_define(python3_min_ver, 3.1)
dnl the pygobject version number
m4_define(pygobject_major_version, 3)
m4_define(pygobject_minor_version, 3)
-m4_define(pygobject_micro_version, 91)
+m4_define(pygobject_micro_version, 92)
m4_define(pygobject_version, pygobject_major_version.pygobject_minor_version.pygobject_micro_version)
dnl versions of packages we require ...
-m4_define(introspection_required_version, 1.33.9)
+m4_define(introspection_required_version, 1.33.10)
m4_define(py2cairo_required_version, 1.2.0)
m4_define(py3cairo_required_version, 1.10.0)
m4_define(glib_required_version, 2.31.0)
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 38af25b..5fd633a 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -867,13 +867,7 @@ _pygi_argument_from_object (PyObject *object,
switch (type_tag) {
case GI_TYPE_TAG_VOID:
g_warn_if_fail (transfer == GI_TRANSFER_NOTHING);
- if (object == Py_None) {
- Py_DECREF(Py_None);
- arg.v_pointer = NULL;
- } else {
- /* This will leak a reference to the python object. */
- arg.v_pointer = object;
- }
+ arg.v_pointer = object == Py_None ? NULL : object;
break;
case GI_TYPE_TAG_BOOLEAN:
{
@@ -2004,15 +1998,19 @@ _pygi_argument_from_g_value(const GValue *value,
case GI_TYPE_TAG_INT8:
case GI_TYPE_TAG_INT16:
case GI_TYPE_TAG_INT32:
- case GI_TYPE_TAG_INT64:
arg.v_int = g_value_get_int (value);
break;
+ case GI_TYPE_TAG_INT64:
+ arg.v_int64 = g_value_get_int64 (value);
+ break;
case GI_TYPE_TAG_UINT8:
case GI_TYPE_TAG_UINT16:
case GI_TYPE_TAG_UINT32:
- case GI_TYPE_TAG_UINT64:
arg.v_uint = g_value_get_uint (value);
break;
+ case GI_TYPE_TAG_UINT64:
+ arg.v_uint64 = g_value_get_uint64 (value);
+ break;
case GI_TYPE_TAG_UNICHAR:
arg.v_uint32 = g_value_get_schar (value);
break;
diff --git a/gi/pygi-info.c b/gi/pygi-info.c
index 3ca5c8f..dfcaf55 100644
--- a/gi/pygi-info.c
+++ b/gi/pygi-info.c
@@ -1069,6 +1069,13 @@ _wrap_g_object_info_get_vfuncs (PyGIBaseInfo *self)
return _get_vfuncs (self, GI_INFO_TYPE_OBJECT);
}
+static PyObject *
+_wrap_g_object_info_get_abstract (PyGIBaseInfo *self)
+{
+ gboolean is_abstract = g_object_info_get_abstract ( (GIObjectInfo*) self->info);
+ return PyBool_FromLong (is_abstract);
+}
+
static PyMethodDef _PyGIObjectInfo_methods[] = {
{ "get_parent", (PyCFunction) _wrap_g_object_info_get_parent, METH_NOARGS },
{ "get_methods", (PyCFunction) _wrap_g_object_info_get_methods, METH_NOARGS },
@@ -1076,6 +1083,7 @@ static PyMethodDef _PyGIObjectInfo_methods[] = {
{ "get_interfaces", (PyCFunction) _wrap_g_object_info_get_interfaces, METH_NOARGS },
{ "get_constants", (PyCFunction) _wrap_g_object_info_get_constants, METH_NOARGS },
{ "get_vfuncs", (PyCFunction) _wrap_g_object_info_get_vfuncs, METH_NOARGS },
+ { "get_abstract", (PyCFunction) _wrap_g_object_info_get_abstract, METH_NOARGS },
{ NULL, NULL, 0 }
};
@@ -1427,12 +1435,32 @@ _wrap_g_field_info_set_value (PyGIBaseInfo *self,
&& g_type_info_get_tag (field_type_info) == GI_TYPE_TAG_VOID) {
int offset;
+ if (py_value != Py_None && !PYGLIB_PyLong_Check(py_value)) {
+ if (PyErr_WarnEx(PyExc_RuntimeWarning,
+ "Usage of gpointers to store objects has been deprecated. "
+ "Please integer values instead, see: https://bugzilla.gnome.org/show_bug.cgi?id=683599",
+ 1))
+ goto out;
+ }
+
offset = g_field_info_get_offset ((GIFieldInfo *) self->info);
value = _pygi_argument_from_object (py_value, field_type_info, GI_TRANSFER_NOTHING);
+ /* Decrement the previous python object stashed on the void pointer.
+ * This seems somewhat dangerous as the code is blindly assuming any
+ * void pointer field stores a python object pointer and then decrefs it.
+ * This is essentially the same as something like:
+ * Py_XDECREF(struct->void_ptr); */
Py_XDECREF(G_STRUCT_MEMBER (gpointer, pointer, offset));
+
+ /* Assign and increment the newly assigned object. At this point the value
+ * arg will hold a pointer the python object "py_value" or NULL.
+ * This is essentially:
+ * struct->void_ptr = value.v_pointer;
+ * Py_XINCREF(struct->void_ptr);
+ */
G_STRUCT_MEMBER (gpointer, pointer, offset) = (gpointer)value.v_pointer;
- Py_XINCREF(py_value);
+ Py_XINCREF(G_STRUCT_MEMBER (gpointer, pointer, offset));
retval = Py_None;
goto out;
diff --git a/pygobject-3.0-uninstalled.pc.in b/pygobject-3.0-uninstalled.pc.in
index 6b07aa6..4cec178 100644
--- a/pygobject-3.0-uninstalled.pc.in
+++ b/pygobject-3.0-uninstalled.pc.in
@@ -1,12 +1,12 @@
# you can use the --variable=pygobjectincludedir argument to
# pkg-config to get this value. You might want to use this to
# install additional headers.
-pygobjectincludedir=${pc_top_builddir}/${pcfiledir}/gi/_gobject
-overridesdir=${pc_top_builddir}/${pcfiledir}/gi/overrides
+pygobjectincludedir=${pcfiledir}/gi/_gobject
+overridesdir=${pcfiledir}/gi/overrides
Name: PyGObject
Description: Python bindings for GObject
Requires: gobject-2.0
Requires.private: @LIBFFI_PC@
Version: @VERSION@
-Cflags: -I${pc_top_builddir}/${pcfiledir}/gi/_gobject
+Cflags: -I${pcfiledir}/gi/_gobject
diff --git a/tests/test_everything.py b/tests/test_everything.py
index c5140ed..243e770 100644
--- a/tests/test_everything.py
+++ b/tests/test_everything.py
@@ -690,9 +690,64 @@ class TestSignals(unittest.TestCase):
def callback(obj, obj_param):
self.assertEqual(obj_param.props.int, 3)
self.assertGreater(obj_param.__grefcount__, 1)
+ obj.called = True
+ obj.called = False
obj.connect('sig-with-obj', callback)
obj.emit_sig_with_obj()
+ self.assertTrue(obj.called)
+
+ def test_int64_param_from_py(self):
+ obj = Everything.TestObj()
+
+ def callback(obj, i):
+ obj.callback_i = i
+ return i
+
+ obj.callback_i = None
+ obj.connect('sig-with-int64-prop', callback)
+ rv = obj.emit('sig-with-int64-prop', GObject.G_MAXINT64)
+ self.assertEqual(rv, GObject.G_MAXINT64)
+ self.assertEqual(obj.callback_i, GObject.G_MAXINT64)
+
+ def test_uint64_param_from_py(self):
+ obj = Everything.TestObj()
+
+ def callback(obj, i):
+ obj.callback_i = i
+ return i
+
+ obj.callback_i = None
+ obj.connect('sig-with-uint64-prop', callback)
+ rv = obj.emit('sig-with-uint64-prop', GObject.G_MAXUINT64)
+ self.assertEqual(rv, GObject.G_MAXUINT64)
+ self.assertEqual(obj.callback_i, GObject.G_MAXUINT64)
+
+ def test_int64_param_from_c(self):
+ obj = Everything.TestObj()
+
+ def callback(obj, i):
+ obj.callback_i = i
+ return i
+
+ obj.callback_i = None
+
+ obj.connect('sig-with-int64-prop', callback)
+ obj.emit_sig_with_int64()
+ self.assertEqual(obj.callback_i, GObject.G_MAXINT64)
+
+ def test_uint64_param_from_c(self):
+ obj = Everything.TestObj()
+
+ def callback(obj, i):
+ obj.callback_i = i
+ return i
+
+ obj.callback_i = None
+
+ obj.connect('sig-with-uint64-prop', callback)
+ obj.emit_sig_with_uint64()
+ self.assertEqual(obj.callback_i, GObject.G_MAXUINT64)
class TestPango(unittest.TestCase):
diff --git a/tests/test_gi.py b/tests/test_gi.py
index c22a488..ea58547 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -1042,9 +1042,18 @@ class TestGValue(unittest.TestCase):
value.set_int(42)
GIMarshallingTests.gvalue_in(value)
+ def test_gvalue_int64_in(self):
+ value = GObject.Value()
+ value.init(GObject.TYPE_INT64)
+ value.set_int64(GObject.G_MAXINT64)
+ GIMarshallingTests.gvalue_int64_in(value)
+
def test_gvalue_out(self):
self.assertEqual(42, GIMarshallingTests.gvalue_out())
+ def test_gvalue_int64_out(self):
+ self.assertEqual(GObject.G_MAXINT64, GIMarshallingTests.gvalue_int64_out())
+
def test_gvalue_out_caller_allocates(self):
self.assertEqual(42, GIMarshallingTests.gvalue_out_caller_allocates())
@@ -2385,3 +2394,15 @@ class TestProjectVersion(unittest.TestCase):
self.assertRaises(ValueError, gi.check_version, "99.0.0")
gi.check_version((3, 3, 5))
gi.check_version("3.3.5")
+
+
+class TestObjectInfo(unittest.TestCase):
+ def test_get_abstract_with_abstract(self):
+ repo = gi.gi.Repository.get_default()
+ info = repo.find_by_name('GObject', 'TypeModule')
+ self.assertTrue(info.get_abstract())
+
+ def test_get_abstract_with_concrete(self):
+ repo = gi.gi.Repository.get_default()
+ info = repo.find_by_name('GObject', 'Object')
+ self.assertFalse(info.get_abstract())
diff --git a/tests/test_properties.py b/tests/test_properties.py
index 2b77d28..405375d 100644
--- a/tests/test_properties.py
+++ b/tests/test_properties.py
@@ -60,26 +60,26 @@ class PropertyObject(GObject.GObject):
type=TYPE_STRV, flags=PARAM_READWRITE | PARAM_CONSTRUCT)
-class TestProperties(unittest.TestCase):
- def testGetSet(self):
+class TestPropertyObject(unittest.TestCase):
+ def test_get_set(self):
obj = PropertyObject()
obj.props.normal = "value"
self.assertEqual(obj.props.normal, "value")
- def testListWithInstance(self):
+ def test_hasattr_on_object(self):
obj = PropertyObject()
self.assertTrue(hasattr(obj.props, "normal"))
- def testListWithoutInstance(self):
+ def test_hasattr_on_class(self):
self.assertTrue(hasattr(PropertyObject.props, "normal"))
- def testSetNoInstance(self):
+ def test_set_on_class(self):
def set(obj):
obj.props.normal = "foobar"
self.assertRaises(TypeError, set, PropertyObject)
- def testIterator(self):
+ def test_iteration(self):
for obj in (PropertyObject.props, PropertyObject().props):
for pspec in obj:
gtype = GType(pspec)
@@ -95,7 +95,7 @@ class TestProperties(unittest.TestCase):
'boxed'])
self.assertEqual(len(obj), 9)
- def testNormal(self):
+ def test_normal(self):
obj = new(PropertyObject, normal="123")
self.assertEqual(obj.props.normal, "123")
obj.set_property('normal', '456')
@@ -103,7 +103,7 @@ class TestProperties(unittest.TestCase):
obj.props.normal = '789'
self.assertEqual(obj.props.normal, "789")
- def testConstruct(self):
+ def test_construct(self):
obj = new(PropertyObject, construct="123")
self.assertEqual(obj.props.construct, "123")
obj.set_property('construct', '456')
@@ -111,7 +111,7 @@ class TestProperties(unittest.TestCase):
obj.props.construct = '789'
self.assertEqual(obj.props.construct, "789")
- def testUTF8(self):
+ def test_utf8(self):
obj = new(PropertyObject, construct_only=UNICODE_UTF8)
self.assertEqual(obj.props.construct_only, TEST_UTF8)
obj.set_property('construct', UNICODE_UTF8)
@@ -119,7 +119,7 @@ class TestProperties(unittest.TestCase):
obj.props.normal = UNICODE_UTF8
self.assertEqual(obj.props.normal, TEST_UTF8)
- def testIntToStr(self):
+ def test_int_to_str(self):
obj = new(PropertyObject, construct_only=1)
self.assertEqual(obj.props.construct_only, '1')
obj.set_property('construct', '2')
@@ -127,7 +127,7 @@ class TestProperties(unittest.TestCase):
obj.props.normal = 3
self.assertEqual(obj.props.normal, '3')
- def testConstructOnly(self):
+ def test_construct_only(self):
obj = new(PropertyObject, construct_only="123")
self.assertEqual(obj.props.construct_only, "123")
self.assertRaises(TypeError,
@@ -135,7 +135,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises(TypeError,
obj.set_property, 'construct-only', '456')
- def testUint64(self):
+ def test_uint64(self):
obj = new(PropertyObject)
self.assertEqual(obj.props.uint64, 0)
obj.props.uint64 = _long(1)
@@ -146,7 +146,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises((TypeError, OverflowError), obj.set_property, "uint64", _long(-1))
self.assertRaises((TypeError, OverflowError), obj.set_property, "uint64", -1)
- def testUInt64DefaultValue(self):
+ def test_uint64_default_value(self):
try:
class TimeControl(GObject.GObject):
__gproperties__ = {
@@ -158,7 +158,7 @@ class TestProperties(unittest.TestCase):
(etype, ex) = sys.exc_info()[2:]
self.fail(str(ex))
- def testEnum(self):
+ def test_enum(self):
obj = new(PropertyObject)
self.assertEqual(obj.props.enum, Gio.SocketType.STREAM)
self.assertEqual(obj.enum, Gio.SocketType.STREAM)
@@ -186,7 +186,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises(TypeError, GObject.Property, type=Gio.SocketType,
default=1)
- def testFlags(self):
+ def test_flags(self):
obj = new(PropertyObject)
self.assertEqual(obj.props.flags, GIMarshallingTests.Flags.VALUE1)
self.assertEqual(obj.flags, GIMarshallingTests.Flags.VALUE1)
@@ -206,7 +206,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises(TypeError, GObject.Property,
type=GIMarshallingTests.Flags, default=None)
- def testGType(self):
+ def test_gtype(self):
obj = new(PropertyObject)
self.assertEqual(obj.props.gtype, TYPE_NONE)
@@ -238,7 +238,7 @@ class TestProperties(unittest.TestCase):
self.assertEqual(obj.props.gtype, TYPE_UINT)
self.assertEqual(obj.gtype, TYPE_UINT)
- def testBoxed(self):
+ def test_boxed(self):
obj = new(PropertyObject)
regex = GLib.Regex.new('[a-z]*', 0, 0)
@@ -249,7 +249,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises(TypeError, setattr, obj, 'boxed', 'foo')
self.assertRaises(TypeError, setattr, obj, 'boxed', object())
- def testStrings(self):
+ def test_strings(self):
obj = new(PropertyObject)
# Should work with actual GStrv objects as well as
@@ -299,7 +299,7 @@ class TestProperties(unittest.TestCase):
self.assertRaises(TypeError, GObject.Property, type=TYPE_STRV,
default=['hello', 1])
- def testRange(self):
+ def test_range(self):
# kiwi code
def max(c):
return 2 ** ((8 * struct.calcsize(c)) - 1) - 1
@@ -368,7 +368,7 @@ class TestProperties(unittest.TestCase):
obj.set_property(key, max)
self.assertEqual(obj.get_property(key), max)
- def testMulti(self):
+ def test_multi(self):
obj = PropertyObject()
obj.set_properties(normal="foo",
uint64=7)
@@ -378,7 +378,7 @@ class TestProperties(unittest.TestCase):
class TestProperty(unittest.TestCase):
- def testSimple(self):
+ def test_simple(self):
class C(GObject.GObject):
str = GObject.Property(type=str)
int = GObject.Property(type=int)
@@ -407,7 +407,7 @@ class TestProperty(unittest.TestCase):
o.long = _long(100)
self.assertEqual(o.long, _long(100))
- def testCustomGetter(self):
+ def test_custom_getter(self):
class C(GObject.GObject):
def get_prop(self):
return 'value'
@@ -417,7 +417,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(o.prop, 'value')
self.assertRaises(TypeError, setattr, o, 'prop', 'xxx')
- def testCustomSetter(self):
+ def test_custom_setter(self):
class C(GObject.GObject):
def set_prop(self, value):
self._value = value
@@ -433,7 +433,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(o._value, 'bar')
self.assertRaises(TypeError, getattr, o, 'prop')
- def testDecoratorDefault(self):
+ def test_decorator_default(self):
class C(GObject.GObject):
_value = 'value'
@@ -451,7 +451,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(o.value, 'blah')
self.assertEqual(o.props.value, 'blah')
- def testDecoratorWithCall(self):
+ def test_decorator_with_call(self):
class C(GObject.GObject):
_value = 1
@@ -469,7 +469,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(o.typedValue, 5)
self.assertEqual(o.props.typedValue, 5)
- def testErrors(self):
+ def test_errors(self):
self.assertRaises(TypeError, GObject.Property, type='str')
self.assertRaises(TypeError, GObject.Property, nick=False)
self.assertRaises(TypeError, GObject.Property, blurb=False)
@@ -483,18 +483,18 @@ class TestProperty(unittest.TestCase):
self.assertRaises(TypeError, GObject.Property, type=complex)
self.assertRaises(TypeError, GObject.Property, flags=-10)
- def testDefaults(self):
+ def test_defaults(self):
GObject.Property(type=bool, default=True)
GObject.Property(type=bool, default=False)
- def testNameWithUnderscore(self):
+ def test_name_with_underscore(self):
class C(GObject.GObject):
prop_name = GObject.Property(type=int)
o = C()
o.prop_name = 10
self.assertEqual(o.prop_name, 10)
- def testRange(self):
+ def test_range(self):
maxint64 = 2 ** 62 - 1
minint64 = -2 ** 62 - 1
maxuint64 = 2 ** 63 - 1
@@ -525,7 +525,7 @@ class TestProperty(unittest.TestCase):
GObject.Property, type=gtype, minimum=min,
maximum=max + 1)
- def testMinMax(self):
+ def test_min_max(self):
class C(GObject.GObject):
prop_int = GObject.Property(type=int, minimum=1, maximum=100, default=1)
prop_float = GObject.Property(type=float, minimum=0.1, maximum=10.5, default=1.1)
@@ -562,7 +562,7 @@ class TestProperty(unittest.TestCase):
finally:
GLib.log_set_always_fatal(old_mask)
- def testMultipleInstances(self):
+ def test_multiple_instances(self):
class C(GObject.GObject):
prop = GObject.Property(type=str, default='default')
@@ -574,7 +574,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(o1.prop, 'value')
self.assertEqual(o2.prop, 'default')
- def testObjectProperty(self):
+ def test_object_property(self):
class PropertyObject(GObject.GObject):
obj = GObject.Property(type=GObject.GObject)
@@ -587,7 +587,7 @@ class TestProperty(unittest.TestCase):
pobj1 = pobj2.obj
self.assertEqual(hash(pobj1), obj1_hash)
- def testObjectSubclassProperty(self):
+ def test_object_subclass_property(self):
class ObjectSubclass(GObject.GObject):
__gtype_name__ = 'ObjectSubclass'
@@ -596,7 +596,7 @@ class TestProperty(unittest.TestCase):
PropertyObjectSubclass(obj=ObjectSubclass())
- def testPropertySubclass(self):
+ def test_property_subclass(self):
# test for #470718
class A(GObject.GObject):
prop1 = GObject.Property(type=int)
@@ -610,7 +610,19 @@ class TestProperty(unittest.TestCase):
b.prop1 = 20
self.assertEqual(b.prop1, 20)
- def testPropertySubclassCustomSetter(self):
+ def test_property_subclass_c(self):
+ class A(GIMarshallingTests.PropertiesObject):
+ prop1 = GObject.Property(type=int)
+
+ a = A()
+ a.prop1 = 10
+ self.assertEqual(a.prop1, 10)
+
+ # also has parent properties
+ a.props.some_int = 20
+ self.assertEqual(a.props.some_int, 20)
+
+ def test_property_subclass_custom_setter(self):
# test for #523352
class A(GObject.GObject):
def get_first(self):
@@ -632,7 +644,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(b.second, 'second')
self.assertRaises(TypeError, setattr, b, 'second', 'foo')
- def testPropertySubclassCustomSetterError(self):
+ def test_property_subclass_custom_setter_error(self):
try:
class A(GObject.GObject):
def get_first(self):
@@ -655,7 +667,7 @@ class TestProperty(unittest.TestCase):
# Bug 644039
- def testReferenceCount(self):
+ def test_reference_count(self):
# We can check directly if an object gets finalized, so we will
# observe it indirectly through the refcount of a member object.
@@ -676,7 +688,7 @@ class TestProperty(unittest.TestCase):
del t
self.assertEqual(sys.getrefcount(o), rc)
- def testDocStringAsBlurb(self):
+ def test_doc_string_as_blurb(self):
class C(GObject.GObject):
@GObject.Property
def blurbed(self):
@@ -685,7 +697,7 @@ class TestProperty(unittest.TestCase):
self.assertEqual(C.blurbed.blurb, 'blurbed doc string')
- def testPythonToGLibTypeMapping(self):
+ def test_python_to_glib_type_mapping(self):
tester = GObject.Property()
self.assertEqual(tester._type_from_python(int), GObject.TYPE_INT)
if sys.version_info < (3, 0):
diff --git a/tests/test_signal.py b/tests/test_signal.py
index 2002c18..3b70318 100644
--- a/tests/test_signal.py
+++ b/tests/test_signal.py
@@ -79,14 +79,14 @@ class TestGSignalsError(unittest.TestCase):
class TestGPropertyError(unittest.TestCase):
- def testInvalidType(self, *args):
+ def test_invalid_type(self, *args):
def foo():
class Foo(GObject.GObject):
__gproperties__ = None
self.assertRaises(TypeError, foo)
gc.collect()
- def testInvalidName(self, *args):
+ def test_invalid_name(self, *args):
def foo():
class Foo(GObject.GObject):
__gproperties__ = {None: None}
@@ -96,7 +96,7 @@ class TestGPropertyError(unittest.TestCase):
class TestList(unittest.TestCase):
- def testListObject(self):
+ def test_list_names(self):
self.assertEqual(GObject.signal_list_names(C), ('my-signal',))
@@ -120,7 +120,7 @@ class Foo(GObject.GObject):
class TestAccumulator(unittest.TestCase):
- def testAccumulator(self):
+ def test_accumulator(self):
inst = Foo()
inst.connect("my-acc-signal", lambda obj: 1)
inst.connect("my-acc-signal", lambda obj: 2)
@@ -131,7 +131,7 @@ class TestAccumulator(unittest.TestCase):
retval = inst.emit("my-acc-signal")
self.assertEqual(retval, 3)
- def testAccumulatorTrueHandled(self):
+ def test_accumulator_true_handled(self):
inst = Foo()
inst.connect("my-other-acc-signal", self._true_handler1)
inst.connect("my-other-acc-signal", self._true_handler2)
@@ -181,7 +181,7 @@ class F(GObject.GObject):
class TestEmissionHook(unittest.TestCase):
- def testAdd(self):
+ def test_add(self):
self.hook = True
e = E()
e.connect('signal', self._callback)
@@ -189,7 +189,7 @@ class TestEmissionHook(unittest.TestCase):
e.emit('signal')
self.assertEqual(e.status, 3)
- def testRemove(self):
+ def test_remove(self):
self.hook = False
e = E()
e.connect('signal', self._callback)
@@ -209,7 +209,7 @@ class TestEmissionHook(unittest.TestCase):
self.assertEqual(e.status, 1)
e.status = 3
- def testCallbackReturnFalse(self):
+ def test_callback_return_false(self):
self.hook = False
obj = F()
@@ -221,7 +221,7 @@ class TestEmissionHook(unittest.TestCase):
obj.emit('signal')
self.assertEqual(obj.status, 3)
- def testCallbackReturnTrue(self):
+ def test_callback_return_true(self):
self.hook = False
obj = F()
@@ -234,7 +234,7 @@ class TestEmissionHook(unittest.TestCase):
GObject.remove_emission_hook(obj, "signal", hook_id)
self.assertEqual(obj.status, 4)
- def testCallbackReturnTrueButRemove(self):
+ def test_callback_return_true_but_remove(self):
self.hook = False
obj = F()
@@ -255,21 +255,21 @@ class TestClosures(unittest.TestCase):
def _callback(self, e):
self.count += 1
- def testDisconnect(self):
+ def test_disconnect(self):
e = E()
e.connect('signal', self._callback)
e.disconnect_by_func(self._callback)
e.emit('signal')
self.assertEqual(self.count, 0)
- def testHandlerBlock(self):
+ def test_handler_block(self):
e = E()
e.connect('signal', self._callback)
e.handler_block_by_func(self._callback)
e.emit('signal')
self.assertEqual(self.count, 0)
- def testHandlerUnBlock(self):
+ def test_handler_unblock(self):
e = E()
signal_id = e.connect('signal', self._callback)
e.handler_block(signal_id)
@@ -277,7 +277,7 @@ class TestClosures(unittest.TestCase):
e.emit('signal')
self.assertEqual(self.count, 1)
- def testHandlerBlockMethod(self):
+ def test_handler_block_method(self):
# Filed as #375589
class A:
def __init__(self):
@@ -337,29 +337,27 @@ class SigPropClass(GObject.GObject):
class TestSigProp(unittest.TestCase):
- def testEmitInPropertySetter(self):
+ def test_emit_in_property_setter(self):
obj = SigPropClass()
self.assertFalse(obj.signal_emission_failed)
-f = GObject.SignalFlags.RUN_FIRST
-l = GObject.SignalFlags.RUN_LAST
-gfloat = GObject.TYPE_FLOAT
-gdouble = GObject.TYPE_DOUBLE
-guint = GObject.TYPE_UINT
-gulong = GObject.TYPE_ULONG
-
class CM(GObject.GObject):
__gsignals__ = dict(
- test1=(f, None, ()),
- test2=(l, None, (str,)),
- test3=(l, int, (gdouble,)),
- test4=(f, None, (bool, _long, gfloat, gdouble, int, guint, gulong)),
- test_float=(l, gfloat, (gfloat,)),
- test_double=(l, gdouble, (gdouble, )),
- test_string=(l, str, (str, )),
- test_object=(l, object, (object, )),
- test_paramspec=(l, GObject.ParamSpec, ()),
+ test1=(GObject.SignalFlags.RUN_FIRST, None, ()),
+ test2=(GObject.SignalFlags.RUN_LAST, None, (str,)),
+ test3=(GObject.SignalFlags.RUN_LAST, int, (GObject.TYPE_DOUBLE,)),
+ test4=(GObject.SignalFlags.RUN_FIRST, None,
+ (bool, _long, GObject.TYPE_FLOAT, GObject.TYPE_DOUBLE, int,
+ GObject.TYPE_UINT, GObject.TYPE_ULONG)),
+ test_float=(GObject.SignalFlags.RUN_LAST, GObject.TYPE_FLOAT, (GObject.TYPE_FLOAT,)),
+ test_double=(GObject.SignalFlags.RUN_LAST, GObject.TYPE_DOUBLE, (GObject.TYPE_DOUBLE,)),
+ test_int64=(GObject.SignalFlags.RUN_LAST, GObject.TYPE_INT64, (GObject.TYPE_INT64,)),
+ test_string=(GObject.SignalFlags.RUN_LAST, str, (str,)),
+ test_object=(GObject.SignalFlags.RUN_LAST, object, (object,)),
+ test_paramspec=(GObject.SignalFlags.RUN_LAST, GObject.ParamSpec, ()),
+ test_gvalue=(GObject.SignalFlags.RUN_LAST, GObject.Value, (GObject.Value,)),
+ test_gvalue_ret=(GObject.SignalFlags.RUN_LAST, GObject.Value, (GObject.TYPE_GTYPE,)),
)
testprop = GObject.Property(type=int)
@@ -370,41 +368,51 @@ class _TestCMarshaller:
self.obj = CM()
testhelper.connectcallbacks(self.obj)
- def testTest1(self):
+ def test_test1(self):
self.obj.emit("test1")
- def testTest2(self):
+ def test_test2(self):
self.obj.emit("test2", "string")
- def testTest3(self):
+ def test_test3(self):
rv = self.obj.emit("test3", 42.0)
self.assertEqual(rv, 20)
- def testTest4(self):
+ def test_test4(self):
self.obj.emit("test4", True, _long(10), 3.14, 1.78, 20, _long(30), _long(31))
- def testTestReturnFloat(self):
+ def test_float(self):
rv = self.obj.emit("test-float", 1.234)
self.assertTrue(rv >= 1.233999 and rv <= 1.2400001, rv)
- def testTestReturnDouble(self):
+ def test_double(self):
rv = self.obj.emit("test-double", 1.234)
self.assertEqual(rv, 1.234)
- def testTestReturnString(self):
+ def test_int64(self):
+ rv = self.obj.emit("test-int64", 102030405)
+ self.assertEqual(rv, 102030405)
+
+ rv = self.obj.emit("test-int64", GObject.G_MAXINT64)
+ self.assertEqual(rv, GObject.G_MAXINT64 - 1)
+
+ rv = self.obj.emit("test-int64", GObject.G_MININT64)
+ self.assertEqual(rv, GObject.G_MININT64)
+
+ def test_string(self):
rv = self.obj.emit("test-string", "str")
self.assertEqual(rv, "str")
- def testTestReturnObject(self):
+ def test_object(self):
rv = self.obj.emit("test-object", self)
self.assertEqual(rv, self)
- def testTestReturnParamSpec(self):
+ def test_paramspec(self):
rv = self.obj.emit("test-paramspec")
self.assertEqual(rv.name, "test-param")
self.assertEqual(rv.nick, "test")
- def testTestParamSpecArgFromC(self):
+ def test_C_paramspec(self):
self.notify_called = False
def cb_notify(obj, prop):
@@ -416,6 +424,58 @@ class _TestCMarshaller:
self.obj.set_property("testprop", 42)
self.assertTrue(self.notify_called)
+ def test_gvalue(self):
+ # implicit int
+ rv = self.obj.emit("test-gvalue", 42)
+ self.assertEqual(rv, 42)
+
+ # explicit float
+ v = GObject.Value()
+ v.init(GObject.TYPE_FLOAT)
+ v.set_float(1.234)
+ rv = self.obj.emit("test-gvalue", v)
+ self.assertAlmostEqual(rv, 1.234, 4)
+
+ # implicit float
+ rv = self.obj.emit("test-gvalue", 1.234)
+ self.assertAlmostEqual(rv, 1.234, 4)
+
+ # explicit int64
+ v = GObject.Value()
+ v.init(GObject.TYPE_INT64)
+ v.set_int64(GObject.G_MAXINT64)
+ rv = self.obj.emit("test-gvalue", v)
+ self.assertEqual(rv, GObject.G_MAXINT64)
+
+ # implicit int64
+ # does not work, see https://bugzilla.gnome.org/show_bug.cgi?id=683775
+ #rv = self.obj.emit("test-gvalue", GObject.G_MAXINT64)
+ #self.assertEqual(rv, GObject.G_MAXINT64)
+
+ # explicit uint64
+ v = GObject.Value()
+ v.init(GObject.TYPE_UINT64)
+ v.set_uint64(GObject.G_MAXUINT64)
+ rv = self.obj.emit("test-gvalue", v)
+ self.assertEqual(rv, GObject.G_MAXUINT64)
+
+ # implicit uint64
+ # does not work, see https://bugzilla.gnome.org/show_bug.cgi?id=683775
+ #rv = self.obj.emit("test-gvalue", GObject.G_MAXUINT64)
+ #self.assertEqual(rv, GObject.G_MAXUINT64)
+
+ def test_gvalue_ret(self):
+ self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_INT),
+ GObject.G_MAXINT)
+ self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_UINT),
+ GObject.G_MAXUINT)
+ self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_INT64),
+ GObject.G_MAXINT64)
+ self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_UINT64),
+ GObject.G_MAXUINT64)
+ self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_STRING),
+ "hello")
+
if 'generic-c-marshaller' in GObject.features:
class TestCMarshaller(_TestCMarshaller, unittest.TestCase):
pass
@@ -428,7 +488,7 @@ else:
class TestPyGValue(unittest.TestCase):
- def testNoneNULLBoxedConversion(self):
+ def test_none_null_boxed_conversion(self):
class C(GObject.GObject):
__gsignals__ = dict(my_boxed_signal=(
GObject.SignalFlags.RUN_LAST,
@@ -476,7 +536,7 @@ class TestSignalDecorator(unittest.TestCase):
def onUnnamed(self, obj):
self.unnamedCalled = True
- def testGetSignalArgs(self):
+ def test_get_signal_args(self):
self.assertEqual(self.Decorated.pushed.get_signal_args(),
(GObject.SignalFlags.RUN_FIRST, None, tuple()))
self.assertEqual(self.Decorated.pulled.get_signal_args(),
@@ -484,7 +544,7 @@ class TestSignalDecorator(unittest.TestCase):
self.assertEqual(self.Decorated.stomped.get_signal_args(),
(GObject.SignalFlags.RUN_FIRST, None, (int,)))
- def testClosuresCalled(self):
+ def test_closures_called(self):
decorated = self.Decorated()
self.assertEqual(decorated.value, 0)
decorated.pushed.emit()
@@ -492,7 +552,7 @@ class TestSignalDecorator(unittest.TestCase):
decorated.pulled.emit()
self.assertEqual(decorated.value, 0)
- def testSignalCopy(self):
+ def test_signal_copy(self):
blah = self.Decorated.stomped.copy('blah')
self.assertEqual(str(blah), blah)
self.assertEqual(blah.func, self.Decorated.stomped.func)
@@ -501,23 +561,23 @@ class TestSignalDecorator(unittest.TestCase):
self.assertEqual(blah.arg_types, self.Decorated.stomped.arg_types)
self.assertEqual(blah.__doc__, self.Decorated.stomped.__doc__)
- def testDocString(self):
+ def test_doc_string(self):
# Test the two techniques for setting doc strings on the signals
# class variables, through the "doc" keyword or as the getter doc string.
self.assertEqual(self.Decorated.stomped.__doc__, 'this will stomp')
self.assertEqual(self.Decorated.pushed.__doc__, 'this will push')
- def testUnnamedSignalGetsNamed(self):
+ def test_unnamed_signal_gets_named(self):
self.assertEqual(str(self.Decorated.unnamed), 'unnamed')
- def testUnnamedSignalGetsCalled(self):
+ def test_unnamed_signal_gets_called(self):
obj = self.Decorated()
obj.connect('unnamed', self.onUnnamed)
self.assertEqual(self.unnamedCalled, False)
obj.emit('unnamed')
self.assertEqual(self.unnamedCalled, True)
- def NOtestOverriddenSignal(self):
+ def NOtest_overridden_signal(self):
# Test that the pushed signal is called in with super and the override
# which should both increment the "value" to 3
obj = self.DecoratedOverride()
@@ -542,14 +602,14 @@ class TestSignalConnectors(unittest.TestCase):
self.obj = None
self.value = None
- def onClicked(self, obj, value):
+ def on_clicked(self, obj, value):
self.obj = obj
self.value = value
- def testSignalEmit(self):
+ def test_signal_emit(self):
# standard callback connection with different forms of emit.
obj = self.CustomButton()
- obj.connect('clicked', self.onClicked)
+ obj.connect('clicked', self.on_clicked)
# vanilla
obj.emit('clicked', 1)
@@ -578,16 +638,16 @@ class TestSignalConnectors(unittest.TestCase):
self.assertEqual(obj, self.obj)
self.assertEqual(self.value, 1)
- def testSignalClassConnect(self):
+ def test_signal_class_connect(self):
obj = self.CustomButton()
- obj.connect(self.CustomButton.clicked, self.onClicked)
+ obj.connect(self.CustomButton.clicked, self.on_clicked)
obj.emit('clicked', 2)
self.assertEqual(obj, self.obj)
self.assertEqual(self.value, 2)
- def testSignalBoundConnect(self):
+ def test_signal_bound_connect(self):
obj = self.CustomButton()
- obj.clicked.connect(self.onClicked)
+ obj.clicked.connect(self.on_clicked)
obj.emit('clicked', 3)
self.assertEqual(obj, self.obj)
self.assertEqual(self.value, 3)
@@ -616,7 +676,7 @@ class TestPython3Signals(unittest.TestCase):
self.assertTrue('AnnotatedSignalClass' in globals())
self.AnnotatedClass = globals()['AnnotatedSignalClass']
- def testAnnotations(self):
+ def test_annotations(self):
if self.AnnotatedClass:
self.assertEqual(signalhelper.get_signal_annotations(self.AnnotatedClass.sig1.func),
(None, (int, float)))
diff --git a/tests/testhelpermodule.c b/tests/testhelpermodule.c
index cd178a1..608b8b1 100644
--- a/tests/testhelpermodule.c
+++ b/tests/testhelpermodule.c
@@ -322,6 +322,16 @@ test_double_callback (GObject *object, double d)
return d;
}
+static gint64 *
+test_int64_callback (GObject *object, gint64 i)
+{
+ g_return_val_if_fail (G_IS_OBJECT (object), -1);
+
+ if (i == G_MAXINT64)
+ return i-1;
+ return i;
+}
+
static char *
test_string_callback (GObject *object, char *s)
{
@@ -347,6 +357,51 @@ test_paramspec_callback (GObject *object)
return g_param_spec_boolean ("test-param", "test", "test boolean", TRUE, G_PARAM_READABLE);
}
+static GValue *
+test_gvalue_callback (GObject *object, const GValue *v)
+{
+ GValue *ret = g_malloc0 (sizeof (GValue));
+
+ g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+ g_return_val_if_fail (G_IS_VALUE (v), NULL);
+
+ g_value_init (ret, G_VALUE_TYPE (v));
+ g_value_copy (v, ret);
+ return ret;
+}
+
+static GValue *
+test_gvalue_ret_callback (GObject *object, GType type)
+{
+ GValue *ret = g_malloc0 (sizeof (GValue));
+
+ g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+
+ g_value_init (ret, type);
+
+ switch (type) {
+ case G_TYPE_INT:
+ g_value_set_int(ret, G_MAXINT);
+ break;
+ case G_TYPE_INT64:
+ g_value_set_int64(ret, G_MAXINT64);
+ break;
+ case G_TYPE_UINT:
+ g_value_set_uint(ret, G_MAXUINT);
+ break;
+ case G_TYPE_UINT64:
+ g_value_set_uint64(ret, G_MAXUINT64);
+ break;
+ case G_TYPE_STRING:
+ g_value_set_string(ret, "hello");
+ break;
+ default:
+ g_critical ("test_gvalue_ret_callback() does not support type %s", g_type_name (type));
+ }
+
+ return ret;
+}
+
static void
connectcallbacks (GObject *object)
{
@@ -382,6 +437,10 @@ connectcallbacks (GObject *object)
G_CALLBACK (test_double_callback),
NULL);
g_signal_connect (G_OBJECT (object),
+ "test_int64",
+ G_CALLBACK (test_int64_callback),
+ NULL);
+ g_signal_connect (G_OBJECT (object),
"test_string",
G_CALLBACK (test_string_callback),
NULL);
@@ -393,6 +452,14 @@ connectcallbacks (GObject *object)
"test_paramspec",
G_CALLBACK (test_paramspec_callback),
NULL);
+ g_signal_connect (G_OBJECT (object),
+ "test_gvalue",
+ G_CALLBACK (test_gvalue_callback),
+ NULL);
+ g_signal_connect (G_OBJECT (object),
+ "test_gvalue_ret",
+ G_CALLBACK (test_gvalue_ret_callback),
+ NULL);
}
static PyObject *