testkit123 0.2.3 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0080e9b7a855daa8c8cc92c6eeac89d02003680fe353842f5719dba83e7d2d9
4
- data.tar.gz: 2c8e70d98c9aaab9261390e2933b3f026e3af1417b941e98ed705122903ec9dd
3
+ metadata.gz: 78e24b1565f8efab12a23a79131432444dbef249f1b5cb341b2a970485bebe65
4
+ data.tar.gz: 891ecd6e1d304083f3abcb703828e784270bba141a26b743824e4413223e3a52
5
5
  SHA512:
6
- metadata.gz: c9f17b05aa914b53b55ebf4a88079beb47245a0f55c1e5167e3fe016f99105622d5a35c48ffb2b59eb2f1b6846684e682951eb4d6591f873c3d256fb85d2fb74
7
- data.tar.gz: a2c06414eaa20598951a3f1efef279b941906e2b6ab6728eb4577c11c586fab0595c06460f4fdbc57110def3e04e213d0a3e7983f0f8473a02ecd4358c680f5f
6
+ metadata.gz: a7f9971e4ccd66cdc623f8667520218f9e795c78d7b7dc599ef14e90fd6cc821ad06f0576396f00c8158d11a6e87ccd02268a4180a9202ed15587ced1703708e
7
+ data.tar.gz: d3d94f0ae845bd38f0ae4f56f9be9b7ea3cee7195918a8c5ebd6224b7ade291a3dfb1e9f67cb792a0ea103eead48e1cc61a660e7a1600db70bc4d10a93a14c7b
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -8,18 +8,29 @@ require 'testdata_text'
8
8
  require 'simple-config'
9
9
 
10
10
 
11
- class String
12
- def camelize
13
- self.split('_').collect(&:capitalize).join
11
+ module StringFormat
12
+
13
+ refine String do
14
+
15
+ def camelize
16
+ self.split('_').collect(&:capitalize).join
17
+ end
18
+
14
19
  end
20
+
15
21
  end
16
22
 
17
23
  class TestKit123
18
-
24
+ using StringFormat
25
+ using ColouredText
26
+
27
+ attr_reader :testdata_file
28
+
19
29
  def initialize(templates: {testdata: nil, testx: nil}, project: nil,
20
30
  debug: false, localpath: nil, datapath: nil,
21
31
  gemtest_url: nil, rubyver: 'ruby-2.5.1')
22
32
 
33
+ @debug = debug
23
34
  @h = templates
24
35
 
25
36
  @project_config = if project =~ /\.txt$/ then
@@ -27,13 +38,54 @@ class TestKit123
27
38
  elsif project
28
39
  File.join(localpath, project + '.txt')
29
40
  end
41
+ puts '@project_config: ' + @project_config.inspect if @debug
30
42
 
31
- @debug = debug
43
+
32
44
  @localpath, @datapath, @gemtest_url = localpath, datapath, gemtest_url
33
45
  @rubyver = rubyver
46
+
47
+ if File.exists? @project_config then
48
+
49
+ config = SimpleConfig.new(@project_config, debug: false).to_h
50
+ puts ('config: ' + config.inspect).debug if @debug
51
+
52
+ proj = config[:project]
53
+ puts 'create_standalone: proj: ' + proj.inspect if @debug
54
+
55
+ raise 'config[:data_path] not found' unless config[:data_path]
56
+
57
+ datafilepath = config[:data_path] + '/' + proj
58
+ test_rbfile = File.join(datafilepath, "test_#{proj}.rb")
59
+
60
+ ext = (config[:testdata_ext] and config[:testdata_ext][/\.?td$/]) ? 'td' : 'xml'
61
+ @testdata_file = File.join(datafilepath, "testdata_#{proj}.#{ext}")
62
+
63
+ end
34
64
 
35
65
  end
36
66
 
67
+ # expects a test node; see new_testnode()
68
+ #
69
+ def add_test(testnode)
70
+
71
+ s2 , filetype = RXFHelper.read @testdata_file
72
+ puts 'filetype: ' + filetype.inspect if @debug
73
+
74
+ xml = if s2.lstrip[0] == '<' then
75
+ s2
76
+ else
77
+ TestdataText.parse s2
78
+ end
79
+
80
+ puts 'xml: ' + xml.inspect if @debug
81
+
82
+ doc = Rexle.new(xml)
83
+ id = doc.root.xpath('records/test/summary/path/text()').last.to_i + 1
84
+ testnode.root.element('summary/path').text = id.to_s
85
+ doc.root.element('records').add testnode
86
+ return doc
87
+ end
88
+
37
89
  def create_files(project=@project_config)
38
90
 
39
91
  puts 'running create_files ...' if @debug
@@ -123,24 +175,34 @@ end
123
175
 
