testkit123 0.2.4 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/testkit123.rb +128 -27
- metadata +35 -30
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 560dc7d23a4b2dc3330982f8ca4ddbba94461f17ff22c4296d842eda8c92cd19
|
4
|
+
data.tar.gz: 3a5643258d69a643a57395f77d335acf78887187d70168e536c33d7141719955
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6daac63a4f2e865788879f9541dde921f9dfd98580a48f0d725699ec535c43059087e1f9f6e36585d042bdee550e5a180f363a58a844c133ec62ebe95a315b3d
|
7
|
+
data.tar.gz: 219ebfe3cabc637e4db9966978843787f5d7cff22ece377052f4b64a5e3ca2a16e61f84d50a3bc80136ad9b14e31bd7651a6271a5e64aafd2ae312e982de691c
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/testkit123.rb
CHANGED
@@ -8,34 +8,89 @@ require 'testdata_text'
|
|
8
8
|
require 'simple-config'
|
9
9
|
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
debug:
|
30
|
+
debug: true, localpath: nil, datapath: nil,
|
21
31
|
gemtest_url: nil, rubyver: 'ruby-2.5.1')
|
22
32
|
|
23
33
|
@debug = debug
|
24
34
|
@h = templates
|
25
35
|
|
36
|
+
#return unless project
|
37
|
+
|
38
|
+
@localpath, @datapath, @gemtest_url = localpath, datapath, gemtest_url
|
39
|
+
@rubyver = rubyver
|
40
|
+
|
41
|
+
return unless project
|
42
|
+
|
26
43
|
@project_config = if project =~ /\.txt$/ then
|
27
44
|
project
|
28
|
-
|
45
|
+
else
|
29
46
|
File.join(localpath, project + '.txt')
|
30
47
|
end
|
31
|
-
puts '@project_config: ' + @project_config.inspect if @debug
|
32
48
|
|
33
|
-
|
34
|
-
|
35
|
-
|
49
|
+
puts '@project_config: ' + @project_config.inspect if @debug
|
50
|
+
puts 'localpath: ' + localpath.inspect if @debug
|
51
|
+
|
52
|
+
if File.exists? @project_config then
|
53
|
+
|
54
|
+
config = SimpleConfig.new(@project_config, debug: false).to_h
|
55
|
+
puts ('config: ' + config.inspect).debug if @debug
|
56
|
+
|
57
|
+
proj = config[:project]
|
58
|
+
puts 'create_standalone: proj: ' + proj.inspect if @debug
|
59
|
+
|
60
|
+
raise 'config[:data_path] not found' unless config[:data_path]
|
61
|
+
|
62
|
+
datafilepath = config[:data_path] + '/' + proj
|
63
|
+
test_rbfile = File.join(datafilepath, "test_#{proj}.rb")
|
64
|
+
|
65
|
+
ext = (config[:testdata_ext] and config[:testdata_ext][/\.?td$/]) ? 'td' : 'xml'
|
66
|
+
@testdata_file = File.join(datafilepath, "testdata_#{proj}.#{ext}")
|
67
|
+
|
68
|
+
end
|
36
69
|
|
37
70
|
end
|
38
71
|
|
72
|
+
# expects a test node; see new_testnode()
|
73
|
+
#
|
74
|
+
def add_test(testnode)
|
75
|
+
|
76
|
+
s2 , filetype = RXFHelper.read @testdata_file
|
77
|
+
puts 'filetype: ' + filetype.inspect if @debug
|
78
|
+
|
79
|
+
xml = if s2.lstrip[0] == '<' then
|
80
|
+
s2
|
81
|
+
else
|
82
|
+
TestdataText.parse s2
|
83
|
+
end
|
84
|
+
|
85
|
+
puts 'xml: ' + xml.inspect if @debug
|
86
|
+
|
87
|
+
doc = Rexle.new(xml)
|
88
|
+
id = doc.root.xpath('records/test/summary/path/text()').last.to_i + 1
|
89
|
+
testnode.root.element('summary/path').text = id.to_s
|
90
|
+
doc.root.element('records').add testnode
|
91
|
+
return doc
|
92
|
+
end
|
93
|
+
|
39
94
|
def create_files(project=@project_config)
|
40
95
|
|
41
96
|
puts 'running create_files ...' if @debug
|
@@ -125,27 +180,34 @@ end
|
|
125
180
|
|
126
181
|
# use the test number to find the test to copy from the test file
|
127
182
|
|
128
|
-
config = SimpleConfig.new(@project_config).to_h
|
183
|
+
config = SimpleConfig.new(@project_config, debug: false).to_h
|
184
|
+
puts ('config: ' + config.inspect).debug if @debug
|
129
185
|
|
130
186
|
proj = config[:project]
|
131
187
|
puts 'create_standalone: proj: ' + proj.inspect if @debug
|
188
|
+
|
189
|
+
raise 'config[:data_path] not found' unless config[:data_path]
|
190
|
+
|
132
191
|
datafilepath = config[:data_path] + '/' + proj
|
133
192
|
test_rbfile = File.join(datafilepath, "test_#{proj}.rb")
|
134
193
|
|
135
|
-
ext = config[:testdata_ext][/\.?td$/] ? 'td' : 'xml'
|
194
|
+
ext = (config[:testdata_ext] and config[:testdata_ext][/\.?td$/]) ? 'td' : 'xml'
|
136
195
|
testdata_file = File.join(datafilepath, "testdata_#{proj}.#{ext}")
|
137
196
|
puts 'testdata_file: ' + testdata_file.inspect if @debug
|
197
|
+
puts 'source code filepath: ' + test_rbfile.inspect if @debug
|
138
198
|
|
139
199
|
s = File.read(test_rbfile).gsub(/^( )?end/,'')
|
140
200
|
require_gems = s.scan(/^require +['"]([^'"]+)/).map(&:first)
|
141
201
|
|
142
|
-
before_test = s[/(?<=def tests\(\))
|
143
|
-
|
202
|
+
before_test = s[/(?<=def tests\(\)).*/m].split(/ test /)[0].lstrip
|
203
|
+
puts '** before_test: ' + before_test.inspect
|
204
|
+
|
144
205
|
a = s.split(/(?= test )/)
|
145
206
|
a.shift
|
146
|
-
|
207
|
+
puts 'a: ' + a.inspect if @debug
|
208
|
+
|
147
209
|
tests = a.map do |x|
|
148
|
-
r =
|
210
|
+
r = x.match(/(?<=['"])(?<test>[^"']+)['"]\s+do\s+\|(?<raw_args>[^\|]+)/)
|
149
211
|
|
150
212
|
[r[:test], r[:raw_args].split(/, */)]
|
151
213
|
end
|
@@ -162,13 +224,39 @@ end
|
|
162
224
|
puts 'xml: ' + xml.inspect if @debug
|
163
225
|
|
164
226
|
doc = Rexle.new(xml)
|
165
|
-
|
227
|
+
puts 'after doc : ' if @debug
|
228
|
+
r = doc.root.xpath('records//test') || doc.root.xpath('records/test')
|
229
|
+
|
230
|
+
if @debug then
|
231
|
+
puts 'r: ' + r.inspect
|
232
|
+
puts 'r.length: ' + r.length.inspect
|
233
|
+
puts 'n: ' + n.inspect
|
234
|
+
end
|
235
|
+
|
236
|
+
testnode = r[n-1]
|
237
|
+
puts 'testnode: ' + testnode.xml.inspect if @debug
|
238
|
+
|
166
239
|
title = testnode.text('summary/type')
|
240
|
+
puts ('title: ' + title.inspect).debug if @debug
|
241
|
+
puts ('tests: ' + tests.inspect).debug if @debug
|
167
242
|
i = tests.index tests.assoc(title)
|
168
|
-
|
243
|
+
puts 'i: ' + i.inspect if @debug
|
244
|
+
|
169
245
|
testcode = a[i].strip.lines[1..-2].map do |line|
|
170
246
|
line.sub(/^ {6}/,'')
|
171
247
|
end.join
|
248
|
+
|
249
|
+
# replace the input variable names with the input variable names defined
|
250
|
+
# in the testdata file and prefix them with *test_*.
|
251
|
+
|
252
|
+
input_vars = testnode.xpath('records/input/summary/*/name()')
|
253
|
+
|
254
|
+
puts 'input_vars: ' + input_vars.inspect
|
255
|
+
puts 'tests[i][1]: ' + tests[i][1].inspect
|
256
|
+
puts 'zip: ' + tests[i][1].zip(input_vars).inspect
|
257
|
+
tests[i][1].zip(input_vars).each do |x|
|
258
|
+
testcode.gsub!(/\b#{x[0]}\b/, 'test_' + x[1])
|
259
|
+
end
|
172
260
|
|
173
261
|
args = testnode.xpath('records/input/summary/*').map do |input|
|
174
262
|
"test_%s =<<EOF\n%s\nEOF\n" % [input.name,
|
@@ -185,12 +273,15 @@ end
|
|
185
273
|
|
186
274
|
puts 'gems: ' + require_gems.inspect if @debug
|
187
275
|
|
276
|
+
codex = testcode.rstrip.lines
|
277
|
+
|
188
278
|
"# Test %d. Type: %s\n# Description: %s\n" \
|
189
279
|
% [n, title, testnode.text('summary/type')] + \
|
190
280
|
"# --------------------------------------------\n\n" + \
|
191
281
|
"require '#{proj}'\n" + require_gems.map {|x| "require '%s'" \
|
192
282
|
% x}.join("\n") + "\n\n\n" \
|
193
|
-
+ before_test.gsub(/^ /,'') + "\n" + args.join("\n")
|
283
|
+
+ before_test.gsub(/^ /,'') + "\n" + args.join("\n") \
|
284
|
+
+ codex[0..-2].join + 'puts ' + codex.last
|
194
285
|
|
195
286
|
end
|
196
287
|
|
@@ -221,16 +312,24 @@ end
|
|
221
312
|
|
222
313
|
end
|
223
314
|
|
224
|
-
def
|
315
|
+
def new_testnode(s=nil, type: '', inputs: {}, outputs: {result: ''})
|
225
316
|
|
226
|
-
|
227
|
-
|
317
|
+
if s then
|
318
|
+
|
319
|
+
# the scan is intended to find the input variables from an
|
320
|
+
# example Ruby script
|
321
|
+
|
322
|
+
inputs = s.scan(/test_([\w]+) += +['"]([^'"]+)/)\
|
323
|
+
.inject({}){|r,x| r.merge(x.first.to_sym => x.last)}
|
324
|
+
end
|
325
|
+
|
326
|
+
# observe *test* is masked with *_test* because it is a built-in method name.
|
228
327
|
|
229
328
|
h = {
|
230
329
|
_test: {
|
231
330
|
summary: {
|
232
331
|
path: '',
|
233
|
-
type:
|
332
|
+
type: type,
|
234
333
|
description: ''
|
235
334
|
},
|
236
335
|
records: {
|
@@ -239,21 +338,22 @@ end
|
|
239
338
|
records: {}
|
240
339
|
},
|
241
340
|
output: {
|
242
|
-
summary:
|
341
|
+
summary: outputs,
|
243
342
|
records: {}
|
244
343
|
}
|
245
344
|
}
|
246
345
|
}
|
247
346
|
}
|
248
347
|
|
249
|
-
a = RexleBuilder.new(h).to_a
|
348
|
+
a = RexleBuilder.new(h, debug: false).to_a
|
250
349
|
|
251
|
-
Rexle.new(a)
|
350
|
+
Rexle.new(a)
|
252
351
|
|
253
352
|
end
|
254
353
|
|
255
354
|
def new_project(project='myproject', classname=nil, save: false)
|
256
355
|
|
356
|
+
puts 'inside new_project: ' + [project, classname].inspect if @debug
|
257
357
|
classname ||= project.camelize
|
258
358
|
|
259
359
|
s =<<EOF
|
@@ -276,8 +376,8 @@ test:
|
|
276
376
|
end
|
277
377
|
EOF
|
278
378
|
|
279
|
-
|
280
379
|
if save then
|
380
|
+
puts '@localpath: ' + @localpath.inspect if @debug
|
281
381
|
filepath = File.join(@localpath, project + '.txt')
|
282
382
|
File.write filepath, s
|
283
383
|
puts 'file saved ' + filepath if @debug
|
@@ -290,3 +390,4 @@ EOF
|
|
290
390
|
end
|
291
391
|
|
292
392
|
end
|
393
|
+
|
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.
|
4
|
+
version: 0.3.1
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwMjAxMjA0MzE4WhcN
|
15
|
+
MjIwMjAxMjA0MzE4WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDYLk88
|
17
|
+
mTT4qYC19ZG6k74St4hkvxBobe3p57tvSRljHhahLrVtUFM0i2YzjyJi9PM7q1jm
|
18
|
+
RCtp69apz9E5l9s3y0NBbipKGVvksf48WmwO1tWKxks9E6CG3D+qVE+lw9yGgbid
|
19
|
+
vSAOSmY7kARA/PWNpokk4AGSK9au2z0xM6TAGRuTeXoRswTc0u2WW+LJCNgapTVB
|
20
|
+
OnclLXN9sNLJCRHWGRXwCdXd1ln1KRxtIZgnVxttHDtCL8UjpIw+JI+tGKqRwiOg
|
21
|
+
HQDS8SqH4+KxR8+0XvRoVqQ3d8ozuDgtsaW6diEYXgR4z/ys9LJUiKpOB2Tquobs
|
22
|
+
n9L96U0M3zUF5WGGM/Q2Ux1TY4h0OOOgEwb8V8/u0hHIJKOuDClYjTRWu7FBJRx7
|
23
|
+
2f7NqbErCfutAfm2hQpj9thMrpjgMlf68ZTcrHiK8Loq4+LZoB+bAlZ+VQb5eYvR
|
24
|
+
UXfpjmEP30rnulkQFt9qwTtQUUY5/5/MeU29eoSgRg+dPKebapwxF80Fgb0CAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUmNd64gCU
|
26
|
+
Me3RqaJGrXkwrpyEigswJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEA1RgOx9puiSkwKJn487dnDiuRSVsuBJFMZZhp+shk
|
29
|
+
ajXuyuC1TXrV97c14khNoUNofRhusOTgKkO6l/ouJsObSzUIFIQHt8ljFowM7rM6
|
30
|
+
ZOrFT08G0akM84d1dUCGCpTZyW7M0HmNxh4Yn2hIChejsfgwYZmesL7grqJ3WKvE
|
31
|
+
KZF9E6c0A0a60gAZWXb0Of0yXTSqiX2uNEkM7STyG+yu/XzLus+z2rEYdUFaxfvW
|
32
|
+
+AAeovOz8G+IQhuHZ6zG3KtRYeHq0057/tC44obGbyNOXC0twIUGJ0ajRedNKEc2
|
33
|
+
OC0wzHol3qEYmVai7DkQL8xX7m3VsWd/0JbS+tzchySc/e2R1I3FAGeOSzmUSN6o
|
34
|
+
0CPM0BbOB4yUW+Ev7o3g31CsFuQ+5bCgR7n64QwTeHjlgFelmaJ1XalvnBC97S6k
|
35
|
+
/B2OocR7kLmSGm860fyULSY2RzLBKLOhjQHnrSiHj6n9pWrmkd+7Zxo/up/Jq4Xv
|
36
|
+
0cPz7gMjFOVqEBQuSfoVKd9K
|
32
37
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
38
|
+
date: 2021-02-01 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
|
46
|
+
version: '1.0'
|
42
47
|
- - ">="
|
43
48
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.
|
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
|
56
|
+
version: '1.0'
|
52
57
|
- - ">="
|
53
58
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
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.
|
66
|
+
version: '0.7'
|
62
67
|
- - ">="
|
63
68
|
- !ruby/object:Gem::Version
|
64
|
-
version: 0.
|
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.
|
76
|
+
version: '0.7'
|
72
77
|
- - ">="
|
73
78
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
79
|
+
version: 0.7.1
|
75
80
|
- !ruby/object:Gem::Dependency
|
76
81
|
name: testdata_text
|
77
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
124
|
version: '0'
|
120
125
|
requirements: []
|
121
126
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.7.
|
127
|
+
rubygems_version: 2.7.10
|
123
128
|
signing_key:
|
124
129
|
specification_version: 4
|
125
130
|
summary: Generates a test suite of files (for use with the testdata gem) from a config
|
metadata.gz.sig
CHANGED
Binary file
|