| Class | Funit::TestSuite |
| In: |
lib/funit/testsuite.rb
|
| Parent: | File |
Create testsuite wrapper code
| KEYWORDS | = | Regexp.union(/(end\s+)?(setup|teardown|test)/i, Assertions::ASSERTION_PATTERN) |
| COMMENT_LINE | = | /^\s*!/ |
# File lib/funit/testsuite.rb, line 18 def initialize( suite_name, suite_content, wrap_with_module ) @line_number = 'blank' @suite_name = suite_name @suite_content = suite_content return nil unless funit_exists?(suite_name) File.delete(suite_name+"_fun.f90") if File.exists?(suite_name+"_fun.f90") super(suite_name+"_fun.f90","w") @tests, @setup, @teardown = [], [], [] header @wrap_with_module = wrap_with_module module_wrapper if @wrap_with_module top_wrapper expand close end
# File lib/funit/testsuite.rb, line 133 def a_test test_name, funit_contents @test_name = test_name @tests.push test_name syntax_error("test name #@test_name not unique",@suite_name) if (@tests.uniq!) puts " subroutine #{test_name}\n\n" num_of_asserts = 0 while (line = funit_contents.shift) && line !~ /end\s+test/i case line when COMMENT_LINE puts line when Assertions::ASSERTION_PATTERN @line_number = @funit_total_lines - funit_contents.length num_of_asserts += 1 puts send( $1.downcase, line ) else puts line end end warning("no asserts in test", @suite_name) if num_of_asserts == 0 puts "\n numTests = numTests + 1\n\n" puts " end subroutine #{test_name}\n\n" end
# File lib/funit/testsuite.rb, line 116 def add_to_setup funit_contents while (line = funit_contents.shift) && line !~ /end\s+setup/i @setup.push line end end
# File lib/funit/testsuite.rb, line 122 def add_to_teardown funit_contents while (line = funit_contents.shift) && line !~ /end\s+teardown/i @teardown.push line end end
# File lib/funit/testsuite.rb, line 160 def close puts "\n subroutine funit_setup" puts @setup puts " noAssertFailed = .true." puts " end subroutine funit_setup\n\n" puts "\n subroutine funit_teardown" puts @teardown puts " end subroutine funit_teardown\n\n" puts "\nsubroutine test_\#{@suite_name}( nTests, nAsserts, nAssertsTested, nFailures )\n\ninteger :: nTests\ninteger :: nAsserts\ninteger :: nAssertsTested\ninteger :: nFailures\n\ncontinue\n" @tests.each do |test_name| puts "\n call funit_setup" puts " call #{test_name}" puts " call funit_teardown" end puts "\nnTests = numTests\nnAsserts = numAsserts\nnAssertsTested = numAssertsTested\nnFailures = numFailures\n\nend subroutine test_\#{@suite_name}\n\nend module \#{@suite_name}_fun\n" super end
# File lib/funit/testsuite.rb, line 78 def expand $stderr.print "expanding test suite: #{@suite_name}..." funit_contents = @suite_content.split("\n") @funit_total_lines = funit_contents.length while (line = funit_contents.shift) && line !~ KEYWORDS puts line end funit_contents.unshift line puts " contains\n\n" while (line = funit_contents.shift) case line when COMMENT_LINE puts line when /^setup/i add_to_setup funit_contents when /^teardown/i add_to_teardown funit_contents when /^Xtest\s+(\w+)/i ignore_test($1,funit_contents) when /^test\s+(\w+)/i a_test($1,funit_contents) when /^test/i syntax_error "no name given for test", @suite_name when /^end\s+(setup|teardown|test)/i syntax_error "no matching #$1 for an #$&", @suite_name when Assertions::ASSERTION_PATTERN syntax_error "#$1 assertion not in a test block", @suite_name else puts line end end $stderr.puts "done." end
# File lib/funit/testsuite.rb, line 34 def header puts "! \#{@suite_name}_fun.f90 - a unit test suite for \#{@suite_name}.f90\n!\n! \#{File.basename $0} generated this file from \#{@suite_name}.fun\n\n" end
# File lib/funit/testsuite.rb, line 128 def ignore_test test_name, funit_contents warning("Ignoring test: #{test_name}", @suite_name) line = funit_contents.shift while line !~ /end\s+Test/i end
# File lib/funit/testsuite.rb, line 44 def module_wrapper puts "module \#{@suite_name}_mod\ncontains\ninclude '\#@suite_name.f90'\nend module \#{@suite_name}_mod\n\n" end
# File lib/funit/testsuite.rb, line 55 def top_wrapper puts "module \#{@suite_name}_fun\n\nuse \#{ @wrap_with_module ? @suite_name+'_mod' : @suite_name }\n\nimplicit none\n\nlogical :: noAssertFailed\n\npublic :: test_\#@suite_name\n\nprivate\n\ninteger :: numTests = 0\ninteger :: numAsserts = 0\ninteger :: numAssertsTested = 0\ninteger :: numFailures = 0\n\n" end