diff --git a/tests/src/core/testqgsexpressioncontext.cpp b/tests/src/core/testqgsexpressioncontext.cpp index 2bdfaf9d65e1..eae3e2460b1a 100644 --- a/tests/src/core/testqgsexpressioncontext.cpp +++ b/tests/src/core/testqgsexpressioncontext.cpp @@ -43,6 +43,7 @@ class TestQgsExpressionContext : public QObject void evaluate(); void setFeature(); void setFields(); + void takeScopes(); void globalScope(); void projectScope(); @@ -511,6 +512,36 @@ void TestQgsExpressionContext::setFields() QCOMPARE( contextWithScope.fields().at( 0 ).name(), QString( "testfield" ) ); } +void TestQgsExpressionContext::takeScopes() +{ + QgsExpressionContextUtils::setGlobalVariable( QStringLiteral( "test_global" ), "testval" ); + + QgsProject *project = QgsProject::instance(); + QgsExpressionContextUtils::setProjectVariable( project, QStringLiteral( "test_project" ), "testval" ); + + QgsExpressionContext context; + + QgsExpressionContextScope *projectScope = QgsExpressionContextUtils::projectScope( project ); + + QgsExpressionContextScope *globalScope = QgsExpressionContextUtils::globalScope(); + context << globalScope + << projectScope; + + QCOMPARE( context.variable( "test_global" ).toString(), QString( "testval" ) ); + QCOMPARE( context.variable( "test_project" ).toString(), QString( "testval" ) ); + + auto scopes = context.takeScopes(); + + QCOMPARE( scopes.length(), 2 ); + Q_ASSERT( scopes.at( 0 )->hasVariable( "test_global" ) ); + Q_ASSERT( scopes.at( 1 )->hasVariable( "test_project" ) ); + + qDeleteAll( scopes ); + + Q_ASSERT( !context.variable( "test_global" ).isValid() ); + Q_ASSERT( !context.variable( "test_project" ).isValid() ); +} + void TestQgsExpressionContext::globalScope() { QgsExpressionContextUtils::setGlobalVariable( QStringLiteral( "test" ), "testval" );