Changeset 480

Show
Ignore:
Timestamp:
01/24/07 14:21:55 (2 years ago)
Author:
timo
Message:

Merged changes to "script/run_tests" from trunk.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/workorder_report_rename/script/run_tests

    r464 r480  
    11#!/usr/bin/env ruby 
    2 # Copyright © 2005 Norfello Ltd All Rights Reserved 
     2# Copyright © 2005-2007 Norfello Ltd All Rights Reserved 
    33# See license agreement for additional rights 
    44 
     
    99 
    1010# Check command line syntax 
    11 if ARGV.size < 1 
     11if ARGV.size < 1 or ARGV.include?('-h') or ARGV.include?('--help') 
    1212  puts "Usage: run_tests [TEST OPTION] [RUN OPTION]" 
    1313  puts "\nTest options" 
     
    1818  puts "    DEFAULT             Run remaining tests and stop on first failure or error." 
    1919  puts "    all                 Run all tests. Similar to `rake`." 
    20   puts "    failed              Run all failed tests." 
     20  puts "    unknown             Run all unknown tests. Can be used to finish an aborted 'all' run." 
     21  puts "    failed              Run all failed tests and stop on first failure or error." 
    2122  puts "    reset               Reset state of selected tests." 
    2223  puts "    show                Show state of selected tests." 
     24  puts "\nInstall gem 'term-ansicolor' for colorized output." 
     25  puts 
    2326  exit 
     27end 
     28 
     29if not ['unit', 'functional', 'all'].include?(ARGV[0]) 
     30  puts "Invalid test option: #{ARGV[0]}" 
     31  exit 
     32end 
     33 
     34if ARGV[1] and not ['all', 'unknown', 'failed', 'reset', 'show'].include?(ARGV[1]) 
     35  puts "Invalid run option: #{ARGV[1]}" 
     36  exit 
     37end 
     38 
     39# Options for run_tests 
     40test_opts = {} 
     41 
     42# Try to load Term::ANSIColor, set run_tests option :color if successful 
     43require 'rubygems' 
     44begin 
     45  require_gem 'term-ansicolor' 
     46  include Term::ANSIColor 
     47  test_opts[:color] = true 
     48rescue Gem::LoadError 
    2449end 
    2550 
     
    6489        test.state = STATE_PASSED 
    6590        passed_count += 1 
    66         puts "PASSED" 
     91        if options[:color] 
     92          print(green, "PASSED", reset, "\n") 
     93        else 
     94          puts("PASSED") 
     95        end 
    6796      else 
    6897        test.state = STATE_FAILED 
    69         puts "FAILED" 
     98        if options[:color] 
     99          print(bold, red, "FAILED", reset, "\n") 
     100        else 
     101          puts("FAILED") 
     102        end 
    70103        messages << output 
    71104        failed_count += 1 
     
    86119  end 
    87120 
    88   puts "\nPASSED: #{passed_count} FAILED: #{failed_count} REMAINING: #{tests.size - passed_count - failed_count}" 
     121  if options[:color] 
     122    print("\n\n", green, "PASSED: #{passed_count} ", bold, red, "FAILED: #{failed_count} ", reset, yellow, "REMAINING: #{tests.size - passed_count - failed_count}\n", reset) 
     123  else 
     124    puts "\nPASSED: #{passed_count} FAILED: #{failed_count} REMAINING: #{tests.size - passed_count - failed_count}" 
     125  end 
    89126 
    90127  return failed_count != 0 ? 1 : 0 
     
    103140  end 
    104141 
     142  # Method: TestDatabase#update 
     143  # --------------------------- 
     144  # Updates the tests from the given files. 
     145  #  
     146  # Removes the tests which do not exist in the given files, and adds the tests 
     147  # which exist in the given files but not in the database. Tests which are 
     148  # both in the given files and the current database are not changed. 
     149  # 
     150  # Parameters: 
     151  # ----------- 
     152  # files - A list of filenames. 
     153  # 
    105154  def update(files) 
    106     for file in files 
     155    new_tests = [] 
     156 
     157    for file in files.sort 
    107158      test_methods = find_test_methods(file) 
    108       test_methods.each { |method| 
    109         @tests << Test.new(file, method) if @tests.select { |test| (test.file == file and test.method == method) }.empty? 
     159      test_methods.sort.each { |method| 
     160        existing_test = @tests.select { |test| (test.file == file and test.method == method) }.first 
     161        new_tests << (existing_test or Test.new(file, method)) 
    110162      } 
    111       @tests.flatten! 
    112     end 
     163    end 
     164 
     165    @tests = new_tests 
    113166  end 
    114167 
     
    174227  when 'all' 
    175228    tests = db.select(base_paths, [STATE_FAILED, STATE_UNKNOWN, STATE_PASSED]) 
    176     exit_code = run_tests(tests, :stop_on_failure => false) 
     229    exit_code = run_tests(tests, test_opts) 
     230  when 'unknown': 
     231    tests = db.select(base_paths, [STATE_UNKNOWN]) 
     232    exit_code = run_tests(tests, test_opts) 
    177233  when 'failed' 
    178234    tests = db.select(base_paths, [STATE_FAILED]) 
    179     exit_code = run_tests(tests, :stop_on_failure => true) 
     235    test_opts[:stop_on_failure] = true 
     236    exit_code = run_tests(tests, test_opts) 
    180237  when 'reset' 
    181238    tests = db.select(base_paths, [STATE_FAILED, STATE_UNKNOWN, STATE_PASSED]) 
     
    183240  when 'show' 
    184241    tests = db.select(base_paths, [STATE_FAILED, STATE_UNKNOWN, STATE_PASSED]) 
    185     state_as_text = { 
    186                     STATE_FAILED => 'FAILED', 
    187                     STATE_UNKNOWN => 'UNKNOWN', 
    188                     STATE_PASSED => 'PASSED' 
    189                   } 
     242    if test_opts[:color] 
     243      state_as_text = { 
     244                      STATE_FAILED => [bold, red, 'FAILED', reset], 
     245                      STATE_UNKNOWN => [yellow, 'UNKNOWN', reset], 
     246                      STATE_PASSED => [green, 'PASSED', reset] 
     247                    } 
     248    else 
     249      state_as_text = { 
     250                      STATE_FAILED => 'FAILED', 
     251                      STATE_UNKNOWN => 'UNKNOWN', 
     252                      STATE_PASSED => 'PASSED' 
     253                    } 
     254    end 
    190255    for test in tests 
    191256      puts "#{state_as_text[test.state]} #{File.basename(test.file)}:#{test.method}" 
     
    193258  else 
    194259    tests = db.select(base_paths, [STATE_FAILED, STATE_UNKNOWN]) 
    195     exit_code = run_tests(tests, :stop_on_failure => true) 
     260    test_opts[:stop_on_failure] = true 
     261    exit_code = run_tests(tests, test_opts) 
    196262end 
    197263 

© 2004-2007 Norfello Oy All Rights Reserved