File: ElementAccessor.cpp

package info (click to toggle)
odil 0.13.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,476 kB
  • sloc: cpp: 55,982; python: 3,947; javascript: 460; xml: 182; makefile: 99; sh: 36
file content (125 lines) | stat: -rw-r--r-- 3,450 bytes parent folder | download | duplicates (6)
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#define BOOST_TEST_MODULE ElementAccessor
#include <boost/test/unit_test.hpp>

#include <dcmtk/config/osconfig.h>
#include <dcmtk/dcmdata/dcdatset.h>
#include <dcmtk/dcmdata/dcdeftag.h>
#include <dcmtk/dcmnet/dimse.h>

#include "odil/dcmtk/ElementAccessor.h"
#include "odil/dcmtk/VRTraits.h"

struct Fixture
{
    DcmDataset dataset;

    Fixture()
    {
        OFCondition condition;
        condition = dataset.putAndInsertOFStringArray(DCM_PatientID, "DJ123");
        if(condition.bad())
        {
            throw odil::dcmtk::Exception(condition);
        }

        condition = dataset.putAndInsertUint16(DCM_MessageID, 1234);
        if(condition.bad())
        {
            throw odil::dcmtk::Exception(condition);
        }
    }
};

BOOST_FIXTURE_TEST_CASE(GetCorrectTypeString, Fixture)
{
    BOOST_CHECK_EQUAL(
        odil::dcmtk::ElementAccessor<std::string>::get(this->dataset, DCM_PatientID),
        "DJ123");
}

BOOST_FIXTURE_TEST_CASE(GetCorrectVRString, Fixture)
{
    BOOST_CHECK_EQUAL(
        odil::dcmtk::ElementAccessor<
            typename odil::dcmtk::VRTraits<EVR_LO>::ValueType
        >::get(this->dataset, DCM_PatientID),
        "DJ123");
}

BOOST_FIXTURE_TEST_CASE(GetCorrectTypeNonString, Fixture)
{
    BOOST_CHECK_EQUAL(
        odil::dcmtk::ElementAccessor<Uint16>::get(this->dataset, DCM_MessageID),
        1234);
}

BOOST_FIXTURE_TEST_CASE(GetCorrectVRNonString, Fixture)
{
    BOOST_CHECK_EQUAL(
        odil::dcmtk::ElementAccessor<
            typename odil::dcmtk::VRTraits<EVR_US>::ValueType
        >::get(this->dataset, DCM_MessageID),
        1234);
}

BOOST_FIXTURE_TEST_CASE(GetWrongTypeString, Fixture)
{
    BOOST_CHECK_THROW(
        odil::dcmtk::ElementAccessor<Float32>::get(this->dataset, DCM_PatientID),
        odil::dcmtk::Exception);
}

BOOST_FIXTURE_TEST_CASE(GetWrongTypeNonString, Fixture)
{
    BOOST_CHECK_THROW(
        odil::dcmtk::ElementAccessor<Float32>::get(this->dataset, DCM_MessageID),
        odil::dcmtk::Exception);
}

BOOST_FIXTURE_TEST_CASE(SetEmpty, Fixture)
{
    odil::dcmtk::ElementAccessor<std::string>::set(this->dataset, DCM_PatientName, "FOO");
    OFString value;
    OFCondition const condition =
        this->dataset.findAndGetOFString(DCM_PatientName, value);
    BOOST_REQUIRE(condition.good());
    BOOST_CHECK_EQUAL(std::string(value.c_str()), "FOO");
}

BOOST_FIXTURE_TEST_CASE(SetWrongTypeString, Fixture)
{
    BOOST_CHECK_THROW(
        odil::dcmtk::ElementAccessor<Float32>::set(
            this->dataset, DCM_PatientName, 1.234),
        odil::dcmtk::Exception);
}

BOOST_FIXTURE_TEST_CASE(SetWrongTypeNonString, Fixture)
{
    BOOST_CHECK_THROW(
        odil::dcmtk::ElementAccessor<Float64>::set(
            this->dataset, DCM_Status, STATUS_Success),
        odil::dcmtk::Exception);
}

BOOST_FIXTURE_TEST_CASE(SetExisting, Fixture)
{
    odil::dcmtk::ElementAccessor<std::string>::set(this->dataset, DCM_PatientID, "FOO");
    OFString value;
    OFCondition const condition =
        this->dataset.findAndGetOFString(DCM_PatientID, value);
    BOOST_REQUIRE(condition.good());
    BOOST_CHECK_EQUAL(std::string(value.c_str()), "FOO");
}

BOOST_FIXTURE_TEST_CASE(Has, Fixture)
{
    BOOST_CHECK(
        odil::dcmtk::ElementAccessor<std::string>::has(this->dataset, DCM_PatientID));
}

BOOST_FIXTURE_TEST_CASE(HasNot, Fixture)
{
    BOOST_CHECK(
        !odil::dcmtk::ElementAccessor<std::string>::has(this->dataset, DCM_PatientName));
}