testability-driver-runner 1.1.1 → 1.2.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.
data/lib/tdrunner.rb CHANGED
@@ -72,7 +72,7 @@ module TDRunner
72
72
 
73
73
  elsif args[0]=='--version'
74
74
  args.shift
75
- puts '1.1.1'
75
+ puts '1.2.0'
76
76
 
77
77
  else
78
78
  break
@@ -190,6 +190,7 @@ module TDRunner
190
190
  end
191
191
 
192
192
  write_failed_sip_file($tdrunner_parameters)
193
+ write_recorded_sip_file($tdrunner_parameters)
193
194
  end
194
195
 
195
196
  #Method for displaying tdrunner help in commandline
@@ -290,6 +291,9 @@ module TDRunner
290
291
  puts "-t execution_profile"
291
292
  puts "\t\tCreate execution profile of failed Test::Unit tests"
292
293
 
294
+ puts "-r execution_profile"
295
+ puts "\t\tCreate execution profile recording of executed tests"
296
+
293
297
  puts "--teardown\tRun test unit teardown only when the testcase is failed."
294
298
 
295
299
  puts "--ordered\tUse with execution profile to run tests as they are ordered"
@@ -100,7 +100,7 @@ module TDRunner
100
100
  begin
101
101
  #paramfile = File.new(paramfilename)
102
102
  #sutlist = paramfile.readlines.join.scan(/<sut +id *= *"([^"]+)"/).map{|i| i[0]}.join(' ')
103
- sutlist = MobyUtil::ParameterXml.instance.sut_list.reject { |item| item.to_s == 'sut_generic' }.join(' ')
103
+ sutlist = TDriver.suts.reject { |item| item.to_s == 'sut_generic' }.join(' ')
104
104
  rescue
105
105
  #sutlist = "Failed to read '#{paramfilename}': #{$!.to_s.gsub(/\s+/, ' ')}"
106
106
  sutlist = "ERROR (#{$!.to_s.gsub(/\s+/, ' ')})"
@@ -45,6 +45,7 @@ module TDRunner
45
45
  remove_excluded_files_from(potential_feature_files)
46
46
  lpt_feature_files = potential_feature_files.sort
47
47
  lpt_feature_files,content_arr=randomize_features(lpt_feature_files,$tdrunner_parameters)
48
+ record_test_to_recorder_profile('cucumber',lpt_feature_files)
48
49
  lpt_feature_files
49
50
  end
50
51
  end
@@ -89,6 +89,15 @@ module TDRunner
89
89
  end
90
90
  end
91
91
 
92
+ def write_recorded_sip_file(tdrunner_parameters)
93
+ if($recorded_tests!=nil && tdrunner_parameters.recorded_execution_profile != nil && !$recorded_tests.empty?)
94
+ file = File.open(tdrunner_parameters.recorded_execution_profile.to_s,'w')
95
+ $recorded_tests.flatten.each { |x| file.write(x.to_s+"\n")}
96
+ file.close
97
+ puts 'Recorded execution profile created: '+ tdrunner_parameters.recorded_execution_profile
98
+ end
99
+ end
100
+
92
101
  def trap_pause
93
102
  puts "\nExecution paused...\n"
94
103
  puts "\nStop execution Yes or No?:"
@@ -539,6 +548,20 @@ module TDRunner
539
548
  "#{m}m#{'%.3f' % s}s"
540
549
  end
541
550
 
551
+ def record_test_to_recorder_profile(framework,record)
552
+ if $tdrunner_parameters.recorded_execution_profile
553
+ $recorded_tests ||= Array.new
554
+ case framework
555
+ when 'cucumber'
556
+ record.each do |feature|
557
+ $recorded_tests << "#{feature}=1"
558
+ end
559
+ when 'test_unit'
560
+ $recorded_tests << "#{record}=1"
561
+ end
562
+ end
563
+ end
564
+
542
565
  def wait_for_starttime(tdrunner_parameters)
543
566
  #If the start time is defined then only start execution at this time
544
567
  if tdrunner_parameters.start_time!=nil
@@ -125,6 +125,7 @@ module TDRunner
125
125
  @tdrunner_combine_report=nil
126
126
  @start_time=nil
127
127
  @failed_execution_profile=nil
128
+ @recorded_execution_profile=nil
128
129
  parse_tdrunner_parameters(args)
129
130
  end
130
131
 
@@ -194,6 +195,7 @@ module TDRunner
194
195
  make_execution_profile=false
195
196
  combine_report_defined=false
196
197
  make_failed_execution_profile_defined=false
198
+ make_recorded_execution_profile_defined=false
197
199
  parameters_contains_framework_command=check_if_parameters_contain_a_framework_command(args)
198
200
 
199
201
  args.each do |value|
@@ -248,6 +250,10 @@ module TDRunner
248
250
  make_failed_execution_profile_defined=false
