File migrate-to-python3.patch of Package python3-gtk

diff -Nur pygtk-2.24.0/examples/glade/autoconnect.py pygtk-2.24.0-new/examples/glade/autoconnect.py
--- pygtk-2.24.0/examples/glade/autoconnect.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/glade/autoconnect.py	2018-02-08 10:40:55.610363213 +0800
@@ -13,7 +13,7 @@
         xml.signal_autoconnect(self)
 
     def on_button1_clicked(self, button):
-        print 'foo!'
+        print('foo!')
 
 test = SimpleTest()
 gtk.main()
diff -Nur pygtk-2.24.0/examples/gobject/editable-interface.py pygtk-2.24.0-new/examples/gobject/editable-interface.py
--- pygtk-2.24.0/examples/gobject/editable-interface.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gobject/editable-interface.py	2018-02-08 10:40:55.634362616 +0800
@@ -11,7 +11,7 @@
         self.set_text(text)
 
     def do_do_delete_text(self, start_pos, end_pos):
-        print "do_do_delete_text", start_pos, end_pos
+        print("do_do_delete_text", start_pos, end_pos)
         gtk.Entry.do_do_delete_text(self, start_pos, end_pos)
 
 gobject.type_register(EditableLabel)
diff -Nur pygtk-2.24.0/examples/gobject/properties.py pygtk-2.24.0-new/examples/gobject/properties.py
--- pygtk-2.24.0/examples/gobject/properties.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gobject/properties.py	2018-02-08 10:40:55.654362118 +0800
@@ -14,32 +14,32 @@
         self.__gobject_init__()
         self.foo = 'bar'
     def do_set_property(self, pspec, value):
-        print '    do_set_property called for %s=%r' % (pspec.name, value)
+        print('    do_set_property called for %s=%r' % (pspec.name, value))
         if pspec.name == 'foo':
             self.foo = value
         else:
-            raise AttributeError, 'unknown property %s' % pspec.name
+            raise AttributeError('unknown property %s' % pspec.name)
     def do_get_property(self, pspec):
-        print '    do_get_property called for %s' % pspec.name
+        print('    do_get_property called for %s' % pspec.name)
         if pspec.name == 'foo':
             return self.foo
         elif pspec.name == 'boolprop':
             return 1
         else:
-            raise AttributeError, 'unknown property %s' % pspec.name
+            raise AttributeError('unknown property %s' % pspec.name)
 gobject.type_register(MyObject)
 
-print "MyObject properties: ", gobject.list_properties(MyObject)
+print("MyObject properties: ", gobject.list_properties(MyObject))
 obj = MyObject()
 
 val = obj.get_property('foo')
-print "obj.get_property('foo') == ", val
+print("obj.get_property('foo') == ", val)
 
 obj.set_property('foo', 'spam')
-print "obj.set_property('foo', 'spam')"
+print("obj.set_property('foo', 'spam')")
 
 val = obj.get_property('foo')
-print "obj.get_property('foo') == ", val
+print("obj.get_property('foo') == ", val)
 
 val = obj.get_property('boolprop')
-print "obj.get_property('boolprop') == ", val
+print("obj.get_property('boolprop') == ", val)
diff -Nur pygtk-2.24.0/examples/gobject/signal.py pygtk-2.24.0-new/examples/gobject/signal.py
--- pygtk-2.24.0/examples/gobject/signal.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gobject/signal.py	2018-02-08 10:40:55.666361821 +0800
@@ -10,16 +10,16 @@
     def __init__(self):
         self.__gobject_init__() # default constructor using our new GType
     def do_my_signal(self, arg):
-        print "C: class closure for `my_signal' called with argument", arg
+        print("C: class closure for `my_signal' called with argument", arg)
 
 class D(C):
     def do_my_signal(self, arg):
-        print "D: class closure for `my_signal' called.  Chaining up to C"
+        print("D: class closure for `my_signal' called.  Chaining up to C")
         C.do_my_signal(self, arg)
 
 def my_signal_handler(object, arg, *extra):
-    print "handler for `my_signal' called with argument", arg, \
-          "and extra args", extra
+    print("handler for `my_signal' called with argument", arg, \
+          "and extra args", extra)
 
 inst = C()
 inst2 = D()
diff -Nur pygtk-2.24.0/examples/gtk/bin.py pygtk-2.24.0-new/examples/gtk/bin.py
--- pygtk-2.24.0/examples/gtk/bin.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gtk/bin.py	2018-02-08 10:40:55.738360031 +0800
@@ -29,5 +29,5 @@
 label = gtk.Label()
 c = Bin()
 c.add(label)
-print c.get_children()
+print(c.get_children())
 c.remove(label)
diff -Nur pygtk-2.24.0/examples/gtk/customtreemodel.py pygtk-2.24.0-new/examples/gtk/customtreemodel.py
--- pygtk-2.24.0/examples/gtk/customtreemodel.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gtk/customtreemodel.py	2018-02-08 10:40:55.814358142 +0800
@@ -22,7 +22,7 @@
 
         # This is only needed to make the model gc-safe, since
         # leak_references is False.
-        self.__iters = range(0, len(values))
+        self.__iters = list(range(0, len(values)))
 
     def on_get_n_columns(self):
         return 0
diff -Nur pygtk-2.24.0/examples/gtk/filechooser.py pygtk-2.24.0-new/examples/gtk/filechooser.py
--- pygtk-2.24.0/examples/gtk/filechooser.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gtk/filechooser.py	2018-02-08 10:40:55.830357744 +0800
@@ -29,7 +29,7 @@
 
 response = dialog.run()
 if response == gtk.RESPONSE_OK:
-    print dialog.get_filename(), 'selected'
+    print(dialog.get_filename(), 'selected')
 elif response == gtk.RESPONSE_CANCEL:
-    print 'Closed, no files selected'
+    print('Closed, no files selected')
 dialog.destroy()
diff -Nur pygtk-2.24.0/examples/gtk/widget.py pygtk-2.24.0-new/examples/gtk/widget.py
--- pygtk-2.24.0/examples/gtk/widget.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/gtk/widget.py	2018-02-08 10:40:56.070351779 +0800
@@ -8,7 +8,7 @@
 from gtk import gdk
 
 if gtk.pygtk_version < (2, 8):
-    print "PyGtk 2.8 or later required for this example"
+    print("PyGtk 2.8 or later required for this example")
     raise SystemExit
 
 try:
diff -Nur pygtk-2.24.0/examples/ide/browse.py pygtk-2.24.0-new/examples/ide/browse.py
--- pygtk-2.24.0/examples/ide/browse.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/ide/browse.py	2018-02-08 10:40:56.110350785 +0800
@@ -62,7 +62,7 @@
             return True
         citer = model.iter_children(riter)
         model.remove(citer)
-        keylist = dict.keys()
+        keylist = list(dict.keys())
         keylist.sort()
         for key in keylist:
             obj = dict[key]
diff -Nur pygtk-2.24.0/examples/ide/gtkcons.py pygtk-2.24.0-new/examples/ide/gtkcons.py
--- pygtk-2.24.0/examples/ide/gtkcons.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/ide/gtkcons.py	2018-02-08 10:40:56.330345316 +0800
@@ -64,7 +64,7 @@
 
 def bracketsBalanced(s):
     '''Returns true iff the brackets in s are balanced'''
-    s = filter(lambda x: x in '()[]{}', s)
+    s = [x for x in s if x in '()[]{}']
     stack = []
     brackets = {'(':')', '[':']', '{':'}'}
     while len(s) != 0:
@@ -106,8 +106,8 @@
             self.__b.insert_with_tags(iter, s, self.__font)
         self.__w.scroll_to_mark(self.__ins, 0.0)
         self.__w.queue_draw()
-    def seek(self, a):   raise IOError, (29, 'Illegal seek')
-    def tell(self):      raise IOError, (29, 'Illegal seek')
+    def seek(self, a):   raise IOError(29, 'Illegal seek')
+    def tell(self):      raise IOError(29, 'Illegal seek')
     truncate = tell
 
 class Console(gtk.VBox):
@@ -288,9 +288,9 @@
             try:
                 r = eval(cmd, self.namespace, self.namespace)
                 if r is not None:
-                    print `r`
+                    print(repr(r))
             except SyntaxError:
-                exec cmd in self.namespace
+                exec(cmd, self.namespace)
         except:
             if hasattr(sys, 'last_type') and \
                             sys.last_type == SystemExit:
diff -Nur pygtk-2.24.0/examples/ide/gtkdb.py pygtk-2.24.0-new/examples/ide/gtkdb.py
--- pygtk-2.24.0/examples/ide/gtkdb.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/ide/gtkdb.py	2018-02-08 10:40:56.486341439 +0800
@@ -2,7 +2,7 @@
 
 import sys
 import bdb
