@@ -549,6 +549,46 @@ class TestQgsExpression: public QObject
549
549
QVERIFY ( expression4.hasEvalError () );
550
550
}
551
551
552
+ void fieldsButNoFeature ()
553
+ {
554
+ // test evaluating an expression with fields in the context but no feature
555
+ QgsExpressionContext context;
556
+ QgsExpressionContextScope *scope = new QgsExpressionContextScope ();
557
+
558
+ QgsFields fields;
559
+ fields.append ( QgsField ( QStringLiteral ( " x" ) ) );
560
+ fields.append ( QgsField ( QStringLiteral ( " y" ) ) );
561
+ fields.append ( QgsField ( QStringLiteral ( " z" ) ) );
562
+ scope->setFields ( fields );
563
+ context.appendScope ( scope );
564
+
565
+ // doesn't exist
566
+ QgsExpression expression ( " \" a\" " );
567
+ QVERIFY ( !expression.hasParserError () );
568
+ QVERIFY ( !expression.evaluate ( &context ).isValid () );
569
+ QVERIFY ( expression.hasEvalError () );
570
+ QCOMPARE ( expression.evalErrorString (), QStringLiteral ( " Field 'a' not found" ) );
571
+ expression = QgsExpression ( " \" x\" " );
572
+ QVERIFY ( !expression.hasParserError () );
573
+ QVERIFY ( !expression.evaluate ( &context ).isValid () );
574
+ QVERIFY ( expression.hasEvalError () );
575
+ QCOMPARE ( expression.evalErrorString (), QStringLiteral ( " No feature available for field 'x' evaluation" ) );
576
+ expression = QgsExpression ( " \" y\" " );
577
+ QVERIFY ( !expression.hasParserError () );
578
+ QVERIFY ( !expression.evaluate ( &context ).isValid () );
579
+ QVERIFY ( expression.hasEvalError () );
580
+ QCOMPARE ( expression.evalErrorString (), QStringLiteral ( " No feature available for field 'y' evaluation" ) );
581
+
582
+ QgsFeature f ( fields );
583
+ f.setValid ( true );
584
+ f.setAttributes ( QgsAttributes () << 1 << 2 << 3 );
585
+ scope->setFeature ( f );
586
+ expression = QgsExpression ( " \" z\" " );
587
+ QVERIFY ( !expression.hasParserError () );
588
+ QCOMPARE ( expression.evaluate ( &context ).toInt (), 3 );
589
+ QVERIFY ( !expression.hasEvalError () );
590
+ }
591
+
552
592
void evaluation_data ()
553
593
{
554
594
QTest::addColumn<QString>( " string" );
0 commit comments