249
251
  @failed_execution_profile=value
250
252
  end
253
+ if make_recorded_execution_profile_defined==true
254
+ make_recorded_execution_profile_defined=false
255
+ @recorded_execution_profile=value
256
+ end
251
257
 
252
258
  if value.to_s == '--teardown'
253
259
  @tdrunner_teardown=true
@@ -279,6 +285,9 @@ module TDRunner
279
285
  if value.to_s == '-t'
280
286
  make_failed_execution_profile_defined=true
281
287
  end
288
+ if value.to_s == '-r'
289
+ make_recorded_execution_profile_defined=true
290
+ end
282
291
 
283
292
  end
284
293
 
@@ -316,6 +325,10 @@ module TDRunner
316
325
  failed_profile_location=create_failed_sip(@failed_execution_profile)
317
326
  @failed_execution_profile=failed_profile_location
318
327
  end
328
+ if @recorded_execution_profile!=nil
329
+ recorded_profile_location=create_failed_sip(@recorded_execution_profile)
330
+ @recorded_execution_profile=recorded_profile_location
331
+ end
319
332
  end
320
333
  def create_failed_sip(failed_sip_profile)
321
334
  sip_file=nil
@@ -406,6 +419,9 @@ module TDRunner
406
419
  def failed_execution_profile()
407
420
  @failed_execution_profile
408
421
  end
422
+ def recorded_execution_profile()
423
+ @recorded_execution_profile
424
+ end
409
425
  def tdrunner_ordered()
410
426
  @tdrunner_ordered
411
427
  end
@@ -174,6 +174,7 @@ begin
174
174
  current_run_time=Time.now-run_start_time
175
175
  puts 'Run time: '+ format_duration(current_run_time)
176
176
  #end SIERRA runner
177
+
177
178
 
178
179
  result.remove_listener(Test::Unit::TestResult::FAULT, fault_listener)
179
180
  result.remove_listener(Test::Unit::TestResult::CHANGED, result_listener)
@@ -267,6 +268,129 @@ begin
267
268
  module Test
268
269
  module Unit
269
270
  class TestCase
271
+
272
+ DESCENDANTS = []
273
+
274
+ class << self
275
+ def inherited(sub_class)
276
+ DESCENDANTS << sub_class
277
+ end
278
+
279
+ # Rolls up all of the test* methods in the fixture into
280
+ # one suite, creating a new instance of the fixture for
281
+ # each method.
282
+ def suite
283
+ method_names = public_instance_methods(true).collect {|name| name.to_s}
284
+ tests = method_names.delete_if {|method_name| method_name !~ /^test./}
285
+ suite = TestSuite.new(name, self)
286
+ tests.sort.each do |test|
287
+ catch(:invalid_test) do
288
+ suite << new(test)
289
+ end
290
+ end
291
+ if suite.empty?
292
+ catch(:invalid_test) do
293
+ suite << new("default_test")
294
+ end
295
+ end
296
+ suite
297
+ end
298
+
299
+ # Called before every test case runs. Can be used
300
+ # to set up fixture information used in test case
301
+ # scope.
302
+ #
303
+ # Here is an example test case:
304
+ # class TestMyClass < Test::Unit::TestCase
305
+ # class << self
306
+ # def startup
307
+ # ...
308
+ # end
309
+ # end
310
+ #
311
+ # def setup
312
+ # ...
313
+ # end
314
+ #
315
+ # def test_my_class1
316
+ # ...
317
+ # end
318
+ #
319
+ # def test_my_class2
320
+ # ...
321
+ # end
322
+ # end
323
+ #
324
+ # Here is a call order:
325
+ # * startup
326
+ # * setup
327
+ # * test_my_class1 (or test_my_class2)
328
+ # * setup
329
+ # * test_my_class2 (or test_my_class1)
330
+ #
331
+ # Note that you should not assume test order. Tests
332
+ # should be worked in any order.
333
+ def startup
334
+
335
+ end
336
+
337
+ # Called after every test case runs. Can be used to tear
338
+ # down fixture information used in test case scope.
339
+ #
340
+ # Here is an example test case:
341
+ # class TestMyClass < Test::Unit::TestCase
342
+ # class << self
343
+ # def shutdown
344
+ # ...
345
+ # end
346
+ # end
347
+ #
348
+ # def teardown
349
+ # ...
350
+ # end
351
+ #
352
+ # def test_my_class1
353
+ # ...
354
+ # end
355
+ #
356
+ # def test_my_class2
357
+ # ...
358
+ # end
359
+ # end
360
+ #
361
+ # Here is a call order:
362
+ # * test_my_class1 (or test_my_class2)
363
+ # * teardown
364
+ # * test_my_class2 (or test_my_class1)
365
+ # * teardown
366
+ # * shutdown
367
+ #
368
+ # Note that you should not assume test order. Tests
369
+ # should be worked in any order.
370
+ def shutdown
371
+
372
+ end
373
+ end
374
+
375
+ attr_reader :method_name
376
+
377
+ # Creates a new instance of the fixture for running the
378
+ # test represented by test_method_name.
379
+ def initialize(test_method_name)
380
+ throw :invalid_test unless respond_to?(test_method_name)
381
+ test_method = method(test_method_name)
382
+ throw :invalid_test if test_method.arity > 0
383
+ if test_method.respond_to?(:owner)
384
+ if test_method.owner.class != Module and
385
+ self.class != test_method.owner
386
+ throw :invalid_test
387
+ end
388
+ end
389
+ @method_name = test_method_name
390
+ @test_passed = true
391
+ @interrupted = false
392
+ end
393
+
270
394
  # Runs the individual test method represented by this