-import repr
+import reprlib
 import string
 import linecache # for linecache.getlines(filename)
 import pygtk
@@ -256,14 +256,15 @@
             func = frame.f_code.co_name
         else:
             func = "<lambda>"
-        self.set_status(func + " returned " + repr.repr(return_value))
+        self.set_status(func + " returned " + reprlib.repr(return_value))
         self.interaction(frame, None)
-    def user_exception(self, frame, (exc_type, exc_value, exc_traceback)):
+    def user_exception(self, frame, xxx_todo_changeme):
+        (exc_type, exc_value, exc_traceback) = xxx_todo_changeme
         frame.f_locals['__exception__'] = exc_type, exc_value
         if type(exc_type) == type(''):
             exc_type_name = exc_type
         else: exc_type_name = exc_type.__name__
-        self.set_status(exc_type_name + ':' + repr.repr(exc_value))
+        self.set_status(exc_type_name + ':' + reprlib.repr(exc_value))
         self.interaction(frame, exc_traceback)
 
     def interaction(self, frame, traceback):
@@ -289,10 +290,10 @@
         model = self.vardisp.get_model()
         model.clear()
         locals = self.curframe.f_locals
-        self.vardisp.varnames = locals.keys()
+        self.vardisp.varnames = list(locals.keys())
         self.vardisp.varnames.sort()
         for var in self.vardisp.varnames:
-            row = [var, type(locals[var]).__name__, repr.repr(locals[var])]
+            row = [var, type(locals[var]).__name__, reprlib.repr(locals[var])]
             model.append(row)
         self.vardisp.get_selection().select_path(0)
         return
@@ -357,20 +358,20 @@
         globals['__privileged__'] = 1
         try:
             code = compile(line + '\n', '<stdin>', 'single')
-            exec code in globals, locals
+            exec(code, globals, locals)
         except:
-            if type(sys.exc_type) == type(''):
-                exc_type_name = sys.exc_type
+            if type(sys.exc_info()[0]) == type(''):
+                exc_type_name = sys.exc_info()[0]
             else: exc_type_name = sys.exc_type.__name__
             self.set_status('*** ' + exc_type_name + ': ' +
-                            str(sys.exc_value))
+                            str(sys.exc_info()[1]))
             return
         self.update_var_listing()
         return
     def do_edit(self, _b=None):
         locals = self.curframe.f_locals
         varname = self.vardisp.varnames[self.vardisp.selected]
-        val = repr.repr(locals[varname])
+        val = reprlib.repr(locals[varname])
         value = dialogs.InputBox("Edit Variable",
                                  "Enter new value for " + varname + ":",
                                  self, val)
@@ -381,16 +382,16 @@
             val = eval(value, globals, locals)
             self.curframe.f_locals[varname] = val
         except:
-            if type(sys.exc_type) == type(''):
-                exc_type_name = sys.exc_type
+            if type(sys.exc_info()[0]) == type(''):
+                exc_type_name = sys.exc_info()[0]
             else: exc_type_name = sys.exc_type.__name__
             self.set_status('*** ' + exc_type_name + ': ' +
-                            str(sys.exc_value))
+                            str(sys.exc_info()[1]))
             return
         row = self.vardisp.selected
         model = self.vardisp.get_model()
         model[row][1] = type(val).__name__
-        model[row][2] = repr.repr(val)
+        model[row][2] = reprlib.repr(val)
 
 # this makes up the interface that is compatible with pdb.
 def run(statement, globals=None, locals=None):
@@ -406,7 +407,7 @@
 def runcall(*args):
     win = PyGTKDb()
     win.show()
-    return apply(win.runcall, args)
+    return win.runcall(*args)
 
 def set_trace():
     win = PyGTKDb()
@@ -425,7 +426,7 @@
 if __name__ == '__main__':
     import os
     if not sys.argv[1:]:
-        print "usage: gtkdb.py scriptfile [args ...]"
+        print("usage: gtkdb.py scriptfile [args ...]")
         sys.exit(2)
     filename = sys.argv[1]
     del sys.argv[0] # delete gtkdb.py
diff -Nur pygtk-2.24.0/examples/ide/gtkprof.py pygtk-2.24.0-new/examples/ide/gtkprof.py
--- pygtk-2.24.0/examples/ide/gtkprof.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/ide/gtkprof.py	2018-02-08 10:40:56.534340245 +0800
@@ -19,9 +19,9 @@
         self.add(box1)
         box1.show()
 
-        text = `stats.total_calls` + " function calls "
+        text = repr(stats.total_calls) + " function calls "
         if stats.total_calls != stats.prim_calls:
-            text = text + "( " + `stats.prim_calls` + " primitive calls) "
+            text = text + "( " + repr(stats.prim_calls) + " primitive calls) "
         text = text + "in " + fpformat.fix(stats.total_tt, 3) + " CPU seconds"
         label = gtk.Label(text)
         label.set_padding(2, 2)
@@ -78,7 +78,7 @@
         if self.stats.fcn_list:
             return self.stats.fcn_list[:]
         else:
-            return self.stats.stats.keys()
+            return list(self.stats.stats.keys())
 
     def insert_stats(self):
         list = self.get_stats_list()
@@ -87,9 +87,9 @@
             model = self.list.get_model()
             for func in list:
                 cc,nc,tt,ct,callers = self.stats.stats[func]
-                row[0] = `nc`
+                row[0] = repr(nc)
                 if nc != cc:
-                    row[0] = row[0] + '/' + `cc`
+                    row[0] = row[0] + '/' + repr(cc)
                 row[1] = fpformat.fix(tt, 3)
                 if nc == 0:
                     row[2] = ''
@@ -101,7 +101,7 @@
                 else:
                     row[4] = fpformat.fix(ct/cc, 3)
                 file,line,name = func
-                row[5] = file + ":" + `line` + "(" + name + \
+                row[5] = file + ":" + repr(line) + "(" + name + \
                          ")"
                 self.list.get_model().append(row)
         return
@@ -124,7 +124,7 @@
 if __name__ == '__main__':
     import sys, os
     if not sys.argv[1:]:
-        print "usage: gtkprof.py scriptfile [args ...]"
+        print("usage: gtkprof.py scriptfile [args ...]")
         sys.exit(2)
     filename = sys.argv[1]
     del sys.argv[0]
diff -Nur pygtk-2.24.0/examples/ide/pyide.py pygtk-2.24.0-new/examples/ide/pyide.py
--- pygtk-2.24.0/examples/ide/pyide.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/ide/pyide.py	2018-02-08 10:40:56.622338058 +0800
@@ -127,7 +127,7 @@
         if dir not in sys.path: sys.path.insert(0, dir)
         if   string.lower(base[-3:]) == '.py':  base = base[:-3]
         elif string.lower(base[-4:]) == '.pyc': base = base[:-4]
-        if not sys.modules.has_key(base):
+        if base not in sys.modules:
             self.interp.run('import ' + base)
         else:
             self.interp.run('import ' + base)
@@ -225,7 +225,7 @@
         self.interp.line.delete_selection()
         return
     def python_reload(self, mi=None):
-        print "python_reload"
+        print("python_reload")
         return
     def python_run(self, mi=None):
         fname = dialogs.OpenFile("Run", self)
diff -Nur pygtk-2.24.0/examples/pango/extentdemo.py pygtk-2.24.0-new/examples/pango/extentdemo.py
--- pygtk-2.24.0/examples/pango/extentdemo.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pango/extentdemo.py	2018-02-08 10:40:56.694336269 +0800
@@ -8,7 +8,7 @@
 # I, Behdad Esfahbod, hereby disclaim any rights for my contributions
 # to this code.
 
-from __future__ import division
+
 
 import sys
 import cairo
diff -Nur pygtk-2.24.0/examples/pango/pangocairo-simple.py pygtk-2.24.0-new/examples/pango/pangocairo-simple.py
--- pygtk-2.24.0/examples/pango/pangocairo-simple.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pango/pangocairo-simple.py	2018-02-08 10:40:56.718335672 +0800
@@ -43,7 +43,7 @@
 
 def main(argv):
     if len(argv) != 2:
-        print >> sys.stderr, "Usage: cairosimple OUTPUT_BASENAME\n"
+        print("Usage: cairosimple OUTPUT_BASENAME\n", file=sys.stderr)
         return 1
 
     filename = argv[1]
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/appwindow.py pygtk-2.24.0-new/examples/pygtk-demo/demos/appwindow.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/appwindow.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/appwindow.py	2018-02-08 10:40:56.950329905 +0800
@@ -13,13 +13,13 @@
   COLOR_RED,
   COLOR_GREEN,
   COLOR_BLUE
