summaryrefslogtreecommitdiffstats
path: root/tests/auto/xmlpatternsxqts
diff options
context:
space:
mode:
authorTobias Koenig <tokoe@kde.org>2009-05-16 12:19:10 +0200
committerTobias Koenig <tokoe@kde.org>2009-05-16 12:19:10 +0200
commit135a028d9dc9a28a0a072665a7dc43b7e9e187be (patch)
treed259e1d265589d10a541899d4982ab4e656900eb /tests/auto/xmlpatternsxqts
parent210bd7b6033e41aad61fe131002dc5e496d7427a (diff)
Add W3C XML Schema validation support
This was done by Tobias Koenig, as part of an internship at Trolltech/Qt Software, started at Wed Oct 1 18:32:43 2008 +0200, and the last commit being part of this commit dating Tue Feb 24 11:03:36 2009 +0100. This is work consisting of about 650 commits squashed into one, where the first commit was 61b280386c1905a15690fdd917dcbc8eb09b6283, in the repository before Qt's history cut.
Diffstat (limited to 'tests/auto/xmlpatternsxqts')
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp7
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TestBaseLine.h9
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TestGroup.cpp6
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TestSuite.cpp26
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TestSuite.h14
-rw-r--r--tests/auto/xmlpatternsxqts/lib/TreeModel.cpp9
-rw-r--r--tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp346
-rw-r--r--tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h130
-rw-r--r--tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp881
-rw-r--r--tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h90
-rw-r--r--tests/auto/xmlpatternsxqts/lib/lib.pro4
-rw-r--r--tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp15
-rw-r--r--tests/auto/xmlpatternsxqts/test/tst_suitetest.h14
-rw-r--r--tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp2
14 files changed, 1531 insertions, 22 deletions
diff --git a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp
index b699ead71e..841266cddc 100644
--- a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp
+++ b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp
@@ -178,6 +178,7 @@ void TestBaseLine::toXML(XMLWriter &receiver) const
{
case XML: /* Fallthrough. */
case Fragment: /* Fallthrough. */
+ case SchemaIsValid: /* Fallthrough. */
case Text:
{
QXmlAttributes inspectAtts;
@@ -343,6 +344,8 @@ TestResult::Status TestBaseLine::verify(const QString &serializedInput) const
{
switch(m_type)
{
+ case SchemaIsValid:
+ /* Fall through. */
case Text:
{
if(serializedInput == details())
@@ -491,6 +494,8 @@ QString TestBaseLine::displayName(const Type id)
return QLatin1String("Inspect");
case ExpectedError:
return QLatin1String("ExpectedError");
+ case SchemaIsValid:
+ return QLatin1String("SchemaIsValid");
}
Q_ASSERT(false);
@@ -503,6 +508,8 @@ QString TestBaseLine::details() const
return QString();
if(m_type == ExpectedError) /* We're an error code. */
return m_details;
+ if(m_type == SchemaIsValid) /* We're a schema validation information . */
+ return m_details;
if(m_details.isEmpty())
return m_details;
diff --git a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h
index 577c4b1f72..b5dc46e0c5 100644
--- a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h
+++ b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h
@@ -168,7 +168,14 @@ namespace QPatternistSDK
* because an implementation does not support the feature is not
* considered a correct result.
*/
- ExpectedError
+ ExpectedError,
+
+ /**
+ * A special comparison for the schema validation tests. The details
+ * can only be 'true' or 'false' depending on whether it is a valid
+ * schema or not.
+ */
+ SchemaIsValid
};
/**
diff --git a/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp b/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp
index 060f993fdd..e59e4b4586 100644
--- a/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp
+++ b/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp
@@ -94,7 +94,7 @@ TestGroup::TestGroup(TreeItem *p) : m_parent(p)
QVariant TestGroup::data(const Qt::ItemDataRole role, int column) const
{
- if(role != Qt::DisplayRole && role != Qt::BackgroundRole)
+ if(role != Qt::DisplayRole && role != Qt::BackgroundRole && role != Qt::ToolTipRole)
return QVariant();
/* In ResultSummary, the first is the amount of passes and the second is the total. */
@@ -154,6 +154,10 @@ QVariant TestGroup::data(const Qt::ItemDataRole role, int column) const
return QVariant();
}
}
+ case Qt::ToolTipRole:
+ {
+ return description();
+ }
default:
{
Q_ASSERT_X(false, Q_FUNC_INFO, "This shouldn't be reached");
diff --git a/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp b/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp
index 3bca281f7a..13d5880071 100644
--- a/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp
+++ b/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp
@@ -91,6 +91,7 @@
#include "TestSuiteResult.h"
#include "XMLWriter.h"
#include "XSLTTestSuiteHandler.h"
+#include "XSDTestSuiteHandler.h"
#include "qdebug_p.h"
#include "TestSuite.h"
@@ -132,7 +133,7 @@ TestSuiteResult *TestSuite::runSuite()
TestSuite *TestSuite::openCatalog(const QUrl &catalogURI,
QString &errorMsg,
const bool useExclusionList,
- const bool isXSLTCatalog)
+ SuiteType suiteType)
{
pDebug() << "Opening catalog:" << catalogURI.toString();
QFile ts(catalogURI.toLocalFile());
@@ -167,14 +168,14 @@ TestSuite *TestSuite::openCatalog(const QUrl &catalogURI,
return 0;
}
- return openCatalog(&ts, errorMsg, catalogURI, useExclusionList, isXSLTCatalog);
+ return openCatalog(&ts, errorMsg, catalogURI, useExclusionList, suiteType);
}
TestSuite *TestSuite::openCatalog(QIODevice *input,
QString &errorMsg,
const QUrl &fileName,
const bool useExclusionList,
- const bool isXSLTCatalog)
+ SuiteType suiteType)
{
Q_ASSERT(input);
@@ -183,10 +184,12 @@ TestSuite *TestSuite::openCatalog(QIODevice *input,
HandlerPtr loader;
- if(isXSLTCatalog)
- loader = HandlerPtr(new XSLTTestSuiteHandler(fileName));
- else
- loader = HandlerPtr(new TestSuiteHandler(fileName, useExclusionList));
+ switch (suiteType) {
+ case XQuerySuite: loader = HandlerPtr(new TestSuiteHandler(fileName, useExclusionList)); break;
+ case XsltSuite: loader = HandlerPtr(new XSLTTestSuiteHandler(fileName)); break;
+ case XsdSuite: loader = HandlerPtr(new XSDTestSuiteHandler(fileName)); break;
+ default: Q_ASSERT(false); break;
+ }
reader.setContentHandler(loader.data());
@@ -198,8 +201,13 @@ TestSuite *TestSuite::openCatalog(QIODevice *input,
return 0;
}
- TestSuite *const suite = isXSLTCatalog ? static_cast<XSLTTestSuiteHandler *>(loader.data())->testSuite()
- : static_cast<TestSuiteHandler *>(loader.data())->testSuite();
+ TestSuite *suite = 0;
+ switch (suiteType) {
+ case XQuerySuite: suite = static_cast<TestSuiteHandler *>(loader.data())->testSuite(); break;
+ case XsltSuite: suite = static_cast<XSLTTestSuiteHandler *>(loader.data())->testSuite(); break;
+ case XsdSuite: suite = static_cast<XSDTestSuiteHandler *>(loader.data())->testSuite(); break;
+ default: Q_ASSERT(false); break;
+ }
if(suite)
return suite;
diff --git a/tests/auto/xmlpatternsxqts/lib/TestSuite.h b/tests/auto/xmlpatternsxqts/lib/TestSuite.h
index cdd511f86c..5141886886 100644
--- a/tests/auto/xmlpatternsxqts/lib/TestSuite.h
+++ b/tests/auto/xmlpatternsxqts/lib/TestSuite.h
@@ -112,6 +112,16 @@ namespace QPatternistSDK
class Q_PATTERNISTSDK_EXPORT TestSuite : public TestContainer
{
public:
+ /**
+ * Describes the type of test suite.
+ */
+ enum SuiteType
+ {
+ XQuerySuite, ///< The test suite for XQuery
+ XsltSuite, ///< The test suite for XSLT
+ XsdSuite ///< The test suite for XML Schema
+ };
+
TestSuite();
virtual QVariant data(const Qt::ItemDataRole role, int column) const;
@@ -148,7 +158,7 @@ namespace QPatternistSDK
static TestSuite *openCatalog(const QUrl &catalogFile,
QString &errorMsg,
const bool useExclusionList,
- const bool isXSLTCatalog = false);
+ SuiteType type);
void toXML(XMLWriter &receiver, TestCase *const tc) const;
@@ -177,7 +187,7 @@ namespace QPatternistSDK
QString &errorMsg,
const QUrl &fileName,
const bool useExclusionList,
- const bool isXSLTCatalog);
+ SuiteType type);
QString m_version;
QDate m_designDate;
};
diff --git a/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp b/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp
index d9ba200654..4991b264da 100644
--- a/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp
+++ b/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp
@@ -118,9 +118,14 @@ QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int rol
return QVariant();
}
-void TreeModel::childChanged(TreeItem *)
+void TreeModel::childChanged(TreeItem *item)
{
- layoutChanged();
+ if (item) {
+ const QModelIndex index = createIndex(item->row(), 0, item);
+ dataChanged(index, index);
+ } else {
+ layoutChanged();
+ }
}
QModelIndex TreeModel::index(int row, int column, const QModelIndex &p) const
diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp
new file mode 100644
index 0000000000..b19eb917b7
--- /dev/null
+++ b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp
@@ -0,0 +1,346 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the Patternist project on Trolltech Labs.
+**
+** $TROLLTECH_GPL_LICENSE$
+**
+***************************************************************************
+*/
+
+#include <QColor>
+#include <QFile>
+#include <QFileInfo>
+#include <QVariant>
+#include <QtDebug>
+
+#include "XSDTSTestCase.h"
+
+#include "qxmlschema.h"
+#include "qxmlschemavalidator.h"
+
+using namespace QPatternistSDK;
+using namespace QPatternist;
+
+XSDTSTestCase::XSDTSTestCase(const Scenario scen, TreeItem *p, TestType testType)
+ : m_scenario(scen)
+ , m_parent(p)
+ , m_testType(testType)
+{
+}
+
+XSDTSTestCase::~XSDTSTestCase()
+{
+ qDeleteAll(m_baseLines);
+}
+
+TestResult::List XSDTSTestCase::execute(const ExecutionStage, TestSuite*)
+{
+ ErrorHandler errHandler;
+ ErrorHandler::installQtMessageHandler(&errHandler);
+
+ TestResult::List retval;
+ TestResult::Status resultStatus = TestResult::Unknown;
+ QString serialized;
+
+ if (m_testType == SchemaTest) {
+ executeSchemaTest(resultStatus, serialized, &errHandler);
+ } else {
+ executeInstanceTest(resultStatus, serialized, &errHandler);
+ }
+
+ resultStatus = TestBaseLine::scan(serialized, baseLines());
+ Q_ASSERT(resultStatus != TestResult::Unknown);
+
+ m_result = new TestResult(name(), resultStatus, 0, errHandler.messages(),
+ QPatternist::Item::List(), serialized);
+ retval.append(m_result);
+ ErrorHandler::installQtMessageHandler(0);
+ changed(this);
+ return retval;
+}
+
+void XSDTSTestCase::executeSchemaTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler)
+{
+ QFile file(m_schemaUri.path());
+ if (!file.open(QIODevice::ReadOnly)) {
+ resultStatus = TestResult::Fail;
+ serialized = QString();
+ return;
+ }
+
+ QXmlSchema schema;
+ schema.setMessageHandler(handler);
+ schema.load(&file, m_schemaUri);
+
+ if (schema.isValid()) {
+ resultStatus = TestResult::Pass;
+ serialized = QString::fromLatin1("true");
+ } else {
+ resultStatus = TestResult::Pass;
+ serialized = QString::fromLatin1("false");
+ }
+}
+
+void XSDTSTestCase::executeInstanceTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler)
+{
+ QFile instanceFile(m_instanceUri.path());
+ if (!instanceFile.open(QIODevice::ReadOnly)) {
+ resultStatus = TestResult::Fail;
+ serialized = QString();
+ return;
+ }
+
+ QXmlSchema schema;
+ if (m_schemaUri.isValid()) {
+ QFile file(m_schemaUri.path());
+ if (!file.open(QIODevice::ReadOnly)) {
+ resultStatus = TestResult::Fail;
+ serialized = QString();
+ return;
+ }
+
+ schema.setMessageHandler(handler);
+ schema.load(&file, m_schemaUri);
+
+ if (!schema.isValid()) {
+ resultStatus = TestResult::Pass;
+ serialized = QString::fromLatin1("false");
+ return;
+ }
+ }
+
+ QXmlSchemaValidator validator(schema);
+ validator.setMessageHandler(handler);
+
+ qDebug("check %s", qPrintable(m_instanceUri.path()));
+ if (validator.validate(&instanceFile, m_instanceUri)) {
+ resultStatus = TestResult::Pass;
+ serialized = QString::fromLatin1("true");
+ } else {
+ resultStatus = TestResult::Pass;
+ serialized = QString::fromLatin1("false");
+ }
+}
+
+QVariant XSDTSTestCase::data(const Qt::ItemDataRole role, int column) const
+{
+ if(role == Qt::DisplayRole)
+ {
+ if(column == 0)
+ return title();
+
+ const TestResult *const tr = testResult();
+ if(!tr)
+ {
+ if(column == 1)
+ return TestResult::displayName(TestResult::NotTested);
+ else
+ return QString();
+ }
+ const TestResult::Status status = tr->status();
+
+ switch(column)
+ {
+ case 1:
+ return status == TestResult::Pass ? QString(QChar::fromLatin1('1'))
+ : QString(QChar::fromLatin1('0'));
+ case 2:
+ return status == TestResult::Fail ? QString(QChar::fromLatin1('1'))
+ : QString(QChar::fromLatin1('0'));
+ default:
+ return QString();
+ }
+ }
+
+ if(role != Qt::BackgroundRole)
+ return QVariant();
+
+ const TestResult *const tr = testResult();
+
+ if(!tr)
+ {
+ if(column == 0)
+ return Qt::yellow;
+ else
+ return QVariant();
+ }
+
+ const TestResult::Status status = tr->status();
+
+ if(status == TestResult::NotTested || status == TestResult::Unknown)
+ return Qt::yellow;
+
+ switch(column)
+ {
+ case 1:
+ return status == TestResult::Pass ? Qt::green : QVariant();
+ case 2:
+ return status == TestResult::Fail ? Qt::red : QVariant();
+ default:
+ return QVariant();
+ }
+}
+
+QString XSDTSTestCase::sourceCode(bool &ok) const
+{
+ QFile file((m_testType == SchemaTest ? m_schemaUri : m_instanceUri).toLocalFile());
+
+ QString err;
+
+ if(!file.exists())
+ err = QString::fromLatin1("Error: %1 does not exist.").arg(file.fileName());
+ else if(!QFileInfo(file.fileName()).isFile())
+ err = QString::fromLatin1("Error: %1 is not a file, cannot display it.").arg(file.fileName());
+ else if(!file.open(QIODevice::ReadOnly))
+ err = QString::fromLatin1("Error: Could not open %1. Likely a permission error.")
+ .arg(file.fileName());
+
+ if(err.isNull()) /* No errors. */
+ {
+ ok = true;
+ /* Scary, we assume the query is stored in UTF-8. */
+ return QString::fromUtf8(file.readAll());
+ }
+ else
+ {
+ ok = false;
+ return err;
+ }
+}
+
+int XSDTSTestCase::columnCount() const
+{
+ return 2;
+}
+
+void XSDTSTestCase::addBaseLine(TestBaseLine *line)
+{
+ m_baseLines.append(line);
+}
+
+QString XSDTSTestCase::name() const
+{
+ return m_name;
+}
+
+QString XSDTSTestCase::creator() const
+{
+ return m_creator;
+}
+
+QString XSDTSTestCase::description() const
+{
+ return m_description;
+}
+
+QDate XSDTSTestCase::lastModified() const
+{
+ return m_lastModified;
+}
+
+bool XSDTSTestCase::isXPath() const
+{
+ return false;
+}
+
+TestCase::Scenario XSDTSTestCase::scenario() const
+{
+ return m_scenario;
+}
+
+void XSDTSTestCase::setName(const QString &n)
+{
+ m_name = n;
+}
+
+void XSDTSTestCase::setCreator(const QString &ctor)
+{
+ m_creator = ctor;
+}
+
+void XSDTSTestCase::setDescription(const QString &descriptionP)
+{
+ m_description = descriptionP;
+}
+
+void XSDTSTestCase::setLastModified(const QDate &date)
+{
+ m_lastModified = date;
+}
+
+void XSDTSTestCase::setSchemaUri(const QUrl &uri)
+{
+ m_schemaUri = uri;
+}
+
+void XSDTSTestCase::setInstanceUri(const QUrl &uri)
+{
+ m_instanceUri = uri;
+}
+
+TreeItem *XSDTSTestCase::parent() const
+{
+ return m_parent;
+}
+
+QString XSDTSTestCase::title() const
+{
+ return m_name;
+}
+
+TestBaseLine::List XSDTSTestCase::baseLines() const
+{
+ Q_ASSERT_X(!m_baseLines.isEmpty(), Q_FUNC_INFO,
+ qPrintable(QString::fromLatin1("The test %1 has no base lines, it should have at least one.").arg(name())));
+ return m_baseLines;
+}
+
+QUrl XSDTSTestCase::schemaUri() const
+{
+ return m_schemaUri;
+}
+
+QUrl XSDTSTestCase::instanceUri() const
+{
+ return m_instanceUri;
+}
+
+void XSDTSTestCase::setContextItemSource(const QUrl &uri)
+{
+ m_contextItemSource = uri;
+}
+
+QUrl XSDTSTestCase::contextItemSource() const
+{
+ return m_contextItemSource;
+}
+
+void XSDTSTestCase::setParent(TreeItem *const p)
+{
+ m_parent = p;
+}
+
+QPatternist::ExternalVariableLoader::Ptr XSDTSTestCase::externalVariableLoader() const
+{
+ return QPatternist::ExternalVariableLoader::Ptr();
+}
+
+TestResult *XSDTSTestCase::testResult() const
+{
+ return m_result;
+}
+
+TestItem::ResultSummary XSDTSTestCase::resultSummary() const
+{
+ if(m_result)
+ return ResultSummary(m_result->status() == TestResult::Pass ? 1 : 0,
+ 1);
+
+ return ResultSummary(0, 1);
+}
+
+// vim: et:ts=4:sw=4:sts=4
+
diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h
new file mode 100644
index 0000000000..ce849880c6
--- /dev/null
+++ b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the Patternist project on Trolltech Labs.
+**
+** $TROLLTECH_GPL_LICENSE$
+**
+***************************************************************************
+*/
+
+#ifndef PatternistSDK_XSDTSTestCase_H
+#define PatternistSDK_XSDTSTestCase_H
+
+#include <QDate>
+#include <QString>
+#include <QUrl>
+
+#include "TestBaseLine.h"
+#include "TestCase.h"
+
+QT_BEGIN_HEADER
+
+namespace QPatternistSDK
+{
+ /**
+ * @short Represents a test case in a test suite in the XML Query Test Suite.
+ *
+ * TestCase is a memory representation of a test case, and maps
+ * to the @c test-case element in the XQuery Test Suite test
+ * case catalog.
+ *
+ * @ingroup PatternistSDK
+ * @author Frans Englich <fenglich@trolltech.com>
+ */
+ class Q_PATTERNISTSDK_EXPORT XSDTSTestCase : public TestCase
+ {
+ public:
+ enum TestType
+ {
+ SchemaTest,
+ InstanceTest
+ };
+
+ XSDTSTestCase(const Scenario scen, TreeItem *parent, TestType testType);
+ virtual ~XSDTSTestCase();
+
+ /**
+ * Executes the test, and returns the result. The returned list
+ * will always contain exactly one TestResult.
+ *
+ * @p stage is ignored when running out-of-process.
+ */
+ virtual TestResult::List execute(const ExecutionStage stage,
+ TestSuite *ts);
+ /**
+ * The identifier, the name of the test. For example, "Literals034".
+ * The name of a test case must be unique.
+ */
+ virtual QString name() const;
+ virtual QString creator() const;
+ virtual QString description() const;
+ /**
+ * @returns the query inside the file, specified by testCasePath(). Loading
+ * of the file is not cached in order to avoid complications.
+ * @param ok is set to @c false if loading the query file fails
+ */
+ virtual QString sourceCode(bool &ok) const;
+ virtual QUrl schemaUri() const;
+ virtual QUrl instanceUri() const;
+ virtual QUrl testCasePath() const {return QUrl();}
+ virtual QDate lastModified() const;
+
+ bool isXPath() const;
+
+ /**
+ * What kind of test case this is, what kind of scenario it takes part
+ * of. For example, whether the test case should evaluate normally or fail.
+ */
+ Scenario scenario() const;
+
+ void setCreator(const QString &creator);
+ void setLastModified(const QDate &date);
+ void setDescription(const QString &description);
+ void setName(const QString &name);
+ void setSchemaUri(const QUrl &uri);
+ void setInstanceUri(const QUrl &uri);
+ void setTestCasePath(const QUrl &uri) {}
+ void setContextItemSource(const QUrl &uri);
+ void addBaseLine(TestBaseLine *lines);
+
+ virtual TreeItem *parent() const;
+
+ virtual QVariant data(const Qt::ItemDataRole role, int column) const;
+
+ virtual QString title() const;
+ virtual TestBaseLine::List baseLines() const;
+
+ virtual int columnCount() const;
+
+ virtual QUrl contextItemSource() const;
+ void setParent(TreeItem *const parent);
+ virtual QPatternist::ExternalVariableLoader::Ptr externalVariableLoader() const;
+ virtual TestResult *testResult() const;
+ virtual ResultSummary resultSummary() const;
+
+ private:
+ void executeSchemaTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler);
+ void executeInstanceTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler);
+
+ QString m_name;
+ QString m_creator;
+ QString m_description;
+ QUrl m_schemaUri;
+ QUrl m_instanceUri;
+ QDate m_lastModified;
+ const Scenario m_scenario;
+ TreeItem * m_parent;
+ TestBaseLine::List m_baseLines;
+ QUrl m_contextItemSource;
+ TestType m_testType;
+ QPointer<TestResult> m_result;
+ };
+}
+
+QT_END_HEADER
+
+#endif
+// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp
new file mode 100644
index 0000000000..b6ee37915e
--- /dev/null
+++ b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp
@@ -0,0 +1,881 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the Patternist project on Trolltech Labs.
+**
+** $TROLLTECH_GPL_LICENSE$
+**
+***************************************************************************
+*/
+
+#include <QtDebug>
+
+#include "qacceltreeresourceloader_p.h"
+#include "qnetworkaccessdelegator_p.h"
+
+#include "Global.h"
+#include "TestBaseLine.h"
+#include "TestGroup.h"
+
+#include "XSDTestSuiteHandler.h"
+#include "XSDTSTestCase.h"
+
+using namespace QPatternistSDK;
+
+extern QNetworkAccessManager s_networkManager;
+
+XSDTestSuiteHandler::XSDTestSuiteHandler(const QUrl &catalogFile) : m_ts(0)
+ , m_catalogFile(catalogFile)
+ , m_inSchemaTest(false)
+ , m_inInstanceTest(false)
+ , m_inTestGroup(false)
+ , m_inDescription(false)
+ , m_schemaBlacklisted(false)
+ , m_counter(0)
+{
+ Q_ASSERT(!m_catalogFile.isRelative());
+ m_ts = new TestSuite();
+ m_topLevelGroup = new TestGroup(m_ts);
+ m_topLevelGroup->setTitle("XML Schema Test Suite");
+ m_ts->appendChild(m_topLevelGroup);
+
+ // exclude these test cases, as they break our current state machine
+ m_blackList << QLatin1String("addB099")
+ << QLatin1String("addB118")
+ << QLatin1String("elemJ003")
+ << QLatin1String("elemJ011")
+ << QLatin1String("elemZ004")
+ << QLatin1String("elemZ020")
+ << QLatin1String("groupH021v")
+ << QLatin1String("groupJ009v")
+ << QLatin1String("name00101m2")
+ << QLatin1String("schL5")
+ << QLatin1String("ste110")
+ << QLatin1String("stZ007")
+ << QLatin1String("stZ047")
+ << QLatin1String("stZ055")
+ << QLatin1String("addB049")
+ << QLatin1String("addB068")
+ << QLatin1String("addB078")
+ << QLatin1String("addB078A")
+ << QLatin1String("addB078B")
+ << QLatin1String("addB167")
+ << QLatin1String("addB191")
+ << QLatin1String("isDefault060_2")
+ << QLatin1String("isDefault069")
+ << QLatin1String("annotB025")
+ << QLatin1String("base64Binary_enumeration003_1321")
+ << QLatin1String("anyURI_a001_1336")
+ << QLatin1String("anyURI_a001_1336")
+ << QLatin1String("anyURI_a003_1338")
+ << QLatin1String("anyURI_a004_1339")
+ << QLatin1String("anyURI_b004_1354")
+ << QLatin1String("anyURI_b004_1354")
+ << QLatin1String("anyURI_b006_1356")
+ << QLatin1String("QName_length001_1357")
+ << QLatin1String("QName_length003_1359")
+ << QLatin1String("QName_minLength003_1362")
+ << QLatin1String("QName_maxLength001_1364")
+ << QLatin1String("NOTATION_length001_1372")
+ << QLatin1String("NOTATION_length003_1374")
+ << QLatin1String("NOTATION_minLength003_1377")
+ << QLatin1String("NOTATION_maxLength001_1379")
+ << QLatin1String("hexBinary003_2069")
+ << QLatin1String("QName009_2092")
+ << QLatin1String("dtZ107447_a_2245")
+ << QLatin1String("elemE001")
+ << QLatin1String("elemE002")
+ << QLatin1String("elemE003")
+ << QLatin1String("elemE004")
+ << QLatin1String("elemE005")
+ << QLatin1String("elemT026")
+ << QLatin1String("elemT027")
+ << QLatin1String("elemT028")
+ << QLatin1String("elemT029")
+ << QLatin1String("elemT054")
+ << QLatin1String("elemT055")
+ << QLatin1String("elemT056")
+ << QLatin1String("elemT057")
+ << QLatin1String("elemZ006")
+ << QLatin1String("elemZ007")
+ << QLatin1String("elemZ026")
+ << QLatin1String("elemZ027_c")
+ << QLatin1String("elemZ028c")
+ << QLatin1String("elemZ028d")
+ << QLatin1String("elemZ028f1")
+ << QLatin1String("elemZ028f1")
+ << QLatin1String("elemZ028f2")
+ << QLatin1String("elemZ028f2")
+ << QLatin1String("elemZ028f3")
+ << QLatin1String("elemZ028f3")
+ << QLatin1String("elemZ031")
+ << QLatin1String("errF001")
+ << QLatin1String("idC019")
+ << QLatin1String("idL100")
+ << QLatin1String("idZ011")
+ << QLatin1String("idZ015")
+ << QLatin1String("mgO013")
+ << QLatin1String("particlesA012")
+ << QLatin1String("particlesA013")
+ << QLatin1String("particlesA014")
+ << QLatin1String("particlesA015")
+ << QLatin1String("particlesHa161")
+ << QLatin1String("particlesHb008")
+ << QLatin1String("particlesHb011")
+ << QLatin1String("particlesIe003")
+ << QLatin1String("particlesIg003")
+ << QLatin1String("particlesIg004")
+ << QLatin1String("particlesJb003")
+ << QLatin1String("particlesJd003")
+ << QLatin1String("particlesJf003")
+ << QLatin1String("particlesJk003")
+ << QLatin1String("particlesOb001")
+ << QLatin1String("particlesOb002")
+ << QLatin1String("particlesOb004")
+ << QLatin1String("particlesOb008")
+ << QLatin1String("particlesOb009")
+ << QLatin1String("particlesOb013")
+ << QLatin1String("particlesOb018")
+ << QLatin1String("particlesQ005")
+ << QLatin1String("particlesS002")
+ << QLatin1String("particlesT002")
+ << QLatin1String("particlesT009")
+ << QLatin1String("particlesT014")
+ << QLatin1String("particlesV001")
+ << QLatin1String("particlesV002")
+ << QLatin1String("particlesV020")
+ << QLatin1String("particlesZ001")
+ << QLatin1String("particlesZ005")
+ << QLatin1String("particlesZ007")
+ << QLatin1String("particlesZ023")
+ << QLatin1String("particlesZ024")
+ << QLatin1String("particlesZ026")
+ << QLatin1String("particlesZ028")
+ << QLatin1String("particlesZ033_c")
+ << QLatin1String("particlesZ033_d")
+ << QLatin1String("particlesZ033_e")
+ << QLatin1String("particlesZ033_f")
+ << QLatin1String("particlesZ033_g")
+ << QLatin1String("particlesZ034_a1")
+ << QLatin1String("particlesZ034_a2")
+ << QLatin1String("particlesZ034_a3")
+ << QLatin1String("particlesZ034_b")
+ << QLatin1String("particlesZ035_a")
+ << QLatin1String("particlesZ035_b")
+ << QLatin1String("particlesZ036_a")
+ << QLatin1String("particlesZ036_b1")
+ << QLatin1String("particlesZ036_b2")
+ << QLatin1String("particlesZ036_c")
+/*
+ << QLatin1String("reC65")
+ << QLatin1String("reC66")
+ << QLatin1String("reC67")
+ << QLatin1String("reC68")
+ << QLatin1String("reF58")
+ << QLatin1String("reG50")
+ << QLatin1String("reJ11")
+ << QLatin1String("reJ13")
+ << QLatin1String("reJ19")
+ << QLatin1String("reJ21")
+ << QLatin1String("reJ23")
+ << QLatin1String("reJ25")
+ << QLatin1String("reJ29")
+ << QLatin1String("reJ31")
+ << QLatin1String("reJ33")
+ << QLatin1String("reJ35")
+ << QLatin1String("reJ61")
+ << QLatin1String("reJ69")
+ << QLatin1String("reJ75")
+ << QLatin1String("reJ77")
+ << QLatin1String("reL98")
+ << QLatin1String("reL99")
+ << QLatin1String("reM98")
+ << QLatin1String("reN99")
+ << QLatin1String("reS21")
+ << QLatin1String("reS42")
+ << QLatin1String("reT63")
+ << QLatin1String("reT84")
+ << QLatin1String("reDG2")
+ << QLatin1String("RegexTest_9")
+ << QLatin1String("RegexTest_11")
+ << QLatin1String("RegexTest_14")
+ << QLatin1String("RegexTest_15")
+ << QLatin1String("RegexTest_16")
+ << QLatin1String("RegexTest_17")
+ << QLatin1String("RegexTest_23")
+ << QLatin1String("RegexTest_24")
+ << QLatin1String("RegexTest_25")
+ << QLatin1String("RegexTest_26")
+ << QLatin1String("RegexTest_27")
+ << QLatin1String("RegexTest_28")
+ << QLatin1String("RegexTest_30")
+ << QLatin1String("RegexTest_30")
+ << QLatin1String("RegexTest_33")
+ << QLatin1String("RegexTest_34")
+ << QLatin1String("RegexTest_34")
+ << QLatin1String("RegexTest_43")
+ << QLatin1String("RegexTest_44")
+ << QLatin1String("RegexTest_45")
+ << QLatin1String("RegexTest_46")
+ << QLatin1String("RegexTest_47")
+ << QLatin1String("RegexTest_48")
+ << QLatin1String("RegexTest_49")
+ << QLatin1String("RegexTest_50")
+ << QLatin1String("RegexTest_51")
+ << QLatin1String("RegexTest_52")
+ << QLatin1String("RegexTest_53")
+ << QLatin1String("RegexTest_54")
+ << QLatin1String("RegexTest_55")
+ << QLatin1String("RegexTest_56")
+ << QLatin1String("RegexTest_57")
+ << QLatin1String("RegexTest_57")
+ << QLatin1String("RegexTest_58")
+ << QLatin1String("RegexTest_58")
+ << QLatin1String("RegexTest_65")
+ << QLatin1String("RegexTest_113")
+ << QLatin1String("RegexTest_116")
+ << QLatin1String("RegexTest_119")
+ << QLatin1String("RegexTest_120")
+ << QLatin1String("RegexTest_121")
+ << QLatin1String("RegexTest_141")
+ << QLatin1String("RegexTest_142")
+ << QLatin1String("RegexTest_143")
+ << QLatin1String("RegexTest_145")
+ << QLatin1String("RegexTest_146")
+ << QLatin1String("RegexTest_147")
+ << QLatin1String("RegexTest_148")
+ << QLatin1String("RegexTest_149")
+ << QLatin1String("RegexTest_150")
+ << QLatin1String("RegexTest_151")
+ << QLatin1String("RegexTest_152")
+ << QLatin1String("RegexTest_154")
+ << QLatin1String("RegexTest_155")
+ << QLatin1String("RegexTest_156")
+ << QLatin1String("RegexTest_157")
+ << QLatin1String("RegexTest_158")
+ << QLatin1String("RegexTest_163")
+ << QLatin1String("RegexTest_164")
+ << QLatin1String("RegexTest_165")
+ << QLatin1String("RegexTest_166")
+ << QLatin1String("RegexTest_167")
+ << QLatin1String("RegexTest_168")
+ << QLatin1String("RegexTest_169")
+ << QLatin1String("RegexTest_170")
+ << QLatin1String("RegexTest_171")
+ << QLatin1String("RegexTest_172")
+ << QLatin1String("RegexTest_173")
+ << QLatin1String("RegexTest_174")
+ << QLatin1String("RegexTest_178")
+ << QLatin1String("RegexTest_194")
+ << QLatin1String("RegexTest_194")
+ << QLatin1String("RegexTest_195")
+ << QLatin1String("RegexTest_195")
+ << QLatin1String("RegexTest_196")
+ << QLatin1String("RegexTest_196")
+ << QLatin1String("RegexTest_197")
+ << QLatin1String("RegexTest_198")
+ << QLatin1String("RegexTest_199")
+ << QLatin1String("RegexTest_200")
+ << QLatin1String("RegexTest_200")
+ << QLatin1String("RegexTest_201")
+ << QLatin1String("RegexTest_201")
+ << QLatin1String("RegexTest_202")
+ << QLatin1String("RegexTest_202")
+ << QLatin1String("RegexTest_203")
+ << QLatin1String("RegexTest_204")
+ << QLatin1String("RegexTest_205")
+ << QLatin1String("RegexTest_206")
+ << QLatin1String("RegexTest_207")
+ << QLatin1String("RegexTest_208")
+ << QLatin1String("RegexTest_209")
+ << QLatin1String("RegexTest_209")
+ << QLatin1String("RegexTest_210")
+ << QLatin1String("RegexTest_210")
+ << QLatin1String("RegexTest_211")
+ << QLatin1String("RegexTest_211")
+ << QLatin1String("RegexTest_212")
+ << QLatin1String("RegexTest_213")
+ << QLatin1String("RegexTest_214")
+ << QLatin1String("RegexTest_215")
+ << QLatin1String("RegexTest_216")
+ << QLatin1String("RegexTest_217")
+ << QLatin1String("RegexTest_218")
+ << QLatin1String("RegexTest_220")
+ << QLatin1String("RegexTest_221")
+ << QLatin1String("RegexTest_222")
+ << QLatin1String("RegexTest_226")
+ << QLatin1String("RegexTest_230")
+ << QLatin1String("RegexTest_232")
+ << QLatin1String("RegexTest_233")
+ << QLatin1String("RegexTest_294")
+ << QLatin1String("RegexTest_294")
+ << QLatin1String("RegexTest_295")
+ << QLatin1String("RegexTest_295")
+ << QLatin1String("RegexTest_299")
+ << QLatin1String("RegexTest_300")
+ << QLatin1String("RegexTest_301")
+ << QLatin1String("RegexTest_302")
+ << QLatin1String("RegexTest_303")
+ << QLatin1String("RegexTest_304")
+ << QLatin1String("RegexTest_305")
+ << QLatin1String("RegexTest_306")
+ << QLatin1String("RegexTest_307")
+ << QLatin1String("RegexTest_308")
+ << QLatin1String("RegexTest_309")
+ << QLatin1String("RegexTest_310")
+ << QLatin1String("RegexTest_311")
+ << QLatin1String("RegexTest_312")
+ << QLatin1String("RegexTest_313")
+ << QLatin1String("RegexTest_314")
+ << QLatin1String("RegexTest_315")
+ << QLatin1String("RegexTest_315")
+ << QLatin1String("RegexTest_316")
+ << QLatin1String("RegexTest_316")
+ << QLatin1String("RegexTest_317")
+ << QLatin1String("RegexTest_317")
+ << QLatin1String("RegexTest_440")
+ << QLatin1String("RegexTest_441")
+ << QLatin1String("RegexTest_442")
+ << QLatin1String("RegexTest_443")
+ << QLatin1String("RegexTest_448")
+ << QLatin1String("RegexTest_449")
+ << QLatin1String("RegexTest_450")
+ << QLatin1String("RegexTest_451")
+ << QLatin1String("RegexTest_458")
+ << QLatin1String("RegexTest_464")
+ << QLatin1String("RegexTest_464")
+ << QLatin1String("RegexTest_465")
+ << QLatin1String("RegexTest_469")
+ << QLatin1String("RegexTest_470")
+ << QLatin1String("RegexTest_471")
+ << QLatin1String("RegexTest_472")
+ << QLatin1String("RegexTest_473")
+ << QLatin1String("RegexTest_477")
+ << QLatin1String("RegexTest_478")
+ << QLatin1String("RegexTest_478")
+ << QLatin1String("RegexTest_479")
+ << QLatin1String("RegexTest_480")
+ << QLatin1String("RegexTest_481")
+ << QLatin1String("RegexTest_482")
+ << QLatin1String("RegexTest_482")
+ << QLatin1String("RegexTest_483")
+ << QLatin1String("RegexTest_483")
+ << QLatin1String("RegexTest_484")
+ << QLatin1String("RegexTest_487")
+ << QLatin1String("RegexTest_516")
+ << QLatin1String("RegexTest_516")
+ << QLatin1String("RegexTest_517")
+ << QLatin1String("RegexTest_517")
+ << QLatin1String("RegexTest_518")
+ << QLatin1String("RegexTest_518")
+ << QLatin1String("RegexTest_519")
+ << QLatin1String("RegexTest_519")
+ << QLatin1String("RegexTest_521")
+ << QLatin1String("RegexTest_523")
+ << QLatin1String("RegexTest_524")
+ << QLatin1String("RegexTest_524")
+ << QLatin1String("RegexTest_586")
+ << QLatin1String("RegexTest_587")
+ << QLatin1String("RegexTest_592")
+ << QLatin1String("RegexTest_593")
+ << QLatin1String("RegexTest_594")
+ << QLatin1String("RegexTest_595")
+ << QLatin1String("RegexTest_596")
+ << QLatin1String("RegexTest_597")
+ << QLatin1String("RegexTest_598")
+ << QLatin1String("RegexTest_599")
+ << QLatin1String("RegexTest_600")
+ << QLatin1String("RegexTest_601")
+ << QLatin1String("RegexTest_602")
+ << QLatin1String("RegexTest_603")
+ << QLatin1String("RegexTest_604")
+ << QLatin1String("RegexTest_605")
+ << QLatin1String("RegexTest_648")
+ << QLatin1String("RegexTest_655")
+ << QLatin1String("RegexTest_688")
+ << QLatin1String("RegexTest_696")
+ << QLatin1String("RegexTest_697")
+ << QLatin1String("RegexTest_698")
+ << QLatin1String("RegexTest_700")
+ << QLatin1String("RegexTest_701")
+ << QLatin1String("RegexTest_702")
+ << QLatin1String("RegexTest_703")
+ << QLatin1String("RegexTest_704")
+ << QLatin1String("RegexTest_705")
+ << QLatin1String("RegexTest_706")
+ << QLatin1String("RegexTest_707")
+ << QLatin1String("RegexTest_717")
+ << QLatin1String("RegexTest_718")
+ << QLatin1String("RegexTest_719")
+ << QLatin1String("RegexTest_724")
+ << QLatin1String("RegexTest_725")
+ << QLatin1String("RegexTest_726")
+ << QLatin1String("RegexTest_727")
+ << QLatin1String("RegexTest_728")
+ << QLatin1String("RegexTest_729")
+ << QLatin1String("RegexTest_730")
+ << QLatin1String("RegexTest_731")
+ << QLatin1String("RegexTest_732")
+ << QLatin1String("RegexTest_733")
+ << QLatin1String("RegexTest_743")
+ << QLatin1String("RegexTest_755")
+ << QLatin1String("RegexTest_756")
+ << QLatin1String("RegexTest_761")
+ << QLatin1String("RegexTest_762")
+ << QLatin1String("RegexTest_781")
+ << QLatin1String("RegexTest_782")
+ << QLatin1String("RegexTest_783")
+ << QLatin1String("RegexTest_790")
+ << QLatin1String("RegexTest_791")
+ << QLatin1String("RegexTest_824")
+ << QLatin1String("RegexTest_826")
+ << QLatin1String("RegexTest_827")
+ << QLatin1String("RegexTest_836")
+ << QLatin1String("RegexTest_837")
+ << QLatin1String("RegexTest_841")
+ << QLatin1String("RegexTest_842")
+ << QLatin1String("RegexTest_843")
+ << QLatin1String("RegexTest_844")
+ << QLatin1String("RegexTest_845")
+ << QLatin1String("RegexTest_846")
+ << QLatin1String("RegexTest_847")
+ << QLatin1String("RegexTest_848")
+ << QLatin1String("RegexTest_851")
+ << QLatin1String("RegexTest_852")
+ << QLatin1String("RegexTest_853")
+ << QLatin1String("RegexTest_854")
+ << QLatin1String("RegexTest_855")
+ << QLatin1String("RegexTest_856")
+ << QLatin1String("RegexTest_857")
+ << QLatin1String("RegexTest_861")
+ << QLatin1String("RegexTest_862")
+ << QLatin1String("RegexTest_863")
+ << QLatin1String("RegexTest_864")
+ << QLatin1String("RegexTest_865")
+ << QLatin1String("RegexTest_866")
+ << QLatin1String("RegexTest_870")
+ << QLatin1String("RegexTest_879")
+ << QLatin1String("RegexTest_880")
+ << QLatin1String("RegexTest_888")
+ << QLatin1String("RegexTest_889")
+ << QLatin1String("RegexTest_890")
+ << QLatin1String("RegexTest_891")
+ << QLatin1String("RegexTest_892")
+ << QLatin1String("RegexTest_893")
+ << QLatin1String("RegexTest_894")
+ << QLatin1String("RegexTest_895")
+ << QLatin1String("RegexTest_896")
+ << QLatin1String("RegexTest_897")
+ << QLatin1String("RegexTest_898")
+ << QLatin1String("RegexTest_899")
+ << QLatin1String("RegexTest_900")
+ << QLatin1String("RegexTest_901")
+ << QLatin1String("RegexTest_902")
+ << QLatin1String("RegexTest_903")
+ << QLatin1String("RegexTest_904")
+ << QLatin1String("RegexTest_905")
+ << QLatin1String("RegexTest_906")
+ << QLatin1String("RegexTest_907")
+ << QLatin1String("RegexTest_908")
+ << QLatin1String("RegexTest_909")
+ << QLatin1String("RegexTest_910")
+ << QLatin1String("RegexTest_911")
+ << QLatin1String("RegexTest_912")
+ << QLatin1String("RegexTest_913")
+ << QLatin1String("RegexTest_914")
+ << QLatin1String("RegexTest_915")
+ << QLatin1String("RegexTest_916")
+ << QLatin1String("RegexTest_917")
+ << QLatin1String("RegexTest_918")
+ << QLatin1String("RegexTest_919")
+ << QLatin1String("RegexTest_920")
+ << QLatin1String("RegexTest_921")
+ << QLatin1String("RegexTest_922")
+ << QLatin1String("RegexTest_923")
+ << QLatin1String("RegexTest_924")
+ << QLatin1String("RegexTest_925")
+ << QLatin1String("RegexTest_926")
+ << QLatin1String("RegexTest_928")
+ << QLatin1String("RegexTest_929")
+ << QLatin1String("RegexTest_930")
+ << QLatin1String("RegexTest_936")
+ << QLatin1String("RegexTest_937")
+ << QLatin1String("RegexTest_938")
+ << QLatin1String("RegexTest_939")
+ << QLatin1String("RegexTest_940")
+ << QLatin1String("RegexTest_941")
+ << QLatin1String("RegexTest_942")
+ << QLatin1String("RegexTest_943")
+ << QLatin1String("RegexTest_944")
+ << QLatin1String("RegexTest_945")
+ << QLatin1String("RegexTest_946")
+ << QLatin1String("RegexTest_949")
+ << QLatin1String("RegexTest_950")
+ << QLatin1String("RegexTest_951")
+ << QLatin1String("RegexTest_952")
+ << QLatin1String("RegexTest_953")
+ << QLatin1String("RegexTest_954")
+ << QLatin1String("RegexTest_955")
+ << QLatin1String("RegexTest_956")
+ << QLatin1String("RegexTest_957")
+ << QLatin1String("RegexTest_958")
+ << QLatin1String("RegexTest_959")
+ << QLatin1String("RegexTest_960")
+ << QLatin1String("RegexTest_961")
+ << QLatin1String("RegexTest_962")
+ << QLatin1String("RegexTest_963")
+ << QLatin1String("RegexTest_964")
+ << QLatin1String("RegexTest_976")
+ << QLatin1String("RegexTest_977")
+ << QLatin1String("RegexTest_988")
+ << QLatin1String("RegexTest_989")
+ << QLatin1String("RegexTest_990")
+ << QLatin1String("RegexTest_991")
+ << QLatin1String("RegexTest_994")
+ << QLatin1String("RegexTest_995")
+ << QLatin1String("RegexTest_996")
+ << QLatin1String("RegexTest_997")
+ << QLatin1String("RegexTest_1000")
+ << QLatin1String("RegexTest_1001")
+ << QLatin1String("RegexTest_1002")
+ << QLatin1String("RegexTest_1003")
+ << QLatin1String("RegexTest_1004")
+ << QLatin1String("RegexTest_1007")
+ << QLatin1String("RegexTest_1008")
+ << QLatin1String("RegexTest_1009")
+ << QLatin1String("RegexTest_1010")
+ << QLatin1String("RegexTest_1011")
+ << QLatin1String("RegexTest_1012")
+ << QLatin1String("RegexTest_1013")
+ << QLatin1String("RegexTest_1014")
+ << QLatin1String("RegexTest_1015")
+ << QLatin1String("RegexTest_1016")
+ << QLatin1String("RegexTest_1017")
+ << QLatin1String("RegexTest_1018")
+ << QLatin1String("RegexTest_1019")
+ << QLatin1String("RegexTest_1070")
+ << QLatin1String("RegexTest_1071")
+ << QLatin1String("RegexTest_1076")
+ << QLatin1String("RegexTest_1077")
+ << QLatin1String("RegexTest_1078")
+ << QLatin1String("RegexTest_1079")
+ << QLatin1String("RegexTest_1080")
+ << QLatin1String("RegexTest_1081")
+ << QLatin1String("RegexTest_1082")
+ << QLatin1String("RegexTest_1083")
+ << QLatin1String("RegexTest_1084")
+ << QLatin1String("RegexTest_1085")
+ << QLatin1String("RegexTest_1086")
+ << QLatin1String("RegexTest_1087")
+ << QLatin1String("RegexTest_1088")
+ << QLatin1String("RegexTest_1089")
+ << QLatin1String("RegexTest_1132")
+ << QLatin1String("RegexTest_1139")
+ << QLatin1String("RegexTest_1172")
+ << QLatin1String("RegexTest_1180")
+ << QLatin1String("RegexTest_1181")
+ << QLatin1String("RegexTest_1182")
+ << QLatin1String("RegexTest_1184")
+ << QLatin1String("RegexTest_1185")
+ << QLatin1String("RegexTest_1186")
+ << QLatin1String("RegexTest_1187")
+ << QLatin1String("RegexTest_1188")
+ << QLatin1String("RegexTest_1189")
+ << QLatin1String("RegexTest_1190")
+ << QLatin1String("RegexTest_1191")
+ << QLatin1String("RegexTest_1201")
+ << QLatin1String("RegexTest_1202")
+ << QLatin1String("RegexTest_1203")
+ << QLatin1String("RegexTest_1208")
+ << QLatin1String("RegexTest_1209")
+ << QLatin1String("RegexTest_1210")
+ << QLatin1String("RegexTest_1211")
+ << QLatin1String("RegexTest_1212")
+ << QLatin1String("RegexTest_1213")
+ << QLatin1String("RegexTest_1214")
+ << QLatin1String("RegexTest_1215")
+ << QLatin1String("RegexTest_1216")
+ << QLatin1String("RegexTest_1217")
+ << QLatin1String("RegexTest_1227")
+ << QLatin1String("RegexTest_1239")
+ << QLatin1String("RegexTest_1240")
+ << QLatin1String("RegexTest_1245")
+ << QLatin1String("RegexTest_1246")
+ << QLatin1String("RegexTest_1265")
+ << QLatin1String("RegexTest_1266")
+ << QLatin1String("RegexTest_1267")
+ << QLatin1String("RegexTest_1274")
+ << QLatin1String("RegexTest_1275")
+ << QLatin1String("RegexTest_1308")
+ << QLatin1String("RegexTest_1310")
+ << QLatin1String("RegexTest_1311")
+ << QLatin1String("RegexTest_1320")
+ << QLatin1String("RegexTest_1321")
+ << QLatin1String("RegexTest_1322")
+ << QLatin1String("RegexTest_1323")
+ << QLatin1String("RegexTest_1324")
+ << QLatin1String("RegexTest_1325")
+ << QLatin1String("RegexTest_1326")
+ << QLatin1String("RegexTest_1327")
+ << QLatin1String("RegexTest_1328")
+ << QLatin1String("RegexTest_1329")
+ << QLatin1String("RegexTest_1330")
+ << QLatin1String("RegexTest_1331")
+ << QLatin1String("RegexTest_1332")
+ << QLatin1String("RegexTest_1335")
+ << QLatin1String("RegexTest_1336")
+ << QLatin1String("RegexTest_1337")
+ << QLatin1String("RegexTest_1338")
+ << QLatin1String("RegexTest_1339")
+ << QLatin1String("RegexTest_1340")
+ << QLatin1String("RegexTest_1341")
+ << QLatin1String("RegexTest_1345")
+ << QLatin1String("RegexTest_1346")
+ << QLatin1String("RegexTest_1347")
+ << QLatin1String("RegexTest_1348")
+ << QLatin1String("RegexTest_1349")
+ << QLatin1String("RegexTest_1350")
+ << QLatin1String("RegexTest_1354")
+ << QLatin1String("RegexTest_1363")
+ << QLatin1String("RegexTest_1364")
+ << QLatin1String("RegexTest_1365")
+ << QLatin1String("RegexTest_1372")
+ << QLatin1String("RegexTest_1373")
+ << QLatin1String("RegexTest_1374")
+ << QLatin1String("RegexTest_1375")
+ << QLatin1String("RegexTest_1376")
+ << QLatin1String("RegexTest_1377")
+ << QLatin1String("RegexTest_1378")
+ << QLatin1String("RegexTest_1379")
+ << QLatin1String("RegexTest_1380")
+ << QLatin1String("RegexTest_1381")
+ << QLatin1String("RegexTest_1382")
+ << QLatin1String("RegexTest_1383")
+ << QLatin1String("RegexTest_1384")
+ << QLatin1String("RegexTest_1385")
+ << QLatin1String("RegexTest_1386")
+ << QLatin1String("RegexTest_1387")
+ << QLatin1String("RegexTest_1388")
+ << QLatin1String("RegexTest_1389")
+ << QLatin1String("RegexTest_1390")
+ << QLatin1String("RegexTest_1391")
+ << QLatin1String("RegexTest_1392")
+ << QLatin1String("RegexTest_1393")
+ << QLatin1String("RegexTest_1394")
+ << QLatin1String("RegexTest_1395")
+ << QLatin1String("RegexTest_1396")
+ << QLatin1String("RegexTest_1397")
+ << QLatin1String("RegexTest_1398")
+ << QLatin1String("RegexTest_1399")
+ << QLatin1String("RegexTest_1400")
+ << QLatin1String("RegexTest_1401")
+ << QLatin1String("RegexTest_1402")
+ << QLatin1String("RegexTest_1403")
+ << QLatin1String("RegexTest_1404")
+ << QLatin1String("RegexTest_1405")
+ << QLatin1String("RegexTest_1406")
+ << QLatin1String("RegexTest_1407")
+ << QLatin1String("RegexTest_1408")
+ << QLatin1String("RegexTest_1409")
+ << QLatin1String("RegexTest_1410")
+ << QLatin1String("RegexTest_1412")
+ << QLatin1String("RegexTest_1413")
+ << QLatin1String("RegexTest_1414")
+ << QLatin1String("RegexTest_1420")
+ << QLatin1String("RegexTest_1421")
+ << QLatin1String("RegexTest_1422")
+ << QLatin1String("RegexTest_1423")
+ << QLatin1String("RegexTest_1424")
+ << QLatin1String("RegexTest_1425")
+ << QLatin1String("RegexTest_1426")
+ << QLatin1String("RegexTest_1427")
+ << QLatin1String("RegexTest_1428")
+ << QLatin1String("RegexTest_1429")
+ << QLatin1String("RegexTest_1430")
+ << QLatin1String("RegexTest_1433")
+ << QLatin1String("RegexTest_1434")
+ << QLatin1String("RegexTest_1435")
+ << QLatin1String("RegexTest_1436")
+ << QLatin1String("RegexTest_1437")
+ << QLatin1String("RegexTest_1438")
+ << QLatin1String("RegexTest_1439")
+ << QLatin1String("RegexTest_1440")
+ << QLatin1String("RegexTest_1441")
+ << QLatin1String("RegexTest_1442")
+ << QLatin1String("RegexTest_1443")
+ << QLatin1String("RegexTest_1444")
+ << QLatin1String("RegexTest_1445")
+ << QLatin1String("RegexTest_1446")
+ << QLatin1String("RegexTest_1447")
+ << QLatin1String("RegexTest_1448")
+ << QLatin1String("RegexTest_1451")
+ << QLatin1String("RegexTest_1452")
+ << QLatin1String("RegexTest_1453")
+ << QLatin1String("RegexTest_1454")
+ << QLatin1String("RegexTest_1455")
+ << QLatin1String("RegexTest_1456")
+ << QLatin1String("RegexTest_1472")
+ << QLatin1String("RegexTest_1473")
+ << QLatin1String("RegexTest_1474")
+ << QLatin1String("RegexTest_1475")
+ << QLatin1String("RegexTest_1478")
+ << QLatin1String("RegexTest_1479")
+ << QLatin1String("RegexTest_1480")
+ << QLatin1String("RegexTest_1481")
+ << QLatin1String("RegexTest_1484")
+ << QLatin1String("RegexTest_1485")
+ << QLatin1String("RegexTest_1486")
+ << QLatin1String("RegexTest_1487")
+ << QLatin1String("RegexTest_1488")
+ << QLatin1String("RegexTest_1491")
+ << QLatin1String("RegexTest_1492")
+ << QLatin1String("RegexTest_1493")
+ << QLatin1String("RegexTest_1494")
+ << QLatin1String("RegexTest_1495")
+ << QLatin1String("RegexTest_1496")
+ << QLatin1String("RegexTest_1497")
+ << QLatin1String("RegexTest_1498")
+ << QLatin1String("RegexTest_1499")
+ << QLatin1String("RegexTest_1500")
+ << QLatin1String("RegexTest_1501")
+ << QLatin1String("RegexTest_1502")
+ << QLatin1String("RegexTest_1503")
+ << QLatin1String("RegexTest_1543")
+ << QLatin1String("RegexTest_1544")
+ << QLatin1String("reZ001")
+*/
+ << QLatin1String("schA2")
+ << QLatin1String("schA5")
+ << QLatin1String("schA7")
+ << QLatin1String("schD8")
+ << QLatin1String("schG3")
+ << QLatin1String("schG6")
+ << QLatin1String("schG9")
+ << QLatin1String("schG11")
+ << QLatin1String("schG12")
+ << QLatin1String("schU1")
+ << QLatin1String("schU3")
+ << QLatin1String("schU4")
+ << QLatin1String("schU5")
+ << QLatin1String("schZ004")
+ << QLatin1String("schZ005")
+ << QLatin1String("schZ012_a")
+ << QLatin1String("stZ041")
+ << QLatin1String("wildZ010");
+}
+
+bool XSDTestSuiteHandler::startElement(const QString &namespaceURI,
+ const QString &localName,
+ const QString &/*qName*/,
+ const QXmlAttributes &atts)
+{
+ if(namespaceURI != QString::fromLatin1("http://www.w3.org/XML/2004/xml-schema-test-suite/"))
+ return true;
+
+ if (localName == QLatin1String("testSet")) {
+ m_currentTestSet = new TestGroup(m_topLevelGroup);
+ Q_ASSERT(m_currentTestSet);
+ m_currentTestSet->setTitle(atts.value("name"));
+ m_topLevelGroup->appendChild(m_currentTestSet);
+ } else if (localName == QLatin1String("testGroup")) {
+ m_currentTestGroup = new TestGroup(m_currentTestSet);
+ Q_ASSERT(m_currentTestGroup);
+ m_currentTestGroup->setTitle(atts.value("name"));
+ m_currentTestSet->appendChild(m_currentTestGroup);
+ m_inTestGroup = true;
+ } else if (localName == QLatin1String("schemaTest")) {
+ if (m_blackList.contains(atts.value("name"))) {
+ m_currentTestCase = 0;
+ m_schemaBlacklisted = true;
+ return true;
+ }
+ m_schemaBlacklisted = false;
+
+ m_currentTestCase = new XSDTSTestCase(TestCase::Standard, m_currentTestGroup, XSDTSTestCase::SchemaTest);
+ Q_ASSERT(m_currentTestCase);
+ m_counter++;
+ m_currentTestCase->setName(QString::number(m_counter) + atts.value("name"));
+ m_currentTestGroup->appendChild(m_currentTestCase);
+ m_currentTestCase->setParent(m_currentTestGroup);
+
+ m_inSchemaTest = true;
+ } else if (localName == QLatin1String("instanceTest")) {
+ if (m_schemaBlacklisted) {
+ m_currentTestCase = 0;
+ return true;
+ }
+
+ m_currentTestCase = new XSDTSTestCase(TestCase::Standard, m_currentTestGroup, XSDTSTestCase::InstanceTest);
+ Q_ASSERT(m_currentTestCase);
+ m_counter++;
+ m_currentTestCase->setName(QString::number(m_counter) + atts.value("name"));
+ m_currentTestGroup->appendChild(m_currentTestCase);
+
+ m_inInstanceTest = true;
+ } else if (localName == QLatin1String("schemaDocument") || localName == QLatin1String("instanceDocument")) {
+ if (m_inSchemaTest) {
+ m_currentTestCase->setSchemaUri(QUrl(atts.value("xlink:href")));
+ if (m_currentSchemaLink.isEmpty()) // we only use the first schema document for validation
+ m_currentSchemaLink = atts.value("xlink:href");
+ }
+ if (m_inInstanceTest) {
+ m_currentTestCase->setInstanceUri(QUrl(atts.value("xlink:href")));
+ m_currentTestCase->setSchemaUri(QUrl(m_currentSchemaLink));
+ }
+ } else if (localName == QLatin1String("expected") && (m_inSchemaTest || m_inInstanceTest)) {
+ TestBaseLine *baseLine = new TestBaseLine(TestBaseLine::SchemaIsValid);
+ if (atts.value("validity") == QLatin1String("valid")) {
+ baseLine->setDetails(QLatin1String("true"));
+ m_currentTestCase->setName(m_currentTestCase->name() + QLatin1String(" tokoe:valid"));
+ } else {
+ baseLine->setDetails(QLatin1String("false"));
+ m_currentTestCase->setName(m_currentTestCase->name() + QLatin1String(" tokoe:invalid"));
+ }
+
+ m_currentTestCase->addBaseLine(baseLine);
+ } else if (localName == QLatin1String("documentation") && m_inTestGroup) {
+ m_inDescription = true;
+ }
+
+ return true;
+}
+
+bool XSDTestSuiteHandler::endElement(const QString &namespaceURI,
+ const QString &localName,
+ const QString &/*qName*/)
+{
+ if (localName == QLatin1String("testGroup")) {
+ m_inTestGroup = false;
+ m_currentTestGroup->setDescription(m_documentation);
+ m_documentation.clear();
+ m_currentSchemaLink.clear();
+
+ if (m_currentTestGroup->childCount() == 0)
+ m_currentTestSet->removeLast();
+ } else if (localName == QLatin1String("schemaTest"))
+ m_inSchemaTest = false;
+ else if (localName == QLatin1String("instanceTest"))
+ m_inInstanceTest = false;
+ else if (localName == QLatin1String("documentation"))
+ m_inDescription = false;
+
+ return true;
+}
+
+bool XSDTestSuiteHandler::characters(const QString &ch)
+{
+ if (m_inDescription)
+ m_documentation += ch;
+
+ return true;
+}
+
+TestSuite *XSDTestSuiteHandler::testSuite() const
+{
+ return m_ts;
+}
+
+// vim: et:ts=4:sw=4:sts=4
+
diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h
new file mode 100644
index 0000000000..8c57e82538
--- /dev/null
+++ b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the Patternist project on Trolltech Labs.
+**
+** $TROLLTECH_GPL_LICENSE$
+**
+***************************************************************************
+*/
+
+#ifndef PatternistSDK_XSDTestSuiteHandler_H
+#define PatternistSDK_XSDTestSuiteHandler_H
+
+#include <QUrl>
+#include <QXmlDefaultHandler>
+
+#include "ExternalSourceLoader.h"
+#include "TestSuite.h"
+#include "XQTSTestCase.h"
+
+QT_BEGIN_HEADER
+
+namespace QPatternistSDK
+{
+ class TestBaseLine;
+ class TestGroup;
+ class XSDTSTestCase;
+
+ /**
+ * @short Creates a TestSuite from the XSD Test Suite.
+ *
+ * The created TestSuite can be retrieved via testSuite().
+ *
+ * @note XSDTestSuiteHandler assumes the XML is valid by having been validated
+ * against the W3C XML Schema. It has no safety checks for that the XML format
+ * is correct but is hard coded for it. Thus, the behavior is undefined if
+ * the XML is invalid.
+ *
+ * @ingroup PatternistSDK
+ * @author Tobias Koenig <tobias.koenig@trolltech.com>
+ */
+ class Q_PATTERNISTSDK_EXPORT XSDTestSuiteHandler : public QXmlDefaultHandler
+ {
+ public:
+ /**
+ * @param catalogFile the URI for the catalog file being parsed. This
+ * URI is used for creating absolute URIs for files mentioned in
+ * the catalog with relative URIs.
+ * @param useExclusionList whether excludeTestGroups.txt should be used to ignore
+ * test groups when loading
+ */
+ XSDTestSuiteHandler(const QUrl &catalogFile);
+ virtual bool characters(const QString &ch);
+
+ virtual bool endElement(const QString &namespaceURI,
+ const QString &localName,
+ const QString &qName);
+ virtual bool startElement(const QString &namespaceURI,
+ const QString &localName,
+ const QString &qName,
+ const QXmlAttributes &atts);
+
+ virtual TestSuite *testSuite() const;
+
+ private:
+ TestSuite* m_ts;
+ const QUrl m_catalogFile;
+
+ TestGroup* m_topLevelGroup;
+ TestGroup* m_currentTestSet;
+ TestGroup* m_currentTestGroup;
+ XSDTSTestCase* m_currentTestCase;
+ bool m_inSchemaTest;
+ bool m_inInstanceTest;
+ bool m_inTestGroup;
+ bool m_inDescription;
+ bool m_schemaBlacklisted;
+ QString m_documentation;
+ QString m_currentSchemaLink;
+ int m_counter;
+ QSet<QString> m_blackList;
+ };
+}
+
+QT_END_HEADER
+
+#endif
+// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/xmlpatternsxqts/lib/lib.pro b/tests/auto/xmlpatternsxqts/lib/lib.pro
index 5b12d63bce..cb9453a063 100644
--- a/tests/auto/xmlpatternsxqts/lib/lib.pro
+++ b/tests/auto/xmlpatternsxqts/lib/lib.pro
@@ -50,6 +50,8 @@ HEADERS = ASTItem.h \
Worker.h \
XMLWriter.h \
XQTSTestCase.h \
+ XSDTestSuiteHandler.h \
+ XSDTSTestCase.h \
XSLTTestSuiteHandler.h
SOURCES = ASTItem.cpp \
@@ -75,4 +77,6 @@ SOURCES = ASTItem.cpp \
Worker.cpp \
XMLWriter.cpp \
XQTSTestCase.cpp \
+ XSDTestSuiteHandler.cpp \
+ XSDTSTestCase.cpp \
XSLTTestSuiteHandler.cpp
diff --git a/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp b/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp
index 1f9e3961d0..71abbb9950 100644
--- a/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp
+++ b/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp
@@ -55,11 +55,11 @@
using namespace QPatternistSDK;
-tst_SuiteTest::tst_SuiteTest(const bool isXSLT,
+tst_SuiteTest::tst_SuiteTest(const SuiteType suiteType,
const bool alwaysRun) : m_existingBaseline(inputFile(QLatin1String("Baseline.xml")))
, m_candidateBaseline(inputFile(QLatin1String("CandidateBaseline.xml")))
, m_abortRun(!alwaysRun && !QFile::exists(QLatin1String("runTests")))
- , m_isXSLT(isXSLT)
+ , m_suiteType(suiteType)
{
}
@@ -86,7 +86,16 @@ void tst_SuiteTest::runTestSuite() const
QString errMsg;
const QFileInfo fi(m_catalogPath);
const QUrl catalogPath(QUrl::fromLocalFile(fi.absoluteFilePath()));
- TestSuite *const ts = TestSuite::openCatalog(catalogPath, errMsg, true, m_isXSLT);
+
+ TestSuite::SuiteType suiteType;
+ switch (m_suiteType) {
+ case XQuerySuite: suiteType = TestSuite::XQuerySuite;
+ case XsltSuite: suiteType = TestSuite::XsltSuite;
+ case XsdSuite: suiteType = TestSuite::XsdSuite;
+ default: break;
+ }
+
+ TestSuite *const ts = TestSuite::openCatalog(catalogPath, errMsg, true, suiteType);
QVERIFY2(ts, qPrintable(QString::fromLatin1("Failed to open the catalog, maybe it doesn't exist or is broken: %1").arg(errMsg)));
diff --git a/tests/auto/xmlpatternsxqts/test/tst_suitetest.h b/tests/auto/xmlpatternsxqts/test/tst_suitetest.h
index 922f645e7a..05bf6cbc24 100644
--- a/tests/auto/xmlpatternsxqts/test/tst_suitetest.h
+++ b/tests/auto/xmlpatternsxqts/test/tst_suitetest.h
@@ -50,13 +50,21 @@
\class tst_SuiteTest
\internal
\since 4.5
- \brief Base class for tst_XmlPatternsXQTS and tst_XmlPatternsXSLTS.
+ \brief Base class for tst_XmlPatternsXQTS, tst_XmlPatternsXSLTS and tst_XmlPatternsXSDTS.
*/
class tst_SuiteTest : public QObject
, private TestFundament
{
Q_OBJECT
+public:
+ enum SuiteType
+ {
+ XQuerySuite,
+ XsltSuite,
+ XsdSuite
+ };
+
protected:
/**
* @p isXSLT is @c true if the catalog opened is an
@@ -65,7 +73,7 @@ protected:
* @p alwaysRun is @c true if the test should always be run,
* regardless of if the file runTests exists.
*/
- tst_SuiteTest(const bool isXSLT,
+ tst_SuiteTest(SuiteType type,
const bool alwaysRun = false);
/**
@@ -91,7 +99,7 @@ private:
const QString m_existingBaseline;
const QString m_candidateBaseline;
const bool m_abortRun;
- const bool m_isXSLT;
+ const SuiteType m_suiteType;
};
#endif
diff --git a/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp b/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp
index 6d9502d63e..1193372f97 100644
--- a/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp
+++ b/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp
@@ -61,7 +61,7 @@ public:
virtual void catalogPath(QString &write) const;
};
-tst_XmlPatternsXQTS::tst_XmlPatternsXQTS() : tst_SuiteTest(false)
+tst_XmlPatternsXQTS::tst_XmlPatternsXQTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite)
{
}