@@ -64,6 +64,9 @@ class TestQgsMeshLayer : public QObject
64
64
65
65
void test_time_format_data ();
66
66
void test_time_format ();
67
+
68
+ void test_reload ();
69
+ void test_reload_extra_dataset ();
67
70
};
68
71
69
72
QString TestQgsMeshLayer::readFile ( const QString &fname ) const
@@ -493,5 +496,175 @@ void TestQgsMeshLayer::test_time_format()
493
496
QCOMPARE ( time, expectedTime );
494
497
}
495
498
499
+ void TestQgsMeshLayer::test_reload ()
500
+ {
501
+ // init file for the test
502
+ QString uri1 ( mDataDir + " /quad_and_triangle.2dm" );
503
+ QFile fileSource1 ( uri1 );
504
+
505
+ QString uri2 ( mDataDir + " /quad_flower.2dm" );
506
+ QFile fileSource2 ( uri2 );
507
+
508
+ QTemporaryFile testFile;
509
+
510
+ auto copyToTemporaryFile = []( QFile & fileTocopy, QTemporaryFile & tempFile )
511
+ {
512
+ QDataStream streamToCopy ( &fileTocopy );
513
+ QDataStream streamTemporaryFile ( &tempFile );
514
+ tempFile.open ();
515
+ fileTocopy.open ( QIODevice::ReadOnly );
516
+
517
+ while ( !streamToCopy.atEnd () )
518
+ {
519
+ char *rd = new char [1 ];
520
+ int len = streamToCopy.readRawData ( rd, 1 );
521
+ streamTemporaryFile.writeRawData ( rd, len );
522
+ }
523
+ fileTocopy.close ();
524
+ tempFile.close ();
525
+ };
526
+
527
+ // copy the quad_and_triangle.2dm to the temporary testFile
528
+ copyToTemporaryFile ( fileSource1, testFile );
529
+
530
+ // create layer with temporary file
531
+ QgsMeshLayer layer ( testFile.fileName (), " Test" , " mdal" );
532
+ QgsRenderContext rendererContext;
533
+ layer.createMapRenderer ( rendererContext ); // to active the lazy loading of mesh data
534
+
535
+ // Test if the layer matches with quad and triangle
536
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 1 );
537
+ QCOMPARE ( 5 , layer.nativeMesh ()->vertexCount () );
538
+ QCOMPARE ( 2 , layer.nativeMesh ()->faceCount () );
539
+
540
+ // Test dataSet in quad and triangle
541
+ QgsMeshDatasetIndex ds ( 0 , 0 );
542
+ QCOMPARE ( QgsMeshDatasetValue ( 20 ), layer.dataProvider ()->datasetValue ( ds, 0 ) );
543
+ QCOMPARE ( QgsMeshDatasetValue ( 30 ), layer.dataProvider ()->datasetValue ( ds, 1 ) );
544
+ QCOMPARE ( QgsMeshDatasetValue ( 40 ), layer.dataProvider ()->datasetValue ( ds, 2 ) );
545
+ QCOMPARE ( QgsMeshDatasetValue ( 50 ), layer.dataProvider ()->datasetValue ( ds, 3 ) );
546
+ QCOMPARE ( QgsMeshDatasetValue ( 10 ), layer.dataProvider ()->datasetValue ( ds, 4 ) );
547
+
548
+ // copy the quad_flower.2dm to the temporary testFile
549
+ copyToTemporaryFile ( fileSource2, testFile );
550
+
551
+ // reload the layer
552
+ layer.reload ();
553
+
554
+ // Test if the layer matches with quad flower
555
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 1 );
556
+ QCOMPARE ( 8 , layer.nativeMesh ()->vertexCount () );
557
+ QCOMPARE ( 5 , layer.nativeMesh ()->faceCount () );
558
+
559
+ // Test dataSet in quad flower
560
+ QCOMPARE ( QgsMeshDatasetValue ( 200 ), layer.dataProvider ()->datasetValue ( ds, 0 ) );
561
+ QCOMPARE ( QgsMeshDatasetValue ( 200 ), layer.dataProvider ()->datasetValue ( ds, 1 ) );
562
+ QCOMPARE ( QgsMeshDatasetValue ( 800 ), layer.dataProvider ()->datasetValue ( ds, 2 ) );
563
+ QCOMPARE ( QgsMeshDatasetValue ( 200 ), layer.dataProvider ()->datasetValue ( ds, 3 ) );
564
+ QCOMPARE ( QgsMeshDatasetValue ( 200 ), layer.dataProvider ()->datasetValue ( ds, 4 ) );
565
+ QCOMPARE ( QgsMeshDatasetValue ( 800 ), layer.dataProvider ()->datasetValue ( ds, 5 ) );
566
+ QCOMPARE ( QgsMeshDatasetValue ( 800 ), layer.dataProvider ()->datasetValue ( ds, 6 ) );
567
+ QCOMPARE ( QgsMeshDatasetValue ( 800 ), layer.dataProvider ()->datasetValue ( ds, 7 ) );
568
+ }
569
+
570
+ void TestQgsMeshLayer::test_reload_extra_dataset ()
571
+ {
572
+ // init files for the test
573
+ QgsMeshLayer layer ( mDataDir + " /quad_and_triangle.2dm" , " MDAL layer" , " mdal" );
574
+
575
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 0 );
576
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 1 );
577
+
578
+ QString datasetUri_1 ( mDataDir + " /quad_and_triangle_vertex_scalar.dat" );
579
+ QFile dataSetFile_1 ( datasetUri_1 );
580
+
581
+
582
+ QString datasetUri_2 ( mDataDir + " /quad_and_triangle_vertex_scalar_incompatible_mesh.dat" );
583
+ QFile dataSetFile_2 ( datasetUri_2 );
584
+
585
+ QString datasetUri_3 ( mDataDir + " /quad_and_triangle_vertex_vector.dat" );
586
+ QFile dataSetFile_3 ( datasetUri_3 );
587
+
588
+ QTemporaryFile testFileDataSet;
589
+
590
+ auto copyToTemporaryFile = []( QFile & fileTocopy, QTemporaryFile & tempFile )
591
+ {
592
+ QDataStream streamToCopy ( &fileTocopy );
593
+ QDataStream streamTemporaryFile ( &tempFile );
594
+ tempFile.open ();
595
+ fileTocopy.open ( QIODevice::ReadOnly );
596
+
597
+ while ( !streamToCopy.atEnd () )
598
+ {
599
+ char *rd = new char [1 ];
600
+ int len = streamToCopy.readRawData ( rd, 1 );
601
+ streamTemporaryFile.writeRawData ( rd, len );
602
+ }
603
+ fileTocopy.close ();
604
+ tempFile.close ();
605
+ };
606
+
607
+ // copy the qad_and_triangle_vertex_scalar.dat to the temporary testFile
608
+ copyToTemporaryFile ( dataSetFile_1, testFileDataSet );
609
+
610
+ // add the data set from temporary file and test
611
+ QVERIFY ( layer.dataProvider ()->addDataset ( testFileDataSet.fileName () ) );
612
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 1 );
613
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 2 );
614
+
615
+ // copy the qad_and_triangle_vertex_scalar_incompatible_mesh.dat to the temporary testFile
616
+ copyToTemporaryFile ( dataSetFile_2, testFileDataSet );
617
+
618
+ layer.reload ();
619
+
620
+ // test if dataset presence
621
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 1 );
622
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 1 );
623
+
624
+ // copy again the qad_and_triangle_vertex_scalar.dat to the temporary testFile
625
+ copyToTemporaryFile ( dataSetFile_1, testFileDataSet );
626
+
627
+ layer.reload ();
628
+
629
+ // add the data set from temporary tesFile and test
630
+ QVERIFY ( layer.dataProvider ()->addDataset ( testFileDataSet.fileName () ) );
631
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 2 );
632
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 3 );
633
+
634
+ // copy a invalid file to the temporary testFile
635
+ QVERIFY ( testFileDataSet.open () );
636
+ QDataStream streamTestFile ( &testFileDataSet );
637
+ streamTestFile.writeBytes ( " x" , 1 );
638
+ testFileDataSet.close ();
639
+
640
+ layer.reload ();
641
+
642
+ // test dataset presence
643
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 2 );
644
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 1 );
645
+
646
+ // copy again the qad_and_triangle_vertex_scalar.dat to the temporary testFile
647
+ copyToTemporaryFile ( dataSetFile_1, testFileDataSet );
648
+
649
+ layer.reload ();
650
+
651
+ // test dataset presence
652
+ QCOMPARE ( layer.dataProvider ()->extraDatasets ().count (), 2 );
653
+ QCOMPARE ( layer.dataProvider ()->datasetGroupCount (), 3 );
654
+
655
+ // copy the qad_and_triangle_vertex_vector.dat to the temporary testFile
656
+ copyToTemporaryFile ( dataSetFile_3, testFileDataSet );
657
+
658
+ layer.reload ();
659
+
660
+ // Test dataSet
661
+ QgsMeshDatasetIndex ds ( 1 , 0 );
662
+ QCOMPARE ( QgsMeshDatasetValue ( 1 , 1 ), layer.dataProvider ()->datasetValue ( ds, 0 ) );
663
+ QCOMPARE ( QgsMeshDatasetValue ( 2 , 1 ), layer.dataProvider ()->datasetValue ( ds, 1 ) );
664
+ QCOMPARE ( QgsMeshDatasetValue ( 3 , 2 ), layer.dataProvider ()->datasetValue ( ds, 2 ) );
665
+ QCOMPARE ( QgsMeshDatasetValue ( 2 , 2 ), layer.dataProvider ()->datasetValue ( ds, 3 ) );
666
+ QCOMPARE ( QgsMeshDatasetValue ( 1 , -2 ), layer.dataProvider ()->datasetValue ( ds, 4 ) );
667
+ }
668
+
496
669
QGSTEST_MAIN ( TestQgsMeshLayer )
497
670
#include " testqgsmeshlayer.moc"
0 commit comments