-) = range(3)
+) = list(range(3))
 
 (
   SHAPE_SQUARE,
   SHAPE_RECTANGLE,
   SHAPE_OVAL,
-) = range(3)
+) = list(range(3))
 
 ui_info = \
 '''<ui>
@@ -87,8 +87,8 @@
         icon_set = gtk.IconSet(transparent)
         factory.add('demo-gtk-logo', icon_set)
 
-    except gobject.GError, error:
-        print 'failed to load GTK logo for toolbar'
+    except gobject.GError as error:
+        print('failed to load GTK logo for toolbar')
 
 class ApplicationMainWindowDemo(gtk.Window):
     def __init__(self, parent=None):
@@ -111,8 +111,8 @@
 
         try:
             mergeid = merge.add_ui_from_string(ui_info)
-        except gobject.GError, msg:
-            print "building menus failed: %s" % msg
+        except gobject.GError as msg:
+            print("building menus failed: %s" % msg)
         bar = merge.get_widget("/MenuBar")
         bar.show()
 
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/changedisplay.py pygtk-2.24.0-new/examples/pygtk-demo/demos/changedisplay.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/changedisplay.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/changedisplay.py	2018-02-08 10:40:57.062327122 +0800
@@ -35,13 +35,13 @@
   DISPLAY_COLUMN_NAME,
   DISPLAY_COLUMN_DISPLAY,
   DISPLAY_NUM_COLUMNS
-) = range(3)
+) = list(range(3))
 
 (
   SCREEN_COLUMN_NUMBER,
   SCREEN_COLUMN_SCREEN,
   SCREEN_NUM_COLUMNS
-) = range(3)
+) = list(range(3))
 
 def find_toplevel_at_pointer(display):
     ''' Finds the toplevel window under the mouse pointer, if any.
@@ -300,7 +300,7 @@
             if response_id != gtk.RESPONSE_OK:
                 break;
             new_screen_name = display_entry.get_chars(0, -1)
-            print new_screen_name
+            print(new_screen_name)
             if new_screen_name != "":
                 result = gtk.gdk.Display(new_screen_name)
                 if result is None:
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/dnd.py pygtk-2.24.0-new/examples/pygtk-demo/demos/dnd.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/dnd.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/dnd.py	2018-02-08 10:40:57.190323940 +0800
@@ -10,7 +10,7 @@
 import gtk
 import gobject
 
-from dndpixmap import drag_icon_xpm, trashcan_open_xpm, trashcan_closed_xpm
+from .dndpixmap import drag_icon_xpm, trashcan_open_xpm, trashcan_closed_xpm
 
 TARGET_STRING = 0
 TARGET_ROOTWIN = 1
@@ -91,7 +91,7 @@
 
     def label_drag_data_received(self, w, context, x, y, data, info, time):
         if data and data.format == 8:
-            print 'Received "%s" in label' % data.data
+            print('Received "%s" in label' % data.data)
             context.finish(True, False, time)
         else:
             context.finish(False, False, time)
@@ -107,21 +107,21 @@
             self.popup_timer = 0
 
     def popup_motion(self, w, context, x, y, time):
-        print 'popup_motion'
+        print('popup_motion')
         if not self.in_popup:
             self.in_popup = True
             if self.popdown_timer:
-                print 'removed popdown'
+                print('removed popdown')
                 gobject.source_remove(self.popdown_timer)
                 self.popdown_timer = 0
         return True
 
     def popup_leave(self, w, context, time):
-        print 'popup_leave'
+        print('popup_leave')
         if self.in_popup:
             self.in_popup = False
             if not self.popdown_timer:
-                print 'added popdown'
+                print('added popdown')
                 self.popdown_timer = gobject.timeout_add(500, self.popdown_cb)
 
     def popup_cb(self):
@@ -143,12 +143,12 @@
             self.popup_win.present()
             self.popped_up = True
         self.popdown_timer = gobject.timeout_add(500, self.popdown_cb)
-        print 'added popdown'
+        print('added popdown')
         self.popup_timer = 0
         return False
 
     def popdown_cb(self):
-        print 'popdown'
+        print('popdown')
         #if self.in_popup:
         #    return True
         self.popdown_timer = 0
@@ -157,7 +157,7 @@
         return False
 
     def target_drag_leave(self, img, context, time):
-        print 'leave'
+        print('leave')
         self.have_drag = False
         img.set_from_pixmap(self.trashcan_closed, self.trashcan_closed_mask)
 
@@ -166,16 +166,16 @@
             self.have_drag = True
             img.set_from_pixmap(self.trashcan_open, self.trashcan_open_mask)
         source_widget = context.get_source_widget()
-        print 'motion, source ',
+        print('motion, source ', end=' ')
         if source_widget:
-            print source_widget.__class__.__name__
+            print(source_widget.__class__.__name__)
         else:
-            print 'unknown'
+            print('unknown')
         context.drag_status(context.suggested_action, time)
         return True
 
     def target_drag_drop(self, img, context, x, y, time):
-        print 'drop'
+        print('drop')
         self.have_drag = False
         img.set_from_pixmap(self.trashcan_closed, self.trashcan_closed_mask)
         if context.targets:
@@ -185,19 +185,19 @@
 
     def target_drag_data_received(self, img, context, x, y, data, info, time):
         if data.format == 8:
-            print 'Received "%s" in trashcan' % data.data
+            print('Received "%s" in trashcan' % data.data)
             context.finish(True, False, time)
         else:
             context.finish(False, False, time)
 
     def source_drag_data_get(self, btn, context, selection_data, info, time):
         if info == TARGET_ROOTWIN:
-            print 'I was dropped on the rootwin'
+            print('I was dropped on the rootwin')
         else:
             selection_data.set(selection_data.target, 8, "I'm Data!")
 
     def source_drag_data_delete(self, btn, context, data):
-        print 'Delete the data!'
+        print('Delete the data!')
 
 def main():
     DragAndDropDemo()
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/editable_cells.py pygtk-2.24.0-new/examples/pygtk-demo/demos/editable_cells.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/editable_cells.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/editable_cells.py	2018-02-08 10:40:57.266322051 +0800
@@ -16,7 +16,7 @@
   COLUMN_NUMBER,
   COLUMN_PRODUCT,
   COLUMN_EDITABLE
