Detect special functions for Quick Tests

Quick Tests are capable of having benchmarks, data driven tests
and special functions (init/cleanup/...) as well.

Change-Id: Ieb9b6b1f842f1211a9d3192b486f789c987fa27b
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Christian Stenger
2015-05-19 07:41:39 +02:00
parent fa28f1cb30
commit 5b93689702

View File

@@ -34,6 +34,12 @@
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
// names of special functions (applies for QTest as well as Quick Tests)
static QList<QString> specialFunctions = QList<QString>() << QLatin1String("initTestCase")
<< QLatin1String("cleanupTestCase")
<< QLatin1String("init")
<< QLatin1String("cleanup");
/************************** Cpp Test Symbol Visitor ***************************/ /************************** Cpp Test Symbol Visitor ***************************/
TestVisitor::TestVisitor(const QString &fullQualifiedClassName) TestVisitor::TestVisitor(const QString &fullQualifiedClassName)
@@ -45,11 +51,6 @@ TestVisitor::~TestVisitor()
{ {
} }
static QList<QString> specialFunctions = QList<QString>() << QLatin1String("initTestCase")
<< QLatin1String("cleanupTestCase")
<< QLatin1String("init")
<< QLatin1String("cleanup");
bool TestVisitor::visit(CPlusPlus::Class *symbol) bool TestVisitor::visit(CPlusPlus::Class *symbol)
{ {
const CPlusPlus::Overview o; const CPlusPlus::Overview o;
@@ -177,13 +178,21 @@ bool TestQmlVisitor::visit(QmlJS::AST::UiScriptBinding *ast)
bool TestQmlVisitor::visit(QmlJS::AST::FunctionDeclaration *ast) bool TestQmlVisitor::visit(QmlJS::AST::FunctionDeclaration *ast)
{ {
const QStringRef name = ast->name; const QStringRef name = ast->name;
if (name.startsWith(QLatin1String("test_"))) { if (name.startsWith(QLatin1String("test_"))
|| name.startsWith(QLatin1String("benchmark_"))
|| name.endsWith(QLatin1String("_data"))
|| specialFunctions.contains(name.toString())) {
const auto sourceLocation = ast->firstSourceLocation(); const auto sourceLocation = ast->firstSourceLocation();
TestCodeLocationAndType locationAndType; TestCodeLocationAndType locationAndType;
locationAndType.m_fileName = m_currentDoc->fileName(); locationAndType.m_fileName = m_currentDoc->fileName();
locationAndType.m_line = sourceLocation.startLine; locationAndType.m_line = sourceLocation.startLine;
locationAndType.m_column = sourceLocation.startColumn - 1; locationAndType.m_column = sourceLocation.startColumn - 1;
locationAndType.m_type = TestTreeItem::TEST_FUNCTION; if (specialFunctions.contains(name.toString()))
locationAndType.m_type = TestTreeItem::TEST_SPECIALFUNCTION;
else if (name.endsWith(QLatin1String("_data")))
locationAndType.m_type = TestTreeItem::TEST_DATAFUNCTION;
else
locationAndType.m_type = TestTreeItem::TEST_FUNCTION;
m_testFunctions.insert(name.toString(), locationAndType); m_testFunctions.insert(name.toString(), locationAndType);
} }