@@ -120,6 +120,33 @@ void test_std_function_style_syntax()
120
120
util->check_result (result_stream, " foo(int 1) " );
121
121
}
122
122
123
+ void test_clear_called_in_signal_handler ()
124
+ {
125
+ sigc::signal<void ()> sig;
126
+ sig.connect ([]() { result_stream << " , slot 1, " ; });
127
+ sig.connect ([&sig]() { sig.clear (); result_stream << " slot 2, " ; });
128
+ sig.connect ([]() { result_stream << " slot 3, " ; });
129
+ result_stream << sig.size ();
130
+ sig.emit ();
131
+ result_stream << sig.size ();
132
+ sig.emit ();
133
+ util->check_result (result_stream, " 3, slot 1, slot 2, 0" );
134
+ }
135
+
136
+ void test_clear_called_outside_signal_handler ()
137
+ {
138
+ sigc::signal<void ()> sig;
139
+ sig.connect ([]() { result_stream << " , slot 1, " ; });
140
+ sig.connect ([]() { result_stream << " slot 2, " ; });
141
+ sig.connect ([]() { result_stream << " slot 3, " ; });
142
+ result_stream << sig.size ();
143
+ sig.emit ();
144
+ sig.clear ();
145
+ result_stream << sig.size ();
146
+ sig.emit ();
147
+ util->check_result (result_stream, " 3, slot 1, slot 2, slot 3, 0" );
148
+ }
149
+
123
150
} // end anonymous namespace
124
151
125
152
int main (int argc, char * argv[])
@@ -135,6 +162,8 @@ int main(int argc, char* argv[])
135
162
test_reference ();
136
163
test_make_slot ();
137
164
test_std_function_style_syntax ();
165
+ test_clear_called_in_signal_handler ();
166
+ test_clear_called_outside_signal_handler ();
138
167
139
168
return util->get_result_and_delete_instance () ? EXIT_SUCCESS : EXIT_FAILURE;
140
169
}
0 commit comments