-) = range(3)
+) = list(range(3))
 
 # data
 articles = [
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/images.py pygtk-2.24.0-new/examples/pygtk-demo/demos/images.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/images.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/images.py	2018-02-08 10:40:57.398318771 +0800
@@ -81,7 +81,7 @@
             pixbuf = gtk.gdk.pixbuf_new_from_file(GTKLOGO_IMAGE)
             image.set_from_pixbuf(pixbuf)
 
-        except gobject.GError, error:
+        except gobject.GError as error:
 
             # This code shows off error handling. You can just use
             # gtk_image_new_from_file() instead if you don't want to report
@@ -199,7 +199,7 @@
                 buf = self.image_stream.read(256)
                 bytes_read = len(buf)
 
-            except IOError, error:
+            except IOError as error:
                 dialog = gtk.MessageDialog(self,
                     gtk.DIALOG_DESTROY_WITH_PARENT,
                     gtk.MESSAGE_ERROR,
@@ -270,7 +270,7 @@
             try:
                 self.image_stream = open(ALPHA_IMAGE, "rb")
 
-            except IOError, error:
+            except IOError as error:
                 error_message = "Unable to open image file 'alphatest.png' : %s"
 
                 dialog = gtk.MessageDialog(self,
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/__init__.py pygtk-2.24.0-new/examples/pygtk-demo/demos/__init__.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/__init__.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/__init__.py	2018-02-08 10:40:56.826332988 +0800
@@ -13,11 +13,11 @@
     _mod = _mod[:-3]
     try:
         _doc = ''
-        exec 'import ' + _mod + '\n' + \
-        '_doc = ' + _mod + '.__doc__'
+        exec('import ' + _mod + '\n' + \
+        '_doc = ' + _mod + '.__doc__')
         _description = _doc.splitlines()[0]
         demo_list.append((_description, _mod))
-    except (ImportError, AttributeError), msg:
+    except (ImportError, AttributeError) as msg:
         # ImportError or AttributeError (if _doc is None)
         #print 'failed: ', _mod
         pass
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/list_store.py pygtk-2.24.0-new/examples/pygtk-demo/demos/list_store.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/list_store.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/list_store.py	2018-02-08 10:40:57.458317279 +0800
@@ -16,7 +16,7 @@
     COLUMN_NUMBER,
     COLUMN_SEVERITY,
     COLUMN_DESCRIPTION
-) = range(4)
+) = list(range(4))
 
 data = \
 ((False, 60482, 'Normal', 'scrollable notebooks and hidden tabs'),
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/pixbufs.py pygtk-2.24.0-new/examples/pygtk-demo/demos/pixbufs.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/pixbufs.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/pixbufs.py	2018-02-08 10:40:57.562314694 +0800
@@ -87,7 +87,7 @@
         try:
             self.background = gtk.gdk.pixbuf_new_from_file(
                 os.path.join(IMAGE_DIR, BACKGROUND_NAME))
-        except gobject.GError, error:
+        except gobject.GError as error:
             return False
 
         self.back_width  = self.background.get_width()
@@ -97,7 +97,7 @@
             try:
                 self.images.append(gtk.gdk.pixbuf_new_from_file(
                     os.path.join(IMAGE_DIR, filename)))
-            except gobject.GError, error:
+            except gobject.GError as error:
                 return False
 
         return True
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/print_editor.py pygtk-2.24.0-new/examples/pygtk-demo/demos/print_editor.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/print_editor.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/print_editor.py	2018-02-08 10:40:57.650312507 +0800
@@ -69,7 +69,7 @@
     error_dialog = None
     try:
         contents = file(open_filename).read()
-    except IOError, ex:
+    except IOError as ex:
         error_dialog = gtk.MessageDialog(main_window,
                                          gtk.DIALOG_DESTROY_WITH_PARENT,
                                          gtk.MESSAGE_ERROR,
@@ -116,7 +116,7 @@
 
     try:
         file(save_filename, "w").write(text)
-    except IOError, ex:
+    except IOError as ex:
         error_dialog = gtk.MessageDialog(main_window,
                                          gtk.DIALOG_DESTROY_WITH_PARENT,
                                          gtk.MESSAGE_ERROR,
@@ -173,7 +173,7 @@
     page_breaks = []
     page_height = 0
 
-    for line in xrange(num_lines):
+    for line in range(num_lines):
       layout_line = print_data.layout.get_line(line)
       ink_rect, logical_rect = layout_line.get_extents()
       lx, ly, lwidth, lheight = logical_rect
@@ -251,7 +251,7 @@
 
     try:
         res = print_.run(gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG, main_window)
-    except gobject.GError, ex:
+    except gobject.GError as ex:
         error_dialog = gtk.MessageDialog(main_window,
                                          gtk.DIALOG_DESTROY_WITH_PARENT,
                                          gtk._MESSAGE_ERROR,
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/textview.py pygtk-2.24.0-new/examples/pygtk-demo/demos/textview.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/textview.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/textview.py	2018-02-08 10:40:57.918305845 +0800
@@ -167,7 +167,7 @@
         # use the current directory for the file
         try:
             pixbuf = gtk.gdk.pixbuf_new_from_file(GTKLOGO_IMAGE)
-        except gobject.GError, error:
+        except gobject.GError as error:
             sys.exit("Failed to load image file gtk-logo-rgb.gif\n")
 
         scaled = pixbuf.scale_simple(32, 32, 'bilinear')
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/treemodel.py pygtk-2.24.0-new/examples/pygtk-demo/demos/treemodel.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/treemodel.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/treemodel.py	2018-02-08 10:40:58.094301471 +0800
@@ -51,7 +51,7 @@
     def on_get_value(self, node, column):
         '''returns the value stored in a particular column for the node'''
         assert column == 0
-        return `node`
+        return repr(node)
     def on_iter_next(self, node):
         '''returns the next node at this level of the tree'''
         if node != None:
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/tree_store.py pygtk-2.24.0-new/examples/pygtk-demo/demos/tree_store.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/tree_store.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/tree_store.py	2018-02-08 10:40:58.062302266 +0800
@@ -23,7 +23,7 @@
     VISIBLE_COLUMN,
     WORLD_COLUMN,
     NUM_COLUMNS
-) = range(9)
+) = list(range(9))
 
 #   tree data
 january = \
diff -Nur pygtk-2.24.0/examples/pygtk-demo/demos/ui_manager.py pygtk-2.24.0-new/examples/pygtk-demo/demos/ui_manager.py
--- pygtk-2.24.0/examples/pygtk-demo/demos/ui_manager.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/demos/ui_manager.py	2018-02-08 10:40:58.130300576 +0800
@@ -12,10 +12,10 @@
 import gtk
 
 def activate_action(action):
-    print 'Action "%s" activated' % action.get_name()
+    print('Action "%s" activated' % action.get_name())
 
 def activate_radio_action(action, current):
-    print 'Radio action "%s" selected'% current.get_name()
+    print('Radio action "%s" selected'% current.get_name())
 
 entries = (
   ( "FileMenu", None, "_File" ),               # name, stock id, label
@@ -65,7 +65,7 @@
   COLOR_RED,
   COLOR_GREEN,
   COLOR_BLUE
-) = range(3)
+) = list(range(3))
 
 color_entries = (
   ( "Red", None,                               # name, stock id
@@ -83,7 +83,7 @@
   SHAPE_SQUARE,
   SHAPE_RECTANGLE,
   SHAPE_OVAL,
-) = range(3)
+) = list(range(3))
 
 # GtkRadioActionEntry
 shape_entries = (
@@ -157,8 +157,8 @@
 
         try:
             mergeid = ui.add_ui_from_string(ui_info)
-        except gobject.GError, msg:
-            print "building menus failed: %s" % msg
+        except gobject.GError as msg:
+            print("building menus failed: %s" % msg)
 
         box1 = gtk.VBox(False, 0)
         self.add(box1)
diff -Nur pygtk-2.24.0/examples/pygtk-demo/pygtk-demo.py pygtk-2.24.0-new/examples/pygtk-demo/pygtk-demo.py
--- pygtk-2.24.0/examples/pygtk-demo/pygtk-demo.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/pygtk-demo/pygtk-demo.py	2018-02-08 10:40:56.818333187 +0800
@@ -57,7 +57,7 @@
    MODULE_COLUMN,
    FUNC_COLUMN,
    ITALIC_COLUMN
-) = range(4)
+) = list(range(4))
 
 CHILDREN_COLUMN = 3
 
@@ -314,7 +314,7 @@
         self.insert_source(source)
 
 if __name__ == '__main__':
-    print "PyGTK Demo",
-    print "(gtk: v%d.%d.%d, " % gtk.gtk_version,
-    print "pygtk: v%d.%d.%d)" % gtk.pygtk_version
+    print("PyGTK Demo", end=' ')
+    print("(gtk: v%d.%d.%d, " % gtk.gtk_version, end=' ')
+    print("pygtk: v%d.%d.%d)" % gtk.pygtk_version)
     PyGtkDemo().run()
diff -Nur pygtk-2.24.0/examples/simple/dnd.py pygtk-2.24.0-new/examples/simple/dnd.py
--- pygtk-2.24.0/examples/simple/dnd.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/simple/dnd.py	2018-02-08 10:40:58.186299184 +0800
@@ -31,7 +31,7 @@
 def target_drag_leave(w, context, time):
     global trashcan_closed
     global have_drag
-    print 'leave'
+    print('leave')
     have_drag = False
     w.set_from_pixbuf(trashcan_closed)
 def target_drag_motion(w, context, x, y, time):
@@ -41,17 +41,17 @@
         have_drag = True
         w.set_from_pixbuf(trashcan_open)
     source_widget = context.get_source_widget()
-    print 'motion, source ',
+    print('motion, source ', end=' ')
     if source_widget:
-        print source_widget.__class__.__name__
+        print(source_widget.__class__.__name__)
     else:
-        print 'unknown'
+        print('unknown')
     context.drag_status(context.suggested_action, time)
     return True
 def target_drag_drop(w, context, x, y, time):
     global trashcan_closed
     global have_drag
-    print 'drop'
+    print('drop')
     have_drag = False
     w.set_from_pixbuf(trashcan_closed)
     if context.targets:
@@ -60,19 +60,19 @@
     return False
 def target_drag_data_received(w, context, x, y, data, info, time):
     if data.format == 8:
-        print 'Received "%s" in trashcan' % data.data
+        print('Received "%s" in trashcan' % data.data)
         context.finish(True, False, time)
     else:
         context.finish(False, False, time)
 def label_drag_data_received(w, context, x, y, data, info, time):
     if data and data.format == 8:
-        print 'Received "%s" in label' % data.data
+        print('Received "%s" in label' % data.data)
         context.finish(True, False, time)
     else:
         context.finish(False, False, time)
 def source_drag_data_get(w, context, selection_data, info, time):
     if info == TARGET_ROOTWIN:
-        print 'I was dropped on the rootwin'
+        print('I was dropped on the rootwin')
     else:
         selection_data.set(selection_data.target, 8, "I'm Data!")
 
@@ -88,17 +88,17 @@
     if not in_popup:
         in_popup = True
         if popdown_timer:
-            print 'removed popdown'
+            print('removed popdown')
             gobject.source_remove(popdown_timer)
             popdown_timer = 0
     return True
 def popup_leave(w, context, time):
     global in_popup, popdown_timer
-    print 'popup_leave'
+    print('popup_leave')
     if in_popup:
         in_popup = False
         if not popdown_timer:
-            print 'added popdown'
+            print('added popdown')
             popdown_timer = gobject.timeout_add(500, popdown_cb)
 def popup_cb():
     global popped_up, popup_win
@@ -121,7 +121,7 @@
         popup_win.show()
         popped_up = True
     popdown_timer = gobject.timeout_add(500, popdown_cb)
-    print 'added popdown'
+    print('added popdown')
     popup_timer = 0
     return False
 def popsite_motion(w, context, x, y, time):
@@ -135,7 +135,7 @@
         gobject.source_remove(popup_timer)
         popup_timer = 0
 def source_drag_data_delete(w, context, data):
-    print 'Delete the data!'
+    print('Delete the data!')
 def create_pixmap(w, xpm):
     return gtk.gdk.pixmap_create_from_xpm_d(w.window, None, xpm)
 def main():
diff -Nur pygtk-2.24.0/examples/simple/hello.py pygtk-2.24.0-new/examples/simple/hello.py
--- pygtk-2.24.0/examples/simple/hello.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/simple/hello.py	2018-02-08 10:40:58.226298190 +0800
@@ -8,7 +8,7 @@
 
 def hello(*args):
     """ Callback function that is attached to the button """
-    print "Hello World"
+    print("Hello World")
     window.destroy()
 
 def destroy(*args):
diff -Nur pygtk-2.24.0/examples/simple/simple.py pygtk-2.24.0-new/examples/simple/simple.py
--- pygtk-2.24.0/examples/simple/simple.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/simple/simple.py	2018-02-08 10:40:58.262297295 +0800
@@ -9,7 +9,7 @@
 import gobject, gtk
 
 def hello(*args):
-    print "Hello World"
+    print("Hello World")
     window.destroy()
 
 def destroy(*args):
diff -Nur pygtk-2.24.0/examples/simple/tooltip.py pygtk-2.24.0-new/examples/simple/tooltip.py
--- pygtk-2.24.0/examples/simple/tooltip.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/examples/simple/tooltip.py	2018-02-08 10:40:58.270297096 +0800
@@ -9,7 +9,7 @@
 
 def hello_cb(widget, main_window):
     """ Callback function that prints a message and destroys the window """
-    print "Hello World"
+    print("Hello World")
     main_window.destroy()
 
 def destroy_cb(widget, main_window):
diff -Nur pygtk-2.24.0/gtk/compat.py pygtk-2.24.0-new/gtk/compat.py
--- pygtk-2.24.0/gtk/compat.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/gtk/compat.py	2018-02-08 10:40:58.342295306 +0800
@@ -25,7 +25,7 @@
 
 def _find_mod(modname):
     d = {}
-    exec 'import %s; mod = %s' % (modname, modname) in d
+    exec('import %s; mod = %s' % (modname, modname), d)
     return d['mod']
 
 class RemapModule(module):
@@ -38,7 +38,7 @@
         self.__modules = None
     def __getattr__(self, attr):
         if not self.__modules:
-            self.__modules = map(_find_mod, self.__modulenames)
+            self.__modules = list(map(_find_mod, self.__modulenames))
         for mod in self.__modules:
             try:
                 value = getattr(mod, attr)
diff -Nur pygtk-2.24.0/gtk/deprecation.py pygtk-2.24.0-new/gtk/deprecation.py
--- pygtk-2.24.0/gtk/deprecation.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/gtk/deprecation.py	2018-02-08 10:40:58.362294810 +0800
@@ -60,7 +60,7 @@
             warnings.warn(message, DeprecationWarning, 2)
         try:
             return func(*args, **kwargs)
-        except TypeError, e:
+        except TypeError as e:
             raise TypeError(str(e).replace(func.__name__, self.oldname))
 
 class _DeprecatedConstant:
diff -Nur pygtk-2.24.0/gtk/__init__.py pygtk-2.24.0-new/gtk/__init__.py
--- pygtk-2.24.0/gtk/__init__.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/gtk/__init__.py	2018-02-08 10:40:58.306296202 +0800
@@ -52,7 +52,7 @@
 
         try:
             _gtk.init_check()
-        except RuntimeError, e:
+        except RuntimeError as e:
             import warnings
             warnings.warn(str(e), _gtk.Warning)
     finally:
diff -Nur pygtk-2.24.0/gtk/_lazyutils.py pygtk-2.24.0-new/gtk/_lazyutils.py
--- pygtk-2.24.0/gtk/_lazyutils.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/gtk/_lazyutils.py	2018-02-08 10:40:58.326295704 +0800
@@ -45,7 +45,7 @@
         dict.__init__(self)
 
     def __getitem__(self, name):
-        print name
+        print(name)
         return getattr(self._module, name)
 
 class LazyNamespace(ModuleType):
diff -Nur pygtk-2.24.0/setup.py pygtk-2.24.0-new/setup.py
--- pygtk-2.24.0/setup.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/setup.py	2018-02-08 10:40:55.582363909 +0800
@@ -328,7 +328,7 @@
     if '--enable-threading' in sys.argv:
         sys.argv.remove('--enable-threading')
     try:
-        import thread
+        import _thread
         thread # pyflakes
     except ImportError:
         print ('* Could not import thread module, disabling threading.')
diff -Nur pygtk-2.24.0/tests/runtests.py pygtk-2.24.0-new/tests/runtests.py
--- pygtk-2.24.0/tests/runtests.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/runtests.py	2018-02-08 10:40:58.682286855 +0800
@@ -28,8 +28,8 @@
 
 def gettestnames():
     files = glob.glob('*.py')
-    names = map(lambda x: x[:-3], files)
-    map(names.remove, SKIP_FILES)
+    names = [x[:-3] for x in files]
+    list(map(names.remove, SKIP_FILES))
     return names
 
 suite = unittest.TestSuite()
diff -Nur pygtk-2.24.0/tests/test_accel_closures.py pygtk-2.24.0-new/tests/test_accel_closures.py
--- pygtk-2.24.0/tests/test_accel_closures.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_accel_closures.py	2018-02-08 10:40:58.690286657 +0800
@@ -13,7 +13,7 @@
         button.add_accelerator("clicked", group, gtk.keysyms.x, gtk.gdk.CONTROL_MASK, 0)
         for closure in button.list_accel_closures():
             group1 = gtk.accel_group_from_accel_closure(closure)
-            self.assert_(group1 is group)
+            self.assertTrue(group1 is group)
         window.destroy()
 
 if __name__ == '__main__':
diff -Nur pygtk-2.24.0/tests/test_actiongroup.py pygtk-2.24.0-new/tests/test_actiongroup.py
--- pygtk-2.24.0/tests/test_actiongroup.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_actiongroup.py	2018-02-08 10:40:58.726285762 +0800
@@ -161,12 +161,12 @@
         self.assertRaises(TypeError, lambda: set_menu_item_type(None))
         self.assertRaises(TypeError, lambda: set_menu_item_type(gtk.Button))
         set_menu_item_type(gtk.ImageMenuItem)
-        self.assert_(isinstance(MyAction().create_menu_item(), gtk.ImageMenuItem))
+        self.assertTrue(isinstance(MyAction().create_menu_item(), gtk.ImageMenuItem))
 
         self.assertRaises(TypeError, lambda: set_tool_item_type(None))
         self.assertRaises(TypeError, lambda: set_tool_item_type(gtk.Button))
         set_tool_item_type(gtk.SeparatorToolItem)
-        self.assert_(isinstance(MyAction().create_tool_item(), gtk.SeparatorToolItem))
+        self.assertTrue(isinstance(MyAction().create_tool_item(), gtk.SeparatorToolItem))
         
 
 if __name__ == '__main__':
diff -Nur pygtk-2.24.0/tests/test_api.py pygtk-2.24.0-new/tests/test_api.py
--- pygtk-2.24.0/tests/test_api.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_api.py	2018-02-08 10:40:58.750285166 +0800
@@ -3,34 +3,35 @@
 import unittest
 
 from common import gobject, gtk
+import imp
 
 class APITest(unittest.TestCase):
     def testKeysyms(self):
-        self.failUnless('Escape' in dir(gtk.keysyms))
-        self.failUnless(hasattr(gtk.keysyms, 'Escape'))
+        self.assertTrue('Escape' in dir(gtk.keysyms))
+        self.assertTrue(hasattr(gtk.keysyms, 'Escape'))
         self.assertEqual(gtk.keysyms.Escape, 0xFF1B)
 
     def testWindow(self):
-        self.failUnless(hasattr(gtk, 'Window'))
-        self.failUnless(issubclass(gtk.Window, gobject.GObject))
-        self.failUnless(issubclass(gtk.Window, gtk.Object))
-        self.failUnless(issubclass(gtk.Window, gtk.Widget))
-        self.failUnless(issubclass(gtk.Window, gtk.Container))
-        self.failUnless(issubclass(gtk.Window, gtk.Bin))
+        self.assertTrue(hasattr(gtk, 'Window'))
+        self.assertTrue(issubclass(gtk.Window, gobject.GObject))
+        self.assertTrue(issubclass(gtk.Window, gtk.Object))
+        self.assertTrue(issubclass(gtk.Window, gtk.Widget))
+        self.assertTrue(issubclass(gtk.Window, gtk.Container))
+        self.assertTrue(issubclass(gtk.Window, gtk.Bin))
         w = gtk.Window()
-        self.failUnless(isinstance(w, gtk.Window))
+        self.assertTrue(isinstance(w, gtk.Window))
 
     def testAccelLabel(self):
         ra = gtk.RadioMenuItem(None, 'label')
-        self.failUnless(hasattr(ra.get_child(), 'get_text'))
+        self.assertTrue(hasattr(ra.get_child(), 'get_text'))
         self.assertEqual(ra.get_child().get_text(), 'label')
 
     def testGlade(self):
-        self.failUnless(hasattr(gtk.glade, 'XML'))
-        self.failUnless(issubclass(gtk.glade.XML, gobject.GObject))
+        self.assertTrue(hasattr(gtk.glade, 'XML'))
+        self.assertTrue(issubclass(gtk.glade.XML, gobject.GObject))
 
     def testReload(self):
         # test for #349026
         del sys.modules['gtk']
         import gtk
-        reload(gtk)
+        imp.reload(gtk)
diff -Nur pygtk-2.24.0/tests/test_button.py pygtk-2.24.0-new/tests/test_button.py
--- pygtk-2.24.0/tests/test_button.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_button.py	2018-02-08 10:40:58.762284867 +0800
@@ -6,7 +6,7 @@
     # Bug #524187.
     def test_constructor(self):
         button = gtk.Button()
-        self.assert_(button.props.use_underline)
+        self.assertTrue(button.props.use_underline)
 
 if __name__ == '__main__':
     unittest.main()
diff -Nur pygtk-2.24.0/tests/test_color.py pygtk-2.24.0-new/tests/test_color.py
--- pygtk-2.24.0/tests/test_color.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_color.py	2018-02-08 10:40:58.818283475 +0800
@@ -26,11 +26,11 @@
         c = gtk.gdk.Color(pixel=0xffff)
         self.assertEqual(c.pixel, 0xffff)
 
-        c = gtk.gdk.Color(pixel=0xffffL)
+        c = gtk.gdk.Color(pixel=0xffff)
         self.assertEqual(c.pixel, 0xffff)
 
-        c = gtk.gdk.Color(pixel=0xffffffffL)
-        self.assertEqual(c.pixel, 0xffffffffL)
+        c = gtk.gdk.Color(pixel=0xffffffff)
+        self.assertEqual(c.pixel, 0xffffffff)
 
         c = gtk.gdk.Color('red')
         self.assertEqual(c.red, 65535)
@@ -60,7 +60,7 @@
         self.assertAlmostEqual(c.blue_float, 1.0)
 
         c.red_float = 0.57
-        self.assert_(c.red == int(0.57 * 65535) or c.red == int(0.57 * 65535) + 1)
+        self.assertTrue(c.red == int(0.57 * 65535) or c.red == int(0.57 * 65535) + 1)
         self.assertAlmostEqual(c.red_float, 0.57, 4)
 
         c.green = 12345
diff -Nur pygtk-2.24.0/tests/test_container.py pygtk-2.24.0-new/tests/test_container.py
--- pygtk-2.24.0/tests/test_container.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_container.py	2018-02-08 10:40:58.850282679 +0800
@@ -91,8 +91,8 @@
         alignment.add(label)
         alignment.show_all()
 
-        self.assert_(label.flags() & gtk.VISIBLE)
-        self.assert_(alignment.caption.flags() & gtk.VISIBLE)
+        self.assertTrue(label.flags() & gtk.VISIBLE)
+        self.assertTrue(alignment.caption.flags() & gtk.VISIBLE)
 
     def testFocusSignalHandlers(self):
         button = gtk.Button()
@@ -103,13 +103,13 @@
         window.show_all()
 
         button.grab_focus()
-        self.assert_(button.is_focus())
+        self.assertTrue(button.is_focus())
 
         window.set_focus(None)
-        self.assert_(window.get_focus() is None)
+        self.assertTrue(window.get_focus() is None)
 
         window.set_focus(button)
-        self.assert_(window.get_focus() == button)
+        self.assertTrue(window.get_focus() == button)
 
         window.destroy()
 
diff -Nur pygtk-2.24.0/tests/test_conversion.py pygtk-2.24.0-new/tests/test_conversion.py
--- pygtk-2.24.0/tests/test_conversion.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_conversion.py	2018-02-08 10:40:58.870282182 +0800
@@ -10,10 +10,10 @@
         """ Test unichar values when used as arguments. """
 
         entry = gtk.Entry()
-        for valid_value in ['a', u'b', u'\ufff0', u'\ufff0'.encode()]:
+        for valid_value in ['a', 'b', '\ufff0', '\ufff0'.encode()]:
             entry.set_invisible_char(valid_value)
             self.assertEqual(entry.get_invisible_char(),
-                             unicode(valid_value),
+                             str(valid_value),
                              valid_value)
 
         for invalid_value in ('12', None, 1, ''):
@@ -31,7 +31,7 @@
         """ Test unichar values when used as properties. """
 
         entry = gtk.Entry()
-        for valid_value in ['a', u'b', u'\ufff0', u'\ufff0'.encode()]:
+        for valid_value in ['a', 'b', '\ufff0', '\ufff0'.encode()]:
             entry.set_property('invisible_char', valid_value)
             self.assertEqual(entry.get_property('invisible_char'),
                              valid_value, valid_value)
@@ -47,7 +47,7 @@
                     'set_invisible_char: %s'  % invalid_value)
 
     def testUnicharConstructor(self):