271
395
  # instance of the fixture, collecting statistics, failures
272
396
  # and errors in result.
@@ -276,23 +400,37 @@ begin
276
400
  @_result = result
277
401
  @case_contents_array=case_contents_array
278
402
  test_skipped = false
403
+ skip_text = ""
404
+
279
405
  begin
280
406
 
281
- if MobyUtil::Parameter[ :runner_skip_enabled, "false" ] == "true"
282
-
283
- fail_execs = tdriver_get_current_by_status( "failed" )
284
- pass_execs = tdriver_get_current_by_status( "passed" )
285
-
286
- fail_execs = fail_execs.respond_to?( :count ) ? fail_execs.count : 0
287
- pass_execs = pass_execs.respond_to?( :count ) ? pass_execs.count : 0
407
+ if skip_sequential = TDriver::Parameter[ :runner_sequence_skip, "false" ] == "true"
408
+
409
+ fails_now = tdriver_get_sequential_fails
410
+ fail_treshold = TDriver::Parameter[ :runner_sequence_treshold, 1 ].to_i
411
+ skip_text = "Not run due to sequential failures over treshold (#{ fail_treshold })."
412
+ test_skipped = fails_now > fail_treshold
413
+
414
+ end
415
+
416
+ if !test_skipped
417
+ if TDriver::Parameter[ :runner_skip_enabled, "false" ] == "true"
288
418
 
289
- skip_treshold = MobyUtil::Parameter[ :runner_skip_treshold, "5" ].to_i
419
+ fail_execs = tdriver_get_current_by_status( "failed" )
420
+ pass_execs = tdriver_get_current_by_status( "passed" )
421
+
422
+ fail_execs = fail_execs.respond_to?( :count ) ? fail_execs.count : 0
423
+ pass_execs = pass_execs.respond_to?( :count ) ? pass_execs.count : 0
424
+
425
+ skip_treshold = TDriver::Parameter[ :runner_skip_treshold, "5" ].to_i
426
+
427
+ if fail_execs + pass_execs >= skip_treshold and fail_execs + pass_execs > 0
428
+ skip_rate = TDriver::Parameter[ :runner_skip_fail_rate, "66" ].to_i / 100.0
429
+ skip_text = "Not run due to consistent failures exceeding maximum fail rate(#{ skip_rate } %)."
430
+ test_skipped = fail_execs/(fail_execs + pass_execs).to_f >= skip_rate
431
+ end
290
432
 
291
- if fail_execs + pass_execs >= skip_treshold and fail_execs + pass_execs > 0
292
- skip_rate = MobyUtil::Parameter[ :runner_skip_fail_rate, "66" ].to_i / 100.0
293
- test_skipped = fail_execs/(fail_execs + pass_execs).to_f >= skip_rate
294
433
  end
295
-
296
434
  end
297
435
 
298
436
  if !test_skipped
@@ -313,8 +451,8 @@ begin
313
451
 
314
452
  else
315
453
 
316
- tdriver_report_log( "Not run due to consistent failures." )
317
- tdriver_report_set_test_case_status( MobyUtil::Parameter[ :runner_skip_status, "not run" ] )
454
+ tdriver_report_log( skip_text )
455
+ tdriver_report_set_test_case_status( TDriver::Parameter[ :runner_skip_status, "not run" ] )
318
456
 
319
457
  end
320
458
 
@@ -347,17 +485,26 @@ begin
347
485
  raise if PASSTHROUGH_EXCEPTIONS.include? $!.class
348
486
  add_error($!)
349
487
  end
350
- end
488
+ end
351
489
  @case_contents_array[current_index]=[@case_contents_array[current_index].at(0),@case_contents_array[current_index].at(1),@case_contents_array[current_index].at(2),@test_passed] if @case_contents_array!=nil && status==nil
352
490
  end
353
491
  result.add_run
354
492
  yield(FINISHED, name)
355
493
  end
494
+
356
495
  end
357
496
  class TestSuite
