summaryrefslogtreecommitdiff
path: root/tests/objects/signals.test
blob: ced2f3ae0ee8ee775a0525be18ca3c698521e445 (plain)
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

Program: test

using GLib;

class Maman.Foo : Object {
	public signal void activated (bool b);

	public void do_action (bool b) {
		activated (b);
	}
}

class Maman.Bar : Object {
	void activated (Foo foo, bool b) {
		if (b) {
			stdout.printf (" BAD");
		} else {
			stdout.printf (" 5");
		}
	}

	public void run () {
		stdout.printf (" 2");
		
		var foo = new Foo ();
		
		foo.activated += (foo, b) => {
			if (b) {
				stdout.printf (" 8");
			} else {
				stdout.printf (" 4");
			}
		};

		foo.activated += activated;

		stdout.printf (" 3");
		
		foo.do_action (false);

		stdout.printf (" 6");
		
		foo.activated -= activated;

		stdout.printf (" 7");

		foo.do_action (true);

		stdout.printf (" 9");
	}

	static int main (string[] args) {
		stdout.printf ("Signal Test: 1");
		
		var bar = new Bar ();
		bar.run ();
	
		stdout.printf (" 10\n");

		stdout.printf ("User Signal Test: 1");

		var user_bar = new UserBar ();
		user_bar.run ();

		stdout.printf (" 6\n");

		stdout.printf ("Signal Return Test: 1");

		var return_bar = new ReturnBar ();
		return_bar.run ();

		stdout.printf (" 8\n");

		return 0;
	}
}

class Maman.UserFoo : Object {
	public signal void activated (int i1, int i2);

	public void do_action () {
		activated (6, -2);
	}
}

class Maman.UserBar : Object {
	public void run () {
		stdout.printf (" 2");
		
		var foo = new UserFoo ();
		
		foo.activated += (foo, i1, i2) => {
			stdout.printf (" %d", i1 + i2);
		};

		stdout.printf (" 3");
		
		foo.do_action ();

		stdout.printf (" 5");
	}
}

class Maman.ReturnFoo : Object {
	public signal int int_activated (int arg);
	public signal string string_activated (string arg);
}

class Maman.ReturnBar : Object {
	public void run () {
		stdout.printf (" 2");

		var foo = new ReturnFoo ();

		foo.int_activated += (foo, arg) => {
			stdout.printf (" %d", arg);
			return arg + 1;
		};

		foo.string_activated += (foo, arg) => {
			stdout.printf (arg);
			return " 6";
		};

		stdout.printf (" %d", foo.int_activated (3));

		stdout.printf (foo.string_activated (" 5"));

		stdout.printf (" 7");
	}
}