-        for valid_value in ['a', u'b', u'\ufff0', u'\ufff0'.encode()]:
+        for valid_value in ['a', 'b', '\ufff0', '\ufff0'.encode()]:
             entry = gobject.new(gtk.Entry, invisible_char=valid_value)
             self.assertEqual(entry.get_property('invisible_char'),
                              valid_value, valid_value)
@@ -59,7 +59,7 @@
         self.assertEqual(table.child_get_property(child, 'y-padding'), 2)
 
         child = gtk.DrawingArea()
-        table.attach(child, 1, 2, 0, 1, ypadding=2L)
+        table.attach(child, 1, 2, 0, 1, ypadding=2)
         self.assertEqual(table.child_get_property(child, 'y-padding'), 2)
 
 if __name__ == '__main__':
diff -Nur pygtk-2.24.0/tests/test_dialog.py pygtk-2.24.0-new/tests/test_dialog.py
--- pygtk-2.24.0/tests/test_dialog.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_dialog.py	2018-02-08 10:40:58.886281785 +0800
@@ -9,15 +9,15 @@
     def testDialogAdd(self):
         dialog = gtk.MessageDialog()
 
-        response_id = sys.maxint + 1
+        response_id = sys.maxsize + 1
         self.assertRaises(OverflowError, dialog.add_button, "Foo", response_id)
         self.assertRaises(OverflowError, dialog.add_buttons, "Foo", response_id)
 
     def testSubclass(self):
         # Normal subclassing should not register a type
         sub = type('sub', (gtk.MessageDialog,), {})
