##// END OF EJS Templates
Adds "number of operations" and "number of variables" properties for the tests
Adds "number of operations" and "number of variables" properties for the tests

File last commit:

r1041:54cb33e3c81c
r1170:3da18e6983d5
Show More
TestDataSourceItem.cpp
207 lines | 6.7 KiB | text/x-c | CppLexer
/ core / tests / DataSource / TestDataSourceItem.cpp
Alexandre Leroux
Inits unit tests for merge
r1039 #include <DataSource/DataSourceItem.h>
Alexandre Leroux
Adds test cases...
r1041 #include "DataSourceItemBuilder.h"
Alexandre Leroux
Inits unit tests for merge
r1039 #include <QObject>
#include <QtTest>
#include <iostream>
namespace {
void printItem(std::ostream &out, const DataSourceItem &item, int level = 0)
{
for (auto i = 0; i < level; ++i) {
out << " ";
}
out << item.name().toStdString() << "\n";
for (auto i = 0, count = item.childCount(); i < count; ++i) {
printItem(out, *item.child(i), level + 1);
}
}
std::ostream &operator<<(std::ostream &out, const DataSourceItem &item)
{
printItem(out, item, 0);
return out;
}
} // namespace
Q_DECLARE_METATYPE(std::shared_ptr<DataSourceItem>)
class TestDataSourceItem : public QObject {
Q_OBJECT
private slots:
void testMerge_data();
void testMerge();
};
void TestDataSourceItem::testMerge_data()
{
QTest::addColumn<std::shared_ptr<DataSourceItem> >("source");
QTest::addColumn<std::shared_ptr<DataSourceItem> >("dest");
QTest::addColumn<std::shared_ptr<DataSourceItem> >("expectedResult");
Alexandre Leroux
Adds test cases...
r1041 QTest::newRow("merge (basic case)") << DataSourceItemBuilder{}
.root("A2")
.node("- B2")
.product("-- P2")
.end() // P2
.end() // B2
.end() // A2
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.product("-- P1")
.end() // P1
.end() // B1
.end() // A1
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.product("-- P1")
.end() // P1
.end() // B1
.node("- B2")
.product("-- P2")
.end() // P2
.end() // B2
.end() // A1
.build();
QTest::newRow("merge (some of the source and destination trees are identical)")
<< DataSourceItemBuilder{}
.root("A2")
.node("- B1")
.node("-- C1")
.product("--- P2")
.end() // P2
.end() // C1
.node("-- C2")
.end() // C2
.end() // B1
.end() // A2
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node("-- C1")
.product("--- P1")
.end() // P1
.end() // C1
.end() // B1
.end() // A1
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node("-- C1")
.product("--- P1")
.end() // P1
.product("--- P2")
.end() // P2
.end() // C1
.node("-- C2")
.end() // C2
.end() // B1
.end() // A1
.build();
QTest::newRow("merge (products with the same name and tree are kept)")
<< DataSourceItemBuilder{}
.root("A2")
.node("- B1")
.node("-- C1")
.product({{"name", "--- P1"}, {"from", "source"}})
.end() // P1
.end() // C1
.end() // B1
.end() // A2
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node("-- C1")
.product({{"name", "--- P1"}, {"from", "dest"}})
.end() // P1
.end() // C1
.end() // B1
.end() // A1
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node("-- C1")
.product({{"name", "--- P1"}, {"from", "dest"}})
.end() // P1 (dest)
.product({{"name", "--- P1"}, {"from", "source"}})
.end() // P1 (source)
.end() // C1
.end() // B1
.end() // A1
.build();
QTest::newRow("merge (for same nodes, metadata of dest node are kept)")
<< DataSourceItemBuilder{}
.root("A2")
.node("- B1")
.node({{"name", "-- C1"}, {"from", "source"}})
.product("--- P2")
.end() // P1
.end() // C1
.end() // B1
.end() // A2
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node({{"name", "-- C1"}, {"from", "dest"}})
.product("--- P1")
.end() // P1
.end() // C1
.end() // B1
.end() // A1
.build()
<< DataSourceItemBuilder{}
.root("A1")
.node("- B1")
.node({{"name", "-- C1"}, {"from", "dest"}})
.product("--- P1")
.end() // P1
.product("--- P2")
.end() // P2
.end() // C1 (dest)
.end() // B1
.end() // A1
.build();
Alexandre Leroux
Inits unit tests for merge
r1039 }
void TestDataSourceItem::testMerge()
{
QFETCH(std::shared_ptr<DataSourceItem>, source);
QFETCH(std::shared_ptr<DataSourceItem>, dest);
QFETCH(std::shared_ptr<DataSourceItem>, expectedResult);
// Uncomment to print trees
// std::cout << "source: \n" << *source << "\n";
// std::cout << "dest: \n" << *dest << "\n";
// Merges source in dest (not taking source root)
for (auto i = 0, count = source->childCount(); i < count; ++i) {
dest->merge(*source->child(i));
}
// Uncomment to print trees
// std::cout << "dest after merge: \n" << *dest << "\n";
// Checks merge result
QVERIFY(*dest == *expectedResult);
}
QTEST_MAIN(TestDataSourceItem)
#include "TestDataSourceItem.moc"