testdata 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4976cedc862558c2920f3c5a56126ba955ffd558
4
- data.tar.gz: 82bba8205b37746020a0caed150a2b3ea9ea4088
3
+ metadata.gz: 42993343878323c49d342b13654f83ac569942ac
4
+ data.tar.gz: 9a381a6b441f8e1abd4f78401f0d08fa1ebea524
5
5
  SHA512:
6
- metadata.gz: b6ef582472a2ccdb68d16529947a25cf683f2acb0665da06d11cd6ba430501231a47d6caca0b2914fc989f0c769beb95b2b06e29a6c4dd5087ecc5a366d0963c
7
- data.tar.gz: 56223c7eeabb76f4b34941900a3c48d1e2843eb5945c9c601acc10b5ffa84e706c0b60f1fac0386bc0d795ef9623001c798cd69e713a9e1c2e24b819a6a27036
6
+ metadata.gz: d82e33c38e86cae40b21dd3484586f99b5f9f06fa67e29c5308ba1b101072c3c16cfe429d5e22103e324dcedbb5f01d39de4432f038d728cae9d04df5f4757d9
7
+ data.tar.gz: e46240242b55a6cf686f2b4711aff34510c9b94709cb9bb1076dc6f58ffc3dd9be5f281efe3e161261f1b50202391fbbc6336c8f4df384ccc1b774441ed25e8c
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/testdata.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  # file: testdata.rb
4
4
 
5
- require 'rexml/document'
6
5
  require 'app-routes'
7
6
  require 'testdata_text'
8
7
  require 'diffy'
@@ -11,191 +10,234 @@ require 'diffy'
11
10
  class TestdataException < Exception
12
11
  end
13
12
 