-        print sub.__gtype__
-        print sub.__gtype__.name
+        print(sub.__gtype__)
+        print(sub.__gtype__.name)
         self.assertEqual(sub.__gtype__.name, 'GtkMessageDialog')
 
         type('Sub', (gtk.MessageDialog,), {'__gtype_name__': 'SubDialog'})
diff -Nur pygtk-2.24.0/tests/test_enum.py pygtk-2.24.0-new/tests/test_enum.py
--- pygtk-2.24.0/tests/test_enum.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_enum.py	2018-02-08 10:40:58.978279498 +0800
@@ -23,15 +23,15 @@
         self.assertTrue(isinstance(atk.LAYER_OVERLAY, int))
         self.assertTrue('LAYER_OVERLAY' in repr(atk.LAYER_OVERLAY))
         self.assertTrue(int(atk.LAYER_OVERLAY))
-        self.assertEquals(atk.LAYER_INVALID, 0)
-        self.assertNotEquals(atk.LAYER_INVALID, 1)
-        self.assertNotEquals(atk.LAYER_INVALID, -1)
-        self.assertNotEquals(atk.LAYER_INVALID, atk.LAYER_BACKGROUND)
+        self.assertEqual(atk.LAYER_INVALID, 0)
+        self.assertNotEqual(atk.LAYER_INVALID, 1)
+        self.assertNotEqual(atk.LAYER_INVALID, -1)
+        self.assertNotEqual(atk.LAYER_INVALID, atk.LAYER_BACKGROUND)
 
     def testComparisionWarning(self):
         warnings.filterwarnings("error", "", Warning, "", 0)
         try:
