edi4r 0.9.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AuthorCopyright +10 -0
- data/COPYING +56 -0
- data/ChangeLog +106 -0
- data/README +66 -0
- data/TO-DO +35 -0
- data/Tutorial +609 -0
- data/VERSION +1 -0
- data/bin/edi2xml.rb +103 -0
- data/bin/editool.rb +151 -0
- data/bin/xml2edi.rb +50 -0
- data/data/edifact/iso9735/SDCD.10000.csv +10 -0
- data/data/edifact/iso9735/SDCD.20000.csv +10 -0
- data/data/edifact/iso9735/SDCD.30000.csv +11 -0
- data/data/edifact/iso9735/SDCD.40000.csv +31 -0
- data/data/edifact/iso9735/SDCD.40100.csv +31 -0
- data/data/edifact/iso9735/SDED.10000.csv +37 -0
- data/data/edifact/iso9735/SDED.20000.csv +37 -0
- data/data/edifact/iso9735/SDED.30000.csv +43 -0
- data/data/edifact/iso9735/SDED.40000.csv +129 -0
- data/data/edifact/iso9735/SDED.40100.csv +130 -0
- data/data/edifact/iso9735/SDMD.10000.csv +0 -0
- data/data/edifact/iso9735/SDMD.20000.csv +0 -0
- data/data/edifact/iso9735/SDMD.30000.csv +6 -0
- data/data/edifact/iso9735/SDMD.40000.csv +17 -0
- data/data/edifact/iso9735/SDMD.40100.csv +17 -0
- data/data/edifact/iso9735/SDSD.10000.csv +8 -0
- data/data/edifact/iso9735/SDSD.20000.csv +8 -0
- data/data/edifact/iso9735/SDSD.30000.csv +12 -0
- data/data/edifact/iso9735/SDSD.40000.csv +34 -0
- data/data/edifact/iso9735/SDSD.40100.csv +34 -0
- data/data/edifact/untdid/EDCD.d01b.csv +200 -0
- data/data/edifact/untdid/EDCD.d96a.csv +161 -0
- data/data/edifact/untdid/EDED.d01b.csv +641 -0
- data/data/edifact/untdid/EDED.d96a.csv +462 -0
- data/data/edifact/untdid/EDMD.d01b.csv +3419 -0
- data/data/edifact/untdid/EDMD.d96a.csv +2144 -0
- data/data/edifact/untdid/EDSD.d01b.csv +158 -0
- data/data/edifact/untdid/EDSD.d96a.csv +127 -0
- data/data/edifact/untdid/IDCD.d01b.csv +95 -0
- data/data/edifact/untdid/IDMD.d01b.csv +238 -0
- data/data/edifact/untdid/IDSD.d01b.csv +75 -0
- data/lib/edi4r.rb +928 -0
- data/lib/edi4r/diagrams.rb +567 -0
- data/lib/edi4r/edi4r-1.2.dtd +20 -0
- data/lib/edi4r/edifact-rexml.rb +221 -0
- data/lib/edi4r/edifact.rb +1627 -0
- data/lib/edi4r/rexml.rb +256 -0
- data/lib/edi4r/standards.rb +495 -0
- data/test/eancom2webedi.rb +380 -0
- data/test/groups.edi +1 -0
- data/test/in1.edi +1 -0
- data/test/in1.inh +3 -0
- data/test/in2.edi +1 -0
- data/test/in2.xml +350 -0
- data/test/test_basics.rb +209 -0
- data/test/test_edi_split.rb +53 -0
- data/test/test_loopback.rb +21 -0
- data/test/test_minidemo.rb +84 -0
- data/test/test_rexml.rb +98 -0
- data/test/test_tut_examples.rb +131 -0
- data/test/webedi2eancom.rb +408 -0
- metadata +110 -0
data/test/test_basics.rb
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# :include: ../AuthorCopyright
|
3
|
+
|
4
|
+
# Load path magic...
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
require 'edi4r'
|
10
|
+
require 'edi4r/edifact'
|
11
|
+
|
12
|
+
class EDIFACT_Tests < Test::Unit::TestCase
|
13
|
+
|
14
|
+
# Utilities: Fill in just the required segments
|
15
|
+
|
16
|
+
def fill_ORDERS( msg )
|
17
|
+
seg = msg.new_segment('BGM')
|
18
|
+
msg.add seg
|
19
|
+
seg.d1004 = '220'
|
20
|
+
assert_equal(["C002", "1004", "1225", "4343"], seg.names )
|
21
|
+
seg = msg.new_segment('DTM')
|
22
|
+
msg.add seg
|
23
|
+
seg.cC507.d2005 = '137'
|
24
|
+
t = Time.edifact('20060703', 102)
|
25
|
+
seg.cC507.d2380 = t
|
26
|
+
seg.cC507.d2379 = t.format
|
27
|
+
|
28
|
+
assert_equal( ["2005", "2380", "2379"], seg.cC507.names )
|
29
|
+
seg = msg.new_segment('UNS')
|
30
|
+
seg.d0081 = 'S'
|
31
|
+
msg.add seg
|
32
|
+
# p seg.names
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def fill_INVOIC( msg )
|
37
|
+
seg = msg.new_segment('BGM')
|
38
|
+
msg.add seg
|
39
|
+
seg.cC002.d1001 = '380'
|
40
|
+
assert_equal(["C002", "C106", "1225", "4343"], seg.names )
|
41
|
+
seg = msg.new_segment('DTM')
|
42
|
+
msg.add seg
|
43
|
+
seg.cC507.d2005 = '137'
|
44
|
+
t = Time.new
|
45
|
+
t.format = 204
|
46
|
+
seg.cC507.d2380 = t
|
47
|
+
seg.cC507.d2379 = t.format
|
48
|
+
|
49
|
+
assert_equal( ["2005", "2380", "2379"], seg.cC507.names )
|
50
|
+
seg = msg.new_segment('UNS')
|
51
|
+
seg.d0081 = 'S'
|
52
|
+
msg.add seg
|
53
|
+
|
54
|
+
seg = msg.new_segment('MOA')
|
55
|
+
msg.add seg
|
56
|
+
seg.cC516.d5025 = '86'
|
57
|
+
seg.cC516.d5004 = 0.0
|
58
|
+
# p seg.names
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def test_interchange_creation
|
63
|
+
ic = nil
|
64
|
+
|
65
|
+
# All defaults working?
|
66
|
+
assert_nothing_raised { ic = EDI::E::Interchange.new() }
|
67
|
+
assert_match( /^UNA:\+\.\? 'UNB\+UNOB:3\+\+\+\d{6}:\d{4}\+1'UNZ\+0\+1'$/, ic.to_s )
|
68
|
+
|
69
|
+
# Change some parameters: Switch off UNA, try a different charset
|
70
|
+
assert_nothing_raised {
|
71
|
+
ic = EDI::E::Interchange.new({
|
72
|
+
:show_una=>false, :charset=>'UNOC',
|
73
|
+
:interchange_control_reference=>123,
|
74
|
+
:test_indicator=>1 })
|
75
|
+
}
|
76
|
+
assert_match( /^UNB\+UNOC:3\+\+\+\d{6}:\d{4}\+(123)\+{6}1'UNZ\+0\+\1'$/, ic.to_s )
|
77
|
+
|
78
|
+
|
79
|
+
# Now test special separator case SV2, UNOB. Is UNA on by default?
|
80
|
+
assert_nothing_raised {
|
81
|
+
ic = EDI::E::Interchange.new({:version=>2})
|
82
|
+
}
|
83
|
+
assert_match( /^UNA\021\022\.\? \024UNB\022UNOB\0212\022\022\022\d{6}\021\d{4}\0221\024UNZ\0220\0221\024$/, ic.to_s )
|
84
|
+
|
85
|
+
# Same again, now with a few defaults set explicitly
|
86
|
+
assert_nothing_raised {
|
87
|
+
ic = EDI::E::Interchange.new({:show_una=>true,:version=>2, :charset=>'UNOB'})
|
88
|
+
}
|
89
|
+
assert_match( /^UNA\021\022\.\? \024UNB\022UNOB\0212\022\022\022\d{6}\021\d{4}\0221\024UNZ\0220\0221\024$/, ic.to_s )
|
90
|
+
|
91
|
+
# SV4 working?
|
92
|
+
assert_nothing_raised { ic = EDI::E::Interchange.new({:version=>4, :charset=>'UNOC'}) }
|
93
|
+
assert_match( /^UNA:\+\.\?\*'UNB\+UNOC:4\+\+\+\d{8}:\d{4}\+1'UNZ\+0\+1'$/, ic.to_s )
|
94
|
+
|
95
|
+
# SV4 & I-EDI working?
|
96
|
+
assert_raise( RuntimeError) {
|
97
|
+
ic = EDI::E::Interchange.new({:version=>4, :charset=>'UNOC', :i_edi => true})
|
98
|
+
}
|
99
|
+
# assert_match( /^UNA:\+\.\?\*'UIB\+UNOC:4\+\+\+\d{8}:\d{4}\+1'UIZ\+0\+1'$/, ic.to_s )
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
def test_group_creation
|
104
|
+
ic = n = nil
|
105
|
+
assert_nothing_raised { ic = EDI::E::Interchange.new() }
|
106
|
+
|
107
|
+
# First group: No sender/recipient there to inherit:
|
108
|
+
# Expect 4 validation errors (2 x UNB, 2 x UNG)
|
109
|
+
grp = ic.new_msggroup
|
110
|
+
ic.add( grp, false )
|
111
|
+
assert_equal( 4, ic.validate )
|
112
|
+
|
113
|
+
# Second group: Now let's see if sender/recipient inheritance works:
|
114
|
+
# Expect no more validation errors
|
115
|
+
grp.header.cS006.d0040 = 'sender-g'
|
116
|
+
grp.header.cS007.d0044 = 'recipient-g'
|
117
|
+
|
118
|
+
ic.header.cS002.d0004 = 'sender'
|
119
|
+
ic.header.cS003.d0010 = 'recipient'
|
120
|
+
grp = ic.new_msggroup
|
121
|
+
assert_nothing_raised{ n = ic.validate}
|
122
|
+
assert_equal( 0, n )
|
123
|
+
|
124
|
+
msg = grp.new_message
|
125
|
+
fill_ORDERS(msg)
|
126
|
+
grp.add( msg )
|
127
|
+
|
128
|
+
# See if reference in trailer is updated when header ref. changes:
|
129
|
+
grp.header.d0048 = 5
|
130
|
+
ic.add( grp, false )
|
131
|
+
|
132
|
+
assert_nothing_raised{ n = ic.validate}
|
133
|
+
assert_equal( 0, n )
|
134
|
+
|
135
|
+
grp = ic.new_msggroup(:msg_type=>'INVOIC', :version=>'D', :release=>'01B',
|
136
|
+
:resp_agency=>'UN', :assigned_code=>'EAN010')
|
137
|
+
ic.add( grp, false )
|
138
|
+
msg = grp.new_message
|
139
|
+
fill_INVOIC(msg)
|
140
|
+
grp.add msg
|
141
|
+
assert_nothing_raised{ n = ic.validate}
|
142
|
+
assert_equal( 0, n )
|
143
|
+
assert_nothing_raised{ File.open("groups.edi",'w') {|f| f.print ic} }
|
144
|
+
|
145
|
+
msg.header.cS009.d0057 = 'EAN011' # provoke a grp/msg difference
|
146
|
+
assert_nothing_raised{ n = ic.validate}
|
147
|
+
assert_equal( 1, n )
|
148
|
+
# puts ic
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
def test_message_creation
|
153
|
+
|
154
|
+
ic = nil
|
155
|
+
assert_nothing_raised { ic = EDI::E::Interchange.new() }
|
156
|
+
msg = ic.new_message
|
157
|
+
fill_ORDERS(msg)
|
158
|
+
|
159
|
+
ic.add msg
|
160
|
+
ic.add msg
|
161
|
+
assert_equal( 1, msg.header.first.value ) # value of DE 0062
|
162
|
+
assert_equal( "ORDERS:D:96A:UN", msg.header[1].to_s ) # S009
|
163
|
+
assert_equal( "UNH+1+ORDERS:D:96A:UN", msg.header.to_s ) # UNH
|
164
|
+
assert_equal( "BGM++220", msg.first.to_s ) # BGM
|
165
|
+
|
166
|
+
# puts msg
|
167
|
+
# puts msg.inspect
|
168
|
+
ic.header.d0035 = 1 # Test indicator
|
169
|
+
# puts ic
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_una_changes
|
173
|
+
ic = nil
|
174
|
+
assert_nothing_raised { ic = EDI::E::Interchange.new() }
|
175
|
+
msg = ic.new_message
|
176
|
+
pri = msg.parse_segment('PRI+AAA:30,0::LIU', 'PRI')
|
177
|
+
assert_equal( pri.to_s, 'PRI+AAA:30::LIU')
|
178
|
+
pri = msg.parse_segment('PRI+AAA:30.1::LIU', 'PRI')
|
179
|
+
assert_equal( pri.to_s, 'PRI+AAA:30.1::LIU')
|
180
|
+
ic.una.decimal_sign = ?,
|
181
|
+
pri = msg.parse_segment('PRI+AAA:30.1::LIU', 'PRI')
|
182
|
+
assert_equal( 'PRI+AAA:30,1::LIU', pri.to_s)
|
183
|
+
ic.una.decimal_sign = ?.
|
184
|
+
ic.una.ce_sep = ?-
|
185
|
+
assert_equal( 'PRI+AAA-30.1--LIU', pri.to_s)
|
186
|
+
pri.cC509.d5118 = -pri.cC509.d5118
|
187
|
+
assert_equal( 'PRI+AAA-?-30.1--LIU', pri.to_s)
|
188
|
+
ic.una.esc_char = ?#
|
189
|
+
assert_equal( 'PRI+AAA-#-30.1--LIU', pri.to_s)
|
190
|
+
ic.una.esc_char = ?\\
|
191
|
+
assert_equal( 'PRI+AAA-\\-30.1--LIU', pri.to_s)
|
192
|
+
end
|
193
|
+
|
194
|
+
begin
|
195
|
+
def test_interchange_parsing
|
196
|
+
assert_nothing_raised {
|
197
|
+
ic = EDI::E::Interchange.parse( File.open( './O0002248720','r' ), false )
|
198
|
+
ic.output_mode = :indented
|
199
|
+
File.open("invoic.out", "w") {|hnd| hnd.print ic}
|
200
|
+
}
|
201
|
+
assert_nothing_raised {
|
202
|
+
ic = EDI::E::Interchange.parse( File.open( './remadv101.edi', 'r' ) )
|
203
|
+
ic.output_mode = :indented
|
204
|
+
File.open("remadv.out", "w") {|hnd| hnd.print ic}
|
205
|
+
# $stdout.write ic
|
206
|
+
}
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# :include: ../AuthorCopyright
|
3
|
+
|
4
|
+
=begin
|
5
|
+
E = ?? # ESC char
|
6
|
+
C = ?: # CDE separator char
|
7
|
+
D = ?+ # DE separator char
|
8
|
+
S = ?' # Segment terminator
|
9
|
+
=end
|
10
|
+
|
11
|
+
# Load path magic...
|
12
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
13
|
+
|
14
|
+
require 'test/unit'
|
15
|
+
|
16
|
+
require 'edi4r'
|
17
|
+
require 'edi4r/edifact'
|
18
|
+
include EDI::E
|
19
|
+
|
20
|
+
class TestClass < Test::Unit::TestCase
|
21
|
+
|
22
|
+
def test_cde_sep
|
23
|
+
assert_equal(['a','b'], edi_split('a:b', ?:, ??) )
|
24
|
+
assert_equal(['a:b'], edi_split('a?:b', ?:, ??) )
|
25
|
+
assert_equal(['a?','b'],edi_split('a??:b', ?:, ??) )
|
26
|
+
assert_equal(['a?:b'], edi_split('a???:b', ?:, ??) )
|
27
|
+
assert_raise( EDISyntaxError) { edi_split('a:b?', ?:, ??)}
|
28
|
+
|
29
|
+
assert_equal(['a','', 'b'], edi_split('a::b', ?:, ??) )
|
30
|
+
assert_equal(['a','', '', 'b'], edi_split('a:::b', ?:, ??) )
|
31
|
+
assert_equal(['a','b'], edi_split('a:b:', ?:, ??) )
|
32
|
+
assert_equal(['a','', 'b'], edi_split('a::b::', ?:, ??) )
|
33
|
+
|
34
|
+
assert_equal(['','a','b'], edi_split(':a:b', ?:, ??) )
|
35
|
+
assert_equal(['','','', 'a','', 'b'], edi_split(':::a::b::', ?:, ??) )
|
36
|
+
|
37
|
+
assert_equal( ['123456780', 'A + B LTD' ], edi_split('123456780:A + B LTD', ?:, ??) )
|
38
|
+
assert_equal( ['', '', '', '10010099', '25', '131' ], edi_split(':::10010099:25:131', ?:, ??) )
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_de_sep
|
42
|
+
assert_equal( ['IMD', 'A','', ':::JEANS'], edi_split('IMD+A++:::JEANS', ?+, ??))
|
43
|
+
assert_equal( ['FII', 'OR','123456780:A + B LTD', ':::10010099:25:131' ], edi_split('FII+OR+123456780:A ?+ B LTD+:::10010099:25:131', ?+, ??) )
|
44
|
+
assert_raise(EDISyntaxError){edi_split('TAG+SOME TEXT??+MORE TEXT+PENDING ESC! ?', ?+, ??)}
|
45
|
+
assert_equal( ['TAG','SOME TEXT?', 'MORE TEXT', 'PENDING ESC ?'], edi_split('TAG+SOME TEXT??+MORE TEXT+PENDING ESC ??', ?+, ??) )
|
46
|
+
assert_raise(EDISyntaxError){edi_split('TAG+SOME TEXT??+MORE TEXT+PENDING ESC! ???', ?+, ??)}
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_seg_term
|
50
|
+
assert_equal( ['RFF+ACK:12345/678', 'FII+BF+000000000:::EUR+:::10010099:25:131', 'SEQ++1', 'FII+OR+123456780:A ?+ B LTD+:::10010099:25:131', 'RFF+RA:YOUR ACCOUNT 1234-5678 9'], edi_split('RFF+ACK:12345/678\'FII+BF+000000000:::EUR+:::10010099:25:131\'SEQ++1\'FII+OR+123456780:A ?+ B LTD+:::10010099:25:131\'RFF+RA:YOUR ACCOUNT 1234-5678 9\'', ?', ??))
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# :include: ../AuthorCopyright
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
|
6
|
+
#######################################################################
|
7
|
+
# Test the accompanying standalone mapping tools
|
8
|
+
#
|
9
|
+
# Mapping to EANCOM and back should yield the original inhouse data.
|
10
|
+
|
11
|
+
class EDIFACT_Tests < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def test_loopback
|
14
|
+
s1 = nil
|
15
|
+
File.open('in1.inh') {|hnd| hnd.binmode; s1 = hnd.read}
|
16
|
+
s2 = `ruby ./webedi2eancom.rb -a in1.inh | ruby ./eancom2webedi.rb`
|
17
|
+
assert_equal( 0, $? )
|
18
|
+
assert_match( s1, s2 )
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# :include: ../AuthorCopyright
|
3
|
+
|
4
|
+
# Load path magic...
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
#require "rubygems"
|
9
|
+
#require_gem "edi4r"
|
10
|
+
require "edi4r"
|
11
|
+
require "edi4r/edifact"
|
12
|
+
require 'tempfile'
|
13
|
+
|
14
|
+
|
15
|
+
class EDIFACT_Minitests < Test::Unit::TestCase
|
16
|
+
|
17
|
+
def setup
|
18
|
+
@ic = EDI::E::Interchange.new({
|
19
|
+
:show_una => true,
|
20
|
+
:charset => 'UNOC',
|
21
|
+
:version => 3,
|
22
|
+
:interchange_control_reference => '12345',
|
23
|
+
:output_mode => :verbatim})
|
24
|
+
|
25
|
+
cde = @ic.header.cS002
|
26
|
+
cde.d0004 = '2965197000005'
|
27
|
+
cde.d0007 = '14'
|
28
|
+
cde = @ic.header.cS003
|
29
|
+
cde.d0010 = '2165197000009'
|
30
|
+
cde.d0007 = '14'
|
31
|
+
|
32
|
+
# ic.write $stdout
|
33
|
+
|
34
|
+
params = {
|
35
|
+
:msg_type => 'ORDERS',
|
36
|
+
:version => 'D',
|
37
|
+
:release => '01B',
|
38
|
+
:resp_agency => 'UN',
|
39
|
+
:assigned_code => 'EAN010'
|
40
|
+
}
|
41
|
+
|
42
|
+
msg = @ic.new_message params
|
43
|
+
|
44
|
+
# print msg
|
45
|
+
|
46
|
+
seg = msg.new_segment('BGM')
|
47
|
+
seg.cC002.d1001 = '220'
|
48
|
+
seg.cC106.d1004 = '1234567'
|
49
|
+
seg.d1225 = '9'
|
50
|
+
msg.add seg
|
51
|
+
|
52
|
+
seg = msg.new_segment('DTM')
|
53
|
+
cde = seg.cC507
|
54
|
+
cde.d2005 = '137'
|
55
|
+
cde.d2380 = '20050603'
|
56
|
+
cde.d2379 = '102'
|
57
|
+
msg.add seg
|
58
|
+
|
59
|
+
seg = msg.new_segment('UNS')
|
60
|
+
seg.d0081='S'
|
61
|
+
|
62
|
+
msg.add seg
|
63
|
+
|
64
|
+
@ic.add msg
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_validation
|
68
|
+
rc = 0
|
69
|
+
assert_nothing_raised { rc=@ic.validate }
|
70
|
+
assert_equal( 0, rc)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_write_parse_validate
|
74
|
+
tf = Tempfile.new("minitest_edi")
|
75
|
+
tf.print @ic
|
76
|
+
tf.close
|
77
|
+
rc = 0
|
78
|
+
ic2 = EDI::E::Interchange.parse(tf.open)
|
79
|
+
assert_nothing_raised { rc=ic2.validate }
|
80
|
+
assert_equal( 0, rc)
|
81
|
+
assert_equal( @ic.to_s, ic2.to_s)
|
82
|
+
tf.close(true) unless tf.closed?
|
83
|
+
end
|
84
|
+
end
|
data/test/test_rexml.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# :include: ../AuthorCopyright
|
3
|
+
|
4
|
+
#######################################################################
|
5
|
+
# Test conversion to and from XML representation
|
6
|
+
#
|
7
|
+
# Mapping to XML and back should yield the original UN/EDIFACT data.
|
8
|
+
# Mapping to UN/EDIFACT and back should yield the original XML data.
|
9
|
+
|
10
|
+
# Include statement during test setup:
|
11
|
+
|
12
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
13
|
+
require 'edi4r'
|
14
|
+
require 'edi4r/edifact'
|
15
|
+
require 'edi4r/rexml'
|
16
|
+
|
17
|
+
# Regular include statements:
|
18
|
+
|
19
|
+
#require "rubygems"
|
20
|
+
#require_gem "edi4r"
|
21
|
+
#require "edi4r/edifact"
|
22
|
+
#require 'edi4r/rexml'
|
23
|
+
|
24
|
+
require 'stringio'
|
25
|
+
require 'test/unit'
|
26
|
+
|
27
|
+
|
28
|
+
class EDIFACT_REXML_Tests < Test::Unit::TestCase
|
29
|
+
|
30
|
+
def setup
|
31
|
+
@ice = EDI::Interchange.parse(File.open("in2.edi"))
|
32
|
+
@se = @ice.to_s
|
33
|
+
@icg = EDI::Interchange.parse(File.open("groups.edi"))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_rexml
|
37
|
+
@icx = nil
|
38
|
+
assert_nothing_raised do
|
39
|
+
@icx = EDI::Interchange.parse(File.open("in2.xml"))
|
40
|
+
assert_equal( 0, @icx.validate )
|
41
|
+
end
|
42
|
+
|
43
|
+
assert_equal( @se, @icx.to_s ) # EDIFACT representations equal?
|
44
|
+
|
45
|
+
sx = File.open('in2.edi') { |hnd| hnd.read }.chop
|
46
|
+
se = @se.sub(/PRI\+AAA:30::LIU\'PRI\+AAE:99::/,
|
47
|
+
'PRI+AAA:30.0::LIU\'PRI+AAE:99,0::')
|
48
|
+
assert_equal( se, sx ) # EDIFACT representations equal file content?
|
49
|
+
|
50
|
+
se = StringIO.new
|
51
|
+
xdoc_e = REXML::Document.new
|
52
|
+
@ice.to_xml(xdoc_e)
|
53
|
+
xdoc_e.write( se, 0 )
|
54
|
+
# xdoc_e.write( File.open('in2a.xml','w'), 0 )
|
55
|
+
|
56
|
+
sx = StringIO.new
|
57
|
+
xdoc_x = REXML::Document.new
|
58
|
+
@ice.to_xml(xdoc_x)
|
59
|
+
xdoc_x.write( sx, 0 )
|
60
|
+
|
61
|
+
assert_equal( se.string, sx.string ) # XML representations equal?
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def test_groups
|
66
|
+
|
67
|
+
xdoc = REXML::Document.new
|
68
|
+
assert_nothing_raised{ @icg.to_xml( xdoc ) }
|
69
|
+
|
70
|
+
sg = StringIO.new
|
71
|
+
xdoc.write( sg, 0 )
|
72
|
+
# xdoc.write( File.open("groups2.xml",'w'), 0 )
|
73
|
+
|
74
|
+
ic = nil
|
75
|
+
assert_nothing_raised do
|
76
|
+
ic = EDI::E::Interchange.parse_xml( REXML::Document.new( sg.string ))
|
77
|
+
end
|
78
|
+
assert_equal( @icg.to_s, ic.to_s )
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
def test_din16557_4
|
83
|
+
xdoc = nil
|
84
|
+
assert_nothing_raised{ xdoc = @ice.to_din16557_4 }
|
85
|
+
|
86
|
+
sg = StringIO.new
|
87
|
+
# sg = $stdout
|
88
|
+
xdoc.write( sg, 0 )
|
89
|
+
|
90
|
+
xdoc = nil
|
91
|
+
assert_nothing_raised{ xdoc = @icg.to_din16557_4 }
|
92
|
+
|
93
|
+
# sg = $stdout
|
94
|
+
sg = StringIO.new
|
95
|
+
xdoc.write( sg, 0 )
|
96
|
+
# xdoc.write( File.open("groups2.xml",'w'), 0 )
|
97
|
+
end
|
98
|
+
end
|