LeechCraft 0.6.70-19424-g027e980fd1
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
fixedstringfilterproxymodeltest.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
10#include <functional>
11#include <QStringListModel>
12#include <QTest>
13#include <util/sll/qtutil.h>
15
17
18namespace LC::Util
19{
20 namespace
21 {
22 QStringList Criticals;
23
24 class CriticalsCollector
25 {
26 QtMessageHandler Prev_;
27 public:
28 CriticalsCollector ()
29 : Prev_ { qInstallMessageHandler (&Handle) }
30 {
31 Criticals.clear ();
32 }
33
34 ~CriticalsCollector ()
35 {
36 qInstallMessageHandler (Prev_);
37 }
38
39 CriticalsCollector (const CriticalsCollector&) = delete;
40 CriticalsCollector& operator= (const CriticalsCollector&) = delete;
41 private:
42 static void Handle (QtMsgType type, const QMessageLogContext&, const QString& msg)
43 {
44 if (type == QtCriticalMsg)
45 Criticals << msg;
46 }
47 };
48
49 QStringList Rows (const QAbstractItemModel& model)
50 {
51 QStringList result;
52 for (int i = 0; i < model.rowCount (); ++i)
53 result << model.index (i, 0).data ().toString ();
54 return result;
55 }
56 }
57
58 void FixedStringFilterProxyModelTest::testFiltering ()
59 {
60 QStringListModel source { { u"Pink Floyd"_qs, u"AC/DC"_qs, u"Кино"_qs, u"Beatles"_qs } };
61 FixedStringFilterProxyModel model;
62 model.setSourceModel (&source);
63
64 model.SetFilterString (u"k f"_qs);
65 QCOMPARE (Rows (model), (QStringList { u"Pink Floyd"_qs }));
66
67 model.SetFilterString (u"/"_qs);
68 QCOMPARE (Rows (model), (QStringList { u"AC/DC"_qs }));
69
70 model.SetFilterString (u"кИн"_qs);
71 QCOMPARE (Rows (model), (QStringList { u"Кино"_qs }));
72
73 model.SetCaseSensitivity (Qt::CaseSensitive);
74 QCOMPARE (Rows (model), QStringList {});
75 }
76
77 void FixedStringFilterProxyModelTest::testOwnSettersAreQuiet ()
78 {
79 QStringListModel source { { u"a"_qs, u"b"_qs } };
80
81 CriticalsCollector collector;
82
83 FixedStringFilterProxyModel model;
84 model.setSourceModel (&source);
85 model.SetFilterString (u"a"_qs);
86 model.SetCaseSensitivity (Qt::CaseSensitive);
87 model.SetFilterRoles ({ Qt::DisplayRole, Qt::EditRole });
88 model.SetFilterColumns ({ 0 });
89 model.setRecursiveFilteringEnabled (false);
90 model.setAutoAcceptChildRows (true);
91 model.setSortRole (Qt::EditRole);
92 model.sort (0);
93
94 QCOMPARE (Criticals, QStringList {});
95 }
96
97 void FixedStringFilterProxyModelTest::testQtSettersAreReported ()
98 {
99 using Setter_f = std::function<void (FixedStringFilterProxyModel&)>;
100 const std::initializer_list<std::tuple<const char*, Setter_f, const char*>> cases
101 {
102 {
103 "fixed string via base",
104 [] (QSortFilterProxyModel& m) { m.setFilterFixedString (u"a"_qs); },
105 "SetFilterString ()"
106 },
107 {
108 "fixed string by name",
109 [] (QObject& m) { QMetaObject::invokeMethod (&m, "setFilterFixedString", u"a"_qs); },
110 "SetFilterString ()"
111 },
112 {
113 "wildcard",
114 [] (QSortFilterProxyModel& m) { m.setFilterWildcard (u"a*"_qs); },
115 "SetFilterString ()"
116 },
117 {
118 "regex",
119 [] (QSortFilterProxyModel& m) { m.setFilterRegularExpression (u"a"_qs); },
120 "SetFilterString ()"
121 },
122 {
123 "case sensitivity",
124 [] (QSortFilterProxyModel& m) { m.setFilterCaseSensitivity (Qt::CaseInsensitive); },
125 "SetCaseSensitivity ()"
126 },
127 {
128 "key column",
129 [] (QSortFilterProxyModel& m) { m.setFilterKeyColumn (1); },
130 "SetFilterColumns ()"
131 },
132 {
133 "role",
134 [] (QSortFilterProxyModel& m) { m.setFilterRole (Qt::UserRole); },
135 "SetFilterRoles ()"
136 },
137 };
138
139 for (const auto& [name, setter, replacement] : cases)
140 {
141 FixedStringFilterProxyModel model;
142
143 CriticalsCollector collector;
144 setter (model);
145
146 QVERIFY2 (Criticals.size () == 1, name);
147 QVERIFY2 (Criticals.front ().contains (QLatin1StringView { replacement }), name);
148 }
149 }
150}