rscm-accurev 0.0.7 → 0.0.8
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.
- data/Rakefile +9 -14
- data/STATUS +2 -0
- data/TODO +24 -0
- data/lib/rscm/accurev.rb +1 -1
- data/lib/rscm/scm/accurev/api.rb +32 -22
- data/lib/rscm/scm/accurev/exception.rb +5 -1
- data/{test/coverage/c_loader.rb → lib/test/rake/coverage_loader.rb} +0 -0
- data/lib/test/rake/coverage_summary.rb +142 -0
- data/lib/test/rake/coveragetask.rb +75 -0
- data/{test/coverage/index_tmpl.html → lib/test/rake/index_template.html} +3 -2
- data/{test/coverage/template.html → lib/test/rake/page_template.html} +0 -0
- data/test/t_api.rb +79 -17
- metadata +10 -15
- data/test/coverage/analyzer.rb +0 -127
- data/test/coverage/cover.rb +0 -91
- data/test/coverage/coverage_loader.rb +0 -21
- data/test/coverage/coveragetask.rb +0 -38
- data/test/fl +0 -18
- data/test/suite_all.rb +0 -34
data/Rakefile
CHANGED
@@ -6,6 +6,8 @@ require 'rake/rdoctask'
|
|
6
6
|
require 'rake/packagetask'
|
7
7
|
require 'rake/gempackagetask'
|
8
8
|
require 'tracer'
|
9
|
+
$: << "lib"
|
10
|
+
require 'test/rake/coveragetask'
|
9
11
|
|
10
12
|
# this rakefile originally borrowed shamelessly from rscm
|
11
13
|
|
@@ -164,7 +166,8 @@ else
|
|
164
166
|
s.version = PKG_VERSION
|
165
167
|
s.summary = PKG_SUMMARY
|
166
168
|
s.description = "RSCM::Accurev is an RSCM API for the SCM tool Accurev (http://www.accurev.com/)."
|
167
|
-
|
169
|
+
# rscm-accurev <= 0.0.8 are incompatible with rscm 0.4.x
|
170
|
+
s.add_dependency( 'rscm', '~> 0.3' )
|
168
171
|
s.files = PKG_FILES.to_a
|
169
172
|
s.require_path = 'lib'
|
170
173
|
s.autorequire = 'rscm/accurev'
|
@@ -188,21 +191,11 @@ task :realclean do
|
|
188
191
|
rm_rf f
|
189
192
|
end
|
190
193
|
|
191
|
-
desc "Coverage! (still a
|
192
|
-
|
193
|
-
|
194
|
-
Rake::TestTask.new( :test_coverage ) do |t|
|
194
|
+
desc "Coverage! (still a hack)"
|
195
|
+
Rake::Coverage::Task.new( :coverage ) do |t|
|
195
196
|
t.libs << "test"
|
196
197
|
t.test_files = test_files
|
197
198
|
t.verbose = true
|
198
|
-
def t.rake_loader
|
199
|
-
'test/coverage/c_loader.rb'
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
task :coverage_summary do
|
204
|
-
# too many options!@
|
205
|
-
ruby "test/coverage/analyzer.rb xxx.trace html/coverage test/coverage/template.html test/coverage/index_tmpl.html"
|
206
199
|
end
|
207
200
|
|
208
201
|
desc "Perform various prerelease verifications"
|
@@ -212,8 +205,10 @@ task :verify do
|
|
212
205
|
if FileTest.directory?(path)
|
213
206
|
next
|
214
207
|
end
|
208
|
+
next if path =~ /^\.\/\.svn\// # ignore SVN base/control files
|
215
209
|
next if path =~ /^.\/tmp\/cleaner.pl$/
|
216
|
-
next if path =~ /^.\/Rakefile$/
|
210
|
+
next if path =~ /^.\/Rakefile$/ # this Rakefile contains the bad terms
|
211
|
+
next if path =~ /~$/ # backups might, who cares
|
217
212
|
if File.read(path) =~ /orbitz|duncllc|gfast|fduncan/i
|
218
213
|
fail "Cannot release #{path}, please clean up"
|
219
214
|
end
|
data/STATUS
CHANGED
data/TODO
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# todo for rscm/scm/accurev.rb
|
2
2
|
|
3
|
+
**** api - update to rscm 4.0 api
|
4
|
+
- numerous changes required
|
5
|
+
|
6
|
+
** api - submit to rscm maintainers as stable(ish)
|
7
|
+
|
3
8
|
#api - checkout
|
4
9
|
# - there is no rscm-api update() (only checkout-to-existing-ws)
|
5
10
|
# - `pop`, `update`
|
@@ -39,3 +44,22 @@ api - update: elements list should probably not include removed files
|
|
39
44
|
# user *really* wants it
|
40
45
|
# - yeargh... how does update work with pop? just nuke and/or overwrite?
|
41
46
|
|
47
|
+
* XXXs in api
|
48
|
+
|
49
|
+
* api.add() -> api.ac_add()
|
50
|
+
- `ac add` (does keep)
|
51
|
+
|
52
|
+
api.ac_keep() - as cli
|
53
|
+
|
54
|
+
api.ac_promote() - as cli
|
55
|
+
|
56
|
+
api.ac_update
|
57
|
+
- doesn't seem to do right
|
58
|
+
|
59
|
+
api.can_update?()
|
60
|
+
- `ac stat -n`
|
61
|
+
|
62
|
+
? api.overlapped()
|
63
|
+
- list overlapped files
|
64
|
+
|
65
|
+
|
data/lib/rscm/accurev.rb
CHANGED
data/lib/rscm/scm/accurev/api.rb
CHANGED
@@ -48,25 +48,24 @@ module RSCM::Accurev
|
|
48
48
|
# api.checkout() each{|f| ... }
|
49
49
|
#
|
50
50
|
class API < RSCM::Base
|
51
|
-
register self
|
52
51
|
|
53
|
-
ann :description => "Accurev Depot"
|
52
|
+
#ann :description => "Accurev Depot"
|
54
53
|
attr_accessor :depot
|
55
54
|
|
56
|
-
ann :description => "Backing Stream (autodetected)"
|
55
|
+
#ann :description => "Backing Stream (autodetected)"
|
57
56
|
attr_accessor :backing_stream
|
58
57
|
|
59
58
|
# If workspace stream is nil (the default), checkout/update will be
|
60
59
|
# done using `accurev pop`. This is faster and more appropriate for
|
61
60
|
# read-only use; however a workspace is required for commits.
|
62
|
-
ann :description => "Workspace Stream"
|
61
|
+
#ann :description => "Workspace Stream"
|
63
62
|
attr_accessor :workspace_stream
|
64
63
|
|
65
64
|
# [defined in Base]
|
66
|
-
# ann :description => "Filesystem Path to Workspace"
|
65
|
+
# #ann :description => "Filesystem Path to Workspace"
|
67
66
|
# attr_accessor :checkout_dir
|
68
67
|
|
69
|
-
ann :description => "Overwrite Mode: if true, co overwrites existing"
|
68
|
+
#ann :description => "Overwrite Mode: if true, co overwrites existing"
|
70
69
|
attr_accessor :overwrite
|
71
70
|
|
72
71
|
def initialize(checkout_dir=nil, backing_stream=nil, workspace_stream=nil)
|
@@ -172,11 +171,11 @@ module RSCM::Accurev
|
|
172
171
|
|
173
172
|
# yeilds the TransactionData objects for the given time period
|
174
173
|
# (promotes only)
|
175
|
-
def ac_hist( from, to=Time.
|
174
|
+
def ac_hist( from, to=Time.infinity )
|
176
175
|
cmd = Command.instance
|
177
176
|
lower = from.to_accurev
|
178
177
|
upper = "now"
|
179
|
-
unless to == Time.
|
178
|
+
unless to == Time.infinity
|
180
179
|
upper = to.to_accurev
|
181
180
|
end
|
182
181
|
with_working_dir( self.co_filepath ) do
|
@@ -267,7 +266,12 @@ module RSCM::Accurev
|
|
267
266
|
# Current, ac_update returns both files and directories, including
|
268
267
|
# deleted files.
|
269
268
|
#
|
270
|
-
|
269
|
+
# @yield: +path+ for each file/directory updated
|
270
|
+
# See also #update().
|
271
|
+
#
|
272
|
+
# XXX doesn't yield
|
273
|
+
#
|
274
|
+
def checkout( to_identifier=Time.infinity )
|
271
275
|
co = RSCM::PathConverter.nativepath_to_filepath( @checkout_dir )
|
272
276
|
if @backing_stream.nil?
|
273
277
|
self.attempt_init_from_info()
|
@@ -277,25 +281,29 @@ module RSCM::Accurev
|
|
277
281
|
else
|
278
282
|
unless File.exists?( co )
|
279
283
|
# create new workspace
|
280
|
-
self.
|
284
|
+
self.create_workspace()
|
281
285
|
end
|
282
286
|
# update workspace
|
283
|
-
|
287
|
+
ret = []
|
288
|
+
self.update( to_identifier ).each do |e|
|
289
|
+
ret << e
|
290
|
+
yield e if block_given?
|
291
|
+
end
|
284
292
|
end
|
285
293
|
end
|
286
294
|
|
287
295
|
def checkout_pop()
|
288
296
|
co = RSCM::PathConverter.nativepath_to_filepath( @checkout_dir )
|
289
|
-
raise "A backing stream is required" if @backing_stream.nil?
|
290
|
-
raise "A working stream may not be given" unless @
|
297
|
+
raise AccurevException.new("A backing stream is required") if @backing_stream.nil?
|
298
|
+
raise AccurevException.new("A working stream may not be given") unless @workspace_stream.nil?
|
291
299
|
# for `accurev pop`: remove and re-pop the checkout copy
|
292
300
|
if File.exists?( co )
|
293
301
|
unless @overwrite
|
294
|
-
raise "Checkout dir #{co} already exists (@overwrite=#@overwrite)"
|
302
|
+
raise AccurevException.new("Checkout dir #{co} already exists (@overwrite=#@overwrite)")
|
295
303
|
end
|
296
304
|
rm_rf( co )
|
297
305
|
end
|
298
|
-
mkdir(co)
|
306
|
+
Dir.mkdir(co) unless File.exists?(co)
|
299
307
|
with_working_dir( co ) do
|
300
308
|
cmd = Command.instance
|
301
309
|
pop_out = cmd.accurev_nofx("pop",
|
@@ -315,12 +323,12 @@ module RSCM::Accurev
|
|
315
323
|
end
|
316
324
|
end
|
317
325
|
|
318
|
-
def
|
326
|
+
def create_workspace()
|
319
327
|
co = RSCM::PathConverter.nativepath_to_filepath( @checkout_dir )
|
320
|
-
raise "A backing stream is required" if @backing_stream.nil?
|
321
|
-
raise "A workspace is required" if @
|
328
|
+
raise AccurevException.new("A backing stream is required") if @backing_stream.nil?
|
329
|
+
raise AccurevException.new("A workspace is required") if @workspace_stream.nil?
|
322
330
|
if File.exist?( co ) and !@overwrite
|
323
|
-
raise "Checkout dir #{co} already exists (@overwrite=#@overwrite)"
|
331
|
+
raise AccurevException.new("Checkout dir #{co} already exists (@overwrite=#@overwrite)")
|
324
332
|
end
|
325
333
|
cmd = Command.instance
|
326
334
|
mkws_out = cmd.accurev_nofx( "mkws",
|
@@ -336,7 +344,7 @@ module RSCM::Accurev
|
|
336
344
|
#
|
337
345
|
# Updates an existing workspace stream checked out to @checkout_dir
|
338
346
|
#
|
339
|
-
def update( to_identifier=Time.
|
347
|
+
def update( to_identifier=Time.infinity )
|
340
348
|
co = RSCM::PathConverter.nativepath_to_filepath( @checkout_dir )
|
341
349
|
unless File.exists?( co )
|
342
350
|
raise AccurevException.new( "Workspace does not exist!" )
|
@@ -409,9 +417,11 @@ module RSCM::Accurev
|
|
409
417
|
end
|
410
418
|
|
411
419
|
# Takes a status flags line (eg, "(modified)(kept)")
|
412
|
-
# and returns a list of status flags.
|
420
|
+
# and returns a list of status flags (eg, ["modified", "kept"]).
|
413
421
|
def map_status( status_line )
|
414
|
-
|
422
|
+
s = status_line.split( /\W/ ).delete_if do |x|
|
423
|
+
x.nil? or x.length==0
|
424
|
+
end
|
415
425
|
end
|
416
426
|
|
417
427
|
end
|
@@ -12,13 +12,17 @@
|
|
12
12
|
#
|
13
13
|
module RSCM
|
14
14
|
module Accurev
|
15
|
+
|
16
|
+
# XXX - i'm using StandardError as the base class, rather than
|
17
|
+
# Exception, because test::unit only catches that.
|
18
|
+
# i'd like to have a better reason...
|
15
19
|
|
16
20
|
#
|
17
21
|
# General exception class for errors processing commands.
|
18
22
|
#
|
19
23
|
# @attr error_msg Error message output by accurev.
|
20
24
|
#
|
21
|
-
class AccurevException <
|
25
|
+
class AccurevException < StandardError
|
22
26
|
attr_reader :error_msg
|
23
27
|
def initialize( msg, error_msg=nil )
|
24
28
|
super( "#{msg}: #{error_msg}" )
|
File without changes
|
@@ -0,0 +1,142 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require 'erb'
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils
|
5
|
+
|
6
|
+
module Rake
|
7
|
+
module Coverage
|
8
|
+
|
9
|
+
class Summarizer
|
10
|
+
attr_accessor :trace_log, :output_dir, :index_template, :page_template
|
11
|
+
|
12
|
+
def initialize( trace_log, output_dir, index_template, page_template )
|
13
|
+
@trace_log = trace_log
|
14
|
+
@output_dir = output_dir
|
15
|
+
@index_template = index_template
|
16
|
+
@page_template = page_template
|
17
|
+
end
|
18
|
+
|
19
|
+
def summarize()
|
20
|
+
raise "@trace_log must be set" if @trace_log.nil?
|
21
|
+
raise "@output_dir must be set" if @output_dir.nil?
|
22
|
+
|
23
|
+
# stdout.printf("#%d:%s:%d:%s:%s: %s",
|
24
|
+
# get_thread_no,
|
25
|
+
# file,
|
26
|
+
# line,
|
27
|
+
# klass || '',
|
28
|
+
# EVENT_SYMBOL[event],
|
29
|
+
# get_line(file, line))
|
30
|
+
|
31
|
+
puts "Reading trace data #{@trace_log}..."
|
32
|
+
files = {}
|
33
|
+
File.open( @trace_log, "r" ).each_line do |line|
|
34
|
+
data, linedump = line.split(/ /)
|
35
|
+
threadno, file, n, classname, eventsym = data.split(/:/)
|
36
|
+
files[file] ||= []
|
37
|
+
files[file][n.to_i] ||= 0
|
38
|
+
files[file][n.to_i] += 1
|
39
|
+
end
|
40
|
+
|
41
|
+
page_tmpl = File.read( @page_template )
|
42
|
+
index_tmpl = File.read( @index_template )
|
43
|
+
|
44
|
+
puts "Outputting to #{@output_dir}..."
|
45
|
+
mkdir_p( @output_dir )
|
46
|
+
summary = {}
|
47
|
+
files.each do |file, linelist|
|
48
|
+
s = Summary.new( file )
|
49
|
+
lineno = 0
|
50
|
+
File.open( file ).each_line do |line|
|
51
|
+
lineno += 1
|
52
|
+
seen_this = false
|
53
|
+
# basic: line was traced
|
54
|
+
unless linelist[lineno].nil?
|
55
|
+
seen_this = true
|
56
|
+
end
|
57
|
+
# misc: various comments, blank lines, other "untraceables"
|
58
|
+
# mark them as seen
|
59
|
+
if line =~ /^\s*$/
|
60
|
+
seen_this = true
|
61
|
+
end
|
62
|
+
if line =~ /^\s*#/
|
63
|
+
seen_this = true
|
64
|
+
end
|
65
|
+
if line =~ /^\s*(require|class|module|end|else|include|def)/
|
66
|
+
seen_this = true
|
67
|
+
end
|
68
|
+
if line =~ /^\s*(attr_)/
|
69
|
+
seen_this = true
|
70
|
+
end
|
71
|
+
if line =~ /^\s*(private|protected|public)*\s$/
|
72
|
+
seen_this = true
|
73
|
+
end
|
74
|
+
s.seen << seen_this
|
75
|
+
if seen_this
|
76
|
+
s.covered_lines += 1
|
77
|
+
end
|
78
|
+
s.total_lines +=1
|
79
|
+
s.lines << line
|
80
|
+
end
|
81
|
+
summary[file] = s
|
82
|
+
raise "XXX" if s.nil?
|
83
|
+
pretty( page_tmpl, summary[file] )
|
84
|
+
end
|
85
|
+
index( index_tmpl, summary )
|
86
|
+
end
|
87
|
+
|
88
|
+
private # --------------------------------------------------------
|
89
|
+
|
90
|
+
def pretty( page_tmpl, s )
|
91
|
+
htmlfile = "#{@output_dir}/#{s.htmlfile}"
|
92
|
+
puts htmlfile
|
93
|
+
File.open( htmlfile, "w" ) do |out|
|
94
|
+
rhtml = ERB.new( page_tmpl )
|
95
|
+
out.print( rhtml.result( s.get_binding ) )
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def index( index_tmpl, summaries )
|
100
|
+
idx = IndexSummary.new
|
101
|
+
idx.summary = summaries
|
102
|
+
puts "#{@output_dir}/index.html"
|
103
|
+
File.open( "#{@output_dir}/index.html", "w" ) do |out|
|
104
|
+
rhtml = ERB.new( index_tmpl )
|
105
|
+
out.print( rhtml.result( idx.get_binding ) )
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
# data objects for erb binding -----------------------------------
|
112
|
+
|
113
|
+
class Summary
|
114
|
+
attr_accessor :filename, :total_lines, :covered_lines
|
115
|
+
attr_accessor :lines, :seen
|
116
|
+
def initialize( filename )
|
117
|
+
@filename = filename
|
118
|
+
@total_lines = 0
|
119
|
+
@covered_lines = 0
|
120
|
+
@lines = []
|
121
|
+
@seen = []
|
122
|
+
end
|
123
|
+
def pct
|
124
|
+
@covered_lines.to_f / @total_lines.to_f
|
125
|
+
end
|
126
|
+
def htmlfile
|
127
|
+
@filename.gsub(/[\.\/]/, '_') + ".html"
|
128
|
+
end
|
129
|
+
def get_binding
|
130
|
+
binding
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class IndexSummary
|
135
|
+
attr_accessor :summary
|
136
|
+
def get_binding
|
137
|
+
binding
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'test/rake/coverage_summary'
|
6
|
+
|
7
|
+
module Rake
|
8
|
+
module Coverage
|
9
|
+
|
10
|
+
class Task < TestTask
|
11
|
+
|
12
|
+
@@loader = "test/rake/coverage_loader.rb"
|
13
|
+
|
14
|
+
attr_accessor :trace_log
|
15
|
+
|
16
|
+
# set @name to "test_$name"
|
17
|
+
# will define two tasks, and a $name task depending on both of those
|
18
|
+
def initialize( name=:coverage )
|
19
|
+
@name = "#{name}__testtask".intern
|
20
|
+
@real_name = name
|
21
|
+
@summary_name = "#{name}__summarytask".intern
|
22
|
+
@trace_log = "xxx.trace"
|
23
|
+
@output_dir = "html/coverage"
|
24
|
+
# super.initialize() calls define()
|
25
|
+
super( @name )
|
26
|
+
end
|
27
|
+
|
28
|
+
# create tasks defined by this task object
|
29
|
+
# called from constructor
|
30
|
+
def define
|
31
|
+
task @real_name => [ @name, @summary_name ]
|
32
|
+
super # the testing task with trace logging turned on
|
33
|
+
desc "Generate coverage summary report"
|
34
|
+
task @summary_name do
|
35
|
+
s = Rake::Coverage::Summarizer.new(
|
36
|
+
@trace_log, @output_dir,
|
37
|
+
self.summary_index_template, self.summary_page_template )
|
38
|
+
s.summarize()
|
39
|
+
end
|
40
|
+
return self
|
41
|
+
end
|
42
|
+
|
43
|
+
# mod of testtask.rb's find_file:
|
44
|
+
# - fails if resource not found
|
45
|
+
# - takes descr of resource for fail message
|
46
|
+
# - does not append ".rb" to resource name
|
47
|
+
def find_file_or_die( resource, desc=nil ) # :nodoc:
|
48
|
+
desc="resource" if desc.nil?
|
49
|
+
$LOAD_PATH.each do |path|
|
50
|
+
file_path = File.join( path, resource )
|
51
|
+
return file_path if File.exist?( file_path )
|
52
|
+
end
|
53
|
+
fail "unable to find #{desc} (#{resource}) in load path"
|
54
|
+
end
|
55
|
+
|
56
|
+
# XXX loader assumes output to xxx.trace
|
57
|
+
# XXX should have the loader print to a pipe object in here,
|
58
|
+
# which can be stream-processed by Summarizer
|
59
|
+
def rake_loader # :nodoc:
|
60
|
+
find_file_or_die( @@loader, "coverage test loader" )
|
61
|
+
end
|
62
|
+
|
63
|
+
def summary_page_template # :nodoc:
|
64
|
+
find_file_or_die( "test/rake/page_template.html", "summary page template" )
|
65
|
+
end
|
66
|
+
|
67
|
+
def summary_index_template # :nodoc:
|
68
|
+
find_file_or_die( "test/rake/index_template.html", "summary index template" )
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -26,8 +26,9 @@
|
|
26
26
|
<td>Covered</td>
|
27
27
|
<td>% Covered</td>
|
28
28
|
</tr>
|
29
|
-
|
30
|
-
<% summary.each do |filename
|
29
|
+
|
30
|
+
<% summary.keys.sort.each do |filename| %>
|
31
|
+
<% s = summary[filename] %>
|
31
32
|
<tr>
|
32
33
|
<td><a href="<%= s.htmlfile %>"><%= filename %></a></td>
|
33
34
|
<td><%= s.total_lines %></td>
|
File without changes
|
data/test/t_api.rb
CHANGED
@@ -9,14 +9,25 @@ include RSCM::Accurev
|
|
9
9
|
|
10
10
|
class AccurevAPITest < Test::Unit::TestCase
|
11
11
|
|
12
|
+
@@tmpdir_count = 0
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@pwd = FileUtils.pwd
|
16
|
+
@acreplay = "#@pwd/test/acreplay.rb"
|
17
|
+
# give each fixture a distinct tmpdir to use
|
18
|
+
@tmpdir = "#{Dir.tmpdir}/#{$$}-#{@@tmpdir_count}.test"
|
19
|
+
@@tmpdir_count += 1
|
20
|
+
end
|
21
|
+
|
12
22
|
#def test_deduce_backing_workspace_streams()
|
13
23
|
# flunk( "XXX implement me" )
|
14
24
|
#end
|
15
25
|
|
16
26
|
def test_ac_hist()
|
17
27
|
Command.instance do |cmd|
|
18
|
-
cmd.accurev_bin = "
|
28
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/hist-oneweek-promotes.xml"
|
19
29
|
end
|
30
|
+
# no backing/ws streams given: update-only workspace
|
20
31
|
api = API.new( "test" )
|
21
32
|
# test array returns
|
22
33
|
txns = api.ac_hist( Time.utc(1980) ) # bound don't matter for this test
|
@@ -35,9 +46,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
35
46
|
|
36
47
|
def test_ac_files()
|
37
48
|
Command.instance do |cmd|
|
38
|
-
cmd.accurev_bin = "
|
49
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/ac-files.xml"
|
39
50
|
end
|
40
|
-
api = API.new( "test", "
|
51
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
41
52
|
# test array returns
|
42
53
|
files = api.ac_files( "." )
|
43
54
|
assert( files.length > 0, "Should get some stat-ed files" )
|
@@ -56,9 +67,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
56
67
|
|
57
68
|
def test_update_stale()
|
58
69
|
Command.instance do |cmd|
|
59
|
-
cmd.accurev_bin = "
|
70
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/update-stale.xml"
|
60
71
|
end
|
61
|
-
api = API.new( "test", "
|
72
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
62
73
|
begin
|
63
74
|
u_elements = api.update()
|
64
75
|
flunk( "Simulated update with stale data should throw exception" )
|
@@ -70,9 +81,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
70
81
|
|
71
82
|
def test_update_nochanges()
|
72
83
|
Command.instance do |cmd|
|
73
|
-
cmd.accurev_bin = "
|
84
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/update-nochanges.xml"
|
74
85
|
end
|
75
|
-
api = API.new( "test", "
|
86
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
76
87
|
u_elements = api.update()
|
77
88
|
assert_not_nil( u_elements )
|
78
89
|
assert( u_elements.size == 0 )
|
@@ -80,9 +91,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
80
91
|
|
81
92
|
def test_update_newwksp()
|
82
93
|
Command.instance do |cmd|
|
83
|
-
cmd.accurev_bin = "
|
94
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/update-newwksp.xml"
|
84
95
|
end
|
85
|
-
api = API.new( "test", "
|
96
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
86
97
|
u_elements = api.update()
|
87
98
|
assert_not_nil( u_elements )
|
88
99
|
assert_equal( 44, u_elements.length )
|
@@ -102,9 +113,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
102
113
|
# update-updates.xml - update with updated files
|
103
114
|
def test_update_updates()
|
104
115
|
Command.instance do |cmd|
|
105
|
-
cmd.accurev_bin = "
|
116
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/update-updates.xml"
|
106
117
|
end
|
107
|
-
api = API.new( "test", "
|
118
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
108
119
|
# XXX elements in elements list are just "modified" -
|
109
120
|
# may have been removed!
|
110
121
|
# XXX update() should return only filenames, right? eliminate dirs
|
@@ -125,9 +136,9 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
125
136
|
|
126
137
|
def test_info()
|
127
138
|
Command.instance do |cmd|
|
128
|
-
cmd.accurev_bin = "
|
139
|
+
cmd.accurev_bin = "#@acreplay #@pwd/test/eg/info.txt"
|
129
140
|
end
|
130
|
-
api = API.new( "test", "
|
141
|
+
api = API.new( "test", "backing-stream", "workspace-stream" )
|
131
142
|
info = api.ac_info()
|
132
143
|
assert( info.size == 13 )
|
133
144
|
# some crap
|
@@ -146,13 +157,13 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
146
157
|
end
|
147
158
|
|
148
159
|
def test_pop()
|
149
|
-
pwd = FileUtils.pwd
|
150
160
|
# want to use a tempdir since checkout_pop does a mkdir
|
151
|
-
tmpdir = "#{Dir.tmpdir}/#{$$}.test"
|
152
161
|
Command.instance do |cmd|
|
153
|
-
cmd.accurev_bin = "
|
162
|
+
cmd.accurev_bin = "#@acreplay #{@pwd}/test/eg/ac-pop.txt"
|
154
163
|
end
|
155
|
-
api
|
164
|
+
# pops, because api obj is constructed with backing stream but
|
165
|
+
# no workspace stream
|
166
|
+
api = API.new( @tmpdir, "backing-stream" )
|
156
167
|
files = api.checkout_pop()
|
157
168
|
assert_equal( 162, files.size() )
|
158
169
|
files.each do |f|
|
@@ -160,4 +171,55 @@ class AccurevAPITest < Test::Unit::TestCase
|
|
160
171
|
end
|
161
172
|
end
|
162
173
|
|
174
|
+
#XXX; commented out tests for not-yet-implemented functionality
|
175
|
+
#XXX; def test_pop_bug()
|
176
|
+
#XXX; Command.instance do |cmd|
|
177
|
+
#XXX; cmd.accurev_bin = "/usr/bin/xyzzy-fool" # won't exist
|
178
|
+
#XXX; end
|
179
|
+
#XXX; api = API.new( @tmpdir, "backing-stream", "workspace-stream" )
|
180
|
+
#XXX; begin
|
181
|
+
#XXX; api.checkout_pop()
|
182
|
+
#XXX; fail( "checkout_pop should have failed" )
|
183
|
+
#XXX; rescue AccurevException => e
|
184
|
+
#XXX; assert( (e.error_msg =~ /may not be given/), "Unexpected error: #{$!}" )
|
185
|
+
#XXX; end
|
186
|
+
#XXX; end
|
187
|
+
#XXX;
|
188
|
+
#XXX; def test_checkout()
|
189
|
+
#XXX; # check that checkout yields modded files XXX
|
190
|
+
#XXX; # need mock output for mkws; update
|
191
|
+
#XXX; Command.instance do |cmd|
|
192
|
+
#XXX; cmd.accurev_bin = "#@acreplay #{@pwd}/test/eg/update-updates.xml"
|
193
|
+
#XXX; end
|
194
|
+
#XXX; api = API.new( @tmpdir, "backing-stream", "workspace-stream" )
|
195
|
+
#XXX; paths = []
|
196
|
+
#XXX; api.checkout() do |path|
|
197
|
+
#XXX; paths << path
|
198
|
+
#XXX; end
|
199
|
+
#XXX; assert( paths.length == 251 ) # XXX
|
200
|
+
#XXX; end
|
201
|
+
#XXX:
|
202
|
+
#XXX: # XXX should support checking out an existing workspace (by reparenting?)
|
203
|
+
#XXX: # XXX should not create workspace with ac mkws unless ws does not exist
|
204
|
+
#XXX: # XXX should recover from name collision in mkws (eg, if ws is deleted)
|
205
|
+
#XXX: def test_checkout_workspace()
|
206
|
+
#XXX: raise "XXX implement me!"
|
207
|
+
#XXX: end
|
208
|
+
|
209
|
+
def test_name()
|
210
|
+
api = API.new( @tmpdir, "depot" )
|
211
|
+
name = api.name()
|
212
|
+
assert( name == 'Accurev' )
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_transactional_p()
|
216
|
+
api = API.new( @tmpdir, "depot" )
|
217
|
+
assert( api.transactional? )
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_supports_trigger_p()
|
221
|
+
api = API.new( @tmpdir, "depot" )
|
222
|
+
assert( ! api.supports_trigger? )
|
223
|
+
end
|
224
|
+
|
163
225
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rscm-accurev
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date:
|
6
|
+
version: 0.0.8
|
7
|
+
date: 2006-01-24 00:00:00 -06:00
|
8
8
|
summary: "RSCM::Accurev - RSCM API for Accurev"
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -32,7 +32,6 @@ files:
|
|
32
32
|
- bumprelease.sh
|
33
33
|
- doc
|
34
34
|
- eg
|
35
|
-
- html
|
36
35
|
- lib
|
37
36
|
- LICENSE
|
38
37
|
- Rakefile
|
@@ -51,16 +50,19 @@ files:
|
|
51
50
|
- lib/rscm/scm/accurev/exception.rb
|
52
51
|
- lib/rscm/scm/accurev/filterio.rb
|
53
52
|
- lib/rscm/scm/accurev/xml.rb
|
53
|
+
- lib/test/rake
|
54
54
|
- lib/test/unit
|
55
|
+
- lib/test/rake/coverage_loader.rb
|
56
|
+
- lib/test/rake/coverage_summary.rb
|
57
|
+
- lib/test/rake/coveragetask.rb
|
58
|
+
- lib/test/rake/index_template.html
|
59
|
+
- lib/test/rake/page_template.html
|
55
60
|
- lib/test/unit/ui
|
56
61
|
- lib/test/unit/ui/xml
|
57
62
|
- lib/test/unit/ui/xml/testrunner.rb
|
58
63
|
- lib/test/unit/ui/xml/xmltestrunner.xslt
|
59
64
|
- test/acreplay.rb
|
60
|
-
- test/coverage
|
61
65
|
- test/eg
|
62
|
-
- test/fl
|
63
|
-
- test/suite_all.rb
|
64
66
|
- test/t_api.rb
|
65
67
|
- test/t_command.rb
|
66
68
|
- test/t_filterio.rb
|
@@ -68,13 +70,6 @@ files:
|
|
68
70
|
- test/t_rscm.rb
|
69
71
|
- test/t_scrubio.rb
|
70
72
|
- test/t_xmlmapper.rb
|
71
|
-
- test/coverage/analyzer.rb
|
72
|
-
- test/coverage/c_loader.rb
|
73
|
-
- test/coverage/cover.rb
|
74
|
-
- test/coverage/coverage_loader.rb
|
75
|
-
- test/coverage/coveragetask.rb
|
76
|
-
- test/coverage/index_tmpl.html
|
77
|
-
- test/coverage/template.html
|
78
73
|
- test/eg/ac-files.xml
|
79
74
|
- test/eg/ac-pop.txt
|
80
75
|
- test/eg/files-various-states.xml
|
@@ -108,7 +103,7 @@ dependencies:
|
|
108
103
|
version_requirements: !ruby/object:Gem::Version::Requirement
|
109
104
|
requirements:
|
110
105
|
-
|
111
|
-
- "
|
106
|
+
- "~>"
|
112
107
|
- !ruby/object:Gem::Version
|
113
|
-
version: 0.3
|
108
|
+
version: "0.3"
|
114
109
|
version:
|
data/test/coverage/analyzer.rb
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
require 'erb'
|
3
|
-
require 'fileutils'
|
4
|
-
include FileUtils
|
5
|
-
|
6
|
-
#
|
7
|
-
# usage:
|
8
|
-
# rake coverage
|
9
|
-
#
|
10
|
-
#
|
11
|
-
|
12
|
-
trace_file = ARGV.shift
|
13
|
-
output_dir = ARGV.shift
|
14
|
-
template_file = ARGV.shift
|
15
|
-
template_index = ARGV.shift
|
16
|
-
|
17
|
-
if trace_file.nil? or output_dir.nil?
|
18
|
-
raise "Usage: $0 <tracefile> <output_dir> <template> <index_template>"
|
19
|
-
end
|
20
|
-
|
21
|
-
# stdout.printf("#%d:%s:%d:%s:%s: %s",
|
22
|
-
# get_thread_no,
|
23
|
-
# file,
|
24
|
-
# line,
|
25
|
-
# klass || '',
|
26
|
-
# EVENT_SYMBOL[event],
|
27
|
-
# get_line(file, line))
|
28
|
-
|
29
|
-
puts "Reading trace data #{trace_file}..."
|
30
|
-
files = {}
|
31
|
-
File.open( trace_file, "r" ).each_line do |line|
|
32
|
-
data, linedump = line.split(/ /)
|
33
|
-
threadno, file, n, classname, eventsym = data.split(/:/)
|
34
|
-
files[file] ||= []
|
35
|
-
files[file][n.to_i] ||= 0
|
36
|
-
files[file][n.to_i] += 1
|
37
|
-
end
|
38
|
-
|
39
|
-
class Summary
|
40
|
-
attr_accessor :filename, :total_lines, :covered_lines
|
41
|
-
attr_accessor :lines, :seen
|
42
|
-
def initialize( filename )
|
43
|
-
@filename = filename
|
44
|
-
@total_lines = 0
|
45
|
-
@covered_lines = 0
|
46
|
-
@lines = []
|
47
|
-
@seen = []
|
48
|
-
end
|
49
|
-
def pct
|
50
|
-
@covered_lines.to_f / @total_lines.to_f
|
51
|
-
end
|
52
|
-
def htmlfile
|
53
|
-
@filename.gsub(/[\.\/]/, '_') + ".html"
|
54
|
-
end
|
55
|
-
def get_binding
|
56
|
-
binding
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
class IndexSummary
|
61
|
-
attr_accessor :summary
|
62
|
-
def get_binding
|
63
|
-
binding
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def pretty( template, output_dir, s )
|
68
|
-
htmlfile = "#{output_dir}/#{s.htmlfile}"
|
69
|
-
puts htmlfile
|
70
|
-
File.open( htmlfile, "w" ) do |out|
|
71
|
-
rhtml = ERB.new( template )
|
72
|
-
out.print( rhtml.result( s.get_binding ) )
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def index( template, output_dir, summaries )
|
77
|
-
idx = IndexSummary.new
|
78
|
-
idx.summary = summaries
|
79
|
-
puts "#{output_dir}/index.html"
|
80
|
-
File.open( "#{output_dir}/index.html", "w" ) do |out|
|
81
|
-
rhtml = ERB.new( template )
|
82
|
-
out.print( rhtml.result( idx.get_binding ) )
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
template = File.read( template_file )
|
87
|
-
index_tmpl = File.read( template_index )
|
88
|
-
|
89
|
-
puts "Outputting to #{output_dir}..."
|
90
|
-
mkdir_p( output_dir )
|
91
|
-
summary = {}
|
92
|
-
files.each do |file, linelist|
|
93
|
-
s = Summary.new( file )
|
94
|
-
lineno = 0
|
95
|
-
File.open( file ).each_line do |line|
|
96
|
-
lineno += 1
|
97
|
-
seen_this = false
|
98
|
-
# basic: line was traced
|
99
|
-
unless linelist[lineno].nil?
|
100
|
-
seen_this = true
|
101
|
-
end
|
102
|
-
# misc: various comments, blank lines, other "untraceables"
|
103
|
-
# mark them as seen
|
104
|
-
if line =~ /^\s*$/
|
105
|
-
seen_this = true
|
106
|
-
end
|
107
|
-
if line =~ /^\s*#/
|
108
|
-
seen_this = true
|
109
|
-
end
|
110
|
-
if line =~ /^\s*(require|class|module|end|else|include|def)/
|
111
|
-
seen_this = true
|
112
|
-
end
|
113
|
-
s.seen << seen_this
|
114
|
-
if seen_this
|
115
|
-
s.covered_lines += 1
|
116
|
-
end
|
117
|
-
s.total_lines +=1
|
118
|
-
s.lines << line
|
119
|
-
end
|
120
|
-
summary[file] = s
|
121
|
-
pretty( template, output_dir, summary[file] )
|
122
|
-
end
|
123
|
-
index( index_tmpl, output_dir, summary )
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
data/test/coverage/cover.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# set_trace_func proc do |event,file,line,id,binding,classname|
|
4
|
-
# 'c-call' # call into clib - file:line -> caller
|
5
|
-
# 'c-return' # return out of clib - file:line -> caller
|
6
|
-
# 'call' # call into ruby fn - file:line -> fn def
|
7
|
-
# 'class' # start class/mod def (only for dyn classes?)
|
8
|
-
# 'end' # end class/mod def
|
9
|
-
# 'line' # exec line
|
10
|
-
# 'raise' # exception
|
11
|
-
# 'return' # return from ruby fn - file:line -> returning stmt
|
12
|
-
# end
|
13
|
-
|
14
|
-
require 'rexml/document'
|
15
|
-
include REXML
|
16
|
-
|
17
|
-
# defining script_lines make ruby dump all scripts into this hash
|
18
|
-
SCRIPT_LINES__ = {} unless defined? SCRIPT_LINES__
|
19
|
-
|
20
|
-
|
21
|
-
module Test
|
22
|
-
|
23
|
-
class Cover
|
24
|
-
|
25
|
-
attr_accessor :codebase_files
|
26
|
-
|
27
|
-
def initialize()
|
28
|
-
@codebase_files = []
|
29
|
-
# seen_lines is a hash of hashes
|
30
|
-
@seen_lines = {}
|
31
|
-
end
|
32
|
-
|
33
|
-
def trace_func( event, file, line, id, binding, classname )
|
34
|
-
return if event == 'c-call'
|
35
|
-
return if event == 'c-return'
|
36
|
-
return if event == 'class'
|
37
|
-
@seen_lines[file] ||= {}
|
38
|
-
@seen_lines[file][line] ||= 0
|
39
|
-
@seen_lines[file][line] += 1
|
40
|
-
end
|
41
|
-
|
42
|
-
def coverage()
|
43
|
-
set_trace_func( self.method(:trace_func).to_proc )
|
44
|
-
yield self
|
45
|
-
set_trace_func( nil )
|
46
|
-
end
|
47
|
-
|
48
|
-
def coverage_all()
|
49
|
-
set_trace_func( self.method(:trace_func).to_proc )
|
50
|
-
end
|
51
|
-
|
52
|
-
def coverage_clear()
|
53
|
-
set_trace_func( nil )
|
54
|
-
end
|
55
|
-
|
56
|
-
def to_xml
|
57
|
-
doc = Document.new()
|
58
|
-
doc << XMLDecl.new()
|
59
|
-
root = Element.new( "coverage" )
|
60
|
-
doc << root
|
61
|
-
root.attributes['timestamp'] = Time.now
|
62
|
-
codebase = Element.new( "codebase" )
|
63
|
-
root << codebase
|
64
|
-
@codebase_files.each do |file|
|
65
|
-
e = Element.new( "file" )
|
66
|
-
e.attributes['name'] = file
|
67
|
-
codebase << e
|
68
|
-
if @seen_lines.has_key?( file )
|
69
|
-
seen = Element.new( "seen" )
|
70
|
-
e << seen
|
71
|
-
linehash = @seen_lines[file]
|
72
|
-
next unless SCRIPT_LINES__.has_key?( file )
|
73
|
-
linehash.each do |n,occur|
|
74
|
-
le = Element.new( "line" )
|
75
|
-
le.attributes['n'] = n
|
76
|
-
le.attributes['occur'] = occur
|
77
|
-
seen << le
|
78
|
-
end
|
79
|
-
ce = Element.new( "coverage" )
|
80
|
-
ce.attributes['seen'] = linehash.size
|
81
|
-
ce.attributes['total'] = SCRIPT_LINES__[file].size
|
82
|
-
ce.attributes['pct'] = linehash.size.to_f / SCRIPT_LINES__[file].size.to_f
|
83
|
-
seen << ce
|
84
|
-
end
|
85
|
-
end
|
86
|
-
return doc
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
#require 'tracer'
|
4
|
-
require 'test/cover'
|
5
|
-
|
6
|
-
cover = Test::Cover.new()
|
7
|
-
cover.coverage_all
|
8
|
-
cover.codebase_files << "./lib/rscm/accurev.rb"
|
9
|
-
cover.codebase_files << "./lib/rscm/scm/accurev/command.rb"
|
10
|
-
|
11
|
-
#Tracer.on
|
12
|
-
ARGV.each do |f|
|
13
|
-
load f unless f =~ /^-/
|
14
|
-
end
|
15
|
-
|
16
|
-
END {
|
17
|
-
cover.coverage_clear
|
18
|
-
File.open( "xxx.xml", "w" ) do |f|
|
19
|
-
f.puts( cover.to_xml )
|
20
|
-
end
|
21
|
-
}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
#/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
require 'rake'
|
4
|
-
require 'rake/tasklib'
|
5
|
-
|
6
|
-
module Rake
|
7
|
-
|
8
|
-
class CoverageTask < TaskLib
|
9
|
-
attr_accessor :name
|
10
|
-
attr_accessor :libs
|
11
|
-
attr_accessor :test_files
|
12
|
-
attr_accessor :ruby_opts
|
13
|
-
|
14
|
-
def initialize( name=:coverage )
|
15
|
-
@name = name
|
16
|
-
@libs = ["lib"]
|
17
|
-
@test_files = nil
|
18
|
-
@ruby_opts = []
|
19
|
-
yield self if block_given?
|
20
|
-
define
|
21
|
-
end
|
22
|
-
|
23
|
-
def define
|
24
|
-
lib_path = @libs.join( File::PATH_SEPARATOR )
|
25
|
-
@ruby_opts.unshift( "-I#{lib_path}" )
|
26
|
-
task @name do
|
27
|
-
ruby @ruby_opts.join(" ") +
|
28
|
-
"test/coverage_loader.rb " +
|
29
|
-
file_list.collect {|fn| "\"#{fn}\"".join(" ")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_loader()
|
34
|
-
find_file( 'test/coverage_loader' ) or fail "I DIE"
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
data/test/fl
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
ac-files.xml
|
2
|
-
ac-pop.txt
|
3
|
-
files-various-states.xml
|
4
|
-
hist-oneweek-all.xml
|
5
|
-
hist-oneweek-external.xml
|
6
|
-
hist-oneweek-promotes.xml
|
7
|
-
info.txt
|
8
|
-
stat-a-various.xml
|
9
|
-
stat-m.xml
|
10
|
-
stat-overlap.xml
|
11
|
-
stat-x.xml
|
12
|
-
update-i-mods-and-updates-and-overlap.xml
|
13
|
-
update-i-nochanges.xml
|
14
|
-
update-i-updates.xml
|
15
|
-
update-newwksp.xml
|
16
|
-
update-nochanges.xml
|
17
|
-
update-stale.xml
|
18
|
-
update-updates.xml
|
data/test/suite_all.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'test/unit/ui/console/testrunner'
|
5
|
-
require 'rubygems'
|
6
|
-
#require 'coverage'
|
7
|
-
|
8
|
-
class SuiteCrap
|
9
|
-
def self.suite
|
10
|
-
suite = Test::Unit::TestSuite.new
|
11
|
-
Dir.glob( 'test/t_*.rb' ) do |t|
|
12
|
-
require t
|
13
|
-
end
|
14
|
-
ObjectSpace.each_object( Test::Unit::TestCase ) do |k|
|
15
|
-
puts ">Adding #{k}"
|
16
|
-
suite << k.suite
|
17
|
-
end
|
18
|
-
return suite
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class SuiteAll
|
23
|
-
def self.suite
|
24
|
-
suite = Test::Unit::TestSuite.new
|
25
|
-
require 'test/t_api.rb'
|
26
|
-
suite << AccurevAPITest
|
27
|
-
return suite
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
if $0 == __FILE__
|
32
|
-
Test::Unit::UI::Console::TestRunner.run( SuiteAll )
|
33
|
-
end
|
34
|
-
|