diff options
| author | Joerg Bornemann <joerg.bornemann@digia.com> | 2013-04-05 16:03:31 +0200 |
|---|---|---|
| committer | Christian Kandeler <christian.kandeler@digia.com> | 2013-04-10 12:05:58 +0200 |
| commit | cc39467a533e1f32e1169853ad690fcde5ec6aa0 (patch) | |
| tree | 5481a59a959838460bf6952598001ef9cdbf5eaf | |
| parent | 8ee0a59cf3eb3b3c1eb65596c9cc2be29fb1e3d2 (diff) | |
| download | qbs-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.cpp | 68 | ||||
| -rw-r--r-- | src/lib/language/tst_language.h | 4 |
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(); |
