##// END OF EJS Templates
Passes FuzzingState and variable id instead VariableState to the methods of operations
Passes FuzzingState and variable id instead VariableState to the methods of operations

File last commit:

r1081:54cb33e3c81c
r1236:ea04bef9c90c
Show More
TestDataSourceItem.cpp
207 lines | 6.7 KiB | text/x-c | CppLexer
#include <DataSource/DataSourceItem.h>
#include "DataSourceItemBuilder.h"
#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");
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();
}
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"