20 const auto A =
"a"_qs;
21 const auto B =
"b"_qs;
22 const auto C =
"c"_qs;
23 const auto D =
"d"_qs;
26 void TagsChangeTest::testDifference_data ()
28 QTest::addColumn<QStringList> (
"before");
29 QTest::addColumn<QStringList> (
"after");
30 QTest::addColumn<QStringList> (
"added");
31 QTest::addColumn<QStringList> (
"removed");
33 QTest::newRow (
"removal") << QStringList { A, B } << QStringList { A } << QStringList {} << QStringList { B };
34 QTest::newRow (
"addition") << QStringList { A } << QStringList { A, D } << QStringList { D } << QStringList {};
35 QTest::newRow (
"both") << QStringList { A, B } << QStringList { B, C } << QStringList { C } << QStringList { A };
36 QTest::newRow (
"none") << QStringList {} << QStringList {} << QStringList {} << QStringList {};
37 QTest::newRow (
"same") << QStringList { A, B } << QStringList { A, B } << QStringList {} << QStringList {};
38 QTest::newRow (
"reordering") << QStringList { A, B } << QStringList { B, A } << QStringList {} << QStringList {};
39 QTest::newRow (
"repetitions") << QStringList { A, A } << QStringList { D, A, D } << QStringList { D } << QStringList {};
40 QTest::newRow (
"order of after") << QStringList {} << QStringList { D, C } << QStringList { D, C } << QStringList {};
41 QTest::newRow (
"order of before") << QStringList { D, C } << QStringList {} << QStringList {} << QStringList { D, C };
44 void TagsChangeTest::testDifference ()
46 QFETCH (QStringList, before);
47 QFETCH (QStringList, after);
48 QFETCH (QStringList, added);
49 QFETCH (QStringList, removed);
51 const TagsChange change { .Before_ = before, .After_ = after };
52 QCOMPARE (change.Added (), added);
53 QCOMPARE (change.Removed (), removed);
54 QCOMPARE (change.IsEmpty (), added.isEmpty () && removed.isEmpty ());
57 void TagsChangeTest::testApplyTo_data ()
59 QTest::addColumn<QStringList> (
"tags");
60 QTest::addColumn<QStringList> (
"before");
61 QTest::addColumn<QStringList> (
"after");
62 QTest::addColumn<QStringList> (
"expected");
64 QTest::newRow (
"removal") << QStringList { A, B, C } << QStringList { A, B } << QStringList { A } << QStringList { A, C };
65 QTest::newRow (
"addition") << QStringList { C } << QStringList { A } << QStringList { A, D } << QStringList { C, D };
66 QTest::newRow (
"only the difference") << QStringList { C } << QStringList { A, B } << QStringList { A, B, D } << QStringList { C, D };
67 QTest::newRow (
"no change") << QStringList { C, D } << QStringList { A, B } << QStringList { A, B } << QStringList { C, D };
68 QTest::newRow (
"reordering") << QStringList { B, A } << QStringList { A, B } << QStringList { B, A } << QStringList { B, A };
69 QTest::newRow (
"added already present") << QStringList { D, C } << QStringList {} << QStringList { D } << QStringList { D, C };
70 QTest::newRow (
"added twice") << QStringList {} << QStringList {} << QStringList { D, D } << QStringList { D };
71 QTest::newRow (
"removed twice present") << QStringList { A, C, A } << QStringList { A } << QStringList {} << QStringList { C };
74 void TagsChangeTest::testApplyTo ()
76 QFETCH (QStringList, tags);
77 QFETCH (QStringList, before);
78 QFETCH (QStringList, after);
79 QFETCH (QStringList, expected);
81 QCOMPARE ((TagsChange { .Before_ = before, .After_ = after }.ApplyTo (tags)), expected);