@@ -67,6 +67,7 @@ class TestStyle : public QObject
67
67
void testSaveLoad ();
68
68
void testFavorites ();
69
69
void testTags ();
70
+ void testSmartGroup ();
70
71
71
72
};
72
73
@@ -551,5 +552,88 @@ void TestStyle::testTags()
551
552
QCOMPARE ( tagsChangedSpy.at ( 13 ).at ( 2 ).toStringList (), QStringList () );
552
553
}
553
554
555
+ void TestStyle::testSmartGroup ()
556
+ {
557
+ QgsStyle style;
558
+ style.createMemoryDatabase ();
559
+
560
+ QSignalSpy groupModifiedSpy ( &style, &QgsStyle::groupsModified );
561
+
562
+ std::unique_ptr< QgsMarkerSymbol > sym1 ( QgsMarkerSymbol::createSimple ( QgsStringMap () ) );
563
+ std::unique_ptr< QgsMarkerSymbol > sym2 ( QgsMarkerSymbol::createSimple ( QgsStringMap () ) );
564
+ std::unique_ptr< QgsMarkerSymbol > sym3 ( QgsMarkerSymbol::createSimple ( QgsStringMap () ) );
565
+ style.addSymbol ( QStringLiteral ( " symbolA" ), sym1->clone (), true );
566
+ style.addSymbol ( QStringLiteral ( " symbolB" ), sym2->clone (), true );
567
+ style.addSymbol ( QStringLiteral ( " symbolC" ), sym3->clone (), true );
568
+ QgsLimitedRandomColorRamp *randomRamp = new QgsLimitedRandomColorRamp ();
569
+ QVERIFY ( style.addColorRamp ( " ramp a" , randomRamp, true ) );
570
+ randomRamp = new QgsLimitedRandomColorRamp ();
571
+ QVERIFY ( style.addColorRamp ( " different bbb" , randomRamp, true ) );
572
+
573
+ QVERIFY ( style.smartgroupNames ().empty () );
574
+ QVERIFY ( style.smartgroup ( 5 ).isEmpty () );
575
+ QCOMPARE ( style.smartgroupId ( QStringLiteral ( " no exist" ) ), 0 );
576
+
577
+ int res = style.addSmartgroup ( QStringLiteral ( " mine" ), QStringLiteral ( " AND" ), QStringList (), QStringList (), QStringList () << QStringLiteral ( " a" ), QStringList () );
578
+ QCOMPARE ( res, 1 );
579
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " mine" ) );
580
+ QCOMPARE ( style.smartgroup ( 1 ).values ( QStringLiteral ( " name" ) ), QStringList () << QStringLiteral ( " a" ) );
581
+ QCOMPARE ( style.smartgroupId ( QStringLiteral ( " mine" ) ), 1 );
582
+ QCOMPARE ( groupModifiedSpy.count (), 1 );
583
+
584
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::SymbolEntity, 1 ), QStringList () << QStringLiteral ( " symbolA" ) );
585
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::ColorrampEntity, 1 ), QStringList () << QStringLiteral ( " ramp a" ) );
586
+
587
+ res = style.addSmartgroup ( QStringLiteral ( " tag" ), QStringLiteral ( " OR" ), QStringList (), QStringList (), QStringList () << " c" , QStringList () << " a" );
588
+ QCOMPARE ( res, 2 );
589
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " mine" ) << QStringLiteral ( " tag" ) );
590
+ QCOMPARE ( style.smartgroup ( 2 ).values ( QStringLiteral ( " name" ) ), QStringList () << QStringLiteral ( " c" ) );
591
+ QCOMPARE ( style.smartgroup ( 2 ).values ( QStringLiteral ( " !name" ) ), QStringList () << QStringLiteral ( " a" ) );
592
+ QCOMPARE ( style.smartgroupId ( QStringLiteral ( " tag" ) ), 2 );
593
+ QCOMPARE ( groupModifiedSpy.count (), 2 );
594
+
595
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::SymbolEntity, 2 ), QStringList () << QStringLiteral ( " symbolB" ) << QStringLiteral ( " symbolC" ) );
596
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::ColorrampEntity, 2 ), QStringList () << QStringLiteral ( " different bbb" ) );
597
+
598
+ // tag some symbols
599
+ style.tagSymbol ( QgsStyle::SymbolEntity, " symbolA" , QStringList () << " red" << " blue" );
600
+ style.tagSymbol ( QgsStyle::SymbolEntity, " symbolB" , QStringList () << " blue" );
601
+ style.tagSymbol ( QgsStyle::ColorrampEntity, " ramp a" , QStringList () << " blue" );
602
+ style.tagSymbol ( QgsStyle::ColorrampEntity, " different bbb" , QStringList () << " blue" << " red" );
603
+
604
+ // adding tags modifies groups!
605
+ QCOMPARE ( groupModifiedSpy.count (), 4 );
606
+
607
+ res = style.addSmartgroup ( QStringLiteral ( " tags" ), QStringLiteral ( " AND" ), QStringList () << " blue" , QStringList () << " red" , QStringList (), QStringList () );
608
+ QCOMPARE ( res, 3 );
609
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " mine" ) << QStringLiteral ( " tag" ) << QStringLiteral ( " tags" ) );
610
+ QCOMPARE ( style.smartgroup ( 3 ).values ( QStringLiteral ( " tag" ) ), QStringList () << QStringLiteral ( " blue" ) );
611
+ QCOMPARE ( style.smartgroup ( 3 ).values ( QStringLiteral ( " !tag" ) ), QStringList () << QStringLiteral ( " red" ) );
612
+ QCOMPARE ( style.smartgroupId ( QStringLiteral ( " tags" ) ), 3 );
613
+ QCOMPARE ( groupModifiedSpy.count (), 5 );
614
+
615
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::SymbolEntity, 3 ), QStringList () << QStringLiteral ( " symbolB" ) );
616
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::ColorrampEntity, 3 ), QStringList () << QStringLiteral ( " ramp a" ) );
617
+
618
+ res = style.addSmartgroup ( QStringLiteral ( " combined" ), QStringLiteral ( " AND" ), QStringList () << " blue" , QStringList (), QStringList (), QStringList () << " a" );
619
+ QCOMPARE ( res, 4 );
620
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " mine" ) << QStringLiteral ( " tag" ) << QStringLiteral ( " tags" ) << QStringLiteral ( " combined" ) );
621
+ QCOMPARE ( style.smartgroup ( 4 ).values ( QStringLiteral ( " tag" ) ), QStringList () << QStringLiteral ( " blue" ) );
622
+ QCOMPARE ( style.smartgroup ( 4 ).values ( QStringLiteral ( " !name" ) ), QStringList () << QStringLiteral ( " a" ) );
623
+ QCOMPARE ( style.smartgroupId ( QStringLiteral ( " combined" ) ), 4 );
624
+ QCOMPARE ( groupModifiedSpy.count (), 6 );
625
+
626
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::SymbolEntity, 4 ), QStringList () << QStringLiteral ( " symbolB" ) );
627
+ QCOMPARE ( style.symbolsOfSmartgroup ( QgsStyle::ColorrampEntity, 4 ), QStringList () << QStringLiteral ( " different bbb" ) );
628
+
629
+ style.remove ( QgsStyle::SmartgroupEntity, 1 );
630
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " tag" ) << QStringLiteral ( " tags" ) << QStringLiteral ( " combined" ) );
631
+ QCOMPARE ( groupModifiedSpy.count (), 7 );
632
+
633
+ style.remove ( QgsStyle::SmartgroupEntity, 4 );
634
+ QCOMPARE ( style.smartgroupNames (), QStringList () << QStringLiteral ( " tag" ) << QStringLiteral ( " tags" ) );
635
+ QCOMPARE ( groupModifiedSpy.count (), 8 );
636
+ }
637
+
554
638
QGSTEST_MAIN ( TestStyle )
555
639
#include " testqgsstyle.moc"
0 commit comments