summaryrefslogtreecommitdiffstats
path: root/tests/manual/xmlstreamlint
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/xmlstreamlint')
-rw-r--r--tests/manual/xmlstreamlint/CMakeLists.txt24
-rw-r--r--tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc51
-rw-r--r--tests/manual/xmlstreamlint/main.cpp90
-rw-r--r--tests/manual/xmlstreamlint/xmlstreamlint.pro7
4 files changed, 172 insertions, 0 deletions
diff --git a/tests/manual/xmlstreamlint/CMakeLists.txt b/tests/manual/xmlstreamlint/CMakeLists.txt
new file mode 100644
index 0000000000..5b11c9035d
--- /dev/null
+++ b/tests/manual/xmlstreamlint/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if (NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(xmlstreamlint LANGUAGES CXX)
+ find_package(Qt6BuildInternals COMPONENTS STANDALONE_TEST)
+ endif()
+
+qt_internal_add_manual_test(xmlstreamlint
+ SOURCES
+ main.cpp
+)
+
+set_target_properties(xmlstreamlint PROPERTIES
+ WIN32_EXECUTABLE FALSE
+ MACOSX_BUNDLE FALSE
+)
+
+target_link_libraries(xmlstreamlint PRIVATE
+ Qt::Core
+ Qt::Xml
+)
+
diff --git a/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc b/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc
new file mode 100644
index 0000000000..870203c584
--- /dev/null
+++ b/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example xmlstreamlint
+ \title XML Stream Lint Example
+ \ingroup xml-examples
+ \brief A commandline tool reading from an input file and writing to
+ the standard output file.
+
+ The XML Stream Lint example provides a simple command line utility that
+ accepts a file name as its single argument and writes it to the standard
+ output file.
+
+ The specified file is parsed using an QXmlStreamReader object and written
+ to the standard output file using an QXmlStreamWriter object. If the file
+ does not contain a well-formed XML document or the use of namespaces in
+ the document is incorrect, a description of the error is printed to
+ the standard error file and will appear in the console.
+
+ \section1 Basic Operation
+
+ The main function of the example opens the file specified by the user
+ for input (\c inputFile), and it uses QFile to access the standard output
+ file.
+
+ Reading XML is handled by an instance of the QXmlStreamReader class, which
+ operates on the input file object; writing is handled by an instance of
+ QXmlStreamWriter operating on the output file object:
+
+ \snippet xmlstreamlint/main.cpp 0
+
+ The work of parsing and rewriting the XML is done in a while loop, and is
+ driven by input from the reader:
+
+ \snippet xmlstreamlint/main.cpp 1
+
+ If more input is available, the next token from the input file is read
+ and parsed. If an error occurred, information is written to the standard
+ error file via a stream, and the example exits by returning a non-zero
+ value from the main function.
+
+ \snippet xmlstreamlint/main.cpp 2
+
+ For valid input, the writer is fed the current token from the reader,
+ and this is written to the output file that was specified when it was
+ constructed.
+
+ When there is no more input, the loop terminates, and the example can
+ exit successfully.
+*/
diff --git a/tests/manual/xmlstreamlint/main.cpp b/tests/manual/xmlstreamlint/main.cpp
new file mode 100644
index 0000000000..b825d1e7f5
--- /dev/null
+++ b/tests/manual/xmlstreamlint/main.cpp
@@ -0,0 +1,90 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QFile>
+#include <QStringList>
+#include <QTextStream>
+#include <QXmlStreamReader>
+
+/*
+ This class exists for the sole purpose of creating a translation context.
+*/
+class XmlStreamLint
+{
+public:
+ Q_DECLARE_TR_FUNCTIONS(XmlStreamLint)
+};
+
+int main(int argc, char *argv[])
+{
+ enum ExitCode
+ {
+ Success,
+ ParseFailure,
+ ArgumentError,
+ WriteError,
+ FileFailure
+ };
+
+ QCoreApplication app(argc, argv);
+
+ QTextStream errorStream(stderr);
+
+ if (argc != 2)
+ {
+ errorStream << XmlStreamLint::tr(
+ "Usage: xmlstreamlint <path to XML file>\n");
+ return ArgumentError;
+ }
+
+ QString inputFilePath(QCoreApplication::arguments().at(1));
+ QFile inputFile(inputFilePath);
+
+ if (!QFile::exists(inputFilePath))
+ {
+ errorStream << XmlStreamLint::tr(
+ "File %1 does not exist.\n").arg(inputFilePath);
+ return FileFailure;
+
+ } else if (!inputFile.open(QIODevice::ReadOnly)) {
+ errorStream << XmlStreamLint::tr(
+ "Failed to open file %1.\n").arg(inputFilePath);
+ return FileFailure;
+ }
+
+ QFile outputFile;
+ if (!outputFile.open(stdout, QIODevice::WriteOnly))
+ {
+ errorStream << XmlStreamLint::tr("Failed to open stdout.");
+ return WriteError;
+ }
+
+//! [0]
+ QXmlStreamReader reader(&inputFile);
+ QXmlStreamWriter writer(&outputFile);
+//! [0]
+
+//! [1]
+ while (!reader.atEnd())
+ {
+ reader.readNext();
+
+ if (reader.error())
+ {
+ errorStream << XmlStreamLint::tr(
+ "Error: %1 in file %2 at line %3, column %4.\n").arg(
+ reader.errorString(), inputFilePath,
+ QString::number(reader.lineNumber()),
+ QString::number(reader.columnNumber()));
+ return ParseFailure;
+//! [1]
+
+//! [2]
+ } else
+ writer.writeCurrentToken(reader);
+ }
+//! [2]
+
+ return Success;
+}
diff --git a/tests/manual/xmlstreamlint/xmlstreamlint.pro b/tests/manual/xmlstreamlint/xmlstreamlint.pro
new file mode 100644
index 0000000000..90a6387afe
--- /dev/null
+++ b/tests/manual/xmlstreamlint/xmlstreamlint.pro
@@ -0,0 +1,7 @@
+CONFIG += cmdline
+QT -= gui
+SOURCES += main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/xml/xmlstreamlint
+INSTALLS += target