1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
import unittest
import gi.docstring
from gi.repository import Regress
from gi.repository import GIMarshallingTests
from gi.repository import Gio
from gi.repository import GObject
try:
from gi.repository import Gtk
except ImportError:
Gtk = None
class Test(unittest.TestCase):
def test_api(self):
def new_func(info):
return "docstring test"
old_func = gi.docstring.get_doc_string_generator()
gi.docstring.set_doc_string_generator(new_func)
self.assertEqual(gi.docstring.get_doc_string_generator(), new_func)
self.assertEqual(gi.docstring.generate_doc_string(None), "docstring test")
# Set back to original generator
gi.docstring.set_doc_string_generator(old_func)
self.assertEqual(gi.docstring.get_doc_string_generator(), old_func)
def test_final_signature_with_full_inout(self):
self.assertEqual(
GIMarshallingTests.Object.full_inout.__doc__,
"full_inout(object:GIMarshallingTests.Object) -> object:GIMarshallingTests.Object",
)
def test_overridden_doc_is_not_clobbered(self):
self.assertEqual(
GIMarshallingTests.OverridesObject.method.__doc__, "Overridden doc string."
)
def test_allow_none_with_user_data_defaults(self):
g_file_copy_doc = (
"copy(self, destination:Gio.File, "
"flags:Gio.FileCopyFlags, "
"cancellable:Gio.Cancellable=None, "
"progress_callback:Gio.FileProgressCallback=None, "
"progress_callback_data=None) -> bool"
)
self.assertEqual(Gio.File.copy.__doc__, g_file_copy_doc)
def test_array_length_arg(self):
self.assertEqual(GIMarshallingTests.array_in.__doc__, "array_in(ints:list)")
def test_init_function(self):
# This tests implicit array length args along with skipping a
# boolean return
self.assertEqual(
GIMarshallingTests.init_function.__doc__,
"init_function(argv:list=None) -> bool, argv:list",
)
def test_boolean_return(self):
self.assertEqual(
GIMarshallingTests.boolean_return_true.__doc__,
"boolean_return_true() -> bool",
)
# https://bugzilla.gnome.org/show_bug.cgi?id=740301
def test_may_return_none(self):
self.assertEqual(
Gio.File.get_basename.__doc__, "get_basename(self) -> str or None"
)
def test_class_doc_constructors(self):
doc = GIMarshallingTests.Object.__doc__
self.assertTrue("new(int_:int)" in doc)
def test_struct_doc_constructors(self):
doc = GIMarshallingTests.BoxedStruct.__doc__
self.assertTrue("new()" in doc)
self.assertTrue("BoxedStruct()" in doc)
def test_private_struct_constructors(self):
# Structs without a size or constructor should have no constructor docs.
doc = Regress.TestBoxedPrivate.__doc__
self.assertEqual(doc, "")
def test_array_inout_etc(self):
self.assertEqual(
GIMarshallingTests.array_inout_etc.__doc__,
"array_inout_etc(first:int, ints:list, last:int) -> ints:list, sum:int",
)
def test_array_out_etc(self):
self.assertEqual(
GIMarshallingTests.array_out_etc.__doc__,
"array_out_etc(first:int, last:int) -> ints:list, sum:int",
)
@unittest.skipUnless(Gtk, "no Gtk")
def test_shared_array_length_with_prior_out_arg(self):
# Test the 'iter' out argument does not effect length argument skipping.
self.assertRegex(
Gtk.ListStore.insert_with_valuesv.__doc__,
"insert_with_values.*\\(self, position:int, columns:list, values:list\\) -> iter:Gtk.TreeIter",
)
def test_sub_class_doc(self):
class A(GObject.Object):
"""first doc."""
pass
class B(A):
"""second doc."""
pass
self.assertEqual(A.__doc__, "first doc.")
self.assertEqual(B.__doc__, "second doc.")
def test_sub_class_no_doc(self):
class A(GObject.Object):
pass
class B(A):
"""sub-class doc."""
self.assertEqual(A.__doc__, None)
self.assertEqual(B.__doc__, "sub-class doc.")
@unittest.expectedFailure # https://bugzilla.gnome.org/show_bug.cgi?id=734926
def test_sub_class_doc_setattr(self):
class A(GObject.Object):
pass
class B(A):
pass
A.__doc__ = "custom doc"
self.assertEqual(A.__doc__, "custom doc")
self.assertEqual(B.__doc__, "custom doc")
def test_return_array_with_length_argument(self):
self.assertEqual(
GIMarshallingTests.enum_array_return_type.__doc__,
"enum_array_return_type() -> list",
)
|