LeechCraft 0.6.70-19424-g027e980fd1
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
tagschangetest.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
9#include "tagschangetest.h"
10#include <QTest>
11#include <util/sll/qtutil.h>
12#include "tagschange.h"
13
14QTEST_APPLESS_MAIN (LC::Util::TagsChangeTest)
15
16namespace LC::Util
17{
18 namespace
19 {
20 const auto A = "a"_qs;
21 const auto B = "b"_qs;
22 const auto C = "c"_qs;
23 const auto D = "d"_qs;
24 }
25
26 void TagsChangeTest::testDifference_data ()
27 {
28 QTest::addColumn<QStringList> ("before");
29 QTest::addColumn<QStringList> ("after");
30 QTest::addColumn<QStringList> ("added");
31 QTest::addColumn<QStringList> ("removed");
32
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 };
42 }
43
44 void TagsChangeTest::testDifference ()
45 {
46 QFETCH (QStringList, before);
47 QFETCH (QStringList, after);
48 QFETCH (QStringList, added);
49 QFETCH (QStringList, removed);
50
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 ());
55 }
56
57 void TagsChangeTest::testApplyTo_data ()
58 {
59 QTest::addColumn<QStringList> ("tags");
60 QTest::addColumn<QStringList> ("before");
61 QTest::addColumn<QStringList> ("after");
62 QTest::addColumn<QStringList> ("expected");
63
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 };
72 }
73
74 void TagsChangeTest::testApplyTo ()
75 {
76 QFETCH (QStringList, tags);
77 QFETCH (QStringList, before);
78 QFETCH (QStringList, after);
79 QFETCH (QStringList, expected);
80
81 QCOMPARE ((TagsChange { .Before_ = before, .After_ = after }.ApplyTo (tags)), expected);
82 }
83}