124
176
  # use the test number to find the test to copy from the test file
125
177
 
126
- config = SimpleConfig.new(@project_config).to_h
178
+ config = SimpleConfig.new(@project_config, debug: false).to_h
179
+ puts ('config: ' + config.inspect).debug if @debug
127
180
 
128
181
  proj = config[:project]
182
+ puts 'create_standalone: proj: ' + proj.inspect if @debug
183
+
184
+ raise 'config[:data_path] not found' unless config[:data_path]
185
+
129
186
  datafilepath = config[:data_path] + '/' + proj
130
187
  test_rbfile = File.join(datafilepath, "test_#{proj}.rb")
131
188
 
132
- ext = config[:testdata_ext][/\.?td$/] ? 'td' : 'xml'
189
+ ext = (config[:testdata_ext] and config[:testdata_ext][/\.?td$/]) ? 'td' : 'xml'
133
190
  testdata_file = File.join(datafilepath, "testdata_#{proj}.#{ext}")
134
191
  puts 'testdata_file: ' + testdata_file.inspect if @debug
192
+ puts 'source code filepath: ' + test_rbfile.inspect if @debug
135
193
 
136
- s = File.read test_rbfile
194
+ s = File.read(test_rbfile).gsub(/^( )?end/,'')
137
195
  require_gems = s.scan(/^require +['"]([^'"]+)/).map(&:first)
138
-
196
+
197
+ before_test = s[/(?<=def tests\(\)).*/m].split(/ test /)[0].lstrip
198
+ puts '** before_test: ' + before_test.inspect
199
+
139
200
  a = s.split(/(?= test )/)
140
201
  a.shift
141
-
202
+ puts 'a: ' + a.inspect if @debug
203
+
142
204
  tests = a.map do |x|
143
- r = a[0].match(/(?<=['"])(?<test>[^"']+)['"]\s+do\s+\|(?<raw_args>[^\|]+)/)
205
+ r = x.match(/(?<=['"])(?<test>[^"']+)['"]\s+do\s+\|(?<raw_args>[^\|]+)/)
144
206
 
145
207
  [r[:test], r[:raw_args].split(/, */)]
146
208
  end
@@ -157,16 +219,43 @@ end
157
219
  puts 'xml: ' + xml.inspect if @debug
158
220
 
159
221
  doc = Rexle.new(xml)
160
- testnode = doc.root.xpath('records//test')[n-1]
222
+ puts 'after doc : ' if @debug
223
+ r = doc.root.xpath('records//test') || doc.root.xpath('records/test')
224
+
225
+ if @debug then
226
+ puts 'r: ' + r.inspect
227
+ puts 'r.length: ' + r.length.inspect
228
+ puts 'n: ' + n.inspect
229
+ end
230
+
231
+ testnode = r[n-1]
232
+ puts 'testnode: ' + testnode.xml.inspect if @debug
233
+
161
234
  title = testnode.text('summary/type')
235
+ puts ('title: ' + title.inspect).debug if @debug
236
+ puts ('tests: ' + tests.inspect).debug if @debug
162
237
  i = tests.index tests.assoc(title)
163
-
238
+ puts 'i: ' + i.inspect if @debug
239
+
164
240
  testcode = a[i].strip.lines[1..-2].map do |line|
165
241
  line.sub(/^ {6}/,'')
166
242
  end.join
243
+
244
+ # replace the input variable names with the input variable names defined
245
+ # in the testdata file and prefix them with *test_*.
246
+
247
+ input_vars = testnode.xpath('records/input/summary/*/name()')
248
+
249
+ puts 'input_vars: ' + input_vars.inspect
250
+ puts 'tests[i][1]: ' + tests[i][1].inspect
251
+ puts 'zip: ' + tests[i][1].zip(input_vars).inspect
252
+ tests[i][1].zip(input_vars).each do |x|
253
+ testcode.gsub!(/\b#{x[0]}\b/, 'test_' + x[1])
254
+ end
167
255
 
168
256
  args = testnode.xpath('records/input/summary/*').map do |input|
169
- "test_%s = '%s'" % [input.name, input.texts.join.gsub(/'/,"\'").strip]
257
+ "test_%s =<<EOF\n%s\nEOF\n" % [input.name,
258
+ input.texts.join.gsub(/'/,"\'").strip]
170
259
  end
171
260
 
172
261
  vars = testnode.xpath('records/input/summary/*').map(&:name)
@@ -179,12 +268,15 @@ end
179
268
 
180
269
  puts 'gems: ' + require_gems.inspect if @debug
181
270
 
271
+ codex = testcode.rstrip.lines
272
+
182
273
  "# Test %d. Type: %s\n# Description: %s\n" \
183
274
  % [n, title, testnode.text('summary/type')] + \
184
- "# ----------------------\n\n" + \
275
+ "# --------------------------------------------\n\n" + \
185
276
  "require '#{proj}'\n" + require_gems.map {|x| "require '%s'" \
186
277
  % x}.join("\n") + "\n\n\n" \
187
- + args.join("\n") + testcode
278
+ + before_test.gsub(/^ /,'') + "\n" + args.join("\n") \
279
+ + codex[0..-2].join + 'puts ' + codex.last
188
280
 
189
281
  end
190
282
 
@@ -215,16 +307,24 @@ end
215
307
 
216
308
  end
217
309
 
218
- def make_testdata(s)
310
+ def new_testnode(s=nil, type: '', inputs: {}, outputs: {result: ''})
311
+
312
+ if s then
313
+
314
+ # the scan is intended to find the input variables from an
315
+ # example Ruby script
316
+
317
+ inputs = s.scan(/test_([\w]+) += +['"]([^'"]+)/)\
318
+ .inject({}){|r,x| r.merge(x.first.to_sym => x.last)}
319
+ end
219
320
 
220
- inputs = s.scan(/test_([\w]+) += +['"]([^'"]+)/)\
221
- .inject({}){|r,x| r.merge(x.first.to_sym => x.last)}
321
+ # observe *test* is masked with *_test* because it is a built-in method name.
222
322
 
223
323
  h = {
224
324
  _test: {
225
325
  summary: {
226
326
  path: '',
227
- type: '',
327
+ type: type,
228
328
  description: ''
229
329
  },
230
330
  records: {
@@ -233,16 +333,16 @@ end
233
333
  records: {}
234
334
  },
235
335
  output: {
236
- summary: {result: ''},
336
+ summary: outputs,
237
337
  records: {}
238
338
  }
239
339
  }
240
340
  }
241
341
  }
242
342
 
243
- a = RexleBuilder.new(h).to_a
343
+ a = RexleBuilder.new(h, debug: false).to_a
244
344
 
245
- Rexle.new(a).xml pretty: true
345
+ Rexle.new(a)
246
346
 
247
347
  end
248
348
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testkit123
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,27 +10,32 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwNzE1MTYwNTQ4WhcN
15
- MTkwNzE1MTYwNTQ4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtgJ54
17
- gKuobwa5Won07os+Evt07yvbyEB7OBxwD3rnv1oNLxlx1wkOD2DNeZd4Otw1Dl6M
18
- plfQUJCzRU9sQ5cAKqHVDPpf+EJIPm2bATJlO8w//F/LULbN1h8VsbGBcXUu3VoX
19
- m2Bf6EesFKM/+BiMujEDX9EBy3hCJp7Bkn4WMk4PRwUdEBE8TEFj9T947+JVqZdR
20
- 3s4+DtYzFWbX9MuNzeQlAxcjV1iFgTS2G/GY6k6hJl0HhFnHfqftfqKgLIRZY4yF
21
- LIkb5Kvj/yA1gYctId0lk1PrntSchvQvzYDAOrf8lOY3M3JLkiOWzwcRWDoPWCaI
22
- PdYjRk0ij/x2zKS3AgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFJig7R4v8LRxNY/3qFTqBFgZT6FzMCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBAAaMtjTuuZeFtw4VuH9W
26
- UozGqMeTxP2VkMw2vmaN+IF6jhNFBIDhgrQGNwijCsFZfMwl7efQ6PM2XIqXtJCZ
27
- O8CrfJ+Y64IszwHeNSzyxi1FFMfUYAafQq3E+E8KTk0PaCl9AEa1zxwkBWkGHzKG
28
- P1svw5bfBxQ9epcI9Ir00sKkx0S1mANSrwH6k2pKwOSpxhhX2Wlx6L4mnME0CTq8
29
- 6nk4O0PjUWuXrqQKUG4AtGeMPImOKz8uo+/wyaRZR/I+suAoL2xHo7RYqZwoCfQv
30
- MBi32Noiyau3znLWYXucwnOR8dh4RhcwxaP82ZX6Up19+qVqJqravkDQ+OBff6o+
31
- m3U=
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkxMDA3MDk0NDMwWhcN
15
+ MjAxMDA2MDk0NDMwWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDKZj/1
17
+ lg4PZhpHglK40avWXxaa6Kdmfd1VbYufjc8fAs5gyWJoOj7Sd0YSqHvBrJXngysg
18
+ eaWEw7q/6qeKTlOdESJPxDz9e7Aj6AV0DfblQciMQWGMIbdYKDgUQKlY1WHPZBeh
19
+ MA5NbHVxLoKL4pSXpM+LvWbY+RxOZiFjMU9PGKohopy0U1D2H6L/d4YgCnOpehsJ
20
+ GRFViuG86mybGKCKXqRwEeiir2ZTJd/2WH50E2tTUv1JLBG/AocAskgGaNm2FnIP
21
+ msksUf9zd//SrUaN5j3wMzU9ohP4rrHehHGhYvL5k4jrrgKeV6+owq2aZLmGgii1
22
+ im2QWeYbyrHtM/aqX2Yl/eq3QIs1JULF0wAlixp7+dIpbstOUeMsTzdyj/thMpcL
23
+ 2VtZ6ld8I4+HrajF5KqPJs85ABwhQ9KFrrj2ZFJMGKphcJYiqdOpoaRSLqCsAQH9
24
+ ROMUJlXvFyDBXI4AkytI41YPszJfNwK/hgVxjaeuoQUO0CFOPSmuaaamHzcCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU/7xyE1E0
26
+ k5w8LQBvW606VxVQpOIwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAx2Bm/aDoe0xmXzcHyaZ+BihvkVt6e+wTi3ddzql6
29
+ KVOgJBWXCNri6TltTJNlQXxUD2IoHqi9f+XReh8xicw6dRep/D3qb74P1D3TOEr9
30
+ N5PHimc/YNhYLuNxJijbjDLQrlnw6vYM8mFT4p+YsaZRkdF1ABFgqpYz4bRucXrI
31
+ 26tkFgV9dlAAgFYQrmdyC4f20rkOl9oJLEzLkUNOGrd1fXz1IWQOffoFZTPqGn4V
32
+ 6jeOVIjbGjzCM9A9jfMC5V7wjVR2OKz+QKKwfixwDKWc186iFJ470zMQs1AuW1jX
33
+ LZq56q/Q/Xkx07FnhgPqUbe3630f4z+ULwDGVns+lgrEVmQXPqhUbwsOnJZM0s8m
34
+ mwmSZbk2b0bMllDLaDYMoUkkwRzBxEkKe6DMuC1q7/9lekcCdm2+1teA4j/l82cM
35
+ owBtF8qd/v9x+t6h+/j/LPTmgwDrPhKl4HmH77oloyec9426T3EW7OvcMiMXAfQG
36
+ KKJn9TVnRGoWZTIHtu1e5v36
32
37
  -----END CERTIFICATE-----
33
- date: 2018-08-16 00:00:00.000000000 Z
38
+ date: 2020-09-06 00:00:00.000000000 Z
34
39
  dependencies:
35
40
  - !ruby/object:Gem::Dependency
36
41
  name: rxfhelper
@@ -38,40 +43,40 @@ dependencies:
38
43
  requirements:
39
44
  - - "~>"
40
45
  - !ruby/object:Gem::Version
41
- version: '0.8'
46
+ version: '1.0'
42
47
  - - ">="
43
48
  - !ruby/object:Gem::Version
44
- version: 0.8.4
49
+ version: 1.0.5
45
50
  type: :runtime
46
51
  prerelease: false
47
52
  version_requirements: !ruby/object:Gem::Requirement
48
53
  requirements:
49
54
  - - "~>"
50
55
  - !ruby/object:Gem::Version
51
- version: '0.8'
56
+ version: '1.0'
52
57
  - - ">="
53
58
  - !ruby/object:Gem::Version
54
- version: 0.8.4
59
+ version: 1.0.5
55
60
  - !ruby/object:Gem::Dependency
56
61
  name: simple-config
57
62
  requirement: !ruby/object:Gem::Requirement
58
63
  requirements:
59
64
  - - "~>"
60
65
  - !ruby/object:Gem::Version
61
- version: '0.6'
66
+ version: '0.7'
62
67
  - - ">="
63
68
  - !ruby/object:Gem::Version
64
- version: 0.6.4
69
+ version: 0.7.1
65
70
  type: :runtime
66
71
  prerelease: false
67
72
  version_requirements: !ruby/object:Gem::Requirement
68
73
  requirements:
69
74
  - - "~>"
70
75
  - !ruby/object:Gem::Version
71
- version: '0.6'
76
+ version: '0.7'
72
77
  - - ">="
73
78
  - !ruby/object:Gem::Version
74
- version: 0.6.4
79
+ version: 0.7.1
75
80
  - !ruby/object:Gem::Dependency
76
81
  name: testdata_text
77
82
  requirement: !ruby/object:Gem::Requirement
@@ -118,8 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
123
  - !ruby/object:Gem::Version
119
124
  version: '0'
120
125
  requirements: []
121
- rubyforge_project:
122
- rubygems_version: 2.7.6
126
+ rubygems_version: 3.0.3
123
127
  signing_key:
124
128
  specification_version: 4
125
129
  summary: Generates a test suite of files (for use with the testdata gem) from a config
metadata.gz.sig CHANGED
Binary file