From 283f0d2ee68db808e937003cf3bfb59348136ae6 Mon Sep 17 00:00:00 2001
From: Kilian Weishaupt <kilian.weishaupt@iws.uni-stuttgart.de>
Date: Fri, 4 Dec 2020 14:16:08 +0100
Subject: [PATCH] [test][io][rasterimagereader] Test more functionalties

---
 test/io/rasterimagereader/CMakeLists.txt      |   5 +-
 .../blackwhite_dim_firstline.pbm              |   5 ++
 .../blackwhite_dim_firstline_binary.pbm       |   3 ++
 test/io/rasterimagereader/blackwhite_fail.pbm |   5 ++
 .../grayscale_fail_binary.pgm                 | Bin 0 -> 94 bytes
 .../test_rasterimagereader.cc                 |  44 ++++++++++++++++++
 6 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100644 test/io/rasterimagereader/blackwhite_dim_firstline.pbm
 create mode 100644 test/io/rasterimagereader/blackwhite_dim_firstline_binary.pbm
 create mode 100644 test/io/rasterimagereader/blackwhite_fail.pbm
 create mode 100644 test/io/rasterimagereader/grayscale_fail_binary.pgm

diff --git a/test/io/rasterimagereader/CMakeLists.txt b/test/io/rasterimagereader/CMakeLists.txt
index 5dbae8b466..3488e608f1 100644
--- a/test/io/rasterimagereader/CMakeLists.txt
+++ b/test/io/rasterimagereader/CMakeLists.txt
@@ -1,4 +1,7 @@
-dune_symlink_to_source_files(FILES blackwhite_j.pbm blackwhite_binary_j.pbm blackwhite_j.txt grayscale_j.pgm grayscale_binary_j.pgm grayscale_j.txt)
+dune_symlink_to_source_files(FILES blackwhite_j.pbm blackwhite_binary_j.pbm blackwhite_j.txt
+                                   grayscale_j.pgm grayscale_binary_j.pgm grayscale_j.txt
+                                   blackwhite_dim_firstline.pbm blackwhite_dim_firstline_binary.pbm
+                                   blackwhite_fail.pbm grayscale_fail_binary.pgm)
 
 dumux_add_test(NAME test_io_rasterimagereader
               SOURCES test_rasterimagereader.cc
diff --git a/test/io/rasterimagereader/blackwhite_dim_firstline.pbm b/test/io/rasterimagereader/blackwhite_dim_firstline.pbm
new file mode 100644
index 0000000000..adfff86bba
--- /dev/null
+++ b/test/io/rasterimagereader/blackwhite_dim_firstline.pbm
@@ -0,0 +1,5 @@
+P1 2 2
+# delete this
+1 0
+# delete this
+0 1
diff --git a/test/io/rasterimagereader/blackwhite_dim_firstline_binary.pbm b/test/io/rasterimagereader/blackwhite_dim_firstline_binary.pbm
new file mode 100644
index 0000000000..2dddbeb483
--- /dev/null
+++ b/test/io/rasterimagereader/blackwhite_dim_firstline_binary.pbm
@@ -0,0 +1,3 @@
+P4 2 2
+# dimensions given in first line
+€@
diff --git a/test/io/rasterimagereader/blackwhite_fail.pbm b/test/io/rasterimagereader/blackwhite_fail.pbm
new file mode 100644
index 0000000000..b3f1c44cdb
--- /dev/null
+++ b/test/io/rasterimagereader/blackwhite_fail.pbm
@@ -0,0 +1,5 @@
+P1
+# we expect this to fail because line three contains more than just the two dimensions
+2 2 1
+0
+0 1
diff --git a/test/io/rasterimagereader/grayscale_fail_binary.pgm b/test/io/rasterimagereader/grayscale_fail_binary.pgm
new file mode 100644
index 0000000000000000000000000000000000000000..225e05dc7e2dfb44c6d4f509addeeb22d36cfa0c
GIT binary patch
literal 94
zcmWNGOA3H65XHKlQ#^2^OAEb+SE%I`3;wVp>gnrjLP(|{9Ug-3$)wPwROo>m%ZiyP
l-jx=45jG<Bdz*P7W;I$z*_E~Ehu()Uh=&&wjN)2z@&nP*9u)up

literal 0
HcmV?d00001

diff --git a/test/io/rasterimagereader/test_rasterimagereader.cc b/test/io/rasterimagereader/test_rasterimagereader.cc
index f4cc8b7028..491a4fab09 100644
--- a/test/io/rasterimagereader/test_rasterimagereader.cc
+++ b/test/io/rasterimagereader/test_rasterimagereader.cc
@@ -90,6 +90,35 @@ int main(int argc, char** argv)
 
     std::cout << std::endl;
 
+    // test file where the dimensions are given in the same line as the magic number and comments are present
+    const std::vector<bool> reference{1,0,0,1};
+
+    if (!isEqual(reference, NetPBMReader::readPBM("blackwhite_dim_firstline.pbm", false)))
+    {
+        std::cout << "Reading black/white with dimension in first line failed" << std::endl;
+        return 1;
+    }
+    if (!isEqual(reference, NetPBMReader::readPBM("blackwhite_dim_firstline.pbm", false)))
+    {
+        std::cout << "Reading black/white (binary) with dimension in first line failed" << std::endl;
+        return 1;
+    }
+
+    // test error message for poorly formatted file
+    try
+    {
+        NetPBMReader::readPBM("blackwhite_fail.pbm", false);
+    }
+    catch(const Dune::IOError& e)
+    {
+        const auto tokens = tokenize(e.what(), "]:");
+        if (tokens.back() != " Expecting only dimensions (2 numbers) in line 3")
+        {
+            std::cout << e.what() << std::endl;
+            return 1;
+        }
+    }
+
     //////////////////////////////////////////////////
     // Test the gray scale image reader
     //////////////////////////////////////////////////
@@ -126,5 +155,20 @@ int main(int argc, char** argv)
         return 1;
     }
 
+    // test error message for poorly formatted file
+    try
+    {
+        NetPBMReader::readPBM("grayscale_fail_binary.pgm", false);
+    }
+    catch(const Dune::IOError& e)
+    {
+        const auto tokens = tokenize(e.what(), "]:");
+        if (tokens.back() != " Expecting only intensity (one number) in line 4")
+        {
+            std::cout << e.what() << std::endl;
+            return 1;
+        }
+    }
+
     return 0;
 }
-- 
GitLab