Changeset View
Changeset View
Standalone View
Standalone View
kmymoney/mymoney/tests/mymoneyobject-test.cpp
Show All 19 Lines | |||||
20 | #include <QtTest> | 20 | #include <QtTest> | ||
21 | #include <QDomDocument> | 21 | #include <QDomDocument> | ||
22 | #include <QDomElement> | 22 | #include <QDomElement> | ||
23 | 23 | | |||
24 | #include "mymoneyobject_p.h" | 24 | #include "mymoneyobject_p.h" | ||
25 | #include "mymoneyexception.h" | 25 | #include "mymoneyexception.h" | ||
26 | #include "mymoneyaccount.h" | 26 | #include "mymoneyaccount.h" | ||
27 | 27 | | |||
28 | class TestMyMoneyObjectPrivate : public MyMoneyObjectPrivate | | |||
29 | { | | |||
30 | public: | | |||
31 | TestMyMoneyObjectPrivate() | | |||
32 | { | | |||
33 | } | | |||
34 | }; | | |||
35 | class TestMyMoneyObject : public MyMoneyObject | | |||
36 | { | | |||
37 | Q_DECLARE_PRIVATE(TestMyMoneyObject) | | |||
38 | public: | | |||
39 | TestMyMoneyObject() : MyMoneyObject(*new MyMoneyObjectPrivate) {} | | |||
40 | TestMyMoneyObject & operator=(TestMyMoneyObject other); | | |||
41 | friend void swap(TestMyMoneyObject& first, TestMyMoneyObject& second); | | |||
42 | ~TestMyMoneyObject(){} | | |||
43 | TestMyMoneyObject(const QDomElement& node, const bool forceId = true) : | | |||
44 | MyMoneyObject(*new MyMoneyObjectPrivate, node, forceId) {} | | |||
45 | bool hasReferenceTo(const QString&) const final override { | | |||
46 | return false; | | |||
47 | } | | |||
48 | void writeXML(QDomDocument&, QDomElement&) const final override {} | | |||
49 | }; | | |||
50 | | ||||
51 | void swap(TestMyMoneyObject& first, TestMyMoneyObject& second) | | |||
52 | { | | |||
53 | using std::swap; | | |||
54 | swap(first.d_ptr, second.d_ptr); | | |||
55 | } | | |||
56 | | ||||
57 | TestMyMoneyObject & TestMyMoneyObject::operator=(TestMyMoneyObject other) | | |||
58 | { | | |||
59 | swap(*this, other); | | |||
60 | return *this; | | |||
61 | } | | |||
62 | | ||||
63 | QTEST_GUILESS_MAIN(MyMoneyObjectTest) | 28 | QTEST_GUILESS_MAIN(MyMoneyObjectTest) | ||
64 | 29 | | |||
65 | void MyMoneyObjectTest::testEmptyConstructor() | 30 | void MyMoneyObjectTest::testEmptyConstructor() | ||
66 | { | 31 | { | ||
67 | MyMoneyAccount a; | 32 | MyMoneyAccount a; | ||
68 | QVERIFY(a.id().isEmpty()); | 33 | QVERIFY(a.id().isEmpty()); | ||
69 | } | 34 | } | ||
70 | 35 | | |||
Show All 34 Lines | |||||
105 | { | 70 | { | ||
106 | MyMoneyAccount a(QString("thb"), MyMoneyAccount()); | 71 | MyMoneyAccount a(QString("thb"), MyMoneyAccount()); | ||
107 | MyMoneyAccount b(QString("thb"), MyMoneyAccount()); | 72 | MyMoneyAccount b(QString("thb"), MyMoneyAccount()); | ||
108 | MyMoneyAccount c(QString("ace"), MyMoneyAccount()); | 73 | MyMoneyAccount c(QString("ace"), MyMoneyAccount()); | ||
109 | 74 | | |||
110 | QVERIFY(a.MyMoneyObject::operator==(b)); | 75 | QVERIFY(a.MyMoneyObject::operator==(b)); | ||
111 | QVERIFY(!(a.MyMoneyObject::operator==(c))); | 76 | QVERIFY(!(a.MyMoneyObject::operator==(c))); | ||
112 | } | 77 | } | ||
113 | | ||||
114 | void MyMoneyObjectTest::testReadXML() | | |||
115 | { | | |||
116 | TestMyMoneyObject t; | | |||
117 | | ||||
118 | QString ref_ok = QString( | | |||
119 | "<!DOCTYPE TEST>\n" | | |||
120 | "<TRANSACTION-CONTAINER>\n" | | |||
121 | " <MYMONEYOBJECT id=\"T000000000000000001\" >\n" | | |||
122 | " </MYMONEYOBJECT>\n" | | |||
123 | "</TRANSACTION-CONTAINER>\n" | | |||
124 | ); | | |||
125 | | ||||
126 | QString ref_false1 = QString( | | |||
127 | "<!DOCTYPE TEST>\n" | | |||
128 | "<TRANSACTION-CONTAINER>\n" | | |||
129 | " <MYMONEYOBJECT id=\"\" >\n" | | |||
130 | " </MYMONEYOBJECT>\n" | | |||
131 | "</TRANSACTION-CONTAINER>\n" | | |||
132 | ); | | |||
133 | | ||||
134 | QString ref_false2 = QString( | | |||
135 | "<!DOCTYPE TEST>\n" | | |||
136 | "<TRANSACTION-CONTAINER>\n" | | |||
137 | " <MYMONEYOBJECT >\n" | | |||
138 | " </MYMONEYOBJECT>\n" | | |||
139 | "</TRANSACTION-CONTAINER>\n" | | |||
140 | ); | | |||
141 | | ||||
142 | QDomDocument doc; | | |||
143 | QDomElement node; | | |||
144 | | ||||
145 | // id="" but required | | |||
146 | doc.setContent(ref_false1); | | |||
147 | node = doc.documentElement().firstChild().toElement(); | | |||
148 | | ||||
149 | try { | | |||
150 | t = TestMyMoneyObject(node); | | |||
151 | QFAIL("Missing expected exception"); | | |||
152 | } catch (const MyMoneyException &) { | | |||
153 | } | | |||
154 | | ||||
155 | // id attribute missing but required | | |||
156 | doc.setContent(ref_false2); | | |||
157 | node = doc.documentElement().firstChild().toElement(); | | |||
158 | | ||||
159 | try { | | |||
160 | t = TestMyMoneyObject(node); | | |||
161 | QFAIL("Missing expected exception"); | | |||
162 | } catch (const MyMoneyException &) { | | |||
163 | } | | |||
164 | | ||||
165 | // id present | | |||
166 | doc.setContent(ref_ok); | | |||
167 | node = doc.documentElement().firstChild().toElement(); | | |||
168 | | ||||
169 | try { | | |||
170 | t = TestMyMoneyObject(node); | | |||
171 | QVERIFY(t.id() == "T000000000000000001"); | | |||
172 | } catch (const MyMoneyException &) { | | |||
173 | QFAIL("Unexpected exception"); | | |||
174 | } | | |||
175 | | ||||
176 | // id="" but not required | | |||
177 | doc.setContent(ref_false1); | | |||
178 | node = doc.documentElement().firstChild().toElement(); | | |||
179 | | ||||
180 | try { | | |||
181 | t = TestMyMoneyObject(node, false); | | |||
182 | QVERIFY(t.id().isEmpty()); | | |||
183 | } catch (const MyMoneyException &) { | | |||
184 | QFAIL("Unexpected exception"); | | |||
185 | } | | |||
186 | } | |