Skip to content

Commit fe39b26

Browse files
vcloarecPeterPetrik
authored andcommitted
Add test for QgsMeshLayer::reload() and QgsMdalProvider()::reloadData()
Add test and data file for new test
1 parent 109049e commit fe39b26

File tree

2 files changed

+196
-0
lines changed

2 files changed

+196
-0
lines changed

tests/src/core/testqgsmeshlayer.cpp

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ class TestQgsMeshLayer : public QObject
6464

6565
void test_time_format_data();
6666
void test_time_format();
67+
68+
void test_reload();
69+
void test_reload_extra_dataset();
6770
};
6871

6972
QString TestQgsMeshLayer::readFile( const QString &fname ) const
@@ -493,5 +496,175 @@ void TestQgsMeshLayer::test_time_format()
493496
QCOMPARE( time, expectedTime );
494497
}
495498

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+
496669
QGSTEST_MAIN( TestQgsMeshLayer )
497670
#include "testqgsmeshlayer.moc"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
DATASET
2+
OBJTYPE "mesh2d"
3+
RT_JULIAN 2433282.500000
4+
BEGSCL
5+
ND 6
6+
NC 2
7+
NAME "VertexScalarDataset"
8+
TIMEUNITS se
9+
TS 0 0.000000
10+
1
11+
2
12+
3
13+
2
14+
1
15+
0
16+
TS 0 3600.000000
17+
2
18+
3
19+
4
20+
3
21+
2
22+
0
23+
ENDDS

0 commit comments

Comments
 (0)