funit 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,106 @@
1
+ require 'test/unit'
2
+ require 'funit/testsuite'
3
+
4
+ class TestTestSuite < Test::Unit::TestCase
5
+
6
+ def setup
7
+ File.rm_f(*Dir["dummyf90test*"])
8
+ end
9
+
10
+ def teardown
11
+ File.rm_f(*Dir["dummyf90test*"])
12
+ end
13
+
14
+ def test_nonexistent_funit_file_is_not_created
15
+ Funit::TestSuite.new 'dummyf90test'
16
+ assert !File.exists?("dummyf90test.fun")
17
+ assert !File.exists?("dummyf90test_fun.f90")
18
+ end
19
+
20
+ def create_funit_file funit_contents
21
+ File.open('dummyf90test.f90','w') do |f|
22
+ f.puts "module dummyf90test\nend module dummyf90test"
23
+ end
24
+ File.open('dummyf90test.fun','w') do |f|
25
+ f.puts funit_contents
26
+ end
27
+ end
28
+
29
+ @@compileCommand = "#{ENV['FC']} -c dummyf90test.f90 dummyf90test_fun.f90"
30
+
31
+ def test_bare_minimum_funit_file_compiles
32
+ create_funit_file ""
33
+ Funit::TestSuite.new 'dummyf90test'
34
+ assert system(@@compileCommand)
35
+ end
36
+
37
+ def test_module_variables_allowed
38
+ create_funit_file "integer :: a"
39
+ Funit::TestSuite.new 'dummyf90test'
40
+ assert system(@@compileCommand)
41
+ end
42
+
43
+ def test_blank_setup_compiles
44
+ create_funit_file "beginSetup\nendSetup"
45
+ Funit::TestSuite.new 'dummyf90test'
46
+ assert system(@@compileCommand)
47
+ end
48
+
49
+ def test_blank_test_gives_warning
50
+ create_funit_file "beginTest bob\nendTest"
51
+ Funit::TestSuite.new 'dummyf90test'
52
+ assert system(@@compileCommand)
53
+ end
54
+
55
+ def test_single_assert_test_compiles
56
+ create_funit_file "beginTest assertTrue\nIsTrue(.true.)\nendTest"
57
+ Funit::TestSuite.new 'dummyf90test'
58
+ assert system(@@compileCommand)
59
+ end
60
+
61
+ def test_matrix_assert_compiles
62
+ create_funit_file <<-MATRIX
63
+ beginTest assertTrue
64
+ integer :: a(2,2)
65
+ a = 1
66
+ IsEqual(1,a(1,1))
67
+ endTest
68
+ MATRIX
69
+ Funit::TestSuite.new 'dummyf90test'
70
+ assert system(@@compileCommand)
71
+ end
72
+
73
+ def test_simple_real_equals_assert_works
74
+ create_funit_file <<-REALEQUALS
75
+ beginTest assert_equals
76
+ real :: real_var
77
+ real_var = 1.0
78
+ IsRealEqual(1.0,real_var)
79
+ endTest
80
+ REALEQUALS
81
+ Funit::TestSuite.new 'dummyf90test'
82
+ assert system(@@compileCommand)
83
+ end
84
+
85
+ def test_real_equals_assert_works_with_function
86
+ create_funit_file <<-REQUALSFUNC
87
+ beginTest assert_equals_for_function
88
+ IsRealEqual(0.0,balance(0.0,0.0))
89
+ endTest
90
+ function balance( left, right)
91
+ real :: balance
92
+ real, intent(in) :: left, right
93
+ balance = 0.5*(left+right)
94
+ end function balance
95
+ REQUALSFUNC
96
+ Funit::TestSuite.new 'dummyf90test'
97
+ assert system(@@compileCommand)
98
+ end
99
+
100
+ def test_ignore_commented_test
101
+ create_funit_file "XbeginTest bob\nendTest"
102
+ Funit::TestSuite.new 'dummyf90test'
103
+ assert_no_match( /Testbob/i, IO.readlines('dummyf90test_fun.f90').join )
104
+ end
105
+
106
+ end
@@ -0,0 +1,111 @@
1
+ ;; 'funit-mode.el' - a derived major mode for editing fUnit files
2
+ ;;
3
+ ;; INSTALLATION:
4
+ ;;
5
+ ;; 1) Copy 'funit-mode.el' to the system site-lisp directory, e.g.,
6
+ ;;
7
+ ;; /usr/share/emacs/site-lisp
8
+ ;;
9
+ ;; or, if you do not have root permission, somewhere local
10
+ ;; and set the load-path search variable in your ~/.emacs file
11
+ ;; accordingly, e.g.,
12
+ ;;
13
+ ;; (setq load-path (append load-path '("~/lisp")))
14
+ ;;
15
+ ;; 2) To automatically activate funit-mode when visiting files,
16
+ ;; add the following lines to your ~/.emacs file:
17
+ ;;
18
+ ;; (autoload 'funit-mode "funit-mode"
19
+ ;; "Mode for editing fUnit files.")
20
+ ;; (setq auto-mode-alist
21
+ ;; (cons '("\\.fun$" . funit-mode) auto-mode-alist))
22
+
23
+ (define-derived-mode funit-mode
24
+ f90-mode "fUnit"
25
+ "Major mode for fUnit files (derived from F90 mode).\n\n
26
+ \\{funit-mode-map}"
27
+ (interactive)
28
+ (message "fUnit mode.")
29
+ )
30
+
31
+ ;; add some new font-locks to f90's extensive list
32
+ (font-lock-add-keywords 'funit-mode
33
+ '(("\\<IsFalse\\>" . font-lock-function-name-face)
34
+ ("\\<IsEqual\\>" . font-lock-function-name-face)
35
+ ("\\<IsRealEqual\\>" . font-lock-function-name-face)
36
+ ("\\<IsTrue\\>" . font-lock-function-name-face)
37
+ ("\\<IsEqualWithin\\>" . font-lock-function-name-face)
38
+ ("\\<beginTest\\>" . font-lock-builtin-face)
39
+ ("\\<endTest\\>" . font-lock-builtin-face)
40
+ ("\\<beginTeardown\\>" . font-lock-builtin-face)
41
+ ("\\<endTeardown\\>" . font-lock-builtin-face)
42
+ ("\\<beginSetup\\>" . font-lock-builtin-face)
43
+ ("\\<endSetup\\>" . font-lock-builtin-face))
44
+ )
45
+
46
+ (defvar funit-buffer-command "funit"
47
+ "Shell command used by the \\[funit-test-buffer] function.")
48
+
49
+ ;;(defvar compilation-buffer-name-function "* fUnit output *")
50
+
51
+ ;; run fUnit on the current buffer:
52
+ (defun funit-test-buffer ()
53
+ "Excute \\[funit-buffer-command] on the file associated
54
+ with the current buffer."
55
+ (interactive)
56
+ ; (compile funit-buffer-command);; (file-name-nondirectory buffer-file-name)))
57
+ (save-buffer)
58
+ (shell-command-on-region (point-min) (point-max) funit-buffer-command funit-error-buffer)
59
+ )
60
+
61
+ ;; key-binding for running fUnit on the current buffer
62
+ (define-key funit-mode-map "\C-c\C-c" 'funit-test-buffer)
63
+
64
+ ;; add fUnit error regex to compilation mode:
65
+ ;; blah, blah, blak [FluxFunctions.fun:34]
66
+ ;(require 'compile)
67
+ ;(setq compilation-error-regexp-alist
68
+ ; (cons '("\\[\\(.+\\):\\([0-9]+\\)\\]" 1 2) compilation-error-regexp-alist)
69
+ ;)
70
+
71
+ (defvar funit-error-buffer
72
+ "*fUnit output-buffer*"
73
+ "Buffer name for error messages used by `funit-next-error'")
74
+
75
+ (defvar funit-error-message-regexp
76
+ "\\[.+:\\([0-9]+\\)\\]"
77
+ "Regular expression used by `funit-next-error' to find error messages.
78
+ The sub-expression between the first capturing parens must be the line
79
+ number where the error occured")
80
+
81
+ (defun funit-next-error ()
82
+ "Goto line in current buffer indicated by next error message in `funit-error-buffer'
83
+
84
+ Assumes that the point is positioned before the first occurance of
85
+ `funit-error-message-regexp' in the `funit-error-buffer' before the first
86
+ call to this function.
87
+
88
+ See also `funit-error-message-regexp' `funit-error-buffer'"
89
+
90
+ (interactive)
91
+ (let ((error-line-number))
92
+ (save-current-buffer
93
+ (set-buffer (or (get-buffer funit-error-buffer)
94
+ (error
95
+ (concat
96
+ "Can't find the error buffer: "
97
+ funit-error-buffer))))
98
+ (if (re-search-forward funit-error-message-regexp nil t)
99
+ (progn
100
+ (setq error-line-number
101
+ (string-to-number
102
+ (buffer-substring (match-beginning 1)
103
+ (match-end 1))))
104
+ (goto-char (1+ (match-end 1))))))
105
+ (if error-line-number
106
+ (goto-line error-line-number)
107
+ (message "No more errors"))))
108
+
109
+ (provide 'funit-mode)
110
+
111
+ ;; end of 'funit-mode.el'
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: funit
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.9.0
7
+ date: 2007-08-02 00:00:00 -04:00
8
+ summary: A Fortran unit testing framework.
9
+ require_paths:
10
+ - lib
11
+ email: funit-support@rubyforge.org
12
+ homepage: http://rubyforge.org/projects/funit
13
+ rubyforge_project: nasarb
14
+ description: "== DESCRIPTION: FUnit is a unit testing framework for Fortran modules. Unit tests are written as Fortran fragments that use a small set of testing-specific keywords and functions. FUnit transforms these fragments into valid Fortran code, compiles, links, and runs them against the module under test."
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Karen Bibb
31
+ - Bil Kleb
32
+ - Beth Lee-Rausch
33
+ - Mike Park
34
+ - Bill Wood
35
+ files:
36
+ - History.txt
37
+ - License.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - Rakefile
41
+ - bin/funit
42
+ - examples/CFD/FluxFunctions.f90
43
+ - examples/CFD/FluxFunctions.fun
44
+ - examples/CFD/Gammas.f90
45
+ - examples/CFD/GasModel.f90
46
+ - examples/CFD/GasModel.fun
47
+ - examples/ReadData/time_series_data.f90
48
+ - examples/ReadData/time_series_data.fun
49
+ - examples/StopWatch/StopWatch.f90
50
+ - examples/StopWatch/StopWatch.fun
51
+ - lib/funit.rb
52
+ - lib/funit/assertions.rb
53
+ - lib/funit/compiler.rb
54
+ - lib/funit/functions.rb
55
+ - lib/funit/testsuite.rb
56
+ - test/test_compiler.rb
57
+ - test/test_functions.rb
58
+ - test/test_funit.rb
59
+ - test/test_testsuite.rb
60
+ - utils/funit-mode.el
61
+ test_files:
62
+ - test/test_compiler.rb
63
+ - test/test_testsuite.rb
64
+ - test/test_funit.rb
65
+ - test/test_functions.rb
66
+ rdoc_options:
67
+ - --main
68
+ - README.txt
69
+ extra_rdoc_files:
70
+ - History.txt
71
+ - License.txt
72
+ - Manifest.txt
73
+ - README.txt
74
+ executables:
75
+ - funit
76
+ extensions: []
77
+
78
+ requirements: []
79
+
80
+ dependencies:
81
+ - !ruby/object:Gem::Dependency
82
+ name: fortran
83
+ version_requirement:
84
+ version_requirements: !ruby/object:Gem::Version::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.0.0
89
+ version:
90
+ - !ruby/object:Gem::Dependency
91
+ name: hoe
92
+ version_requirement:
93
+ version_requirements: !ruby/object:Gem::Version::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 1.2.2
98
+ version: