dcm_dict 0.29.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +156 -0
- data/COPYING +674 -0
- data/LICENSE +22 -0
- data/README.md +327 -0
- data/Rakefile +36 -0
- data/bin/dcm_dict_converter.rb +194 -0
- data/lib/dcm_dict.rb +46 -0
- data/lib/dcm_dict/dictionary/base_dictionary.rb +47 -0
- data/lib/dcm_dict/dictionary/base_record.rb +62 -0
- data/lib/dcm_dict/dictionary/data_element_dictionary.rb +117 -0
- data/lib/dcm_dict/dictionary/data_element_record.rb +93 -0
- data/lib/dcm_dict/dictionary/uid_dictionary.rb +82 -0
- data/lib/dcm_dict/dictionary/uid_record.rb +48 -0
- data/lib/dcm_dict/encoder/data_to_code.rb +79 -0
- data/lib/dcm_dict/error/dictionary_error.rb +30 -0
- data/lib/dcm_dict/ext/object_extension.rb +38 -0
- data/lib/dcm_dict/refine/array_refine.rb +34 -0
- data/lib/dcm_dict/refine/data_element_refine.rb +37 -0
- data/lib/dcm_dict/refine/internal/array_refine_internal.rb +97 -0
- data/lib/dcm_dict/refine/internal/hash_refine_internal.rb +71 -0
- data/lib/dcm_dict/refine/internal/string_refine_internal.rb +135 -0
- data/lib/dcm_dict/refine/string_refine.rb +35 -0
- data/lib/dcm_dict/refine/symbol_refine.rb +34 -0
- data/lib/dcm_dict/refine/uid_refine.rb +36 -0
- data/lib/dcm_dict/rubies/rb_ext.rb +32 -0
- data/lib/dcm_dict/source_data/data_elements_data.rb +4945 -0
- data/lib/dcm_dict/source_data/detached_data.rb +67 -0
- data/lib/dcm_dict/source_data/uid_values_data.rb +467 -0
- data/lib/dcm_dict/version.rb +27 -0
- data/lib/dcm_dict/xml/constant.rb +38 -0
- data/lib/dcm_dict/xml/field_data.rb +47 -0
- data/lib/dcm_dict/xml/nokogiri_tool.rb +108 -0
- data/lib/dcm_dict/xml/rexml_tool.rb +105 -0
- data/lib/dcm_dict/xml/tag_field_data.rb +96 -0
- data/lib/dcm_dict/xml/uid_field_data.rb +60 -0
- data/lib/dcm_dict/xml/xml_tool.rb +47 -0
- data/spec/data_element_sample_spec_helper.rb +203 -0
- data/spec/data_element_shared_example_spec_helper.rb +57 -0
- data/spec/dcm_dict/dictionary/data_element_dictionary_spec.rb +76 -0
- data/spec/dcm_dict/dictionary/data_element_record_spec.rb +138 -0
- data/spec/dcm_dict/dictionary/uid_dictionary_spec.rb +82 -0
- data/spec/dcm_dict/dictionary/uid_record_spec.rb +53 -0
- data/spec/dcm_dict/encoder/data_to_code_spec.rb +109 -0
- data/spec/dcm_dict/ext/object_extension_spec.rb +53 -0
- data/spec/dcm_dict/refine/array_refine_spec.rb +60 -0
- data/spec/dcm_dict/refine/internal/array_refine_internal_spec.rb +98 -0
- data/spec/dcm_dict/refine/internal/hash_refine_internal_spec.rb +64 -0
- data/spec/dcm_dict/refine/internal/string_refine_internal_spec.rb +228 -0
- data/spec/dcm_dict/refine/string_refine_spec.rb +87 -0
- data/spec/dcm_dict/refine/symbol_refine_spec.rb +41 -0
- data/spec/dcm_dict/rubies/rb_ext_spec.rb +46 -0
- data/spec/dcm_dict/source_data/data_elements_data_spec.rb +40 -0
- data/spec/dcm_dict/source_data/detached_data_spec.rb +55 -0
- data/spec/dcm_dict/source_data/uid_values_data_spec.rb +37 -0
- data/spec/dcm_dict/version_spec.rb +30 -0
- data/spec/dcm_dict/xml/tag_field_data_spec.rb +62 -0
- data/spec/dcm_dict/xml/uid_field_data_spec.rb +60 -0
- data/spec/dictionary_shared_example_spec_helper.rb +118 -0
- data/spec/refine_shared_example_spec_helper.rb +54 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/xml_sample_spec_helper.rb +567 -0
- metadata +216 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of DcmDict gem (dcm_dict).
|
3
|
+
#
|
4
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# DcmDict is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
#
|
17
|
+
# This software has neither been tested nor approved for clinical use
|
18
|
+
# or for incorporation in a medical device.
|
19
|
+
# It is the redistributor's or user's responsibility to comply with any
|
20
|
+
# applicable local, state, national or international regulations.
|
21
|
+
#
|
22
|
+
require 'spec_helper'
|
23
|
+
|
24
|
+
describe DcmDict::Dictionary::UidDictionary do
|
25
|
+
|
26
|
+
include_examples "Map all source data",
|
27
|
+
[:uid_value, :uid_name],
|
28
|
+
DcmDict::SourceData::UidValuesData,
|
29
|
+
DcmDict::Dictionary::TheUidDictionary,
|
30
|
+
DcmDict::Dictionary::UidRecord,
|
31
|
+
[:uid_value, :uid_name, :uid_type]
|
32
|
+
|
33
|
+
{
|
34
|
+
'1.2.3.4.5.6' => { :uid_value => '1.2.3.4.5.6',
|
35
|
+
:uid_name => 'Unknown UID',
|
36
|
+
:uid_type => :unknown },
|
37
|
+
'1.2.840.10008.5.1.4.1.1.12.77' => { :uid_value => '1.2.840.10008.5.1.4.1.1.12.77',
|
38
|
+
:uid_name => '1.2.840.10008.5.1.4.1.1.12.77 (Retired)',
|
39
|
+
:uid_type => :sop_class },
|
40
|
+
'1.2.840.10008.5.1.4.1.1.40' => { :uid_value => '1.2.840.10008.5.1.4.1.1.40',
|
41
|
+
:uid_name => '1.2.840.10008.5.1.4.1.1.40 (Retired)',
|
42
|
+
:uid_type => :sop_class },
|
43
|
+
'1.2.840.10008.5.1.4.39.3' => { :uid_value => '1.2.840.10008.5.1.4.39.3',
|
44
|
+
:uid_name => 'Color Palette Query/Retrieve Information Model - MOVE',
|
45
|
+
:uid_type => :sop_class },
|
46
|
+
'1.2.840.10008.5.1.4.34.6.5' => { :uid_value => '1.2.840.10008.5.1.4.34.6.5',
|
47
|
+
:uid_name => 'Unified Procedure Step - Query SOP Class',
|
48
|
+
:uid_type => :sop_class },
|
49
|
+
'1.2.840.10008.1.2.4.70' => { :uid_value => '1.2.840.10008.1.2.4.70',
|
50
|
+
:uid_name => "JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1]): Default Transfer Syntax for Lossless JPEG Image Compression",
|
51
|
+
:uid_type => :transfer_syntax},
|
52
|
+
'1.2.840.10008.1.2.4.60' => { :uid_value => '1.2.840.10008.1.2.4.60',
|
53
|
+
:uid_name => 'JPEG Extended, Hierarchical (Process 17 & 19) (Retired)',
|
54
|
+
:uid_type => :transfer_syntax },
|
55
|
+
'1.2.840.10008.5.1.4.1.1.481.19'=> { :uid_value => '1.2.840.10008.5.1.4.1.1.481.19',
|
56
|
+
:uid_name => "C-Arm Photon-Electron Radiation Record Storage",
|
57
|
+
:uid_type => :sop_class},
|
58
|
+
}.each do |uid, data|
|
59
|
+
include_examples "Handle specific record", data[:uid_name],
|
60
|
+
uid, data, DcmDict::Dictionary::TheUidDictionary
|
61
|
+
end
|
62
|
+
|
63
|
+
[
|
64
|
+
'1.2.abc.3.4', 'this string is not a valid uid', '1.2.3.04.5'
|
65
|
+
].each do |uid|
|
66
|
+
include_examples "Dictionary with wrong key",
|
67
|
+
uid, [:uid_value, :uid_name, :uid_type],
|
68
|
+
DcmDict::Dictionary::TheUidDictionary
|
69
|
+
end
|
70
|
+
|
71
|
+
include_examples "Dictionary Data not modifiable",
|
72
|
+
'1.2.840.10008.1.2', :uid_value, DcmDict::Dictionary::TheUidDictionary
|
73
|
+
|
74
|
+
|
75
|
+
include_examples "Concurrency support",
|
76
|
+
'1.2.840.10008.1.2',
|
77
|
+
DcmDict::Dictionary::TheUidDictionary,
|
78
|
+
{uid_value: '1.2.840.10008.1.2',
|
79
|
+
uid_name: "Implicit VR Little Endian: Default Transfer Syntax for DICOM",
|
80
|
+
uid_type: :transfer_syntax}
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2014-2020 Enrico Rivarola
|
3
|
+
#
|
4
|
+
# This file is part of DcmDict gem (dcm_dict).
|
5
|
+
#
|
6
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# DcmDict is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
# This software has neither been tested nor approved for clinical use
|
20
|
+
# or for incorporation in a medical device.
|
21
|
+
# It is the redistributor's or user's responsibility to comply with any
|
22
|
+
# applicable local, state, national or international regulations.
|
23
|
+
#
|
24
|
+
require 'spec_helper'
|
25
|
+
|
26
|
+
describe DcmDict::Dictionary::UidRecord do
|
27
|
+
[
|
28
|
+
{ uid_value: '1.2.840.10008.1.2',
|
29
|
+
uid_name: "Implicit VR Little Endian: Default Transfer Syntax for DICOM",
|
30
|
+
uid_type: :transfer_syntax }
|
31
|
+
].each do |data|
|
32
|
+
it "Handle Data Element Data correctly" do
|
33
|
+
ur = DcmDict::Dictionary::UidRecord.new(data.dup)
|
34
|
+
expect(ur.uid_value).to eq(data[:uid_value])
|
35
|
+
expect(ur.uid).to eq(data[:uid_value])
|
36
|
+
expect(ur.uid_name).to eq(data[:uid_name])
|
37
|
+
expect(ur.uid_type).to eq(data[:uid_type])
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
include_examples "Record handle methods correctly",
|
42
|
+
DcmDict::Dictionary::UidRecord.new(data),
|
43
|
+
data
|
44
|
+
|
45
|
+
it "data should be not modifiable" do
|
46
|
+
uid = DcmDict::Dictionary::UidRecord.new(data.dup)
|
47
|
+
old_value = uid.uid_value.dup
|
48
|
+
expect{uid.uid_value << 'aaa'}.to raise_error(RuntimeError)
|
49
|
+
expect(uid.uid_value).to eq(old_value)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2014-2020 Enrico Rivarola
|
3
|
+
#
|
4
|
+
# This file is part of DcmDict gem (dcm_dict).
|
5
|
+
#
|
6
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# DcmDict is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
# This software has neither been tested nor approved for clinical use
|
20
|
+
# or for incorporation in a medical device.
|
21
|
+
# It is the redistributor's or user's responsibility to comply with any
|
22
|
+
# applicable local, state, national or international regulations.
|
23
|
+
#
|
24
|
+
require 'spec_helper'
|
25
|
+
require 'xml_sample_spec_helper'
|
26
|
+
|
27
|
+
describe DcmDict::Encoder::DataToCode do
|
28
|
+
describe "should print out data element with" do
|
29
|
+
it "data elements header code" do
|
30
|
+
header = DcmDict::Encoder::DataToCode.data_element_header
|
31
|
+
expected_header = <<END
|
32
|
+
module DcmDict
|
33
|
+
module SourceData
|
34
|
+
DataElementsData = [
|
35
|
+
END
|
36
|
+
expect(header).to eq(expected_header)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "data elements footer code" do
|
40
|
+
footer = DcmDict::Encoder::DataToCode.data_element_footer
|
41
|
+
expected_footer=<<END
|
42
|
+
]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
END
|
46
|
+
expect(footer).to eq(expected_footer)
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "data element data field" do
|
50
|
+
using DcmDict::Refine::Internal::ArrayRefineInternal
|
51
|
+
|
52
|
+
XmlSampleSpecHelper.xml_tag_single_set.each do |xml_string, data|
|
53
|
+
it "for data element sample as #{data[:tag_ps].inspect}" do
|
54
|
+
indent = 4
|
55
|
+
tag_ary_str = "[0x#{data[:tag_ary].tag_group_str},0x#{data[:tag_ary].tag_element_str}]"
|
56
|
+
src_text = "#{' '*indent}{ tag_ps: '#{data[:tag_ps]}', tag_name: \"#{data[:tag_name]}\", tag_key: '#{data[:tag_key]}', tag_vr: #{data[:tag_vr]}, tag_vm: #{data[:tag_vm]}, tag_str: '#{data[:tag_str]}', tag_sym: #{data[:tag_sym].inspect}, tag_ndm: '#{data[:tag_ndm]}', tag_ary: #{tag_ary_str}, tag_multiple: #{data[:tag_multiple].inspect}, tag_note: '#{data[:tag_note]}'},"
|
57
|
+
src_line = DcmDict::Encoder::DataToCode.data_element_data_to_code(data)
|
58
|
+
expect(src_line).to eq(src_text)
|
59
|
+
src_line = DcmDict::Encoder::DataToCode.data_element_data_to_code(data, indent)
|
60
|
+
expect(src_line).to eq(src_text)
|
61
|
+
indent = 6
|
62
|
+
src_line = DcmDict::Encoder::DataToCode.data_element_data_to_code(data, indent)
|
63
|
+
expect(src_line.start_with?("#{' '*indent}{")).to be true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "should print out uid with" do
|
71
|
+
it "uid header code" do
|
72
|
+
header = DcmDict::Encoder::DataToCode.uid_header
|
73
|
+
expected_header = <<END
|
74
|
+
module DcmDict
|
75
|
+
module SourceData
|
76
|
+
UidValuesData = [
|
77
|
+
END
|
78
|
+
expect(header).to eq(expected_header)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "uid footer code" do
|
82
|
+
footer = DcmDict::Encoder::DataToCode.uid_footer
|
83
|
+
expected_footer=<<END
|
84
|
+
]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
END
|
88
|
+
expect(footer).to eq(expected_footer)
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "uid data field" do
|
92
|
+
XmlSampleSpecHelper.xml_uid_set.each do |xml_string, data|
|
93
|
+
it "for uid sample as #{data[:uid_value].inspect}" do
|
94
|
+
indent = 4
|
95
|
+
src_text = "#{' '*indent}{ uid_value: '#{data[:uid_value]}', uid_name: \"#{data[:uid_name]}\", uid_type: #{data[:uid_type].inspect}},"
|
96
|
+
src_line = DcmDict::Encoder::DataToCode.uid_data_to_code(data)
|
97
|
+
expect(src_line).to eq(src_text)
|
98
|
+
src_line = DcmDict::Encoder::DataToCode.uid_data_to_code(data, indent)
|
99
|
+
expect(src_line).to eq(src_text)
|
100
|
+
indent = 6
|
101
|
+
src_line = DcmDict::Encoder::DataToCode.uid_data_to_code(data, indent)
|
102
|
+
expect(src_line.start_with?("#{' '*indent}{")).to be true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2014-2020 Enrico Rivarola
|
3
|
+
#
|
4
|
+
# This file is part of DcmDict gem (dcm_dict).
|
5
|
+
#
|
6
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# DcmDict is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
# This software has neither been tested nor approved for clinical use
|
20
|
+
# or for incorporation in a medical device.
|
21
|
+
# It is the redistributor's or user's responsibility to comply with any
|
22
|
+
# applicable local, state, national or international regulations.
|
23
|
+
#
|
24
|
+
require 'spec_helper'
|
25
|
+
|
26
|
+
describe "Object extension" do
|
27
|
+
|
28
|
+
describe "should check object for nil or empty status" do
|
29
|
+
describe "for class with empty? method" do
|
30
|
+
it "as string object" do
|
31
|
+
expect("bla bla".nil_or_empty?).to be_falsy
|
32
|
+
expect("".nil_or_empty?).to be_truthy
|
33
|
+
end
|
34
|
+
|
35
|
+
it "as array object" do
|
36
|
+
expect([1, 2].nil_or_empty?).to be_falsy
|
37
|
+
expect([].nil_or_empty?).to be_truthy
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "for class without empty? method" do
|
43
|
+
it "as fixnum object" do
|
44
|
+
expect(5.nil_or_empty?).to be_falsy
|
45
|
+
end
|
46
|
+
|
47
|
+
it "as nil object" do
|
48
|
+
expect(nil.nil_or_empty?).to be_truthy
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2014-2020 Enrico Rivarola
|
3
|
+
#
|
4
|
+
# This file is part of DcmDict gem (dcm_dict).
|
5
|
+
#
|
6
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# DcmDict is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
# This software has neither been tested nor approved for clinical use
|
20
|
+
# or for incorporation in a medical device.
|
21
|
+
# It is the redistributor's or user's responsibility to comply with any
|
22
|
+
# applicable local, state, national or international regulations.
|
23
|
+
#
|
24
|
+
require 'spec_helper'
|
25
|
+
|
26
|
+
describe "Array refinement" do
|
27
|
+
using DcmDict::Refine::ArrayRefine
|
28
|
+
|
29
|
+
describe "should permit access to single data element dictionary information" do
|
30
|
+
|
31
|
+
include_examples "refinement for standard tag",
|
32
|
+
[[0x0010,0x1005], [0x0028,0x1200], [0x0014,0x3050]],
|
33
|
+
Proc.new{|tag| tag}
|
34
|
+
|
35
|
+
|
36
|
+
multi_data = { [0x6046,0x0040] => {
|
37
|
+
tag_name: "Overlay Type",
|
38
|
+
tag_multiple: true,
|
39
|
+
tag_keyword: "OverlayType",
|
40
|
+
tag_key: "OverlayType",
|
41
|
+
tag_vr: [:CS], tag_vm: ["1"],
|
42
|
+
tag: [0x6046, 0x0040], tag_ary: [0x6046, 0x0040],
|
43
|
+
tag_ps: "(60XX,0040)",
|
44
|
+
tag_sym: :overlay_type,
|
45
|
+
tag_ndm: "60460040",
|
46
|
+
tag_str: "(6046,0040)",
|
47
|
+
tag_group: 0x6046,
|
48
|
+
tag_element: 0x0040 } }
|
49
|
+
|
50
|
+
include_examples "refinement for multiple tag",
|
51
|
+
multi_data,
|
52
|
+
Proc.new {|tag| tag}
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
include_examples "Raise exception for wrong input",
|
57
|
+
[ [0,1,2,3], [-0x0010,-0x0010], [0x1ffff,0x0010], [0x1ffff,0x10010], [0x0010, 0x1ffff]],
|
58
|
+
[],
|
59
|
+
Proc.new {|tag| tag}
|
60
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2014-2020 Enrico Rivarola
|
3
|
+
#
|
4
|
+
# This file is part of DcmDict gem (dcm_dict).
|
5
|
+
#
|
6
|
+
# DcmDict is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# DcmDict is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with DcmDict. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
# This software has neither been tested nor approved for clinical use
|
20
|
+
# or for incorporation in a medical device.
|
21
|
+
# It is the redistributor's or user's responsibility to comply with any
|
22
|
+
# applicable local, state, national or international regulations.
|
23
|
+
#
|
24
|
+
require 'spec_helper'
|
25
|
+
|
26
|
+
describe "Array Refinement" do
|
27
|
+
|
28
|
+
using DcmDict::Refine::Internal::ArrayRefineInternal
|
29
|
+
it "should implement tag_ary metod" do
|
30
|
+
expect([0x0010,0x0020].to_tag_ary).to eq([0x0010,0x0020])
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "should extract group and element from 'array tag'" do
|
34
|
+
it "for correct object" do
|
35
|
+
expect([0x0010,0x0020].tag_group_num).to eq(0x0010)
|
36
|
+
expect([0x0010,0x0020].tag_element_num).to eq(0x0020)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "and for wrong array must be raise error" do
|
40
|
+
[
|
41
|
+
[0x0010],
|
42
|
+
[0x0010,0x0020,0x0030],
|
43
|
+
['0010', '0020'],
|
44
|
+
[16.0, 0x0020],
|
45
|
+
[0x1ffff,0x10000],
|
46
|
+
[-1,-2]
|
47
|
+
].each do |tag|
|
48
|
+
it "as #{tag.inspect}" do
|
49
|
+
expect{ tag.tag_group_num }.to raise_error(RuntimeError)
|
50
|
+
expect{ tag.tag_element_num }.to raise_error(RuntimeError)
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "should convert group and element to hex string" do
|
59
|
+
{
|
60
|
+
[0xfffe,0xe0dd] => {group: 'FFFE', element: 'E0DD', tag_str: '(FFFE,E0DD)', tag_ndm: 'FFFEE0DD'},
|
61
|
+
[0x0010,0x0020] => {group: '0010', element: '0020', tag_str: '(0010,0020)', tag_ndm: '00100020'}
|
62
|
+
}.each do |tag, value|
|
63
|
+
it "for #{tag.inspect}" do
|
64
|
+
expect(tag.tag_group_str).to eq(value[:group])
|
65
|
+
expect(tag.tag_element_str).to eq(value[:element])
|
66
|
+
expect(tag.to_tag_str).to eq(value[:tag_str])
|
67
|
+
expect(tag.to_tag_ndm).to eq(value[:tag_ndm])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "should check for group-length tag" do
|
73
|
+
{
|
74
|
+
[0x0010, 0x0020] => false,
|
75
|
+
[0x0010, 0x0000] => true,
|
76
|
+
[0x0000, 0x0002] => false,
|
77
|
+
[0x0000, 0x0000] => true
|
78
|
+
}.each do |tag, value|
|
79
|
+
it "for #{tag.inspect}" do
|
80
|
+
expect(tag.group_length_tag?).to eq(value)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "should check for private-creator tag" do
|
86
|
+
{
|
87
|
+
[0x0010, 0x0010] => false,
|
88
|
+
[0x0011, 0x0010] => true,
|
89
|
+
[0x0011, 0x0110] => false,
|
90
|
+
[0x0028, 0x2468] => false
|
91
|
+
}.each do |tag, value|
|
92
|
+
it "for #{tag.inspect}" do
|
93
|
+
expect(tag.private_creator_tag?).to eq(value)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|