summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2013-04-05 16:03:31 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2013-04-10 12:05:58 +0200
commitcc39467a533e1f32e1169853ad690fcde5ec6aa0 (patch)
tree5481a59a959838460bf6952598001ef9cdbf5eaf
parent8ee0a59cf3eb3b3c1eb65596c9cc2be29fb1e3d2 (diff)
downloadqbs-cc39467a533e1f32e1169853ad690fcde5ec6aa0.tar.gz
add unit tests for class Item and friends
Change-Id: I03489abd0fe5558cad814e2ede216851ac295b39 Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
-rw-r--r--src/lib/language/tst_language.cpp68
-rw-r--r--src/lib/language/tst_language.h4
2 files changed, 69 insertions, 3 deletions
diff --git a/src/lib/language/tst_language.cpp b/src/lib/language/tst_language.cpp
index c8001aa89..6c545973f 100644
--- a/src/lib/language/tst_language.cpp
+++ b/src/lib/language/tst_language.cpp
@@ -29,7 +29,9 @@
#include "tst_language.h"
+#include <language/evaluator.h>
#include <language/identifiersearch.h>
+#include <language/item.h>
#include <language/language.h>
#include <language/scriptengine.h>
#include <parser/qmljslexer_p.h>
@@ -118,9 +120,9 @@ void TestLanguage::handleInitCleanupDataTags(const char *projectFileName, bool *
void TestLanguage::initTestCase()
{
- const Logger logger(m_logSink);
- ScriptEngine *engine = new ScriptEngine(logger, this);
- loader = new Loader(engine, logger);
+ m_logger = Logger(m_logSink);
+ m_engine = new ScriptEngine(m_logger, this);
+ loader = new Loader(m_engine, m_logger);
loader->setSearchPaths(QStringList()
<< QLatin1String(SRCDIR "/../../share/qbs"));
setConfigProperty(defaultParameters.buildConfiguration,
@@ -473,6 +475,66 @@ void TestLanguage::idUsage()
QVERIFY(!exceptionCaught);
}
+class JSSourceValueCreator
+{
+ FileContextPtr m_fileContext;
+public:
+ JSSourceValueCreator(const FileContextPtr &fileContext)
+ : m_fileContext(fileContext)
+ {
+ }
+
+ JSSourceValuePtr create(const QString &sourceCode)
+ {
+ JSSourceValuePtr value = JSSourceValue::create();
+ value->setFile(m_fileContext);
+ value->setSourceCode(sourceCode);
+ return value;
+ }
+};
+
+void TestLanguage::itemPrototype()
+{
+ FileContextPtr fileContext = FileContext::create();
+ JSSourceValueCreator sourceValueCreator(fileContext);
+ ItemPtr proto = Item::create();
+ proto->setProperty("x", sourceValueCreator.create("1"));
+ proto->setProperty("y", sourceValueCreator.create("1"));
+ ItemPtr item = Item::create();
+ item->setPrototype(proto);
+ item->setProperty("y", sourceValueCreator.create("x + 1"));
+ item->setProperty("z", sourceValueCreator.create("2"));
+
+ Evaluator evaluator(m_engine, m_logger);
+ QCOMPARE(evaluator.property(proto, "x").toVariant().toInt(), 1);
+ QCOMPARE(evaluator.property(proto, "y").toVariant().toInt(), 1);
+ QVERIFY(!evaluator.property(proto, "z").isValid());
+ QCOMPARE(evaluator.property(item, "x").toVariant().toInt(), 1);
+ QCOMPARE(evaluator.property(item, "y").toVariant().toInt(), 2);
+ QCOMPARE(evaluator.property(item, "z").toVariant().toInt(), 2);
+}
+
+void TestLanguage::itemScope()
+{
+ FileContextPtr fileContext = FileContext::create();
+ JSSourceValueCreator sourceValueCreator(fileContext);
+ ItemPtr scope1 = Item::create();
+ scope1->setProperty("x", sourceValueCreator.create("1"));
+ ItemPtr scope2 = Item::create();
+ scope2->setScope(scope1);
+ scope2->setProperty("y", sourceValueCreator.create("x + 1"));
+ ItemPtr item = Item::create();
+ item->setScope(scope2);
+ item->setProperty("z", sourceValueCreator.create("x + y"));
+
+ Evaluator evaluator(m_engine, m_logger);
+ QCOMPARE(evaluator.property(scope1, "x").toVariant().toInt(), 1);
+ QCOMPARE(evaluator.property(scope2, "y").toVariant().toInt(), 2);
+ QEXPECT_FAIL("", "FIXME", Abort);
+ QVERIFY(!evaluator.property(scope2, "x").isValid());
+ QCOMPARE(evaluator.property(item, "z").toVariant().toInt(), 3);
+}
+
void TestLanguage::jsImportUsedInMultipleScopes_data()
{
QTest::addColumn<QString>("buildVariant");
diff --git a/src/lib/language/tst_language.h b/src/lib/language/tst_language.h
index d1adc9618..cb210384b 100644
--- a/src/lib/language/tst_language.h
+++ b/src/lib/language/tst_language.h
@@ -49,6 +49,8 @@ public:
private:
ILogSink *m_logSink;
+ Logger m_logger;
+ ScriptEngine *m_engine;
Loader *loader;
ResolvedProjectPtr project;
SetupProjectParameters defaultParameters;
@@ -75,6 +77,8 @@ private slots:
void identifierSearch_data();
void identifierSearch();
void idUsage();
+ void itemPrototype();
+ void itemScope();
void jsImportUsedInMultipleScopes_data();
void jsImportUsedInMultipleScopes();
void moduleProperties_data();