From 24a4f7b64dcd20ef7f60b119177e64a4feea436f Mon Sep 17 00:00:00 2001
From: Jesse Mapel <jam826@nau.edu>
Date: Wed, 15 Aug 2018 11:09:45 -0700
Subject: [PATCH] Improved frame plugin testing (#78)

* Improved frame plugin testing

* Removed extra line from frame plugin test

* Fixed seg fault in framer test

* Minor tweaks to clean up testing
---
 tests/CMakeLists.txt            |  2 +-
 tests/TestyMcTestFace.cpp       | 56 ++++++++++++++++++++++++++++++---
 tests/data/simpleFramerISD.json |  4 +--
 3 files changed, 55 insertions(+), 7 deletions(-)

diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 1d4a8de..b246321 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -4,4 +4,4 @@ cmake_minimum_required(VERSION 3.10)
 add_executable(runCSMCameraModelTests TestyMcTestFace.cpp)
 target_link_libraries(runCSMCameraModelTests usgscsm ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread)
 
-gtest_discover_tests(runCSMCameraModelTests WORKING_DIRECTORY tests)
+gtest_discover_tests(runCSMCameraModelTests WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests)
diff --git a/tests/TestyMcTestFace.cpp b/tests/TestyMcTestFace.cpp
index e79d958..2955822 100644
--- a/tests/TestyMcTestFace.cpp
+++ b/tests/TestyMcTestFace.cpp
@@ -1,7 +1,9 @@
 #include "UsgsAstroFramePlugin.h"
+#include "UsgsAstroFrameSensorModel.h"
 
 #include <json/json.hpp>
 
+#include <sstream>
 #include <fstream>
 
 #include <gtest/gtest.h>
@@ -16,10 +18,18 @@ class FrameIsdTest : public ::testing::Test {
    virtual void SetUp() {
       std::ifstream isdFile("data/simpleFramerISD.json");
       json jsonIsd = json::parse(isdFile);
-      isd.clearAllParams();
       for (json::iterator it = jsonIsd.begin(); it != jsonIsd.end(); ++it) {
-         isd.addParam(it.key(), it.value().dump());
+         json jsonValue = it.value();
+         if (jsonValue.size() > 1) {
+            for (int i = 0; i < jsonValue.size(); i++) {
+               isd.addParam(it.key(), jsonValue[i].dump());
+            }
+         }
+         else {
+            isd.addParam(it.key(), jsonValue.dump());
+         }
       }
+      isdFile.close();
    }
 };
 
@@ -78,12 +88,50 @@ TEST(FramePluginTests, MissingStateValue) {
          badState));;
 }
 
-/* TEST_F(FrameIsdTest, ConstructFromISD) {
+TEST_F(FrameIsdTest, Constructible) {
    UsgsAstroFramePlugin testPlugin;
    EXPECT_TRUE(testPlugin.canModelBeConstructedFromISD(
                isd,
                "USGS_ASTRO_FRAME_SENSOR_MODEL"));
-} */
+}
+
+TEST_F(FrameIsdTest, ConstructValidCamera) {
+   UsgsAstroFramePlugin testPlugin;
+   csm::Model *cameraModel = NULL;
+   EXPECT_NO_THROW(
+         cameraModel = testPlugin.constructModelFromISD(
+               isd,
+               "USGS_ASTRO_FRAME_SENSOR_MODEL",
+               NULL)
+   );
+   UsgsAstroFrameSensorModel *frameModel = dynamic_cast<UsgsAstroFrameSensorModel *>(cameraModel);
+   EXPECT_NE(frameModel, nullptr);
+   if (cameraModel) {
+      delete cameraModel;
+   }
+}
+
+TEST_F(FrameIsdTest, ConstructInValidCamera) {
+   UsgsAstroFramePlugin testPlugin;
+   // Remove the model_name keyword from the ISD to make it invalid
+   isd.clearParams("model_name");
+   csm::Model *cameraModel = NULL;
+   try {
+      testPlugin.constructModelFromISD(
+            isd,
+            "USGS_ASTRO_FRAME_SENSOR_MODEL",
+            NULL);
+   }
+   catch(csm::Error &e) {
+      EXPECT_EQ(e.getError(), csm::Error::ISD_NOT_SUPPORTED);
+   }
+   catch(...) {
+      FAIL() << "Expected csm ISD_NOT_SUPPORTED error";
+   }
+   if (cameraModel) {
+      delete cameraModel;
+   }
+}
 
 int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
diff --git a/tests/data/simpleFramerISD.json b/tests/data/simpleFramerISD.json
index 8e4f7eb..7235ecb 100644
--- a/tests/data/simpleFramerISD.json
+++ b/tests/data/simpleFramerISD.json
@@ -9,7 +9,7 @@
         7.5
     ],
     "ephemeris_time": 100.0,
-    "focal_length": 500,
+    "focal_length": 50,
     "focal_length_epsilon": 1.0,
     "ifov": 6.0,
     "model_name": "UsgsAstroFramePluginCSM",
@@ -80,7 +80,6 @@
         0.0
     ],
     "odt_y": [
-        0.0,
         0.0,
         1.0,
         0.0,
@@ -89,6 +88,7 @@
         0.0,
         0.0,
         0.0,
+        0.0,
         0.0
     ],
     "starting_detector_line": 0.0,
-- 
GitLab