xmlconv 1.0.0

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.
Files changed (94) hide show
  1. data/.gemtest +0 -0
  2. data/History.txt +6 -0
  3. data/LICENSE +339 -0
  4. data/README.txt +29 -0
  5. data/Rakefile +37 -0
  6. data/bin/admin +68 -0
  7. data/bin/xmlconvd +38 -0
  8. data/data/grammar/i2.grammar +73 -0
  9. data/lib/xmlconv/config.rb +61 -0
  10. data/lib/xmlconv/custom/lookandfeel.rb +50 -0
  11. data/lib/xmlconv/i2/address.rb +35 -0
  12. data/lib/xmlconv/i2/date.rb +41 -0
  13. data/lib/xmlconv/i2/document.rb +27 -0
  14. data/lib/xmlconv/i2/header.rb +32 -0
  15. data/lib/xmlconv/i2/order.rb +61 -0
  16. data/lib/xmlconv/i2/parser.rb +23 -0
  17. data/lib/xmlconv/i2/position.rb +45 -0
  18. data/lib/xmlconv/i2/record.rb +11 -0
  19. data/lib/xmlconv/model/address.rb +20 -0
  20. data/lib/xmlconv/model/agreement.rb +10 -0
  21. data/lib/xmlconv/model/bdd.rb +37 -0
  22. data/lib/xmlconv/model/bsr.rb +16 -0
  23. data/lib/xmlconv/model/delivery.rb +15 -0
  24. data/lib/xmlconv/model/delivery_item.rb +24 -0
  25. data/lib/xmlconv/model/document.rb +25 -0
  26. data/lib/xmlconv/model/freetext_container.rb +26 -0
  27. data/lib/xmlconv/model/id_container.rb +22 -0
  28. data/lib/xmlconv/model/invoice.rb +18 -0
  29. data/lib/xmlconv/model/invoice_item.rb +11 -0
  30. data/lib/xmlconv/model/item.rb +19 -0
  31. data/lib/xmlconv/model/item_container.rb +15 -0
  32. data/lib/xmlconv/model/name.rb +27 -0
  33. data/lib/xmlconv/model/part_info.rb +10 -0
  34. data/lib/xmlconv/model/part_info_container.rb +15 -0
  35. data/lib/xmlconv/model/party.rb +20 -0
  36. data/lib/xmlconv/model/party_container.rb +20 -0
  37. data/lib/xmlconv/model/price.rb +10 -0
  38. data/lib/xmlconv/model/price_container.rb +18 -0
  39. data/lib/xmlconv/model/transaction.rb +28 -0
  40. data/lib/xmlconv/state/global.rb +28 -0
  41. data/lib/xmlconv/state/global_predefine.rb +11 -0
  42. data/lib/xmlconv/state/login.rb +39 -0
  43. data/lib/xmlconv/state/transaction.rb +13 -0
  44. data/lib/xmlconv/state/transactions.rb +130 -0
  45. data/lib/xmlconv/util/application.rb +142 -0
  46. data/lib/xmlconv/util/autoload.rb +35 -0
  47. data/lib/xmlconv/util/destination.rb +249 -0
  48. data/lib/xmlconv/util/invoicer.rb +71 -0
  49. data/lib/xmlconv/util/known_user.rb +16 -0
  50. data/lib/xmlconv/util/mail.rb +31 -0
  51. data/lib/xmlconv/util/polling_manager.rb +198 -0
  52. data/lib/xmlconv/util/session.rb +23 -0
  53. data/lib/xmlconv/util/transaction.rb +133 -0
  54. data/lib/xmlconv/util/validator.rb +20 -0
  55. data/lib/xmlconv/view/foot.rb +27 -0
  56. data/lib/xmlconv/view/head.rb +13 -0
  57. data/lib/xmlconv/view/login.rb +36 -0
  58. data/lib/xmlconv/view/navigation.rb +30 -0
  59. data/lib/xmlconv/view/navigationlink.rb +21 -0
  60. data/lib/xmlconv/view/pager.rb +73 -0
  61. data/lib/xmlconv/view/preformatted.rb +54 -0
  62. data/lib/xmlconv/view/template.rb +17 -0
  63. data/lib/xmlconv/view/transaction.rb +42 -0
  64. data/lib/xmlconv/view/transactions.rb +90 -0
  65. data/lib/xmlconv.rb +3 -0
  66. data/test/config.rb +12 -0
  67. data/test/mock.rb +149 -0
  68. data/test/suite.rb +16 -0
  69. data/test/test_i2/address.rb +88 -0
  70. data/test/test_i2/date.rb +50 -0
  71. data/test/test_i2/document.rb +62 -0
  72. data/test/test_i2/header.rb +39 -0
  73. data/test/test_i2/order.rb +94 -0
  74. data/test/test_i2/parser.rb +312 -0
  75. data/test/test_i2/position.rb +65 -0
  76. data/test/test_model/address.rb +35 -0
  77. data/test/test_model/agreement.rb +22 -0
  78. data/test/test_model/bdd.rb +55 -0
  79. data/test/test_model/bsr.rb +38 -0
  80. data/test/test_model/delivery.rb +79 -0
  81. data/test/test_model/delivery_item.rb +52 -0
  82. data/test/test_model/freetext_container.rb +45 -0
  83. data/test/test_model/invoice.rb +65 -0
  84. data/test/test_model/invoice_item.rb +41 -0
  85. data/test/test_model/name.rb +57 -0
  86. data/test/test_model/part_info.rb +24 -0
  87. data/test/test_model/party.rb +96 -0
  88. data/test/test_model/price.rb +24 -0
  89. data/test/test_util/application.rb +168 -0
  90. data/test/test_util/destination.rb +415 -0
  91. data/test/test_util/invoicer.rb +42 -0
  92. data/test/test_util/polling_manager.rb +299 -0
  93. data/test/test_util/transaction.rb +130 -0
  94. metadata +178 -0
