Release 0.41.92
[vala-gnome.git] / tests / objects / signals-delegate.vala
blob1e94603b8f6f0bf9145a34fd7f68d8b9a40a2241
1 public delegate string FooFunc (Foo foo, string s);
3 public class Foo : Object {
4 public signal string test (string s);
6 public void add (FooFunc func) {
7 test.connect (func);
10 public void add_owned (owned FooFunc func) {
11 test.connect (func);
14 public void add_remove (FooFunc func) {
15 test.connect (func);
16 test.disconnect (func);
19 public void add_remove_owned (owned FooFunc func) {
20 test.connect (func);
21 test.disconnect (func);
24 public void invoke_test () {
25 assert (test ("bar") == "foo");
28 public void invoke_test_empty () {
29 assert (test ("bar") == null);
33 public class Bar : Object {
34 public signal string test (string s);
36 int i;
38 public Bar (Foo foo) {
39 i = 42;
40 foo.add (instance_callback);
43 public Bar.owned (Foo foo) {
44 i = 42;
45 foo.add_owned (instance_callback);
48 public Bar.remove (Foo foo) {
49 i = 42;
50 foo.add_remove (instance_callback);
53 public Bar.remove_owned (Foo foo) {
54 i = 42;
55 foo.add_remove_owned (instance_callback);
58 string instance_callback (Foo foo, string s) {
59 assert (foo is Foo);
60 assert (this is Bar);
61 assert (s == "bar");
62 assert (i == 42);
63 return "foo";
67 string callback_static (Foo foo, string s) {
68 assert (foo is Foo);
69 assert (s == "bar");
70 return "foo";
73 void main () {
74 Foo foo;
75 Bar bar;
77 foo = new Foo ();
78 foo.add ((FooFunc) callback_static);
79 foo.invoke_test ();
81 foo = new Foo ();
82 foo.add_owned ((FooFunc) callback_static);
83 foo.invoke_test ();
85 foo = new Foo ();
86 foo.add_remove ((FooFunc) callback_static);
87 foo.invoke_test_empty ();
89 foo = new Foo ();
90 foo.add_remove_owned ((FooFunc) callback_static);
91 foo.invoke_test_empty ();
93 foo = new Foo ();
94 bar = new Bar (foo);
95 foo.invoke_test ();
97 foo = new Foo ();
98 bar = new Bar.owned (foo);
99 foo.invoke_test ();
101 foo = new Foo ();
102 bar = new Bar.remove (foo);
103 foo.invoke_test_empty ();
105 foo = new Foo ();
106 bar = new Bar.remove_owned (foo);
107 foo.invoke_test_empty ();