-            self.assertNotEquals(atk.LAYER_INVALID, atk.RELATION_NULL)
+            self.assertNotEqual(atk.LAYER_INVALID, atk.RELATION_NULL)
         except Warning:
             pass
         else:
@@ -43,7 +43,7 @@
         win.realize()
 
         state = win.window.get_state()
-        self.assertEquals(state, gtk.gdk.WINDOW_STATE_WITHDRAWN)
+        self.assertEqual(state, gtk.gdk.WINDOW_STATE_WITHDRAWN)
         self.assertTrue(isinstance(state, gtk.gdk.WindowState))
         self.assertTrue('WINDOW_STATE_WITHDRAWN' in repr(state))
 
@@ -51,36 +51,34 @@
         win = gtk.Window()
 
         wtype = win.get_property('type')
-        self.assertEquals(wtype, gtk.WINDOW_TOPLEVEL)
+        self.assertEqual(wtype, gtk.WINDOW_TOPLEVEL)
         self.assertTrue(isinstance(wtype, gtk.WindowType))
         self.assertTrue('WINDOW_TOPLEVEL' in repr(wtype))
 
     def testAtkObj(self):
         obj = atk.NoOpObject(GObject())
-        self.assertEquals(obj.get_role(), atk.ROLE_INVALID)
+        self.assertEqual(obj.get_role(), atk.ROLE_INVALID)
 
     def testGParam(self):
         win = gtk.Window()
-        enums = filter(lambda x: GType.is_a(x.value_type, GEnum),
-                       gobject.list_properties(win))
+        enums = [x for x in gobject.list_properties(win) if GType.is_a(x.value_type, GEnum)]
         self.assertTrue(enums)
         enum = enums[0]
         self.assertTrue(hasattr(enum, 'enum_class'))
         self.assertTrue(issubclass(enum.enum_class, GEnum))
 
     def testWeirdEnumValues(self):
-        self.assertEquals(int(gtk.gdk.NOTHING), -1)
-        self.assertEquals(int(gtk.gdk.BUTTON_PRESS), 4)
+        self.assertEqual(int(gtk.gdk.NOTHING), -1)
+        self.assertEqual(int(gtk.gdk.BUTTON_PRESS), 4)
 
     def testParamSpec(self):
-        props = filter(lambda prop: GType.is_a(prop.value_type, GEnum),
-                       gobject.list_properties(gtk.Window))
+        props = [prop for prop in gobject.list_properties(gtk.Window) if GType.is_a(prop.value_type, GEnum)]
         self.assertTrue(len(props)>= 6)
-        props = filter(lambda prop: prop.name == 'type', props)
+        props = [prop for prop in props if prop.name == 'type']
         self.assertTrue(props)
         pspec = props[0]
         klass = pspec.enum_class
-        self.assertEquals(klass, gtk.WindowType)
+        self.assertEqual(klass, gtk.WindowType)
         self.assertTrue(hasattr(klass, '__enum_values__'))
         self.assertTrue(isinstance(klass.__enum_values__, dict))
         self.assertTrue(len(klass.__enum_values__) >= 2)
@@ -89,7 +87,7 @@
     def testOutofBounds(self):
         val = gtk.icon_size_register('fake', 24, 24)
         self.assertTrue(isinstance(val, gobject.GEnum))
-        self.assertEquals(int(val), 7)
+        self.assertEqual(int(val), 7)
         self.assertTrue('7' in repr(val))
         self.assertTrue('GtkIconSize' in repr(val))
 
@@ -106,18 +104,18 @@
         self.assertTrue(issubclass(GFlags, int))
         self.assertTrue(isinstance(gtk.gdk.BUTTON_PRESS_MASK, gtk.gdk.EventMask))
         self.assertTrue(isinstance(gtk.gdk.BUTTON_PRESS_MASK, int))
-        self.assertEquals(gtk.gdk.BUTTON_PRESS_MASK, 256)
-        self.assertNotEquals(gtk.gdk.BUTTON_PRESS_MASK, 0)
-        self.assertNotEquals(gtk.gdk.BUTTON_PRESS_MASK, -256)
-        self.assertNotEquals(gtk.gdk.BUTTON_PRESS_MASK, gtk.gdk.BUTTON_RELEASE_MASK)
+        self.assertEqual(gtk.gdk.BUTTON_PRESS_MASK, 256)
+        self.assertNotEqual(gtk.gdk.BUTTON_PRESS_MASK, 0)
+        self.assertNotEqual(gtk.gdk.BUTTON_PRESS_MASK, -256)
+        self.assertNotEqual(gtk.gdk.BUTTON_PRESS_MASK, gtk.gdk.BUTTON_RELEASE_MASK)
 
-        self.assertEquals(gtk.gdk.EventMask.__bases__[0], GFlags)
-        self.assertEquals(len(gtk.gdk.EventMask.__flags_values__), 22)
+        self.assertEqual(gtk.gdk.EventMask.__bases__[0], GFlags)
+        self.assertEqual(len(gtk.gdk.EventMask.__flags_values__), 22)
 
     def testComparisionWarning(self):
         warnings.filterwarnings("error", "", Warning, "", 0)
         try:
-            self.assertNotEquals(gtk.ACCEL_VISIBLE, gtk.EXPAND)
+            self.assertNotEqual(gtk.ACCEL_VISIBLE, gtk.EXPAND)
         except Warning:
             pass
         else:
@@ -127,41 +125,41 @@
     def testFlagOperations(self):
         a = gtk.gdk.BUTTON_PRESS_MASK
         self.assertTrue(isinstance(a, GFlags))
