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 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
import gc
import weakref
import pytest
from gi.repository import GObject, Regress
try:
from gi.repository import Gtk
GTK4 = Gtk._version == "4.0"
except ImportError:
Gtk = None
GTK4 = False
def test_constructor_no_data():
obj = Regress.TestFundamentalSubObject()
assert isinstance(obj, Regress.TestFundamentalSubObject)
assert isinstance(obj, Regress.TestFundamentalObject)
assert obj.refcount == 1
assert obj.data is None
def test_constructor_with_data():
with pytest.raises(TypeError):
Regress.TestFundamentalSubObject(data="foo")
def test_create_fundamental_new_with_data():
obj = Regress.TestFundamentalSubObject.new("foo")
assert isinstance(obj, Regress.TestFundamentalSubObject)
assert isinstance(obj, Regress.TestFundamentalObject)
assert obj.refcount == 1
assert obj.data == "foo"
def test_change_field():
obj = Regress.TestFundamentalObjectNoGetSetFunc.new("foo")
obj.data = "bar"
assert obj.get_data() == "bar"
def test_call_method():
obj = Regress.TestFundamentalObjectNoGetSetFunc.new("foo")
assert obj.get_data() == "foo"
def test_create_fundamental_hidden_class_instance():
obj = Regress.test_create_fundamental_hidden_class_instance()
assert isinstance(obj, Regress.TestFundamentalObject)
def test_create_fundamental_refcount():
obj = Regress.TestFundamentalSubObject.new("foo")
assert obj.refcount == 1
def test_delete_fundamental_refcount():
obj = Regress.TestFundamentalSubObject.new("foo")
del obj
gc.collect()
def test_value_set_fundamental_object():
val = GObject.Value(Regress.TestFundamentalSubObject.__gtype__)
obj = Regress.TestFundamentalSubObject()
val.set_value(obj)
assert val.get_value() == obj
def test_value_set_wrong_value():
val = GObject.Value(Regress.TestFundamentalSubObject.__gtype__)
with pytest.raises(TypeError, match="Fundamental type is required"):
val.set_value(1)
def test_value_set_wrong_fundamental():
class MyCustomFundamentalObject(Regress.TestFundamentalObject):
pass
val = GObject.Value(Regress.TestFundamentalSubObject.__gtype__)
with pytest.raises(TypeError, match="Invalid fundamental type for assignment"):
val.set_value(MyCustomFundamentalObject())
def test_array_of_fundamental_objects_in():
assert Regress.test_array_of_fundamental_objects_in(
[Regress.TestFundamentalSubObject()]
)
def test_array_of_fundamental_objects_out():
objs = Regress.test_array_of_fundamental_objects_out()
assert len(objs) == 2
assert all(isinstance(o, Regress.TestFundamentalObject) for o in objs)
def test_fundamental_argument_in():
obj = Regress.TestFundamentalSubObject()
assert Regress.test_fundamental_argument_in(obj)
def test_abstract_fundamental_type():
with pytest.raises(TypeError):
Regress.TestFundamentalObject()
def test_fundamental_argument_out():
obj = Regress.TestFundamentalSubObject.new("data")
other = Regress.test_fundamental_argument_out(obj)
assert type(obj) is type(other)
assert obj is not other
assert obj.data == other.data
def test_multiple_objects():
obj1 = Regress.TestFundamentalSubObject()
obj2 = Regress.TestFundamentalSubObject()
assert obj1 != obj2
def test_fundamental_weak_ref():
obj = Regress.TestFundamentalSubObject()
weak = weakref.ref(obj)
assert weak() == obj
del obj
gc.collect()
assert weak() is None
def test_fundamental_primitive_object():
bitmask = Regress.Bitmask(2)
assert bitmask.v == 2
def test_custom_fundamental_type_vfunc_override():
class MyCustomFundamentalObject(Regress.TestFundamentalObject):
def __init__(self):
super().__init__()
invocations["__init__"] = True
def do_finalize(self):
invocations["do_finalize"] = True
invocations = {}
obj = MyCustomFundamentalObject()
del obj
gc.collect()
assert "__init__" in invocations
assert "do_finalize" in invocations
@pytest.mark.skipif(not GTK4, reason="requires GTK 4")
def test_gtk_expression():
obj = object()
con = Gtk.ConstantExpression.new_for_value(obj)
assert con.get_value() is obj
@pytest.mark.skipif(not GTK4, reason="requires GTK 4")
def test_gtk_string_filter_fundamental_property():
expr = Gtk.ConstantExpression.new_for_value("one")
filter = Gtk.StringFilter.new(expr)
filter.props.expression = expr
assert filter.get_expression() == expr
assert filter.props.expression == expr
|