358
497
  include TDRunner::TDRunnerMonitor
359
498
  # Runs the tests and/or suites contained in this
360
499
  # TestSuite.
500
+
501
+ # Creates a new TestSuite with the given name.
502
+ def initialize(name="Unnamed TestSuite", test_case=nil)
503
+ @name = name
504
+ @tests = []
505
+ @test_case = test_case
506
+ end
507
+
361
508
  def parse_parameter_string(string)
362
509
  s = string
363
510
 
@@ -387,13 +534,15 @@ begin
387
534
  end
388
535
  def run(result,arguments=nil,case_contents_array=nil, current_index=nil,status=nil, &progress_block)
389
536
  yield(STARTED, name)
537
+ run_startup(result)
390
538
  @tests,@case_contents_array=randomize_test_cases(@tests,$tdrunner_parameters)
391
539
  @test_level_and_result=Array.new if @test_level_and_result==nil
392
540
  current_index=0
393
541
  previous_test_level=0
394
542
  previous_test_level_result=nil
395
543
  current_test_level=0
396
- @tests.each do |test|
544
+ @tests.each do |test|
545
+ record_test_to_recorder_profile('test_unit',test)
397
546
  parameters_arr=nil
398
547
  eval_parameters_arr=[]
399
548
  if @case_contents_array!=nil
@@ -450,8 +599,25 @@ begin
450
599
  current_index+=1
451
600
  end
452
601
  add_failed_testunit_tests($tdrunner_parameters, @case_contents_array)
602
+ run_shutdown(result)
453
603
  yield(FINISHED, name)
454
604
  end
605
+
606
+ private
607
+ def run_startup(result)
608
+ return if @test_case.nil? or !@test_case.respond_to?(:startup)
609
+
610
+ @test_case.startup
611
+
612
+ end
613
+
614
+ def run_shutdown(result)
615
+ return if @test_case.nil? or !@test_case.respond_to?(:shutdown)
616
+
617
+ @test_case.shutdown
618
+
619
+ end
620
+
455
621
  end
456
622
  end
457
623
  end
data/rakefile CHANGED
@@ -56,8 +56,7 @@ def make_spec
56
56
  s.add_dependency("testability-driver")
57
57
  s.add_dependency("rails", ">=2.3.5")
58
58
  s.add_dependency("zippy")
59
- s.add_dependency("sqlite3-ruby", ">=1.2.5")
60
-
59
+ s.add_dependency("sqlite3-ruby")
61
60
  end
62
61
  end
63
62
 
@@ -87,7 +86,7 @@ task :gem_install do
87
86
  puts "### Installing GEM #{GEM_NAME} ###"
88
87
  puts "#########################################################"
89
88
  tdrunner_gem = "tdrunner-#{@__gem_version}.gem"
90
- if /win/ =~ RUBY_PLATFORM
89
+ if /win/ =~ RUBY_PLATFORM || /mingw32/ =~ RUBY_PLATFORM
91
90
  cmd = "gem install pkg\\*.gem --LOCAL"
92
91
  else
93
92
  cmd = "gem install pkg/*.gem --LOCAL"
@@ -106,7 +105,7 @@ task :gem_uninstall do
106
105
  puts "#########################################################"
107
106
  tdrunner_gem = "tdrunner-#{@__gem_version}.gem"
108
107
  FileUtils.rm(Dir.glob('pkg/*gem'))
109
- if /win/ =~ RUBY_PLATFORM
108
+ if /win/ =~ RUBY_PLATFORM || /mingw32/ =~ RUBY_PLATFORM
110
109
  cmd = "del /F /Q pkg\\"
111
110
  failure = system(cmd)
112
111
  #raise "deleting #{GEM_NAME} in pkg folder failed" if (failure != true) or ($? != 0)
@@ -229,7 +229,7 @@ class ReportEditor::TestRun::CasesController < ApplicationController
229
229
  end
230
230
 
231
231
  def test_case_comment(test_case)
232
- pass_statuses=MobyUtil::Parameter[ :report_passed_statuses, "passed" ].split('|')
232
+ pass_statuses=TDriver::Parameter[ :report_passed_statuses, "passed" ].split('|')
233
233
  status=test_case[7].to_s
234
234
  comment=nil
235
235
  if pass_statuses.include?(status)==false
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testability-driver-runner
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 1
10
- version: 1.1.1
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Testability Driver team
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-12 00:00:00 Z
18
+ date: 2011-06-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: testability-driver
@@ -69,12 +69,10 @@ dependencies:
69
69
  requirements:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- hash: 21
72
+ hash: 3
73
73
  segments:
74
- - 1
75
- - 2
76
- - 5
77
- version: 1.2.5
74
+ - 0
75
+ version: "0"
78
76
  type: :runtime
79
77
  version_requirements: *id004
80
78
  description: Testability Driver test runner