@@ -65,6 +65,7 @@ class TestStyleV2 : public QObject
6565 void testCreateColorRamps ();
6666 void testLoadColorRamps ();
6767 void testSaveLoad ();
68+ void testTags ();
6869
6970};
7071
@@ -255,5 +256,114 @@ void TestStyleV2::testSaveLoad()
255256 testLoadColorRamps ();
256257}
257258
259+ void TestStyleV2::testTags ()
260+ {
261+ mStyle ->clear ();
262+ // add some tags
263+ int id = mStyle ->addTag ( " red" );
264+ QCOMPARE ( id, mStyle ->tagId ( " red" ) );
265+ id = mStyle ->addTag ( " starry" );
266+ QCOMPARE ( id, mStyle ->tagId ( " starry" ) );
267+ id = mStyle ->addTag ( " circle" );
268+ QCOMPARE ( id, mStyle ->tagId ( " circle" ) );
269+ id = mStyle ->addTag ( " blue" );
270+ QCOMPARE ( id, mStyle ->tagId ( " blue" ) );
271+ id = mStyle ->addTag ( " purple" );
272+ QCOMPARE ( id, mStyle ->tagId ( " purple" ) );
273+
274+ QStringList tags = mStyle ->tags ();
275+ QCOMPARE ( tags.count (), 5 );
276+ QVERIFY ( tags.contains ( " red" ) );
277+ QVERIFY ( tags.contains ( " starry" ) );
278+ QVERIFY ( tags.contains ( " circle" ) );
279+ QVERIFY ( tags.contains ( " blue" ) );
280+ QVERIFY ( tags.contains ( " purple" ) );
281+
282+ // remove tag
283+ mStyle ->remove ( QgsStyleV2::TagEntity, mStyle ->tagId ( " purple" ) );
284+ mStyle ->remove ( QgsStyleV2::TagEntity, -999 ); // bad id
285+ tags = mStyle ->tags ();
286+ QCOMPARE ( tags.count (), 4 );
287+ QVERIFY ( !tags.contains ( " purple" ) );
288+
289+ // add some symbols
290+ QVERIFY ( mStyle ->saveSymbol ( " symbol1" , QgsMarkerSymbolV2::createSimple ( QgsStringMap () ), 0 , QStringList () << " red" << " starry" ) );
291+ mStyle ->addSymbol ( " blue starry" , QgsMarkerSymbolV2::createSimple ( QgsStringMap () ), true );
292+ mStyle ->addSymbol ( " red circle" , QgsMarkerSymbolV2::createSimple ( QgsStringMap () ), true );
293+
294+ // tag them
295+ QVERIFY ( mStyle ->tagSymbol ( QgsStyleV2::SymbolEntity, " blue starry" , QStringList () << " blue" << " starry" ) );
296+ QVERIFY ( mStyle ->tagSymbol ( QgsStyleV2::SymbolEntity, " red circle" , QStringList () << " red" << " circle" ) );
297+ // bad symbol name
298+ QVERIFY ( !mStyle ->tagSymbol ( QgsStyleV2::SymbolEntity, " no symbol" , QStringList () << " red" << " circle" ) );
299+ // tag which hasn't been added yet
300+ QVERIFY ( mStyle ->tagSymbol ( QgsStyleV2::SymbolEntity, " red circle" , QStringList () << " round" ) );
301+ tags = mStyle ->tags ();
302+ QVERIFY ( tags.contains ( " round" ) );
303+
304+ // check that tags have been applied
305+ tags = mStyle ->tagsOfSymbol ( QgsStyleV2::SymbolEntity, " blue starry" );
306+ QCOMPARE ( tags.count (), 2 );
307+ QVERIFY ( tags.contains ( " blue" ) );
308+ QVERIFY ( tags.contains ( " starry" ) );
309+ tags = mStyle ->tagsOfSymbol ( QgsStyleV2::SymbolEntity, " red circle" );
310+ QCOMPARE ( tags.count (), 3 );
311+ QVERIFY ( tags.contains ( " red" ) );
312+ QVERIFY ( tags.contains ( " circle" ) );
313+ QVERIFY ( tags.contains ( " round" ) );
314+ tags = mStyle ->tagsOfSymbol ( QgsStyleV2::SymbolEntity, " symbol1" );
315+ QCOMPARE ( tags.count (), 2 );
316+ QVERIFY ( tags.contains ( " red" ) );
317+ QVERIFY ( tags.contains ( " starry" ) );
318+
319+ // remove a tag, including a non-present tag
320+ QVERIFY ( mStyle ->detagSymbol ( QgsStyleV2::SymbolEntity, " blue starry" , QStringList () << " bad" << " blue" ) );
321+ tags = mStyle ->tagsOfSymbol ( QgsStyleV2::SymbolEntity, " blue starry" );
322+ QCOMPARE ( tags.count (), 1 );
323+ QVERIFY ( tags.contains ( " starry" ) );
324+
325+ // try to remove tag from non-existing symbol
326+ QVERIFY ( !mStyle ->detagSymbol ( QgsStyleV2::SymbolEntity, " no symbol!" , QStringList () << " bad" << " blue" ) );
327+
328+ // check symbols with tag
329+ QStringList symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " red" ) );
330+ QCOMPARE ( symbols.count (), 2 );
331+ QVERIFY ( symbols.contains ( " symbol1" ) );
332+ QVERIFY ( symbols.contains ( " red circle" ) );
333+ symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " starry" ) );
334+ QCOMPARE ( symbols.count (), 2 );
335+ QVERIFY ( symbols.contains ( " symbol1" ) );
336+ QVERIFY ( symbols.contains ( " blue starry" ) );
337+ symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " circle" ) );
338+ QCOMPARE ( symbols.count (), 1 );
339+ QVERIFY ( symbols.contains ( " red circle" ) );
340+ symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " round" ) );
341+ QCOMPARE ( symbols.count (), 1 );
342+ QVERIFY ( symbols.contains ( " red circle" ) );
343+ symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " blue" ) );
344+ QVERIFY ( symbols.isEmpty () );
345+ symbols = mStyle ->symbolsWithTag ( QgsStyleV2::SymbolEntity, mStyle ->tagId ( " no tag" ) );
346+ QVERIFY ( symbols.isEmpty () );
347+
348+ // searching returns symbols with matching tags
349+ symbols = mStyle ->findSymbols ( QgsStyleV2::SymbolEntity, " red" );
350+ QCOMPARE ( symbols.count (), 2 );
351+ QVERIFY ( symbols.contains ( " symbol1" ) );
352+ QVERIFY ( symbols.contains ( " red circle" ) );
353+ symbols = mStyle ->findSymbols ( QgsStyleV2::SymbolEntity, " symbol1" );
354+ QCOMPARE ( symbols.count (), 1 );
355+ QVERIFY ( symbols.contains ( " symbol1" ) );
356+ symbols = mStyle ->findSymbols ( QgsStyleV2::SymbolEntity, " starry" );
357+ QCOMPARE ( symbols.count (), 2 );
358+ QVERIFY ( symbols.contains ( " symbol1" ) );
359+ QVERIFY ( symbols.contains ( " blue starry" ) );
360+ symbols = mStyle ->findSymbols ( QgsStyleV2::SymbolEntity, " blue" );
361+ QCOMPARE ( symbols.count (), 1 );
362+ QVERIFY ( symbols.contains ( " blue starry" ) );
363+ symbols = mStyle ->findSymbols ( QgsStyleV2::SymbolEntity, " round" );
364+ QCOMPARE ( symbols.count (), 1 );
365+ QVERIFY ( symbols.contains ( " red circle" ) );
366+ }
367+
258368QTEST_MAIN ( TestStyleV2 )
259369#include " testqgsstylev2.moc"
0 commit comments