SdkTool: Make auto test easier maintainable

Adding new kit items so far required touching test code in several
places.

Also, use more but simpler individual tests to find failing tests
quicker.

Change-Id: I540b93c01a6bdbb85353928713995c262dfc919e
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2022-02-24 11:39:05 +01:00
parent 44aba26a47
commit b178e407a4
2 changed files with 284 additions and 132 deletions

View File

@@ -303,7 +303,18 @@ int AddKitOperation::execute() const
#ifdef WITH_TESTS #ifdef WITH_TESTS
bool AddKitOperation::test() const bool AddKitOperation::test() const
{ {
AddKitData kitData; AddKitData baseData;
baseData.m_id ="testId";
baseData.m_displayName = "Test Kit";
baseData.m_icon = "/tmp/icon.png";
baseData.m_debuggerEngine = 1;
baseData.m_debugger = "/usr/bin/gdb-test";
baseData.m_deviceType = "Desktop";
baseData.m_device = "{dev-id}";
baseData.m_qt = "{qt-id}";
baseData.m_mkspec ="unsupported/mkspec";
baseData.m_extra = {{"PE.Profile.Data/extraData", QVariant("extraValue")}};
QVariantMap map = initializeKits(); QVariantMap map = initializeKits();
QVariantMap tcMap = AddToolChainData::initializeToolChains(); QVariantMap tcMap = AddToolChainData::initializeToolChains();
@@ -326,22 +337,27 @@ bool AddKitOperation::test() const
const QStringList env = {"TEST=1", "PATH"}; const QStringList env = {"TEST=1", "PATH"};
if (map.count() != 3 if (map.count() != 3)
|| !map.contains(VERSION) || map.value(VERSION).toInt() != 1 return false;
|| !map.contains(COUNT) || map.value(COUNT).toInt() != 0 if (!map.contains(VERSION))
|| !map.contains(DEFAULT) || !map.value(DEFAULT).toString().isEmpty()) return false;
if (map.value(VERSION).toInt() != 1)
return false;
if (!map.contains(COUNT))
return false;
if (map.value(COUNT).toInt() != 0)
return false;
if (!map.contains(DEFAULT))
return false;
if (!map.value(DEFAULT).toString().isEmpty())
return false; return false;
QHash<QString, QString> tcs; QHash<QString, QString> tcs;
tcs.insert("Cxx", "{tcXX-id}"); tcs.insert("Cxx", "{tcXX-id}");
// Fail if TC is not there: // Fail if TC is not there:
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, AddKitData kitData = baseData;
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), kitData.m_tcs = tcs;
tcs, "{qt-id}", "unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(),
QStringList(),
{{{"PE.Profile.Data/extraData", QVariant("extraValue")}}}};
QVariantMap empty = kitData.addKit(map, tcMap, qtMap, devMap, {}); QVariantMap empty = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (!empty.isEmpty()) if (!empty.isEmpty())
@@ -349,21 +365,16 @@ bool AddKitOperation::test() const
// Do not fail if TC is an ABI: // Do not fail if TC is an ABI:
tcs.clear(); tcs.clear();
tcs.insert("C", "x86-linux-generic-elf-64bit"); tcs.insert("C", "x86-linux-generic-elf-64bit");
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), kitData.m_tcs = tcs;
tcs, "{qt-id}", "unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(), env,
{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}};
empty = kitData.addKit(map, tcMap, qtMap, devMap, {}); empty = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (empty.isEmpty()) if (empty.isEmpty())
return false; return false;
// QTCREATORBUG-11983, mach_o was not covered by the first attempt to fix this. // QTCREATORBUG-11983, mach_o was not covered by the first attempt to fix this.
tcs.insert("D", "x86-macos-generic-mach_o-64bit"); tcs.insert("D", "x86-macos-generic-mach_o-64bit");
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), kitData.m_tcs = tcs;
tcs, "{qt-id}", "unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(), env,
{{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}};
empty = kitData.addKit(map, tcMap, qtMap, devMap, {}); empty = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (empty.isEmpty()) if (empty.isEmpty())
return false; return false;
@@ -372,153 +383,288 @@ bool AddKitOperation::test() const
tcs.insert("Cxx", "{tc-id}"); tcs.insert("Cxx", "{tc-id}");
// Fail if Qt is not there: // Fail if Qt is not there:
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test", "Desktop", "{dev-id}", QString(), tcs, "{qtXX-id}", kitData.m_qt = "{qtXX-id}";
"unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(), env,
{{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}};
empty = kitData.addKit(map, tcMap, qtMap, devMap, {}); empty = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (!empty.isEmpty()) if (!empty.isEmpty())
return false; return false;
// Fail if dev is not there: // Fail if dev is not there:
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test", "Desktop", "{devXX-id}", QString(), tcs, "{qt-id}", kitData.m_device = "{devXX-id}";
"unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(), env,
{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}};
empty = kitData.addKit(map, tcMap, qtMap, devMap, {}); empty = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (!empty.isEmpty()) if (!empty.isEmpty())
return false; return false;
// Profile 0: // Profile 0:
kitData = {"testId", "Test Kit", "/tmp/icon.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test", "Desktop", QString(), QString(), tcs, "{qt-id}", kitData.m_tcs = tcs;
"unsupported/mkspec",
QString(), QString(), QString(), QString(), QString(), QStringList(), env,
{{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}};
map = kitData.addKit(map, tcMap, qtMap, devMap, {}); map = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (map.count() != 4 if (map.count() != 4)
|| !map.contains(VERSION) || map.value(VERSION).toInt() != 1 return false;
|| !map.contains(COUNT) || map.value(COUNT).toInt() != 1 if (!map.contains(VERSION))
|| !map.contains(DEFAULT) || map.value(DEFAULT).toString() != "testId" return false;
|| !map.contains("Profile.0")) if (map.value(VERSION).toInt() != 1)
return false;
if (!map.contains(COUNT))
return false;
if (map.value(COUNT).toInt() != 1)
return false;
if (!map.contains(DEFAULT))
return false;
if (map.value(DEFAULT).toString() != "testId")
return false;
if (!map.contains("Profile.0"))
return false; return false;
QVariantMap profile0 = map.value("Profile.0").toMap(); QVariantMap profile0 = map.value("Profile.0").toMap();
if (profile0.count() != 6 if (profile0.count() != 6)
|| !profile0.contains(ID) || profile0.value(ID).toString() != "testId" return false;
|| !profile0.contains(DISPLAYNAME) || profile0.value(DISPLAYNAME).toString() != "Test Kit"
|| !profile0.contains(ICON) || profile0.value(ICON).toString() != "/tmp/icon.png" if (!profile0.contains(ID))
|| !profile0.contains(DATA) || profile0.value(DATA).type() != QVariant::Map return false;
|| !profile0.contains(AUTODETECTED) || profile0.value(AUTODETECTED).toBool() != true if (profile0.value(ID).toString() != "testId")
|| !profile0.contains(SDK) || profile0.value(SDK).toBool() != true) return false;
if (!profile0.contains(DISPLAYNAME))
return false;
if (profile0.value(DISPLAYNAME).toString() != "Test Kit")
return false;
if (!profile0.contains(ICON))
return false;
if (profile0.value(ICON).toString() != "/tmp/icon.png")
return false;
if (!profile0.contains(DATA))
return false;
if (profile0.value(DATA).type() != QVariant::Map)
return false;
if (!profile0.contains(AUTODETECTED))
return false;
if (profile0.value(AUTODETECTED).toBool() != true)
return false;
if (!profile0.contains(SDK))
return false;
if (profile0.value(SDK).toBool() != true)
return false; return false;
QVariantMap data = profile0.value(DATA).toMap(); QVariantMap data = profile0.value(DATA).toMap();
if (data.count() != 7 if (data.count() != 7)
|| !data.contains(DEBUGGER) || data.value(DEBUGGER).type() != QVariant::Map
|| !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop"
|| !data.contains(TOOLCHAIN)
|| !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}"
|| !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec"
|| !data.contains("extraData") || data.value("extraData").toString() != "extraValue")
return false; return false;
QVariantMap tcOutput = data.value(TOOLCHAIN).toMap(); if (!data.contains(DEBUGGER))
if (tcOutput.count() != 1 return false;
|| !tcOutput.contains("Cxx") || tcOutput.value("Cxx") != "{tc-id}") if (data.value(DEBUGGER).type() != QVariant::Map)
return false;
if (!data.contains(DEVICE_TYPE))
return false;
if (data.value(DEVICE_TYPE).toString() != "Desktop")
return false;
if (!data.contains(TOOLCHAIN))
return false;
if (!data.contains(QT))
return false;
if (data.value(QT).toString() != "SDK.{qt-id}")
return false;
if (!data.contains(MKSPEC))
return false;
if (data.value(MKSPEC).toString() != "unsupported/mkspec")
return false;
if (!data.contains("extraData"))
return false;
if (data.value("extraData").toString() != "extraValue")
return false; return false;
// Ignore existing ids: QVariantMap tcOutput = data.value(TOOLCHAIN).toMap();
kitData = {"testId", "Test Qt Version X", if (tcOutput.count() != 1)
"/tmp/icon3.png", QString(), 1, "/usr/bin/gdb-test3", "Desktop", return false;
QString(), QString(), tcs, "{qt-id}", "unsupported/mkspec", if (!tcOutput.contains("Cxx"))
QString(), QString(), QString(), QString(), QString(), QStringList(), env, return false;
{{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}}; if (tcOutput.value("Cxx") != "{tc-id}")
return false;
// Ignore exist ids:
kitData = baseData;
kitData.m_displayName = "Test Qt Version X";
kitData.m_icon = "/tmp/icon3.png";
kitData.m_debugger = "/usr/bin/gdb-test3";
kitData.m_tcs = tcs;
QVariantMap result = kitData.addKit(map, tcMap, qtMap, devMap, {}); QVariantMap result = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (!result.isEmpty()) if (!result.isEmpty())
return false; return false;
// Profile 1: Make sure name is unique: // Profile 1: Make sure name is unique:
kitData = {"testId2", "Test Kit2", "/tmp/icon2.png", QString(), 1, kitData = baseData;
"/usr/bin/gdb-test2", "Desktop", "{dev-id}", "/sys/root//", tcs, kitData.m_id = "testId2";
"{qt-id}", "unsupported/mkspec", kitData.m_displayName = "Test Kit2";
QString(), QString(), QString(), QString(), QString(), QStringList(), env, kitData.m_icon = "/tmp/icon2.png";
{{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}}; kitData.m_debugger = "/usr/bin/gdb-test2";
kitData.m_sysRoot = "/sys/root//";
kitData.m_env = env;
kitData.m_tcs = tcs;
map = kitData.addKit(map, tcMap, qtMap, devMap, {}); map = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (map.count() != 5 if (map.count() != 5)
|| !map.contains(VERSION) || map.value(VERSION).toInt() != 1 return false;
|| !map.contains(COUNT) || map.value(COUNT).toInt() != 2 if (!map.contains(VERSION) )
|| !map.contains(DEFAULT) || map.value(DEFAULT).toInt() != 0 return false;
|| !map.contains("Profile.0") if (map.value(VERSION).toInt() != 1)
|| !map.contains("Profile.1")) return false;
if (!map.contains(COUNT) )
return false;
if (map.value(COUNT).toInt() != 2)
return false;
if (!map.contains(DEFAULT) )
return false;
if (map.value(DEFAULT).toInt() != 0)
return false;
if (!map.contains("Profile.0"))
return false;
if (!map.contains("Profile.1"))
return false; return false;
if (map.value("Profile.0") != profile0) if (map.value("Profile.0") != profile0)
return false; return false;
QVariantMap profile1 = map.value("Profile.1").toMap(); QVariantMap profile1 = map.value("Profile.1").toMap();
if (profile1.count() != 6 if (profile1.count() != 6)
|| !profile1.contains(ID) || profile1.value(ID).toString() != "testId2" return false;
|| !profile1.contains(DISPLAYNAME) || profile1.value(DISPLAYNAME).toString() != "Test Kit2" if (!profile1.contains(ID) )
|| !profile1.contains(ICON) || profile1.value(ICON).toString() != "/tmp/icon2.png" return false;
|| !profile1.contains(DATA) || profile1.value(DATA).type() != QVariant::Map if (profile1.value(ID).toString() != "testId2")
|| !profile1.contains(AUTODETECTED) || profile1.value(AUTODETECTED).toBool() != true return false;
|| !profile1.contains(SDK) || profile1.value(SDK).toBool() != true) if (!profile1.contains(DISPLAYNAME) )
return false;
if (profile1.value(DISPLAYNAME).toString() != "Test Kit2")
return false;
if (!profile1.contains(ICON) )
return false;
if (profile1.value(ICON).toString() != "/tmp/icon2.png")
return false;
if (!profile1.contains(DATA) )
return false;
if (profile1.value(DATA).type() != QVariant::Map)
return false;
if (!profile1.contains(AUTODETECTED) )
return false;
if (profile1.value(AUTODETECTED).toBool() != true)
return false;
if (!profile1.contains(SDK) )
return false;
if (profile1.value(SDK).toBool() != true)
return false; return false;
data = profile1.value(DATA).toMap(); data = profile1.value(DATA).toMap();
if (data.count() != 9 if (data.count() != 9)
|| !data.contains(DEBUGGER) || data.value(DEBUGGER).type() != QVariant::Map
|| !data.contains(DEVICE_TYPE) || data.value(DEVICE_TYPE).toString() != "Desktop"
|| !data.contains(DEVICE_ID) || data.value(DEVICE_ID).toString() != "{dev-id}"
|| !data.contains(SYSROOT) || data.value(SYSROOT).toString() != "/sys/root//"
|| !data.contains(TOOLCHAIN)
|| !data.contains(QT) || data.value(QT).toString() != "SDK.{qt-id}"
|| !data.contains(MKSPEC) || data.value(MKSPEC).toString() != "unsupported/mkspec"
|| !data.contains(ENV) || data.value(ENV).toStringList() != env
|| !data.contains("extraData") || data.value("extraData").toString() != "extraValue")
return false; return false;
if (!data.contains(DEBUGGER) )
return false;
if (data.value(DEBUGGER).type() != QVariant::Map)
return false;
if (!data.contains(DEVICE_TYPE) )
return false;
if (data.value(DEVICE_TYPE).toString() != "Desktop")
return false;
if (!data.contains(DEVICE_ID) )
return false;
if (data.value(DEVICE_ID).toString() != "{dev-id}")
return false;
if (!data.contains(SYSROOT) )
return false;
if (data.value(SYSROOT).toString() != "/sys/root//")
return false;
if (!data.contains(TOOLCHAIN))
return false;
if (!data.contains(QT) )
return false;
if (data.value(QT).toString() != "SDK.{qt-id}")
return false;
if (!data.contains(MKSPEC) )
return false;
if (data.value(MKSPEC).toString() != "unsupported/mkspec")
return false;
if (!data.contains(ENV) )
return false;
if (data.value(ENV).toStringList() != env)
return false;
if (!data.contains("extraData") )
return false;
if (data.value("extraData").toString() != "extraValue")
return false;
tcOutput = data.value(TOOLCHAIN).toMap(); tcOutput = data.value(TOOLCHAIN).toMap();
if (tcOutput.count() != 1 if (tcOutput.count() != 1)
|| !tcOutput.contains("Cxx") || tcOutput.value("Cxx") != "{tc-id}") return false;
if (!tcOutput.contains("Cxx") )
return false;
if (tcOutput.value("Cxx") != "{tc-id}")
return false; return false;
// Profile 2: Test debugger id: // Profile 2: Test debugger id:
kitData = {"test with debugger Id", "Test debugger Id", kitData = baseData;
"/tmp/icon2.png", "debugger Id", 0, QString(), "Desktop", QString(), QString(), kitData.m_id = "test with debugger Id";
tcs, "{qt-id}", "unsupported/mkspec", kitData.m_displayName = "Test debugger Id";
QString(), QString(), QString(), QString(), QString(), QStringList(), env, kitData.m_icon = "/tmp/icon2.png";
{KeyValuePair("PE.Profile.Data/extraData", QVariant("extraValue"))}}; kitData.m_debuggerId = "debugger Id";
map = kitData.addKit(map, tcMap, qtMap, devMap, {}); kitData.m_env = env;
if (map.count() != 6
|| !map.contains(VERSION) || map.value(VERSION).toInt() != 1
|| !map.contains(COUNT) || map.value(COUNT).toInt() != 3
|| !map.contains(DEFAULT) || map.value(DEFAULT).toInt() != 0
|| !map.contains("Profile.0")
|| !map.contains("Profile.1")
|| !map.contains("Profile.2"))
return false;
map = kitData.addKit(map, tcMap, qtMap, devMap, {});
if (map.count() != 6)
return false;
if (!map.contains(VERSION) )
return false;
if (map.value(VERSION).toInt() != 1)
return false;
if (!map.contains(COUNT) )
return false;
if (map.value(COUNT).toInt() != 3)
return false;
if (!map.contains(DEFAULT) )
return false;
if (map.value(DEFAULT).toInt() != 0)
return false;
if (!map.contains("Profile.0"))
return false;
if (!map.contains("Profile.1"))
return false;
if (!map.contains("Profile.2"))
return false;
if (map.value("Profile.0") != profile0) if (map.value("Profile.0") != profile0)
return false; return false;
if (map.value("Profile.1") != profile1) if (map.value("Profile.1") != profile1)
return false; return false;
QVariantMap profile2 = map.value("Profile.2").toMap(); QVariantMap profile2 = map.value("Profile.2").toMap();
if (profile2.count() != 6 if (profile2.count() != 6)
|| !profile2.contains(ID) || profile2.value(ID).toString() != "test with debugger Id" return false;
|| !profile2.contains(DISPLAYNAME) || profile2.value(DISPLAYNAME).toString() != "Test debugger Id" if (!profile2.contains(ID) )
|| !profile2.contains(ICON) || profile2.value(ICON).toString() != "/tmp/icon2.png" return false;
|| !profile2.contains(DATA) || profile2.value(DATA).type() != QVariant::Map if (profile2.value(ID).toString() != "test with debugger Id")
|| !profile2.contains(AUTODETECTED) || profile2.value(AUTODETECTED).toBool() != true return false;
|| !profile2.contains(SDK) || profile2.value(SDK).toBool() != true) if (!profile2.contains(DISPLAYNAME) )
return false;
if (profile2.value(DISPLAYNAME).toString() != "Test debugger Id")
return false;
if (!profile2.contains(ICON) )
return false;
if (profile2.value(ICON).toString() != "/tmp/icon2.png")
return false;
if (!profile2.contains(DATA) )
return false;
if (profile2.value(DATA).type() != QVariant::Map)
return false;
if (!profile2.contains(AUTODETECTED) )
return false;
if (profile2.value(AUTODETECTED).toBool() != true)
return false;
if (!profile2.contains(SDK) )
return false;
if (profile2.value(SDK).toBool() != true)
return false; return false;
data = profile2.value(DATA).toMap(); data = profile2.value(DATA).toMap();
if (data.count() != 7 if (data.count() != 7)
|| !data.contains(DEBUGGER) || data.value(DEBUGGER).toString() != "debugger Id") return false;
if (!data.contains(DEBUGGER))
return false;
if (data.value(DEBUGGER).toString() != "debugger Id")
return false; return false;
return true; return true;

View File

@@ -116,22 +116,28 @@ bool RmKitOperation::test() const
QHash<QString, QString> tcs; QHash<QString, QString> tcs;
tcs.insert("Cxx", "{tc-id}"); tcs.insert("Cxx", "{tc-id}");
QVariantMap map = AddKitData kitData;
AddKitData{"testId", "Test Qt Version", "/tmp/icon.png", QString(), 1, kitData.m_id = "testId";
"/usr/bin/gdb-test", "Desktop", QString(), QString(), tcs, kitData.m_displayName = "Test Qt Version";
"{qt-id}", "unsupported/mkspec", kitData.m_icon = "/tmp/icon.png";
QString(), QString(), QString(), QString(), QString(), QStringList(), QStringList(), kitData.m_debuggerEngine = 1;
{{"PE.Profile.Data/extraData", QVariant("extraValue")}}} kitData.m_debugger = "/usr/bin/gdb-test";
.addKit(AddKitData::initializeKits(), tcMap, qtMap, devMap, {}); kitData.m_deviceType = "Desktop";
kitData.m_tcs = tcs;
kitData.m_qt = "{qt-id}";
kitData.m_mkspec = "unsupported/mkspec";
kitData.m_extra = {{"PE.Profile.Data/extraData", QVariant("extraValue")}};
QVariantMap map = kitData.addKit(AddKitData::initializeKits(), tcMap, qtMap, devMap, {});
map = AddKitData{"testId2", "Test Qt Version", kitData.m_id = "testId2";
"/tmp/icon2.png", QString(), 1, "/usr/bin/gdb-test2", kitData.m_icon = "/tmp/icon2.png";
"Desktop", QString(), QString(), tcs, "{qt-id}", kitData.m_icon = "/usr/bin/gdb-test2";
"unsupported/mkspec2", kitData.m_mkspec = "unsupported/mkspec2";
QString(), QString(), QString(), QString(), QString(), QStringList(), QStringList(), kitData.m_extra = {{"PE.Profile.Data/extraData", QVariant("extraValue2")}};
{{"PE.Profile.Data/extraData", QVariant("extraValue2")}}}
.addKit(map, tcMap, qtMap, devMap, {}); map = kitData.addKit(map, tcMap, qtMap, devMap, {});
QVariantMap result = rmKit(map, "testId"); QVariantMap result = rmKit(map, "testId");
if (result.count() != 4 if (result.count() != 4