From f4e875b9bbc03d8e151afb389253c25683dbc6e0 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 2 Mar 2009 11:30:43 +0100
Subject: [PATCH] Initial testing of the preprocessor.

---
 src/libs/cplusplus/pp-engine.cpp              | 15 ++++++++++
 src/libs/cplusplus/pp-engine.h                |  5 ++++
 tests/auto/cplusplus/cplusplus.pro            |  2 +-
 .../cplusplus/preprocessor/preprocessor.pro   |  9 ++++++
 .../preprocessor/tst_preprocessor.cpp         | 28 +++++++++++++++++++
 5 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100644 tests/auto/cplusplus/preprocessor/preprocessor.pro
 create mode 100644 tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp

diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index dc31e204f0d..fe738287578 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -481,6 +481,21 @@ void Preprocessor::popState()
     _savedStates.removeLast();
 }
 
+QByteArray Preprocessor::operator()(const QByteArray &filename,
+                                    const QByteArray &source)
+{
+    QByteArray preprocessed;
+    operator()(filename, source, &preprocessed);
+    return preprocessed;
+}
+
+QByteArray Preprocessor::operator()(const QByteArray &source)
+{
+    QByteArray preprocessed;
+    operator()(source, &preprocessed);
+    return preprocessed;
+}
+
 void Preprocessor::operator () (const QByteArray &filename,
                       const QByteArray &source,
                       QByteArray *result)
diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h
index 3ac1a42c6a6..4fbbe1008d4 100644
--- a/src/libs/cplusplus/pp-engine.h
+++ b/src/libs/cplusplus/pp-engine.h
@@ -181,6 +181,11 @@ namespace CPlusPlus {
     public:
         Preprocessor(Client *client, Environment &env);
 
+        QByteArray operator()(const QByteArray &filename,
+                              const QByteArray &source);
+
+        QByteArray operator()(const QByteArray &source);
+
         void operator()(const QByteArray &filename,
                         const QByteArray &source,
                         QByteArray *result);
diff --git a/tests/auto/cplusplus/cplusplus.pro b/tests/auto/cplusplus/cplusplus.pro
index af3bc066700..c7aa5342853 100644
--- a/tests/auto/cplusplus/cplusplus.pro
+++ b/tests/auto/cplusplus/cplusplus.pro
@@ -1,3 +1,3 @@
 TEMPLATE = subdirs
-SUBDIRS = shared ast semantic lookup
+SUBDIRS = shared ast semantic lookup preprocessor
 CONFIG += ordered
diff --git a/tests/auto/cplusplus/preprocessor/preprocessor.pro b/tests/auto/cplusplus/preprocessor/preprocessor.pro
new file mode 100644
index 00000000000..8ce434d112b
--- /dev/null
+++ b/tests/auto/cplusplus/preprocessor/preprocessor.pro
@@ -0,0 +1,9 @@
+TEMPLATE = app
+CONFIG += qt warn_on console depend_includepath
+QT = core testlib
+TARGET = tst_$$TARGET
+DEFINES += CPLUSPLUS_WITH_NAMESPACE
+
+include(../../../../src/libs/cplusplus/cplusplus-lib.pri)
+
+SOURCES += tst_preprocessor.cpp
diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp
new file mode 100644
index 00000000000..19bf6f29628
--- /dev/null
+++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp
@@ -0,0 +1,28 @@
+#include <QtTest>
+#include <pp.h>
+
+CPLUSPLUS_USE_NAMESPACE
+
+class tst_Preprocessor: public QObject
+{
+Q_OBJECT
+
+private Q_SLOTS:
+    void pp_with_no_client();
+};
+
+void tst_Preprocessor::pp_with_no_client()
+{
+    using namespace CPlusPlus;
+
+    Client *client = 0; // no client.
+    Environment env;
+
+    Preprocessor preprocess(client, env);
+    QByteArray preprocessed = preprocess("#define foo(a,b) a + b\nfoo(1, 2)\n");
+    QByteArray expected = "1 + 2";
+    QCOMPARE(preprocessed.trimmed(), expected);
+}
+
+QTEST_APPLESS_MAIN(tst_Preprocessor)
+#include "tst_preprocessor.moc"
-- 
GitLab