on xenial help sign in
Added SignalsList convienience class and use it to disconnect Unity's signals.
356dc31Pawel Stolowski
plugins/Unity/CMakeLists.txt+1
@@ -40,6 +40,7 @@ set(QMLPLUGIN_SRC
40 preview.cpp
40 preview.cpp
41 previewaction.cpp
41 previewaction.cpp
42 previewinfohint.cpp
42 previewinfohint.cpp
43+ signalslist.cpp
43 variantutils.cpp
44 variantutils.cpp
44 )
45 )
45
46
plugins/Unity/checkoptionfilter.cpp+3−3
@@ -38,10 +38,10 @@ void CheckOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38 onOptionsChanged(m_unityCheckOptionFilter->options);
38 onOptionsChanged(m_unityCheckOptionFilter->options);
39}
39}
40
40
41−void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions options)
41+void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions /* options */)
42{
42{
43 if (m_options != NULL) {
43 if (m_options != NULL) {
44− // FIXME: should disconnect from m_unityFilter's signals
44+ m_signals.disconnectAll();
45 delete m_options;
45 delete m_options;
46 m_options = NULL;
46 m_options = NULL;
47 }
47 }
@@ -54,7 +54,7 @@ void CheckOptionFilter::onOptionsChanged(unity::dash::CheckOptionFilter::CheckOp
54 }
54 }
55
55
56 /* Property change signals */
56 /* Property change signals */
57− m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged));
57+ m_signals.append(m_unityCheckOptionFilter->options.changed.connect(sigc::mem_fun(this, &CheckOptionFilter::onOptionsChanged)));
58
58
59 Q_EMIT optionsChanged();
59 Q_EMIT optionsChanged();
60}
60}
plugins/Unity/checkoptionfilter.h+2
@@ -30,6 +30,7 @@
30// Local
30// Local
31#include "filter.h"
31#include "filter.h"
32#include "filteroption.h"
32#include "filteroption.h"
33+#include "signalslist.h"
33
34
34class Q_DECL_EXPORT CheckOptionFilter : public Filter
35class Q_DECL_EXPORT CheckOptionFilter : public Filter
35{
36{
@@ -55,6 +56,7 @@ protected:
55private:
56private:
56 unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
57 unity::dash::CheckOptionFilter::Ptr m_unityCheckOptionFilter;
57 FilterOptions* m_options;
58 FilterOptions* m_options;
59+ SignalsList m_signals;
58
60
59 void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions);
61 void onOptionsChanged(unity::dash::CheckOptionFilter::CheckOptions);
60};
62};
plugins/Unity/combinedfilteroption.cpp+5−5
@@ -108,7 +108,7 @@ void CombinedFilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr u
108{
108{
109 for (int i=0; i<2; i++) {
109 for (int i=0; i<2; i++) {
110 if (m_unityFilterOption[0] != NULL) {
110 if (m_unityFilterOption[0] != NULL) {
111− // FIXME: should disconnect from m_unityFilterOption's signals
111+ m_signals.disconnectAll();
112 }
112 }
113 }
113 }
114
114
@@ -118,10 +118,10 @@ void CombinedFilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr u
118 /* Property change signals */
118 /* Property change signals */
119 for (int i=0; i<2; i++) {
119 for (int i=0; i<2; i++) {
120 if (m_unityFilterOption[i] != nullptr) {
120 if (m_unityFilterOption[i] != nullptr) {
121− m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged));
121+ m_signals << m_unityFilterOption[i]->id.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onIdChanged))
122− m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::nameChanged));
122+ << m_unityFilterOption[i]->name.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::nameChanged))
123− m_unityFilterOption[i]->icon_hint.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::iconHintChanged));
123+ << m_unityFilterOption[i]->icon_hint.changed.connect(sigc::mem_fun(this,&CombinedFilterOption::iconHintChanged))
124− m_unityFilterOption[i]->active.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onActiveChanged));
124+ << m_unityFilterOption[i]->active.changed.connect(sigc::mem_fun(this, &CombinedFilterOption::onActiveChanged));
125 }
125 }
126 }
126 }
127}
127}
plugins/Unity/combinedfilteroption.h+3−1
@@ -22,6 +22,7 @@
22
22
23// Local
23// Local
24#include "abstractfilteroption.h"
24#include "abstractfilteroption.h"
25+#include "signalslist.h"
25
26
26// libunity-core
27// libunity-core
27#include <UnityCore/Filter.h>
28#include <UnityCore/Filter.h>
@@ -60,9 +61,10 @@ private:
60 CombinedFilterOption is active. */
61 CombinedFilterOption is active. */
61 void setInactive(const CombinedFilterOption &otherFilter);
62 void setInactive(const CombinedFilterOption &otherFilter);
62
63
63− bool m_active; //not needed???
64+ bool m_active;
64 bool m_requested_active;
65 bool m_requested_active;
65 unity::dash::FilterOption::Ptr m_unityFilterOption[2];
66 unity::dash::FilterOption::Ptr m_unityFilterOption[2];
67+ SignalsList m_signals;
66
68
67 friend class CombinedFilterOptions;
69 friend class CombinedFilterOptions;
68};
70};
plugins/Unity/filter.cpp+9−9
@@ -85,22 +85,22 @@ void Filter::clear()
85void Filter::setUnityFilter(unity::dash::Filter::Ptr unityFilter)
85void Filter::setUnityFilter(unity::dash::Filter::Ptr unityFilter)
86{
86{
87 if (m_unityFilter != NULL) {
87 if (m_unityFilter != NULL) {
88− // FIXME: should disconnect from m_unityFilter's signals
88+ m_signals.disconnectAll();
89 }
89 }
90
90
91 m_unityFilter = unityFilter;
91 m_unityFilter = unityFilter;
92
92
93 /* Property change signals */
93 /* Property change signals */
94− m_unityFilter->id.changed.connect(sigc::mem_fun(this, &Filter::idChanged));
94+ m_signals << m_unityFilter->id.changed.connect(sigc::mem_fun(this, &Filter::idChanged))
95− m_unityFilter->name.changed.connect(sigc::mem_fun(this, &Filter::nameChanged));
95+ << m_unityFilter->name.changed.connect(sigc::mem_fun(this, &Filter::nameChanged))
96− m_unityFilter->icon_hint.changed.connect(sigc::mem_fun(this, &Filter::iconHintChanged));
96+ << m_unityFilter->icon_hint.changed.connect(sigc::mem_fun(this, &Filter::iconHintChanged))
97− m_unityFilter->renderer_name.changed.connect(sigc::mem_fun(this, &Filter::rendererNameChanged));
97+ << m_unityFilter->renderer_name.changed.connect(sigc::mem_fun(this, &Filter::rendererNameChanged))
98− m_unityFilter->visible.changed.connect(sigc::mem_fun(this, &Filter::visibleChanged));
98+ << m_unityFilter->visible.changed.connect(sigc::mem_fun(this, &Filter::visibleChanged))
99− m_unityFilter->collapsed.changed.connect(sigc::mem_fun(this, &Filter::collapsedChanged));
99+ << m_unityFilter->collapsed.changed.connect(sigc::mem_fun(this, &Filter::collapsedChanged))
100− m_unityFilter->filtering.changed.connect(sigc::mem_fun(this, &Filter::filteringChanged));
100+ << m_unityFilter->filtering.changed.connect(sigc::mem_fun(this, &Filter::filteringChanged));
101
101
102 /* Signals forwarding */
102 /* Signals forwarding */
103− m_unityFilter->removed.connect(sigc::mem_fun(this, &Filter::removed));
103+ m_signals << m_unityFilter->removed.connect(sigc::mem_fun(this, &Filter::removed));
104}
104}
105
105
106Filter* Filter::newFromUnityFilter(unity::dash::Filter::Ptr unityFilter)
106Filter* Filter::newFromUnityFilter(unity::dash::Filter::Ptr unityFilter)
plugins/Unity/filter.h+6
@@ -27,6 +27,9 @@
27// libunity-core
27// libunity-core
28#include <UnityCore/Filter.h>
28#include <UnityCore/Filter.h>
29
29
30+// local
31+#include "signalslist.h"
32+
30class Q_DECL_EXPORT Filter : public QObject
33class Q_DECL_EXPORT Filter : public QObject
31{
34{
32 Q_OBJECT
35 Q_OBJECT
@@ -70,6 +73,9 @@ Q_SIGNALS:
70protected:
73protected:
71 unity::dash::Filter::Ptr m_unityFilter;
74 unity::dash::Filter::Ptr m_unityFilter;
72 virtual void setUnityFilter(unity::dash::Filter::Ptr unityFilter);
75 virtual void setUnityFilter(unity::dash::Filter::Ptr unityFilter);
76+
77+private:
78+ SignalsList m_signals;
73};
79};
74
80
75Q_DECLARE_METATYPE(Filter*)
81Q_DECLARE_METATYPE(Filter*)
plugins/Unity/filteroption.cpp+5−5
@@ -57,16 +57,16 @@ void FilterOption::setActive(bool active)
57void FilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption)
57void FilterOption::setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption)
58{
58{
59 if (m_unityFilterOption != NULL) {
59 if (m_unityFilterOption != NULL) {
60− // FIXME: should disconnect from m_unityFilterOption's signals
60+ m_signals.disconnectAll();
61 }
61 }
62
62
63 m_unityFilterOption = unityFilterOption;
63 m_unityFilterOption = unityFilterOption;
64
64
65 /* Property change signals */
65 /* Property change signals */
66− m_unityFilterOption->id.changed.connect(sigc::mem_fun(this, &FilterOption::idChanged));
66+ m_signals << m_unityFilterOption->id.changed.connect(sigc::mem_fun(this, &FilterOption::idChanged))
67− m_unityFilterOption->name.changed.connect(sigc::mem_fun(this, &FilterOption::nameChanged));
67+ << m_unityFilterOption->name.changed.connect(sigc::mem_fun(this, &FilterOption::nameChanged))
68− m_unityFilterOption->icon_hint.changed.connect(sigc::mem_fun(this, &FilterOption::iconHintChanged));
68+ << m_unityFilterOption->icon_hint.changed.connect(sigc::mem_fun(this, &FilterOption::iconHintChanged))
69− m_unityFilterOption->active.changed.connect(sigc::mem_fun(this, &FilterOption::activeChanged));
69+ << m_unityFilterOption->active.changed.connect(sigc::mem_fun(this, &FilterOption::activeChanged));
70}
70}
71
71
72#include "filteroption.moc"
72#include "filteroption.moc"
plugins/Unity/filteroption.h+2
@@ -23,6 +23,7 @@
23// Local
23// Local
24#include "abstractfilteroption.h"
24#include "abstractfilteroption.h"
25#include "listmodelwrapper.h"
25#include "listmodelwrapper.h"
26+#include "signalslist.h"
26
27
27// libunity-core
28// libunity-core
28#include <UnityCore/Filter.h>
29#include <UnityCore/Filter.h>
@@ -45,6 +46,7 @@ public:
45
46
46private:
47private:
47 void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption);
48 void setUnityFilterOption(unity::dash::FilterOption::Ptr unityFilterOption);
49+ SignalsList m_signals;
48
50
49 unity::dash::FilterOption::Ptr m_unityFilterOption;
51 unity::dash::FilterOption::Ptr m_unityFilterOption;
50};
52};
plugins/Unity/multirangefilter.cpp+2−5
@@ -41,19 +41,16 @@ void MultiRangeFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
41void MultiRangeFilter::onOptionsChanged(unity::dash::MultiRangeFilter::Options /* options */)
41void MultiRangeFilter::onOptionsChanged(unity::dash::MultiRangeFilter::Options /* options */)
42{
42{
43 if (m_options != NULL) {
43 if (m_options != NULL) {
44− // FIXME: should disconnect from m_unityFilter's signals
44+ m_signals.disconnectAll();
45 delete m_options;
45 delete m_options;
46 m_options = NULL;
46 m_options = NULL;
47 }
47 }
48−/* m_options = new FilterOptions(m_unityMultiRangeFilter->options,
49− m_unityMultiRangeFilter->option_added,
50− m_unityMultiRangeFilter->option_removed);*/
51
48
52 m_options = new CombinedFilterOptions(m_unityMultiRangeFilter->options,
49 m_options = new CombinedFilterOptions(m_unityMultiRangeFilter->options,
53 m_unityMultiRangeFilter->option_added,
50 m_unityMultiRangeFilter->option_added,
54 m_unityMultiRangeFilter->option_removed);
51 m_unityMultiRangeFilter->option_removed);
55 /* Property change signals */
52 /* Property change signals */
56− m_unityMultiRangeFilter->options.changed.connect(sigc::mem_fun(this, &MultiRangeFilter::onOptionsChanged));
53+ m_signals << m_unityMultiRangeFilter->options.changed.connect(sigc::mem_fun(this, &MultiRangeFilter::onOptionsChanged));
57
54
58 Q_EMIT optionsChanged();
55 Q_EMIT optionsChanged();
59}
56}
plugins/Unity/multirangefilter.h+2
@@ -31,6 +31,7 @@
31#include "filter.h"
31#include "filter.h"
32#include "filteroption.h"
32#include "filteroption.h"
33#include "combinedfilteroptions.h"
33#include "combinedfilteroptions.h"
34+#include "signalslist.h"
34
35
35class Q_DECL_EXPORT MultiRangeFilter : public Filter
36class Q_DECL_EXPORT MultiRangeFilter : public Filter
36{
37{
@@ -53,6 +54,7 @@ protected:
53private:
54private:
54 unity::dash::MultiRangeFilter::Ptr m_unityMultiRangeFilter;
55 unity::dash::MultiRangeFilter::Ptr m_unityMultiRangeFilter;
55 CombinedFilterOptions* m_options;
56 CombinedFilterOptions* m_options;
57+ SignalsList m_signals;
56
58
57 void onOptionsChanged(unity::dash::MultiRangeFilter::Options);
59 void onOptionsChanged(unity::dash::MultiRangeFilter::Options);
58};
60};
plugins/Unity/radiooptionfilter.cpp+2−2
@@ -51,7 +51,7 @@ void RadioOptionFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
51void RadioOptionFilter::onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions)
51void RadioOptionFilter::onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions)
52{
52{
53 if (m_options != NULL) {
53 if (m_options != NULL) {
54− // FIXME: should disconnect from m_unityFilter's signals
54+ m_signals.disconnectAll();
55 delete m_options;
55 delete m_options;
56 m_options = NULL;
56 m_options = NULL;
57 }
57 }
@@ -59,7 +59,7 @@ void RadioOptionFilter::onOptionsChanged(unity::dash::RadioOptionFilter::RadioOp
59 m_unityRadioOptionFilter->option_added,
59 m_unityRadioOptionFilter->option_added,
60 m_unityRadioOptionFilter->option_removed);
60 m_unityRadioOptionFilter->option_removed);
61 /* Property change signals */
61 /* Property change signals */
62− m_unityRadioOptionFilter->options.changed.connect(sigc::mem_fun(this, &RadioOptionFilter::onOptionsChanged));
62+ m_signals << m_unityRadioOptionFilter->options.changed.connect(sigc::mem_fun(this, &RadioOptionFilter::onOptionsChanged));
63
63
64 Q_EMIT optionsChanged();
64 Q_EMIT optionsChanged();
65}
65}
plugins/Unity/radiooptionfilter.h+2
@@ -30,6 +30,7 @@
30// Local
30// Local
31#include "filter.h"
31#include "filter.h"
32#include "filteroption.h"
32#include "filteroption.h"
33+#include "signalslist.h"
33
34
34class Q_DECL_EXPORT RadioOptionFilter : public Filter
35class Q_DECL_EXPORT RadioOptionFilter : public Filter
35{
36{
@@ -54,6 +55,7 @@ protected:
54private:
55private:
55 unity::dash::RadioOptionFilter::Ptr m_unityRadioOptionFilter;
56 unity::dash::RadioOptionFilter::Ptr m_unityRadioOptionFilter;
56 FilterOptions* m_options;
57 FilterOptions* m_options;
58+ SignalsList m_signals;
57
59
58 void onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions);
60 void onOptionsChanged(unity::dash::RadioOptionFilter::RadioOptions);
59};
61};
plugins/Unity/ratingsfilter.cpp+2−2
@@ -38,14 +38,14 @@ void RatingsFilter::setRating(float rating)
38void RatingsFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
38void RatingsFilter::setUnityFilter(unity::dash::Filter::Ptr filter)
39{
39{
40 if (m_unityFilter != NULL) {
40 if (m_unityFilter != NULL) {
41− // FIXME: should disconnect from m_unityFilter's signals
41+ m_signals.disconnectAll();
42 }
42 }
43
43
44 Filter::setUnityFilter(filter);
44 Filter::setUnityFilter(filter);
45 m_unityRatingsFilter = std::dynamic_pointer_cast<unity::dash::RatingsFilter>(m_unityFilter);
45 m_unityRatingsFilter = std::dynamic_pointer_cast<unity::dash::RatingsFilter>(m_unityFilter);
46
46
47 /* Property change signals */
47 /* Property change signals */
48− m_unityRatingsFilter->rating.changed.connect(sigc::mem_fun(this, &RatingsFilter::ratingChanged));
48+ m_signals << m_unityRatingsFilter->rating.changed.connect(sigc::mem_fun(this, &RatingsFilter::ratingChanged));
49}
49}
50
50
51#include "ratingsfilter.moc"
51#include "ratingsfilter.moc"
plugins/Unity/ratingsfilter.h+2
@@ -29,6 +29,7 @@
29
29
30// Local
30// Local
31#include "filter.h"
31#include "filter.h"
32+#include "signalslist.h"
32
33
33class Q_DECL_EXPORT RatingsFilter : public Filter
34class Q_DECL_EXPORT RatingsFilter : public Filter
34{
35{
@@ -53,6 +54,7 @@ protected:
53
54
54private:
55private:
55 unity::dash::RatingsFilter::Ptr m_unityRatingsFilter;
56 unity::dash::RatingsFilter::Ptr m_unityRatingsFilter;
57+ SignalsList m_signals;
56};
58};
57
59
58Q_DECLARE_METATYPE(RatingsFilter*)
60Q_DECLARE_METATYPE(RatingsFilter*)
plugins/Unity/signalslist.cppnew file+39
@@ -0,0 +1,39 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Pawel Stolowski <pawel.stolowski@canonical.com>
6+ *
7+ * This program is free software; you can redistribute it and/or modify
8+ * it under the terms of the GNU General Public License as published by
9+ * the Free Software Foundation; version 3.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18+ */
19+
20+#include "signalslist.h"
21+
22+void SignalsList::append(const sigc::connection &c)
23+{
24+ m_signals.append(c);
25+}
26+
27+void SignalsList::disconnectAll()
28+{
29+ Q_FOREACH(auto sig, m_signals) {
30+ sig.disconnect();
31+ }
32+ m_signals.clear();
33+}
34+
35+SignalsList& SignalsList::operator<<(const sigc::connection &c)
36+{
37+ append(c);
38+ return *this;
39+}
plugins/Unity/signalslist.hnew file+38
@@ -0,0 +1,38 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * Authors:
5+ * Pawel Stolowski <pawel.stolowski@canonical.com>
6+ *
7+ * This program is free software; you can redistribute it and/or modify
8+ * it under the terms of the GNU General Public License as published by
9+ * the Free Software Foundation; version 3.
10+ *
11+ * This program is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+ * GNU General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU General Public License
17+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
18+ */
19+
20+#ifndef SIGNALSLIST_H
21+#define SIGNALSLIST_H
22+
23+#include <QList>
24+#include <sigc++/sigc++.h>
25+
26+class Q_DECL_EXPORT SignalsList
27+{
28+public:
29+ void append(const sigc::connection &c);
30+ void disconnectAll();
31+
32+ SignalsList& operator<<(const sigc::connection &c);
33+
34+private:
35+ QList<sigc::connection> m_signals;
36+};
37+
38+#endif
tests/plugins/Unity/CMakeLists.txt+4
@@ -1,6 +1,7 @@
1pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
1pkg_check_modules(UNITYCORE REQUIRED unity-core-6.0)
2pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
2pkg_check_modules(LIBUNITYPROTO REQUIRED unity-protocol-private)
3pkg_check_modules(LIBUNITY REQUIRED unity)
3pkg_check_modules(LIBUNITY REQUIRED unity)
4+pkg_check_modules(LIBSIGCPP REQUIRED sigc++-2.0)
4
5
5include_directories(
6include_directories(
6 ${Unity-qml_SOURCE_DIR}
7 ${Unity-qml_SOURCE_DIR}
@@ -8,6 +9,7 @@ include_directories(
8 ${CMAKE_CURRENT_BINARY_DIR}
9 ${CMAKE_CURRENT_BINARY_DIR}
9 ${LIBUNITYPROTO_INCLUDE_DIRS}
10 ${LIBUNITYPROTO_INCLUDE_DIRS}
10 ${LIBUNITY_INCLUDE_DIRS}
11 ${LIBUNITY_INCLUDE_DIRS}
12+ ${LIBSIGCPP_INCLUDE_DIRS}
11 ${UNITYCORE_INCLUDE_DIRS}
13 ${UNITYCORE_INCLUDE_DIRS}
12 )
14 )
13
15
@@ -30,6 +32,7 @@ macro(run_tests)
30 ${UNITYCORE_LDFLAGS}
32 ${UNITYCORE_LDFLAGS}
31 ${LIBUNITY_LDFLAGS}
33 ${LIBUNITY_LDFLAGS}
32 ${LIBUNITYPROTO_LDFLAGS}
34 ${LIBUNITYPROTO_LDFLAGS}
35+ ${LIBSIGCPP_LDFLAGS}
33 )
36 )
34
37
35 set(_test_list "${_test_list};${_test}")
38 set(_test_list "${_test_list};${_test}")
@@ -37,6 +40,7 @@ macro(run_tests)
37endmacro(run_tests)
40endmacro(run_tests)
38
41
39run_tests(
42run_tests(
43+ signalslisttest
40 previewbindingstest
44 previewbindingstest
41 filtersbindingstest
45 filtersbindingstest
42 )
46 )
tests/plugins/Unity/signalslisttest.cppnew file+57
@@ -0,0 +1,57 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+// local
18+#include "signalslisttest.h"
19+#include "signalslist.h"
20+
21+// Qt
22+#include <QTest>
23+
24+class TestSource
25+{
26+ public:
27+ TestSource(): m_count(0) {}
28+ void update()
29+ {
30+ countChanged(++m_count);
31+ }
32+
33+ sigc::signal<void, int> countChanged;
34+ int m_count;
35+};
36+
37+void SignalsListTest::testSignalsList()
38+{
39+ TestSource src;
40+ SignalsList signals;
41+ int counter = -1;
42+
43+ signals << src.countChanged.connect([&counter](int val) {
44+ counter = val;
45+ });
46+
47+ src.update();
48+ QCOMPARE(counter, 1);
49+ src.update();
50+ QCOMPARE(counter, 2);
51+
52+ signals.disconnectAll();
53+ src.update();
54+ QCOMPARE(counter, 2);
55+}
56+
57+QTEST_MAIN(SignalsListTest)
tests/plugins/Unity/signalslisttest.hnew file+30
@@ -0,0 +1,30 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+#ifndef SIGNALSLISTTEST_H
18+#define SIGNALSLISTTEST_H
19+
20+#include <QObject>
21+
22+class SignalsListTest : public QObject
23+{
24+ Q_OBJECT
25+
26+ private Q_SLOTS:
27+ void testSignalsList();
28+};
29+
30+#endif