File: itkExceptionObjectGTest.cxx

package info (click to toggle)
insighttoolkit5 5.4.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704,384 kB
  • sloc: cpp: 783,592; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,874; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 464; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (101 lines) | stat: -rw-r--r-- 3,226 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         https://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/

// First include the header file to be tested:
#include "itkMacro.h"
#include <gtest/gtest.h>
#include <sstream>
#include <string>


itkDeclareExceptionMacro(GTest_SpecializedException,
                         ExceptionObject,
                         "GTest specific specialized exception (for unit test purposes only)");


// Tests the description of an exception object thrown by `itkExceptionMacro(x)`.
TEST(ExceptionObject, TestDescriptionFromExceptionMacro)
{
  class TestClass
  {
  public:
    ITK_DISALLOW_COPY_AND_MOVE(TestClass);
    TestClass() = default;
    virtual ~TestClass() = default;

    itkVirtualGetNameOfClassMacro(TestClass);

    void
    CallExceptionMacro(const std::string & message) const
    {
      itkExceptionMacro(<< message);
    }
  };

  const std::string message = "test message";
  const TestClass   testObject{};

  try
  {
    testObject.CallExceptionMacro(message);
  }
  catch (const itk::ExceptionObject & exceptionObject)
  {
    const char * const actualDescription = exceptionObject.GetDescription();
    ASSERT_NE(actualDescription, nullptr);

    std::ostringstream expectedDescription;
    expectedDescription << "ITK ERROR: " << testObject.GetNameOfClass() << '(' << &testObject << "): " << message;

    EXPECT_EQ(actualDescription, expectedDescription.str());
  }
}


// Tests the description of an exception object thrown by `itkSpecializedExceptionMacro(x)`.
TEST(ExceptionObject, TestDescriptionFromSpecializedExceptionMacro)
{
  try
  {
    itkSpecializedExceptionMacro(GTest_SpecializedException);
  }
  catch (const itk::ExceptionObject & exceptionObject)
  {
    const char * const description = exceptionObject.GetDescription();
    ASSERT_NE(description, nullptr);
    EXPECT_EQ(description, std::string("ITK ERROR: ") + itk::GTest_SpecializedException::default_exception_message);
  }
}


// Tests that `ExceptionObject::what()` returns the expected concatenation of
// file name, line number, and description.
TEST(ExceptionObject, TestWhat)
{
  const itk::ExceptionObject exceptionObject(__FILE__, __LINE__, "test description");

  const char * const what = exceptionObject.what();
  const char * const file = exceptionObject.GetFile();
  const char * const description = exceptionObject.GetDescription();

  ASSERT_NE(what, nullptr);
  ASSERT_NE(file, nullptr);
  ASSERT_NE(description, nullptr);

  EXPECT_EQ(what, file + (":" + std::to_string(exceptionObject.GetLine()) + ":\n") + description);
}