-        self.assertEquals(a.first_value_name, 'GDK_BUTTON_PRESS_MASK')
-        self.assertEquals(a.first_value_nick, 'button-press-mask')
-        self.assertEquals(a.value_names, ['GDK_BUTTON_PRESS_MASK'],
+        self.assertEqual(a.first_value_name, 'GDK_BUTTON_PRESS_MASK')
+        self.assertEqual(a.first_value_nick, 'button-press-mask')
+        self.assertEqual(a.value_names, ['GDK_BUTTON_PRESS_MASK'],
                           a.value_names)
-        self.assertEquals(a.value_nicks, ['button-press-mask'],
+        self.assertEqual(a.value_nicks, ['button-press-mask'],
                           a.value_names)
         b = gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK
         self.assertTrue(isinstance(b, GFlags))
-        self.assertEquals(b.first_value_name, 'GDK_BUTTON_PRESS_MASK')
-        self.assertEquals(b.first_value_nick, 'button-press-mask')
-        self.assertEquals(b.value_names, ['GDK_BUTTON_PRESS_MASK',
+        self.assertEqual(b.first_value_name, 'GDK_BUTTON_PRESS_MASK')
+        self.assertEqual(b.first_value_nick, 'button-press-mask')
+        self.assertEqual(b.value_names, ['GDK_BUTTON_PRESS_MASK',
                                           'GDK_BUTTON_RELEASE_MASK'])
-        self.assertEquals(b.value_nicks, ['button-press-mask',
+        self.assertEqual(b.value_nicks, ['button-press-mask',
                                           'button-release-mask'])
         c = (gtk.gdk.BUTTON_PRESS_MASK |
              gtk.gdk.BUTTON_RELEASE_MASK |
              gtk.gdk.ENTER_NOTIFY_MASK)
         self.assertTrue(isinstance(c, GFlags))
-        self.assertEquals(c.first_value_name, 'GDK_BUTTON_PRESS_MASK')
-        self.assertEquals(c.first_value_nick, 'button-press-mask')
-        self.assertEquals(c.value_names,
+        self.assertEqual(c.first_value_name, 'GDK_BUTTON_PRESS_MASK')
+        self.assertEqual(c.first_value_nick, 'button-press-mask')
+        self.assertEqual(c.value_names,
                           ['GDK_BUTTON_PRESS_MASK',
                            'GDK_BUTTON_RELEASE_MASK',
                            'GDK_ENTER_NOTIFY_MASK'])
-        self.assertEquals(c.value_nicks,
+        self.assertEqual(c.value_nicks,
                           ['button-press-mask',
                            'button-release-mask',
                            'enter-notify-mask'])
         self.assertTrue(int(a))
-        self.assertEquals(int(a), int(gtk.gdk.BUTTON_PRESS_MASK))
+        self.assertEqual(int(a), int(gtk.gdk.BUTTON_PRESS_MASK))
         self.assertTrue(int(b))
-        self.assertEquals(int(b), (int(gtk.gdk.BUTTON_PRESS_MASK) |
+        self.assertEqual(int(b), (int(gtk.gdk.BUTTON_PRESS_MASK) |
                                    int(gtk.gdk.BUTTON_RELEASE_MASK)))
         self.assertTrue(int(c))
-        self.assertEquals(int(c), (int(gtk.gdk.BUTTON_PRESS_MASK) |
+        self.assertEqual(int(c), (int(gtk.gdk.BUTTON_PRESS_MASK) |
                                    int(gtk.gdk.BUTTON_RELEASE_MASK) |
                                    int(gtk.gdk.ENTER_NOTIFY_MASK)))
 
@@ -176,12 +174,11 @@
         warnings.resetwarnings()
 
     def testParamSpec(self):
-        props = filter(lambda x: GType.is_a(x.value_type, GFlags),
-                       gtk.Table.list_child_properties())
+        props = [x for x in gtk.Table.list_child_properties() if GType.is_a(x.value_type, GFlags)]
         self.assertTrue(len(props) >= 2)
         pspec = props[0]
         klass = pspec.flags_class
-        self.assertEquals(klass, gtk.AttachOptions)
+        self.assertEqual(klass, gtk.AttachOptions)
         self.assertTrue(hasattr(klass, '__flags_values__'))
         self.assertTrue(isinstance(klass.__flags_values__, dict))
         self.assertTrue(len(klass.__flags_values__) >= 3)
@@ -189,10 +186,10 @@
 
     def testEnumComparision(self):
         enum = gtk.TREE_VIEW_DROP_BEFORE
-        self.assertEquals(enum, 0)
+        self.assertEqual(enum, 0)
         self.assertTrue(not enum == 10)
         self.assertTrue(not enum != 0)
-        self.assertNotEquals(enum, 10)
+        self.assertNotEqual(enum, 10)
         self.assertTrue(not enum < 0)
         self.assertTrue(enum < 10)
         self.assertTrue(not enum > 0)
@@ -204,10 +201,10 @@
 
     def testFlagComparision(self):
         flag = gtk.gdk.EXPOSURE_MASK
-        self.assertEquals(flag, 2)
+        self.assertEqual(flag, 2)
         self.assertTrue(not flag == 10)
         self.assertTrue(not flag != 2)
-        self.assertNotEquals(flag, 10)
+        self.assertNotEqual(flag, 10)
         self.assertTrue(not flag < 2)
         self.assertTrue(flag < 10)
         self.assertTrue(not flag > 2)
diff -Nur pygtk-2.24.0/tests/test_gdk.py pygtk-2.24.0-new/tests/test_gdk.py
--- pygtk-2.24.0/tests/test_gdk.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_gdk.py	2018-02-08 10:40:59.006278802 +0800
@@ -67,12 +67,12 @@
             self.assertEqual(dispref(), None)
         else:
             del display
-            self.assertEquals(self._collect(), 1)
+            self.assertEqual(self._collect(), 1)
 
         display = gtk.gdk.Display(None)
-        self.assertEquals(display.__grefcount__, 1)
+        self.assertEqual(display.__grefcount__, 1)
         display.close()
-        self.assertEquals(display.__grefcount__, 1)
+        self.assertEqual(display.__grefcount__, 1)
 
         if gobject.pygobject_version >= (2,13):
             dispref = display.weak_ref()
@@ -80,4 +80,4 @@
             self.assertEqual(dispref(), None)
         else:
             del display
-            self.assertEquals(self._collect(), 1)
+            self.assertEqual(self._collect(), 1)
diff -Nur pygtk-2.24.0/tests/test_liststore.py pygtk-2.24.0-new/tests/test_liststore.py
--- pygtk-2.24.0/tests/test_liststore.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_liststore.py	2018-02-08 10:40:59.034278106 +0800
@@ -46,7 +46,7 @@
         for i in range(200):
             store.append((i,))
             del store[-1]
-            self.assert_(len(store) == 0)
+            self.assertTrue(len(store) == 0)
 
 
 
diff -Nur pygtk-2.24.0/tests/test_pango.py pygtk-2.24.0-new/tests/test_pango.py
--- pygtk-2.24.0/tests/test_pango.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_pango.py	2018-02-08 10:40:59.050277709 +0800
@@ -5,8 +5,8 @@
 class MarkupTest(unittest.TestCase):
     def testMarkupAccelMarker(self):
         self.assertRaises(TypeError, pango.parse_markup, 'test', 0)
-        self.assertEqual(pango.parse_markup('test')[2], u'\x00')
-        self.assertEqual(pango.parse_markup('test', u't')[2], u'e')
+        self.assertEqual(pango.parse_markup('test')[2], '\x00')
+        self.assertEqual(pango.parse_markup('test', 't')[2], 'e')
 
 
 class TestColor(unittest.TestCase):
diff -Nur pygtk-2.24.0/tests/test_plug.py pygtk-2.24.0-new/tests/test_plug.py
--- pygtk-2.24.0/tests/test_plug.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_plug.py	2018-02-08 10:40:59.058277510 +0800
@@ -6,8 +6,8 @@
 
     # Bug #539365.  Just check that it doesn't raise anything.
     def test_constructor_socket_id(self):
-        self.assert_(isinstance(gtk.Plug(0), gtk.Plug))
-        self.assert_(isinstance(gtk.Plug(0L), gtk.Plug))
+        self.assertTrue(isinstance(gtk.Plug(0), gtk.Plug))
+        self.assertTrue(isinstance(gtk.Plug(0), gtk.Plug))
 
 if __name__ == '__main__':
     unittest.main()
diff -Nur pygtk-2.24.0/tests/test_radiobutton.py pygtk-2.24.0-new/tests/test_radiobutton.py
--- pygtk-2.24.0/tests/test_radiobutton.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_radiobutton.py	2018-02-08 10:40:59.094276615 +0800
@@ -25,7 +25,7 @@
         if self.widget_type is None:
             return
         radio = self.new()
-        self.assert_(isinstance(radio, self.widget_type))
+        self.assertTrue(isinstance(radio, self.widget_type))
 
     def testLabel(self):
         if self.widget_type is None:
@@ -77,7 +77,7 @@
     def compareGroups(self, group1, group2):
         # GtkRadioToolButton.set/get_groups return GtkRadioButtons,
         # so instead of doing a normal cmp, compare ids
-        return cmp(map(id, group1), map(id, group2))
+        return cmp(list(map(id, group1)), list(map(id, group2)))
 
     def newLabel(self, label):
         # We don't have a constructor for which we can pass in a label
diff -Nur pygtk-2.24.0/tests/test_style.py pygtk-2.24.0-new/tests/test_style.py
--- pygtk-2.24.0/tests/test_style.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_style.py	2018-02-08 10:40:59.122275919 +0800
@@ -25,5 +25,5 @@
     def testInvalid(self):
         func = self.bg_pixmap.__setitem__
         self.assertRaises(TypeError, func, gtk.STATE_NORMAL, True)
-        self.assertRaises(TypeError, func, gtk.STATE_NORMAL, 0L)
+        self.assertRaises(TypeError, func, gtk.STATE_NORMAL, 0)
         self.assertRaises(TypeError, func, gtk.STATE_NORMAL, object())
diff -Nur pygtk-2.24.0/tests/test_textview.py pygtk-2.24.0-new/tests/test_textview.py
--- pygtk-2.24.0/tests/test_textview.py	2011-04-01 18:37:25.000000000 +0800
+++ pygtk-2.24.0-new/tests/test_textview.py	2018-02-08 10:40:59.134275621 +0800
@@ -9,11 +9,11 @@
         buffer.insert(buffer.get_start_iter(), 'blablabla')
 
         iter1, iter2 = buffer.get_bounds()
-        self.assert_(iter1 is not iter2)
+        self.assertTrue(iter1 is not iter2)
         self.assertNotEqual(iter1.get_offset(), iter2.get_offset())
 
         iter2.assign(iter1)
-        self.assert_(iter1 is not iter2)
+        self.assertTrue(iter1 is not iter2)
         self.assertEqual(iter1.get_offset(), iter2.get_offset())
 
 class TextViewTest(unittest.TestCase):
openSUSE Build Service is sponsored by