11#include <QStringListModel>
22 QStringList Criticals;
24 class CriticalsCollector
26 QtMessageHandler Prev_;
29 : Prev_ { qInstallMessageHandler (&Handle) }
34 ~CriticalsCollector ()
36 qInstallMessageHandler (Prev_);
39 CriticalsCollector (
const CriticalsCollector&) =
delete;
40 CriticalsCollector& operator= (
const CriticalsCollector&) =
delete;
42 static void Handle (QtMsgType type,
const QMessageLogContext&,
const QString& msg)
44 if (type == QtCriticalMsg)
49 QStringList Rows (
const QAbstractItemModel& model)
52 for (
int i = 0; i < model.rowCount (); ++i)
53 result << model.index (i, 0).data ().toString ();
58 void FixedStringFilterProxyModelTest::testFiltering ()
60 QStringListModel source { { u
"Pink Floyd"_qs, u
"AC/DC"_qs, u
"Кино"_qs, u
"Beatles"_qs } };
61 FixedStringFilterProxyModel model;
62 model.setSourceModel (&source);
64 model.SetFilterString (u
"k f"_qs);
65 QCOMPARE (Rows (model), (QStringList { u
"Pink Floyd"_qs }));
67 model.SetFilterString (u
"/"_qs);
68 QCOMPARE (Rows (model), (QStringList { u
"AC/DC"_qs }));
70 model.SetFilterString (u
"кИн"_qs);
71 QCOMPARE (Rows (model), (QStringList { u
"Кино"_qs }));
73 model.SetCaseSensitivity (Qt::CaseSensitive);
74 QCOMPARE (Rows (model), QStringList {});
77 void FixedStringFilterProxyModelTest::testOwnSettersAreQuiet ()
79 QStringListModel source { { u
"a"_qs, u
"b"_qs } };
81 CriticalsCollector collector;
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);
94 QCOMPARE (Criticals, QStringList {});
97 void FixedStringFilterProxyModelTest::testQtSettersAreReported ()
99 using Setter_f = std::function<void (FixedStringFilterProxyModel&)>;
100 const std::initializer_list<std::tuple<const char*, Setter_f, const char*>> cases
103 "fixed string via base",
104 [] (QSortFilterProxyModel& m) { m.setFilterFixedString (u
"a"_qs); },
108 "fixed string by name",
109 [] (QObject& m) { QMetaObject::invokeMethod (&m,
"setFilterFixedString", u
"a"_qs); },
114 [] (QSortFilterProxyModel& m) { m.setFilterWildcard (u
"a*"_qs); },
119 [] (QSortFilterProxyModel& m) { m.setFilterRegularExpression (u
"a"_qs); },
124 [] (QSortFilterProxyModel& m) { m.setFilterCaseSensitivity (Qt::CaseInsensitive); },
125 "SetCaseSensitivity ()"
129 [] (QSortFilterProxyModel& m) { m.setFilterKeyColumn (1); },
130 "SetFilterColumns ()"
134 [] (QSortFilterProxyModel& m) { m.setFilterRole (Qt::UserRole); },
139 for (
const auto& [name, setter, replacement] : cases)
141 FixedStringFilterProxyModel model;
143 CriticalsCollector collector;
146 QVERIFY2 (Criticals.size () == 1, name);
147 QVERIFY2 (Criticals.front ().contains (QLatin1StringView { replacement }), name);