npn47_iso8583 0.1.5.a
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.
- checksums.yaml +7 -0
- data/lib/8583.rb +5 -0
- data/lib/iso8583/berlin.rb +82 -0
- data/lib/iso8583/bitmap.rb +117 -0
- data/lib/iso8583/codec.rb +196 -0
- data/lib/iso8583/exception.rb +4 -0
- data/lib/iso8583/field.rb +90 -0
- data/lib/iso8583/fields.rb +75 -0
- data/lib/iso8583/message.rb +419 -0
- data/lib/iso8583/util.rb +94 -0
- data/lib/iso8583/version.rb +4 -0
- data/lib/iso8583.rb +13 -0
- data/test/BitmapTests.rb +80 -0
- data/test/message_test.rb +163 -0
- data/test/test_codec.rb +124 -0
- data/test/test_fields.rb +246 -0
- data/test/test_seperate_msg.rb +22 -0
- data/test/test_util.rb +32 -0
- metadata +66 -0
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'lib/iso8583'
|
2
|
+
require 'lib/iso8583/berlin'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
include ISO8583
|
6
|
+
|
7
|
+
class MessageTest < Test::Unit::TestCase
|
8
|
+
def test_create_empty
|
9
|
+
mes = BerlinMessage.new
|
10
|
+
mes.mti = 1100
|
11
|
+
pan = 474747474747
|
12
|
+
mes.pan = pan
|
13
|
+
assert_equal pan, mes.pan
|
14
|
+
assert_equal pan, mes[2]
|
15
|
+
assert_equal pan, mes["Primary Account Number (PAN)"]
|
16
|
+
assert_equal "1100@\000\000\000\000\000\000\00012474747474747", mes.to_b
|
17
|
+
|
18
|
+
mes = BerlinMessage.new
|
19
|
+
mes.mti = "Authorization Request Response Issuer Gateway"
|
20
|
+
pan = 474747474747
|
21
|
+
mes[2] = pan
|
22
|
+
assert_equal pan, mes.pan
|
23
|
+
assert_equal pan, mes[2]
|
24
|
+
assert_equal pan, mes["Primary Account Number (PAN)"]
|
25
|
+
assert_equal "1110@\000\000\000\000\000\000\00012474747474747", mes.to_b
|
26
|
+
|
27
|
+
mes = BerlinMessage.new
|
28
|
+
mes.mti = 1420
|
29
|
+
pan = 474747474747
|
30
|
+
mes["Primary Account Number (PAN)"] = pan
|
31
|
+
assert_equal pan, mes.pan
|
32
|
+
assert_equal pan, mes[2]
|
33
|
+
assert_equal pan, mes["Primary Account Number (PAN)"]
|
34
|
+
assert_equal "1420@\000\000\000\000\000\000\00012474747474747", mes.to_b
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_parse
|
38
|
+
pan = 474747474747
|
39
|
+
|
40
|
+
assert_raises(ISO8583Exception) {
|
41
|
+
mes = BerlinMessage.parse "@\000\000\000\000\000\000\00012474747474747"
|
42
|
+
}
|
43
|
+
mes = BerlinMessage.parse "1430@\000\000\000\000\000\000\00012474747474747"
|
44
|
+
assert_equal pan, mes.pan
|
45
|
+
assert_equal 1430, mes.mti
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_to_s
|
49
|
+
mes = BerlinMessage.new
|
50
|
+
mes.mti = "Network Management Request Response Issuer Gateway or Acquirer Gateway"
|
51
|
+
mes[2] = 12341234
|
52
|
+
mes[3] = 1111
|
53
|
+
mes[4] = 100
|
54
|
+
mes[6] = 101
|
55
|
+
mes[7] = "0808120000"
|
56
|
+
mes[10] = 100
|
57
|
+
mes[11] = 0
|
58
|
+
mes[12] = "740808120000"
|
59
|
+
mes[14] = "1010"
|
60
|
+
mes[22] = "POSDATACODE"
|
61
|
+
mes[23] = 0
|
62
|
+
mes[24] = 1
|
63
|
+
mes[25] = 90
|
64
|
+
mes[26] = 4444
|
65
|
+
mes[30] = 150
|
66
|
+
mes[32] = 321321
|
67
|
+
mes[35] = ";123123123=123?5"
|
68
|
+
mes[37] = "123 123"
|
69
|
+
mes[38] = "90"
|
70
|
+
mes[39] = 90
|
71
|
+
mes[41] = "TermLoc!"
|
72
|
+
mes[42] = "ID Code!"
|
73
|
+
mes[43] = "Card Acceptor Name Location"
|
74
|
+
mes[49] = "840"
|
75
|
+
mes[51] = 978
|
76
|
+
mes[52] = '\x00\x01\x02\x03'
|
77
|
+
mes[53] = '\x07\x06\x05\x04'
|
78
|
+
mes[54] = "No additional amount"
|
79
|
+
mes[55] = '\x07\x06\x05\x04'
|
80
|
+
mes[56] = 88888888888
|
81
|
+
mes[59] = "I'm you're private data, data for money..."
|
82
|
+
mes[64] = "\xF0\xF0\xF0\xF0"
|
83
|
+
|
84
|
+
expected = <<-END
|
85
|
+
MTI:1814 (Network Management Request Response Issuer Gateway or Acquirer Gateway)
|
86
|
+
|
87
|
+
002 Primary Account Number (PAN) : 12341234
|
88
|
+
003 Processing Code : 1111
|
89
|
+
004 Amount (Transaction) : 100
|
90
|
+
006 Amount, Cardholder Billing : 101
|
91
|
+
007 Date and Time, Transmission : 0808120000
|
92
|
+
010 Conversion Rate, Cardholder Billing : 100
|
93
|
+
011 System Trace Audit Number (STAN) : 0
|
94
|
+
012 Date and Time, Local Transaction : 740808120000
|
95
|
+
014 Date, Expiration : 1010
|
96
|
+
022 POS Data Code : POSDATACODE
|
97
|
+
023 Card Sequence Number : 0
|
98
|
+
024 Function Code : 1
|
99
|
+
025 Message Reason Code : 90
|
100
|
+
026 Card Acceptor Business Code : 4444
|
101
|
+
030 Amounts, Original : 150
|
102
|
+
032 Acquiring Institution Identification Code : 321321
|
103
|
+
035 Track 2 Data : ;123123123=123?5
|
104
|
+
037 Retrieval Reference Number : 123 123
|
105
|
+
038 Approval Code : 90
|
106
|
+
039 Action Code : 90
|
107
|
+
041 Card Acceptor Terminal Identification : TermLoc!
|
108
|
+
042 Card Acceptor Identification Code : ID Code!
|
109
|
+
043 Card Acceptor Name/Location : Card Acceptor Name Location
|
110
|
+
049 Currency Code, Transaction : 840
|
111
|
+
051 Currency Code, Cardholder Billing : 978
|
112
|
+
052 Personal Identification Number (PIN) Data : \\x00\\x01\\x02\\x03
|
113
|
+
053 Security Related Control Information : \\x07\\x06\\x05\\x04
|
114
|
+
054 Amounts, Additional : No additional amount
|
115
|
+
055 Integrated Circuit Card (ICC) System Related Data : \\x07\\x06\\x05\\x04
|
116
|
+
056 Original Data Elements : 88888888888
|
117
|
+
059 Additional Data - Private : I'm you're private data, data for money...
|
118
|
+
064 Message Authentication Code (MAC) Field : \360\360\360\360
|
119
|
+
END
|
120
|
+
assert_equal expected, mes.to_s
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_round_trip
|
124
|
+
mes = BerlinMessage.new
|
125
|
+
mes.mti = "Network Management Request Response Issuer Gateway or Acquirer Gateway"
|
126
|
+
mes[2] = 12341234
|
127
|
+
mes[3] = 1111
|
128
|
+
mes[4] = 100
|
129
|
+
mes[6] = 101
|
130
|
+
mes[7] = "0808120000"
|
131
|
+
mes[10] = 100
|
132
|
+
mes[11] = 0
|
133
|
+
mes[12] = "740808120000"
|
134
|
+
mes[14] = "1010"
|
135
|
+
mes[22] = "POSDATACODE"
|
136
|
+
mes[23] = 0
|
137
|
+
mes[24] = 1
|
138
|
+
mes[25] = 90
|
139
|
+
mes[26] = 4444
|
140
|
+
mes[30] = 150
|
141
|
+
mes[32] = 321321
|
142
|
+
mes[35] = ";123123123=123?5"
|
143
|
+
mes[37] = "123 123"
|
144
|
+
mes[38] = "90"
|
145
|
+
mes[39] = 90
|
146
|
+
mes[41] = "TermLoc!"
|
147
|
+
mes[42] = "ID Code!"
|
148
|
+
mes[43] = "Card Acceptor Name Location"
|
149
|
+
mes[49] = "840"
|
150
|
+
mes[51] = 978
|
151
|
+
mes[52] = "\x00\x01\x02\x03"
|
152
|
+
mes[53] = "\x07\x06\x05\x04"
|
153
|
+
mes[54] = "No additional amount"
|
154
|
+
mes[55] = '\x07\x06\x05\x04'
|
155
|
+
mes[56] = 88888888888
|
156
|
+
mes[59] = "I'm you're private data, data for money..."
|
157
|
+
mes[64] = "\xF0\xF0\xF0\xF0"
|
158
|
+
|
159
|
+
bytes = mes.to_b
|
160
|
+
mes2 = BerlinMessage.parse(mes.to_b)
|
161
|
+
assert_equal(mes.to_b, mes2.to_b)
|
162
|
+
end
|
163
|
+
end
|
data/test/test_codec.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'lib/iso8583'
|
3
|
+
|
4
|
+
include ISO8583
|
5
|
+
|
6
|
+
class FieldTest < Test::Unit::TestCase
|
7
|
+
def test_hhmmssCodec
|
8
|
+
dt = HhmmssCodec.decode "121212"
|
9
|
+
assert_equal DateTime, dt.class
|
10
|
+
assert_equal 12, dt.hour
|
11
|
+
assert_equal 12, dt.min
|
12
|
+
assert_equal 12, dt.sec
|
13
|
+
assert_equal DateTime, dt.class
|
14
|
+
|
15
|
+
assert_raise(ISO8583Exception) {
|
16
|
+
dt = HhmmssCodec.decode "261212"
|
17
|
+
}
|
18
|
+
assert_raise(ISO8583Exception) {
|
19
|
+
dt = HhmmssCodec.encode "121261"
|
20
|
+
}
|
21
|
+
t = Time.new(2002, 10, 31, 2, 2, 2, "+02:00")
|
22
|
+
assert_equal "020202", HhmmssCodec.encode(t)
|
23
|
+
|
24
|
+
end
|
25
|
+
def test_MMDDhhmmssCodec
|
26
|
+
dt = MMDDhhmmssCodec.decode "1212121212"
|
27
|
+
assert_equal DateTime, dt.class
|
28
|
+
assert_equal 12, dt.month
|
29
|
+
assert_equal 12, dt.day
|
30
|
+
assert_equal 12, dt.hour
|
31
|
+
assert_equal 12, dt.min
|
32
|
+
assert_equal 12, dt.sec
|
33
|
+
assert_equal DateTime, dt.class
|
34
|
+
|
35
|
+
assert_raise(ISO8583Exception) {
|
36
|
+
dt = MMDDhhmmssCodec.decode "1312121212"
|
37
|
+
}
|
38
|
+
|
39
|
+
assert_raise(ISO8583Exception) {
|
40
|
+
dt = MMDDhhmmssCodec.encode "1312121212"
|
41
|
+
}
|
42
|
+
|
43
|
+
assert_equal "1212121212", MMDDhhmmssCodec.encode("1212121212")
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_YYMMDDhhmmssCodec
|
47
|
+
dt = YYMMDDhhmmssCodec.decode "081212121212"
|
48
|
+
assert_equal DateTime, dt.class
|
49
|
+
assert_equal 2008, dt.year
|
50
|
+
assert_equal 12, dt.month
|
51
|
+
assert_equal 12, dt.day
|
52
|
+
assert_equal 12, dt.hour
|
53
|
+
assert_equal 12, dt.min
|
54
|
+
assert_equal 12, dt.sec
|
55
|
+
|
56
|
+
assert_raise(ISO8583Exception) {
|
57
|
+
dt = YYMMDDhhmmssCodec.decode "091312121212"
|
58
|
+
}
|
59
|
+
|
60
|
+
assert_raise(ISO8583Exception) {
|
61
|
+
dt = YYMMDDhhmmssCodec.encode "091312121212"
|
62
|
+
}
|
63
|
+
|
64
|
+
assert_equal "091212121212", YYMMDDhhmmssCodec.encode("091212121212")
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_YYMMCodec
|
68
|
+
dt = YYMMCodec.decode "0812"
|
69
|
+
assert_equal DateTime, dt.class
|
70
|
+
assert_equal 2008, dt.year
|
71
|
+
assert_equal 12, dt.month
|
72
|
+
|
73
|
+
assert_raise(ISO8583Exception) {
|
74
|
+
dt = YYMMCodec.decode "0913"
|
75
|
+
}
|
76
|
+
|
77
|
+
assert_raise(ISO8583Exception) {
|
78
|
+
dt = YYMMCodec.encode "0913"
|
79
|
+
}
|
80
|
+
|
81
|
+
assert_equal "0912", YYMMCodec.encode("0912")
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_A_Codec
|
85
|
+
assert_raise(ISO8583Exception) {
|
86
|
+
dt = A_Codec.encode "!!!"
|
87
|
+
}
|
88
|
+
assert_equal "bla", AN_Codec.encode("bla")
|
89
|
+
assert_equal "bla", AN_Codec.decode("bla")
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_AN_Codec
|
93
|
+
assert_raise(ISO8583Exception) {
|
94
|
+
dt = AN_Codec.encode "!!!"
|
95
|
+
}
|
96
|
+
assert_equal "bla", AN_Codec.encode("bla")
|
97
|
+
assert_equal "bla", AN_Codec.decode("bla")
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_Track2_Codec
|
101
|
+
assert_raise(ISO8583Exception) {
|
102
|
+
dt = Track2.encode "!!!"
|
103
|
+
}
|
104
|
+
assert_raise(ISO8583Exception) {
|
105
|
+
dt = Track2.encode ";12312312=123?5"
|
106
|
+
}
|
107
|
+
assert_equal ";123123123=123?5", Track2.encode(";123123123=123?5")
|
108
|
+
assert_equal ";123123123=123?5", Track2.decode(";123123123=123?5")
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_packed_codec
|
112
|
+
assert_equal "\x12", Packed_Number.encode(12)
|
113
|
+
assert_equal "\x12", Packed_Number.encode("12")
|
114
|
+
assert_equal "\x02", Packed_Number.encode("2")
|
115
|
+
assert_equal "\x02", Packed_Number.encode(2)
|
116
|
+
assert_equal "\x02\x55", Packed_Number.encode(0xff)
|
117
|
+
assert_raise(ISO8583Exception) {
|
118
|
+
dt = Packed_Number.encode ";12312312=123?5"
|
119
|
+
}
|
120
|
+
assert_raise(ISO8583Exception) {
|
121
|
+
dt = Packed_Number.encode "F"
|
122
|
+
}
|
123
|
+
end
|
124
|
+
end
|
data/test/test_fields.rb
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'lib/iso8583'
|
3
|
+
|
4
|
+
include ISO8583
|
5
|
+
|
6
|
+
class FieldTest < Test::Unit::TestCase
|
7
|
+
def test_LLL
|
8
|
+
value, rest = LLL.parse "123456"
|
9
|
+
assert_equal 123, value
|
10
|
+
assert_equal "456", rest
|
11
|
+
|
12
|
+
assert_raise(ISO8583ParseException) {
|
13
|
+
l,rest = LLL.parse "12"
|
14
|
+
}
|
15
|
+
|
16
|
+
enc = LLL.encode 123
|
17
|
+
assert_equal "\x31\x32\x33", enc
|
18
|
+
|
19
|
+
enc = LLL.encode "123"
|
20
|
+
assert_equal "\x31\x32\x33", enc
|
21
|
+
|
22
|
+
enc = LLL.encode 12
|
23
|
+
assert_equal "\x30\x31\x32", enc
|
24
|
+
|
25
|
+
#enc = LLL.encode "012"
|
26
|
+
#assert_equal "\x30\x31\x32", enc
|
27
|
+
|
28
|
+
|
29
|
+
assert_raise(ISO8583Exception) {
|
30
|
+
enc = LLL.encode 1234
|
31
|
+
}
|
32
|
+
|
33
|
+
assert_raise(ISO8583Exception) {
|
34
|
+
enc = LLL.encode "1234"
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_LL_BCD
|
39
|
+
value, rest = LL_BCD.parse "\x123456"
|
40
|
+
assert_equal 12, value
|
41
|
+
assert_equal "3456", rest
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_LLVAR_AN
|
45
|
+
value, rest = LLVAR_AN.parse "03123ABC"
|
46
|
+
assert_equal "123", value
|
47
|
+
assert_equal "ABC", rest
|
48
|
+
|
49
|
+
value, rest = LLLVAR_AN.parse "006123ABC"
|
50
|
+
assert_equal "123ABC", value
|
51
|
+
assert_equal "", rest
|
52
|
+
assert_raise(ISO8583ParseException) {
|
53
|
+
l,rest = LLLVAR_AN.parse "12"
|
54
|
+
}
|
55
|
+
assert_raise(ISO8583ParseException) {
|
56
|
+
l,rest = LLVAR_AN.parse "12123"
|
57
|
+
}
|
58
|
+
|
59
|
+
enc = LLVAR_AN.encode "123A"
|
60
|
+
assert_equal "04123A", enc
|
61
|
+
|
62
|
+
enc = LLVAR_AN.encode "123ABC123ABC"
|
63
|
+
assert_equal "12123ABC123ABC", enc
|
64
|
+
|
65
|
+
assert_raise(ISO8583Exception) {
|
66
|
+
enc = LLVAR_AN.encode "1234 ABCD"
|
67
|
+
}
|
68
|
+
|
69
|
+
enc = LLLVAR_AN.encode "123ABC123ABC"
|
70
|
+
assert_equal "012123ABC123ABC", enc
|
71
|
+
|
72
|
+
assert_raise(ISO8583Exception) {
|
73
|
+
enc = LLLVAR_AN.encode "1234 ABCD"
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_LLVAR_N
|
78
|
+
value, rest = LLVAR_N.parse "021234"
|
79
|
+
assert_equal 12, value
|
80
|
+
assert_equal "34", rest
|
81
|
+
|
82
|
+
value, rest = LLLVAR_N.parse "0041234"
|
83
|
+
assert_equal 1234, value
|
84
|
+
assert_equal "", rest
|
85
|
+
assert_raise(ISO8583ParseException) {
|
86
|
+
l,rest = LLLVAR_N.parse "12"
|
87
|
+
}
|
88
|
+
assert_raise(ISO8583ParseException) {
|
89
|
+
l,rest = LLVAR_N.parse "12123"
|
90
|
+
}
|
91
|
+
|
92
|
+
enc = LLVAR_N.encode 1234
|
93
|
+
assert_equal "041234", enc
|
94
|
+
|
95
|
+
enc = LLVAR_N.encode 123412341234
|
96
|
+
assert_equal "12123412341234", enc
|
97
|
+
|
98
|
+
assert_raise(ISO8583Exception) {
|
99
|
+
enc = LLVAR_N.encode "1234ABCD"
|
100
|
+
}
|
101
|
+
|
102
|
+
enc = LLLVAR_N.encode "123412341234"
|
103
|
+
assert_equal "012123412341234", enc
|
104
|
+
|
105
|
+
assert_raise(ISO8583Exception) {
|
106
|
+
enc = LLLVAR_N.encode "1234ABCD"
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_LLVAR_Z
|
111
|
+
value, rest = LLVAR_Z.parse "16;123123123=123?5"+"021234"
|
112
|
+
assert_equal ";123123123=123?5", value
|
113
|
+
assert_equal "021234", rest
|
114
|
+
|
115
|
+
value, rest = LLVAR_Z.parse "16;123123123=123?5"
|
116
|
+
assert_equal ";123123123=123?5", value
|
117
|
+
assert_equal "", rest
|
118
|
+
assert_raise(ISO8583ParseException) {
|
119
|
+
l,rest = LLVAR_Z.parse "12"
|
120
|
+
}
|
121
|
+
assert_raise(ISO8583ParseException) {
|
122
|
+
l,rest = LLVAR_Z.parse "17;123123123=123?5"
|
123
|
+
}
|
124
|
+
|
125
|
+
enc = LLVAR_Z.encode ";123123123=123?5"
|
126
|
+
assert_equal "16;123123123=123?5", enc
|
127
|
+
|
128
|
+
|
129
|
+
assert_raise(ISO8583Exception) {
|
130
|
+
enc = LLVAR_Z.encode "1234ABCD"
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_A
|
135
|
+
fld = A.dup
|
136
|
+
fld.length = 3
|
137
|
+
value, rest = fld.parse "abcd"
|
138
|
+
assert_equal "abc", value
|
139
|
+
assert_equal "d", rest
|
140
|
+
|
141
|
+
assert_raise(ISO8583ParseException) {
|
142
|
+
fld.parse "ab"
|
143
|
+
}
|
144
|
+
|
145
|
+
assert_raise(ISO8583Exception) {
|
146
|
+
fld.encode "abcdef"
|
147
|
+
}
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_AN
|
151
|
+
fld = AN.dup
|
152
|
+
fld.length = 3
|
153
|
+
value, rest = fld.parse "1234"
|
154
|
+
assert_equal "123", value
|
155
|
+
assert_equal "4", rest
|
156
|
+
|
157
|
+
assert_raise(ISO8583ParseException) {
|
158
|
+
fld.parse "12"
|
159
|
+
}
|
160
|
+
|
161
|
+
assert_raise(ISO8583Exception) {
|
162
|
+
fld.encode "888810"
|
163
|
+
}
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_ANP
|
167
|
+
fld = ANP.dup
|
168
|
+
fld.length = 3
|
169
|
+
value, rest = fld.parse "1234"
|
170
|
+
assert_equal "123", value
|
171
|
+
assert_equal "4", rest
|
172
|
+
|
173
|
+
assert_raise(ISO8583ParseException) {
|
174
|
+
fld.parse "12"
|
175
|
+
}
|
176
|
+
|
177
|
+
assert_equal "10 ", fld.encode("10")
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_ANS
|
181
|
+
fld = ANS.dup
|
182
|
+
fld.length = 3
|
183
|
+
value, rest = fld.parse "1234"
|
184
|
+
assert_equal "123", value
|
185
|
+
assert_equal "4", rest
|
186
|
+
|
187
|
+
assert_raise(ISO8583ParseException) {
|
188
|
+
fld.parse "12"
|
189
|
+
}
|
190
|
+
|
191
|
+
assert_equal "10 ", fld.encode("10")
|
192
|
+
assert_equal ["1!", "a"], fld.parse("1! a")
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_B
|
196
|
+
fld = B.dup
|
197
|
+
fld.length = 3
|
198
|
+
value, rest = fld.parse "\000234"
|
199
|
+
assert_equal "\00023", value
|
200
|
+
assert_equal "4", rest
|
201
|
+
|
202
|
+
assert_raise(ISO8583ParseException) {
|
203
|
+
fld.parse "12"
|
204
|
+
}
|
205
|
+
|
206
|
+
assert_equal "10\000", fld.encode("10")
|
207
|
+
assert_equal ["1! ", "a"], fld.parse("1! a")
|
208
|
+
assert_equal ["1!", ""], fld.parse("1!\000")
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_N_BCD
|
212
|
+
fld = N_BCD.dup
|
213
|
+
fld.length=3
|
214
|
+
value, rest = fld.parse "\x01\x23\x45"
|
215
|
+
assert_equal 123, value
|
216
|
+
|
217
|
+
assert_equal "\x01\x23", fld.encode(123)
|
218
|
+
assert_equal "\x01\x23", fld.encode("123")
|
219
|
+
assert_equal "\x01\x23", fld.encode("0123")
|
220
|
+
|
221
|
+
assert_raise(ISO8583Exception) {
|
222
|
+
fld.encode 12345
|
223
|
+
}
|
224
|
+
|
225
|
+
# There's a bug here. A 4 digit value encodes to 2 digits encoded,
|
226
|
+
# which passes the test for length ... This test doesn't pass:
|
227
|
+
|
228
|
+
#asssert_raise (ISO8583Exception) {
|
229
|
+
# fld.encode 1234
|
230
|
+
#}
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_YYMMDDhhmmss
|
234
|
+
fld = YYMMDDhhmmss
|
235
|
+
assert_equal "740808120000", fld.encode("740808120000")
|
236
|
+
end
|
237
|
+
def test_Hhmmss
|
238
|
+
fld = Hhmmss
|
239
|
+
assert_equal "123456", fld.encode("123456")
|
240
|
+
dt, rest = fld.parse("123456")
|
241
|
+
assert_equal 12, dt.hour
|
242
|
+
assert_equal 34, dt.min
|
243
|
+
assert_equal 56, dt.sec
|
244
|
+
|
245
|
+
end
|
246
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'lib/iso8583'
|
2
|
+
require 'lib/iso8583/berlin'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
include ISO8583
|
6
|
+
|
7
|
+
class SeperateTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
def test_test_separate_messages
|
12
|
+
mes1=BerlinMessage.new
|
13
|
+
mes1[2]="1234567890"
|
14
|
+
assert_equal(mes1[2], "1234567890")
|
15
|
+
mes2=BerlinMessage.new
|
16
|
+
mes2[2]="0987654321"
|
17
|
+
assert_equal(mes2[2], "0987654321")
|
18
|
+
# test that the original value of field 2 in mes1 hasn't changed
|
19
|
+
assert_equal(mes1[2], "1234567890") # this will fail, as the field 2 in mes1 has changed value too!!
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/test/test_util.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'lib/iso8583'
|
2
|
+
require 'test/unit'
|
3
|
+
|
4
|
+
include ISO8583
|
5
|
+
|
6
|
+
class UtilTest < Test::Unit::TestCase
|
7
|
+
def test_hex2b
|
8
|
+
assert_equal "\xab\xcd\x12", hex2b("abcd12")
|
9
|
+
assert_equal "\xab\xcd\x12", hex2b("a b c d 1 2")
|
10
|
+
assert_equal "\xab\xcd\x12", hex2b("ABCD12")
|
11
|
+
assert_raise(ISO8583Exception){
|
12
|
+
# non hex
|
13
|
+
hex2b("ABCDEFGH")
|
14
|
+
}
|
15
|
+
assert_raise(ISO8583Exception){
|
16
|
+
# odd num digits
|
17
|
+
hex2b("ABCDEF0")
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_b2hex
|
22
|
+
assert_equal "abcd12", b2hex("\xab\xcd\x12")
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_ebcdic2ascii
|
26
|
+
assert_equal "0123456789", ebcdic2ascii("\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_ascii2ebcdic
|
30
|
+
assert_equal "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9", ascii2ebcdic("0123456789")
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: npn47_iso8583
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5.a
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tim Becker
|
8
|
+
- Slava Kravchenko
|
9
|
+
- Neeraj PN
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-06-16 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description: Ruby implementation of ISO 8583 financial messaging
|
16
|
+
email:
|
17
|
+
- tim.becker@kuriositaet.de
|
18
|
+
- cordawyn@gmail.com
|
19
|
+
- neerajpn47@gmail.com
|
20
|
+
executables: []
|
21
|
+
extensions: []
|
22
|
+
extra_rdoc_files: []
|
23
|
+
files:
|
24
|
+
- lib/8583.rb
|
25
|
+
- lib/iso8583.rb
|
26
|
+
- lib/iso8583/berlin.rb
|
27
|
+
- lib/iso8583/bitmap.rb
|
28
|
+
- lib/iso8583/codec.rb
|
29
|
+
- lib/iso8583/exception.rb
|
30
|
+
- lib/iso8583/field.rb
|
31
|
+
- lib/iso8583/fields.rb
|
32
|
+
- lib/iso8583/message.rb
|
33
|
+
- lib/iso8583/util.rb
|
34
|
+
- lib/iso8583/version.rb
|
35
|
+
- test/BitmapTests.rb
|
36
|
+
- test/message_test.rb
|
37
|
+
- test/test_codec.rb
|
38
|
+
- test/test_fields.rb
|
39
|
+
- test/test_seperate_msg.rb
|
40
|
+
- test/test_util.rb
|
41
|
+
homepage: http://github.com/neerajpn47/8583/
|
42
|
+
licenses: []
|
43
|
+
metadata: {}
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.3.6
|
58
|
+
requirements:
|
59
|
+
- none
|
60
|
+
rubyforge_project: iso8583
|
61
|
+
rubygems_version: 2.2.2
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: Ruby implementation of ISO 8583 financial messaging
|
65
|
+
test_files: []
|
66
|
+
has_rdoc: true
|