14
- class Testdata
15
- include REXML
16
- include AppRoutes
13
+ module Testdata
14
+
15
+ class Base
16
+
17
+ include AppRoutes
18
+
19
+ attr_accessor :debug
20
+
21
+ def initialize(s, options={})
22
+
23
+ super()
24
+
25
+ @params = {}
26
+
27
+ @success = [] # used by summary
28
+ @debug = false
29
+
30
+ # open the testdata document
31
+ procs = {
32
+ String: proc {|x|
33
+
34
+ if x.strip[/^</] then
35
+ x
36
+ elsif x[/https?:\/\//] then
37
+ read_url x
38
+ else
39
+ read_file x
40
+ end
41
+ },
42
+ Polyrex: proc {|x| x.to_xml}
43
+ }
44
+
45
+ buffer = procs[s.class.to_s.to_sym].call(s)
46
+ @doc = Rexle.new(buffer)
47
+
48
+ o = {log: false}.merge(options)
49
+
50
+ @log = o[:log] == true ? Rexle.new(tests) : nil
51
+ end
17
52
 
18
- attr_accessor :debug
53
+ def run(x=nil, debug2=nil)
54
+ @debug2 = debug2 ? true : false
55
+ @success = []
56
+ procs = {NilClass: :test_all, Range: :test_all, String: :test_id, Fixnum: :test_id}
19
57
 
20
- def initialize(s, options={})
58
+ method(procs[x.class.to_s.to_sym]).call(x)
59
+ summary()
60
+ end
21
61
 
22
- super()
23
-
24
- @params = {}
25
- #routes()
26
-
27
- @success = [] # used by summary
28
- @debug = false
29
-
30
- # open the testdata document
31
- procs = {
32
- String: proc {|x|
33
-
34
- if x.strip[/^</] then
35
- x
36
- elsif x[/https?:\/\//] then
37
- read_url x
38
- else
39
- read_file x
40
- end
41
- },
42
- Polyrex: proc {|x| x.to_xml}
43
- }
44
-
45
- buffer = procs[s.class.to_s.to_sym].call(s)
62
+ private
63
+
64
+ def testdata_values(id)
46
65
 
47
- @doc = Document.new(buffer)
66
+
48
67
 
49
- o = {log: false}.merge(options)
50
- @log = o[:log] == true ? Document.new(tests) : nil
51
- end
68
+ node = @doc.root.element "records/test[summary/path='#{id}']"
52
69
 
53
- def run(x=nil, debug2=nil)
54
- @debug2 = debug2 ? true : false
55
- @success = []
56
- procs = {NilClass: :test_all, Range: :test_all, String: :test_id, Fixnum: :test_id}
70
+ raise TestdataException, "Path error: node title not found" unless node
57
71
 
58
- method(procs[x.class.to_s.to_sym]).call(x)
59
- summary()
60
- end
61
-
62
- private
63
-
64
- def testdata_values(id)
72
+ path_no = node.text('summary/path')
73
+ xpath = "records/input/summary/*"
74
+ input_nodes = node.xpath(xpath) #[1..-1]
75
+ input_values = input_nodes.map{|x| x.texts.map(&:unescape).join.strip} + []
65
76
 
66
- stringify = Proc.new do |x|
67
- r = x.text.to_s.gsub(/^[\n\s]+/,'').length > 0 ? x.text : x.cdatas.join.strip
68
- #REXML::Text::unnormalize(r)
69
- r
70
- end
77
+ input_names = input_nodes.map(&:name)
78
+ raise TestdataException, 'inputs not found' if input_values.empty? \
79
+ or input_names.empty?
71
80
 
72
- node = XPath.first(@doc.root, "records/test[summary/path='#{id}']")
73
- raise TestdataException, "Path error: node title not found" unless node
81
+ summary = node.element 'summary'
82
+ type, desc = summary.text('type'), summary.text('description')
74
83
 
75
- path_no = node.text('summary/path').to_s
84
+ xpath = "records/output/summary/*"
85
+ output_nodes = node.xpath(xpath) #[1..-1]
86
+ output_values = input_nodes.map{|x| x.texts.map(&:unescape).join.strip}
76
87
 
77
- xpath = "records/input/summary/*"
78
- input_nodes = XPath.match(node, xpath) #[1..-1]
88
+ [path_no, input_values, input_names, type, output_values, desc]
79
89
 
80
- input_values = input_nodes.map(&stringify) + []
90
+ end
81
91
 
82
- input_names = input_nodes.map(&:name)
83
- raise TestdataException, 'inputs not found' if input_values.empty? \
84
- or input_names.empty?
85
-
86
- summary = XPath.first node, 'summary'
87
- type, desc = summary.text('type'), summary.text('description')
92
+ def test_all(x)
93
+ x ||=(0..-1)
88
94
 
89
- xpath = "records/output/summary/*"
90
- raw_output = XPath.match(node, xpath)
91
- output_values = raw_output.length > 0 ? raw_output.map(&stringify) : []
95
+ break_on_fail = @doc.root.element('summary/break_on_fail/text()') == 'true'
92
96
 
93
- [path_no, input_values, input_names, type, output_values, desc]
97
+ @doc.root.xpath("records/test/summary/path/text()")[x].each do |id|
94
98
 
95
- end
99
+ result = test_id(id)
100
+ break if result == false and break_on_fail
101
+ end
96
102
 
103
+ end
97
104
 
105
+ def test_id(id='')
98
106
 
99
- def test_all(x)
100
- x ||=(0..-1)
101
107
 
102
- break_on_fail = XPath.first(@doc.root,
103
- 'summary/break_on_fail/text()') == 'true'
108
+ path_no, inputs, input_names, type, expected, @desc =
109
+ testdata_values(id.to_s)
110
+ @inputs = inputs
111
+ tests() # load the routes
104
112
 
105
- XPath.match(@doc.root, "records/test/summary/path/text()")[x].each do |id|
106
- result = test_id(id)
107
- break if result == false and break_on_fail
108
- end
109
- end
113
+ raw_actual = run_route type
114
+ puts "warning: no test route found for " + type unless raw_actual
110
115
 
111
- def test_id(id='')
116
+ result = nil
117
+ @success << [nil, path_no.to_i]
112
118
 
113
- path_no, inputs, input_names, type, expected, @desc =
114
- testdata_values(id.to_s)
115
- @inputs = inputs
116
- tests() # load the routes
119
+ begin
117
120
 
118
- raw_actual = run_route type
119
- puts "warning: no test route found for " + type unless raw_actual
121
+ if raw_actual then
120
122
 
121
- result = nil
122
- @success << [nil, path_no.to_i]
123
+ a = raw_actual.is_a?(String) ? [raw_actual].flatten.map(&:strip) : raw_actual
124
+ b = expected.map(&:strip)
123
125
 
124
- begin
126
+ if @debug == true or @debug2 == true then
127
+
128
+ inputs = input_names.zip(inputs).map{|x| ' ' + x.join(": ")}\
129
+ .join("\n")
125
130
 
126
- if raw_actual then
131
+ puts "\ninputs: \n" + inputs
132
+ puts "\ntype or description:\n %s: %s" % [type, @desc]
133
+ puts "\nexpected : \n " + b.inspect
134
+ puts "\nactual : \n " + a.inspect + "\n"
135
+ end
127
136
 
128
- a = raw_actual.is_a?(String) ? [raw_actual].flatten.map(&:strip) : raw_actual
129
- b = expected.map(&:strip)
130
-
131
- if @debug == true or @debug2 == true then
137
+ result = a == b
132
138
 
133
- inputs = input_names.zip(inputs).map{|x| ' ' + x.join(": ")}\
134
- .join("\n")
139
+ if (@debug == true or @debug2 == true) and result == false then
135
140
 
136
- puts "\ninputs: \n" + inputs
137
- puts "\ntype or description:\n %s: %s" % [type, @desc]
138
- puts "\nexpected : \n " + b.inspect
139
- puts "\nactual : \n " + a.inspect + "\n"
141
+ # diff the expected and actual valuess
142
+ puts Diffy::Diff.new(a.first, b.first)
143
+ end
144
+ else
145
+ result = [raw_actual].compact == expected
140
146
  end
141
147
 
142
- result = a == b
143
-
144
- if (@debug == true or @debug2 == true) and result == false then
145
- # diff the expected and actual valuess
146
- puts Diffy::Diff.new(a.first, b.first)
147
- end
148
- else
149
- result = [raw_actual].compact == expected
148
+ rescue Exception => e
149
+ err_label = e.message + " :: \n" + e.backtrace.join("\n")
150
+ raise TestdataException, err_label
151
+ result = false
152
+ ensure
153
+ @success[-1][0] = result
154
+ result
150
155
  end
156
+ end
151
157
 
152
- rescue Exception => e
153
- err_label = e.message + " :: \n" + e.backtrace.join("\n")
154
- raise TestdataException, err_label
155
- result = false
156
- ensure
157
- @success[-1][0] = result
158
- result
158
+ def tests(*args)
159
+ # override this method in the child class
159
160
  end
160
- end
161
161
 
162
- def tests(*args)
163
- # override this method in the child class
164
- end
162
+ def read_file(s)
163
+ buffer = File.open(s, 'r').read
164
+ ext = url[/\.(\w+)$/,1]
165
+ method(('read_' + ext).to_sym).call(buffer)
166
+ end
167
+
168
+ def read_url(url)
169
+ buffer = open(url, 'UserAgent' => 'Testdata').read
170
+ ext = url[/.*\/[^\.]+\.(\w+)/,1]
171
+ method(('read_' + ext).to_sym).call(buffer)
172
+ end
165
173
 
166
- def read_file(s)
167
- buffer = File.open(s, 'r').read
168
- ext = url[/\.(\w+)$/,1]
169
- method(('read_' + ext).to_sym).call(buffer)
170
- end
174
+ def read_xml(buffer)
175
+ buffer
176
+ end
171
177
 
172
- def read_url(url)
173
- buffer = open(url, 'UserAgent' => 'Testdata').read
174
- ext = url[/.*\/[^\.]+\.(\w+)/,1]
175
- method(('read_' + ext).to_sym).call(buffer)
176
- end
178
+ def read_td(buffer)
179
+ TestdataText.parse buffer
180
+ end
177
181
 
178
- def read_xml(buffer)
179
- buffer
180
- end
181
-
182
- def read_td(buffer)
183
- TestdataText.parse buffer
184
- end
185
182
 
183
+ def test(s)
184
+ self.add_route(s){yield(*(@inputs + [@desc]))}
185
+ end
186
186
 
187
- def test(s)
188
- #@inputs = @inputs.first if @inputs.length == 1
189
- self.add_route(s){yield(*(@inputs + [@desc]))}
187
+ def summary()
188
+ success = @success.map(&:first)
189
+ a = @success.map(&:last).sort
190
+ {
191
+ passed: success.all?,
192
+ score: [success.grep(true), success].map(&:length).join('/'),
193
+ failed: @success.select{|x| x[0] == false}.map(&:last).sort
194
+ }
195
+ end
190
196
  end
191
197
 
192
- def summary()
193
- success = @success.map(&:first)
194
- a = @success.map(&:last).sort
195
- {
196
- passed: success.all?,
197
- score: [success.grep(true), success].map(&:length).join('/'),
198
- failed: @success.select{|x| x[0] == false}.map(&:last).sort
199
- }
200
- end
201
- end
198
+ class Unit
199
+
200
+ attr_reader :to_s
201
+
202
+ def initialize(s)
203
+
204
+ super()
205
+ @to_s = ''
206
+
207
+ buffer, _ = RXFHelper.read(s)
208
+
209
+ doc = Rexle.new(buffer)
210
+
211
+ # get the template
212
+ template = doc.root.xpath('summary/test_unit/text()').join.strip
213
+ raise 'no test_unit template found' unless template
214
+
215
+ doc.root.xpath('records/test').map do |test|
216
+ path, type, description = test.xpath('summary/*/text()')
217
+
218
+ inputs = test.xpath('records/input/summary/*/text()')
219
+ outputs = test.xpath('records/output/summary/*/text()')
220
+ records = test.element('records')
221
+
222
+ inputs = records.xpath('input/summary/*').map\
223
+ {|x| [x.name, x.texts.join.strip]}
224
+ inputs.each do |name, value|
225
+ template.sub!(/<%=\s*input\.#{name}\s*%>/, \
226
+ '"' + value.gsub('"','\"') + '"')
227
+ end
228
+
229
+ outputs = records.xpath('output/summary/*').map\
230
+ {|x| [x.name, x.texts.join.strip]}
231
+ outputs.each do |name, value|
232
+ template.sub!(/<%=\s*output\.#{name}\s*%>/, \
233
+ '"' + value.gsub('"','\"') + '"')
234
+ end
235
+
236
+ @to_s << template + "\n"
237
+
238
+ end
239
+
240
+ end # end of initialize()
241
+ end # end of initialize()
242
+
243
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testdata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  vWFtb5VPsjLRwClW20j7R9zEUv5XjYoyxcUn1W1xQINMVIQMtvMhouLBeWTXF7g4
32
32
  ab2xQAvsYawLTw==
33
33
  -----END CERTIFICATE-----
34
- date: 2014-12-27 00:00:00.000000000 Z
34
+ date: 2015-02-05 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: app-routes
@@ -62,7 +62,7 @@ dependencies:
62
62
  version: '0.1'
63
63
  - - ">="
64
64
  - !ruby/object:Gem::Version
65
- version: 0.1.3
65
+ version: 0.1.8
66
66
  type: :runtime
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
@@ -72,7 +72,7 @@ dependencies:
72
72
  version: '0.1'
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 0.1.3
75
+ version: 0.1.8
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: diffy
78
78
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file