data/test/mock.rb ADDED
@@ -0,0 +1,149 @@
1
+ # Ruby/Mock version 1.0
2
+ #
3
+ # A class for conveniently building mock objects in RUnit test cases.
4
+ # Copyright (c) 2001 Nat Pryce, all rights reserved
5
+ #
6
+ # This program 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 2 of the License.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program; if not, write to the Free Software
17
+ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
+
19
+ require 'runit/error'
20
+
21
+
22
+ class Mock
23
+ # Creates a new, named mock object. The name is reported in exceptions
24
+ # thrown by the mock object when method invocations are incorrect.
25
+ #
26
+ def initialize( mock_name = self.to_s )
27
+ @mock_calls = []
28
+ @next_call = 0
29
+ @name = mock_name
30
+ end
31
+
32
+ # Mock the next method call to be made to this mock object.
33
+ #
34
+ # A mock method is defined by the method name (a symbol) and a block
35
+ # that defines the arity of the method and the mocked behaviour for
36
+ # this call. The mocked behaviour should assert preconditions and
37
+ # return a value. Mocked behaviour should rarely be any more complex
38
+ # than that. If it is, that's probably an indication that the tests
39
+ # need some restructuring or that the tested code needs refactoring.
40
+ #
41
+ # If no block is given and preconditions have been defined for the named
42
+ # method, a block is created for the mocked methodthat has the same arity
43
+ # as the precondition and returns self.
44
+ #
45
+ def __next( name, &test )
46
+ if test == nil
47
+ if respond_to?( Mock.__pre(name) )
48
+ test = proc { |*args| self }
49
+ else
50
+ raise "no block given for mocked method #{name}"
51
+ end
52
+ end
53
+ @mock_calls.push( [name,test] )
54
+ end
55
+
56
+ # Call this at the end of a test to ensure that all scheduled calls
57
+ # have been made to the mock
58
+ #
59
+ def __verify
60
+ if @next_call != @mock_calls.length
61
+ raise RUNIT::AssertionFailedError,
62
+ "not all expected method calls were made to #{@name}",
63
+ caller
64
+ end
65
+ end
66
+
67
+
68
+ private
69
+ # Dispatches aribtrary method calls to the next mocked behaviour
70
+ #
71
+ def method_missing( name, *args, &block )
72
+ __mock_call( name, args, (block_given? ? block : nil) )
73
+ end
74
+
75
+ # Implements a method call using the next mocked behaviour and asserts
76
+ # that the expected method is called with the expected number of
77
+ # arguments.
78
+ #
79
+ def __mock_call( name, args, block )
80
+ if @next_call >= @mock_calls.length
81
+ raise RUNIT::AssertionFailedError,
82
+ "unexpected call to #{name} method of #{@name}",
83
+ caller(2)
84
+ end
85
+
86
+ expected_name,body = @mock_calls[@next_call]
87
+ @next_call += 1
88
+
89
+ if name != expected_name
90
+ raise RUNIT::AssertionFailedError,
91
+ "wrong method called on #{@name}; " +
92
+ "expected #{expected_name}, was #{name}",
93
+ caller(2)
94
+ end
95
+
96
+ args_length = args.length + (block ? 1 : 0)
97
+
98
+ if body.arity < 0
99
+ if (body.arity+1).abs > args_length
100
+ raise RUNIT::AssertionFailedError,
101
+ "too few arguments to #{name} method of #{@name}; " +
102
+ "require #{(body.arity+1).abs}, got #{args.length}",
103
+ caller(2)
104
+ end
105
+ else
106
+ if body.arity != args_length
107
+ raise RUNIT::AssertionFailedError,
108
+ "wrong number of arguments to " +
109
+ "#{name} method of #{@name}; " +
110
+ "require #{body.arity}, got #{args.length}",
111
+ caller(2)
112
+ end
113
+ end
114
+
115
+ if respond_to? Mock.__pre(name)
116
+ if block
117
+ precondition_ok = __send__( Mock.__pre(name), *args, &block )
118
+ else
119
+ precondition_ok = __send__( Mock.__pre(name), *args )
120
+ end
121
+
122
+ if not precondition_ok
123
+ raise RUNIT::AssertionFailedError,
124
+ "precondition of #{name} method violated",
125
+ caller(2)
126
+ end
127
+ end
128
+
129
+ if block
130
+ instance_eval { body.call( block, *args ) }
131
+ else
132
+ instance_eval { body.call( *args ) }
133
+ end
134
+ end
135
+
136
+ # The name of a precondition for a method
137
+ def Mock.__pre( method )
138
+ "__pre_#{method.to_i}".intern
139
+ end
140
+
141
+
142
+ def Mock.method_added( name )
143
+ unless(/^__pre_/.match(name.to_s))
144
+ pre = self.__pre(name)
145
+ alias_method( pre, name )
146
+ undef_method(name)
147
+ end
148
+ end
149
+ end
data/test/suite.rb ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # TestSuite -- xmlconv2 -- 01.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(File.expand_path(__FILE__))
5
+
6
+ current_dir = File.dirname(__FILE__)
7
+ Dir.foreach(current_dir) { |dirname|
8
+ dirpath = File.expand_path(dirname, current_dir)
9
+ if(/^test_/o.match(dirname) && (File.ftype(dirpath) == 'directory'))
10
+ Dir.foreach(dirpath) { |filename|
11
+ if(/\.rb$/o.match(filename))
12
+ require "#{dirname}/#{filename}"
13
+ end
14
+ }
15
+ end
16
+ }
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestAddress -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'xmlconv/i2/address'
9
+
10
+ module XmlConv
11
+ module I2
12
+ class TestAddress < Test::Unit::TestCase
13
+ def setup
14
+ @address = I2::Address.new
15
+ end
16
+ def test_attr_accessors
17
+ assert_respond_to(@address, :code)
18
+ assert_respond_to(@address, :code=)
19
+ assert_respond_to(@address, :party_id)
20
+ assert_respond_to(@address, :party_id=)
21
+ assert_respond_to(@address, :name1)
22
+ assert_respond_to(@address, :name1=)
23
+ assert_respond_to(@address, :name2)
24
+ assert_respond_to(@address, :name2=)
25
+ assert_respond_to(@address, :street1)
26
+ assert_respond_to(@address, :street1=)
27
+ assert_respond_to(@address, :street2)
28
+ assert_respond_to(@address, :street2=)
29
+ assert_respond_to(@address, :city)
30
+ assert_respond_to(@address, :city=)
31
+ assert_respond_to(@address, :zip_code)
32
+ assert_respond_to(@address, :zip_code=)
33
+ end
34
+ def test_to_s1
35
+ @address.code = :delivery
36
+ @address.name1 = 'Name1'
37
+ @address.name2 = 'Name2'
38
+ @address.street1 = 'Street1'
39
+ @address.street2 = 'Street2'
40
+ @address.city = 'City'
41
+ @address.zip_code = 'ZipCode'
42
+ expected = <<-EOS
43
+ 201:DP
44
+ 220:Name1
45
+ 221:Name2
46
+ 222:Street1
47
+ 223:City
48
+ 225:ZipCode
49
+ 226:Street2
50
+ EOS
51
+ assert_equal(expected, @address.to_s)
52
+ end
53
+ def test_to_s2
54
+ @address.party_id = 'BuyerId'
55
+ @address.name1 = 'Company Name'
56
+ @address.name2 = 'Employee Name'
57
+ expected = <<-EOS
58
+ 201:BY
59
+ 202:BuyerId
60
+ 220:Company Name
61
+ 221:Employee Name
62
+ EOS
63
+ assert_equal(expected, @address.to_s)
64
+ end
65
+ def test_to_s3
66
+ @address.code = :employee
67
+ @address.party_id = 'Delivery Code'
68
+ @address.name1 = 'Name1'
69
+ @address.name2 = 'Name2'
70
+ @address.street1 = 'Street1'
71
+ @address.street2 = 'Street2'
72
+ @address.city = 'City'
73
+ @address.zip_code = 'ZipCode'
74
+ expected = <<-EOS
75
+ 201:EP
76
+ 202:Delivery Code
77
+ 220:Name1
78
+ 221:Name2
79
+ 222:Street1
80
+ 223:City
81
+ 225:ZipCode
82
+ 226:Street2
83
+ EOS
84
+ assert_equal(expected, @address.to_s)
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestDate -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'xmlconv/i2/date'
9
+
10
+ module XmlConv
11
+ module I2
12
+ class TestDate < Test::Unit::TestCase
13
+ def test_from_date
14
+ a_date = Date.new(1975, 8, 21)
15
+ date = I2::Date.from_date(a_date)
16
+ assert_equal(a_date, date)
17
+ end
18
+ def test_to_s__order_order
19
+ date = I2::Date.new(1975, 8, 21)
20
+ date.level = :order
21
+ date.code = :order
22
+ expected = <<-EOS
23
+ 300:4
24
+ 301:19750821
25
+ EOS
26
+ assert_equal(expected, date.to_s)
27
+ end
28
+ def test_to_s__position_delivery
29
+ date = I2::Date.new(1975, 8, 21)
30
+ date.level = :position
31
+ date.code = :delivery
32
+ expected = <<-EOS
33
+ 540:2
34
+ 541:19750821
35
+ EOS
36
+ assert_equal(expected, date.to_s)
37
+ end
38
+ def test_to_s__position_delivery
39
+ date = I2::Date.new(1975, 8, 21)
40
+ date.level = :order
41
+ date.code = :delivery
42
+ expected = <<-EOS
43
+ 300:2
44
+ 301:19750821
45
+ EOS
46
+ assert_equal(expected, date.to_s)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestDocument -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'xmlconv/i2/document'
9
+ require 'mock'
10
+
11
+ module XmlConv
12
+ module I2
13
+ class TestDocument < Test::Unit::TestCase
14
+ class ToSMock < Mock
15
+ def to_s
16
+ true
17
+ end
18
+ end
19
+ def setup
20
+ @document = I2::Document.new
21
+ end
22
+ def test_attr_accessors
23
+ assert_respond_to(@document, :header)
24
+ assert_respond_to(@document, :header=)
25
+ end
26
+ def test_add_order
27
+ assert_equal([], @document.orders)
28
+ order = Mock.new
29
+ @document.add_order(order)
30
+ assert_equal([order], @document.orders)
31
+ order.__verify
32
+ end
33
+ def test_to_s
34
+ header = ToSMock.new('Header')
35
+ @document.header = header
36
+ header.__next(:to_s) { "000:A Header\n" }
37
+ order1 = ToSMock.new('Order1')
38
+ @document.add_order(order1)
39
+ order1.__next(:to_s) { "100:An Order\n" }
40
+ order2 = ToSMock.new('Order2')
41
+ @document.add_order(order2)
42
+ order2.__next(:to_s) { "100:Another Order\n" }
43
+ expected = <<-EOS
44
+ 000:A Header
45
+ 100:An Order
46
+ 100:Another Order
47
+ EOS
48
+ assert_equal(expected, @document.to_s)
49
+ header.__verify
50
+ order1.__verify
51
+ order2.__verify
52
+ end
53
+ def test_filename
54
+ header = Mock.new
55
+ header.__next(:filename) { 'result.dat' }
56
+ @document.header = header
57
+ assert_equal('result.dat', @document.filename)
58
+ header.__verify
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestHeader -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'xmlconv/i2/header'
9
+
10
+ module XmlConv
11
+ module I2
12
+ class TestHeader < Test::Unit::TestCase
13
+ def setup
14
+ @header = Header.new
15
+ end
16
+ def test_attr_accessors
17
+ assert_respond_to(@header, :recipient_id)
18
+ assert_respond_to(@header, :recipient_id=)
19
+ assert_respond_to(@header, :filename)
20
+ assert_respond_to(@header, :filename=)
21
+ end
22
+ def test_to_s
23
+ @header.recipient_id = 'Recipient'
24
+ @header.filename = 'filename.dat'
25
+ expected = <<-EOS
26
+ 001:Recipient
27
+ 002:ORDERX
28
+ 003:220
29
+ 010:filename.dat
30
+ EOS
31
+ assert_equal(expected, @header.to_s)
32
+ end
33
+ def test_filename
34
+ expected = Time.now.strftime("#{@header.recipient_id}_%Y%m%d%H%M%S")
35
+ assert_match(/#{expected}\d{3}.dat/, @header.filename)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env ruby
2
+ # I2::TestOrder -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
3
+
4
+ $: << File.dirname(__FILE__)
5
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
6
+
7
+ require 'test/unit'
8
+ require 'xmlconv/i2/order'
9
+ require 'mock'
10
+
11
+ module XmlConv
12
+ module I2
13
+ class TestOrder < Test::Unit::TestCase
14
+ class ToSMock < Mock
15
+ def to_s
16
+ true
17
+ end
18
+ end
19
+ def setup
20
+ @order = Order.new
21
+ end
22
+ def test_attr_accessors
23
+ assert_respond_to(@order, :sender_id)
24
+ assert_respond_to(@order, :sender_id=)
25
+ assert_respond_to(@order, :delivery_id)
26
+ assert_respond_to(@order, :delivery_id=)
27
+ end
28
+ def test_attr_readers
29
+ assert_respond_to(@order, :addresses)
30
+ end
31
+ def test_add_address
32
+ assert_equal([], @order.addresses)
33
+ address = Mock.new
34
+ @order.add_address(address)
35
+ assert_equal([address], @order.addresses)
36
+ address.__verify
37
+ end
38
+ def test_add_date
39
+ assert_equal([], @order.dates)
40
+ date = Mock.new
41
+ @order.add_date(date)
42
+ assert_equal([date], @order.dates)
43
+ date.__verify
44
+ end
45
+ def test_add_position
46
+ assert_equal([], @order.positions)
47
+ position = Mock.new
48
+ @order.add_position(position)
49
+ assert_equal([position], @order.positions)
50
+ position.__verify
51
+ end
52
+ def test_to_s
53
+ @order.sender_id = 'Sender'
54
+ @order.delivery_id = 'DeliveryId'
55
+ address1 = ToSMock.new('Address1')
56
+ @order.add_address(address1)
57
+ address1.__next(:to_s) { "200:An Address\n" }
58
+ address2 = ToSMock.new('Address2')
59
+ @order.add_address(address2)
60
+ address2.__next(:to_s) { "200:Another Address\n" }
61
+ date1 = ToSMock.new('Date1')
62
+ @order.add_date(date1)
63
+ date1.__next(:to_s) { "300:A Date\n" }
64
+ date2 = ToSMock.new('Date2')
65
+ @order.add_date(date2)
66
+ date2.__next(:to_s) { "300:Another Date\n" }
67
+ pos1 = ToSMock.new('Position1')
68
+ @order.add_position(pos1)
69
+ pos1.__next(:to_s) { "500:A Position\n" }
70
+ pos2 = ToSMock.new('Position2')
71
+ @order.add_position(pos2)
72
+ pos2.__next(:to_s) { "500:Another Position\n" }
73
+ expected = <<-EOS
74
+ 100:Sender
75
+ 101:DeliveryId
76
+ 200:An Address
77
+ 200:Another Address
78
+ 237:61
79
+ 300:A Date
80
+ 300:Another Date
81
+ 500:A Position
82
+ 500:Another Position
83
+ EOS
84
+ assert_equal(expected, @order.to_s)
85
+ address1.__verify
86
+ address2.__verify
87
+ date1.__verify
88
+ date2.__verify
89
+ pos1.__verify
90
+ pos2.__verify
91
+ end
92
+ end
93
+ end
94
+ end