fUnit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/{LICENSE → COPYING} +21 -21
  2. data/README +26 -2
  3. data/Rakefile +97 -0
  4. data/docs/html/classes/Funit.html +390 -0
  5. data/docs/html/classes/Funit/Assertions.html +285 -0
  6. data/docs/html/classes/Funit/Compiler.html +160 -0
  7. data/docs/html/classes/Funit/Depend.html +441 -0
  8. data/docs/html/classes/Funit/TestSuite.html +417 -0
  9. data/docs/html/created.rid +1 -0
  10. data/docs/html/files/COPYING.html +563 -0
  11. data/docs/html/files/README.html +151 -0
  12. data/docs/html/files/lib/funit/assertions_rb.html +101 -0
  13. data/docs/html/files/lib/funit/fortran_deps_rb.html +107 -0
  14. data/docs/html/files/lib/funit/functions_rb.html +101 -0
  15. data/docs/html/files/lib/funit/test_suite_rb.html +101 -0
  16. data/docs/html/files/lib/funit_rb.html +111 -0
  17. data/docs/html/fr_class_index.html +31 -0
  18. data/docs/html/fr_file_index.html +33 -0
  19. data/docs/html/fr_method_index.html +59 -0
  20. data/docs/html/index.html +24 -0
  21. data/docs/html/rdoc-style.css +208 -0
  22. data/examples/CFD/FluxFunctions.f90 +35 -0
  23. data/examples/CFD/FluxFunctionsMT.f90 +336 -0
  24. data/examples/CFD/FluxFunctionsMT.ftk +49 -0
  25. data/examples/CFD/Gammas.f90 +8 -0
  26. data/examples/CFD/GasModel.f90 +17 -0
  27. data/examples/CFD/GasModelMT.f90 +173 -0
  28. data/examples/CFD/GasModelMT.ftk +22 -0
  29. data/examples/CFD/TestRunner +0 -0
  30. data/examples/CFD/TestRunner.f90 +23 -0
  31. data/examples/CFD/fluxfunctions.mod +45 -0
  32. data/examples/CFD/gammas.mod +20 -0
  33. data/examples/CFD/gasmodel.mod +30 -0
  34. data/examples/CFD/gasmodelmt.mod +27 -0
  35. data/examples/StopWatch/StopWatch.f90 +50 -0
  36. data/examples/StopWatch/StopWatchMT.f90 +343 -0
  37. data/examples/StopWatch/StopWatchMT.ftk +73 -0
  38. data/examples/StopWatch/TestRunner +0 -0
  39. data/examples/StopWatch/TestRunner.f90 +23 -0
  40. data/examples/StopWatch/stopwatch.mod +34 -0
  41. data/examples/StopWatch/stopwatchmt.mod +27 -0
  42. data/lib/funit.rb +1 -6
  43. data/lib/funit/fortran_deps.rb +112 -0
  44. data/lib/funit/functions.rb +2 -5
  45. data/tests/tc_fortran_deps.rb +2 -2
  46. metadata +73 -22
  47. data/INSTALL +0 -19
  48. data/lib/fortran_deps.rb +0 -109
@@ -0,0 +1,417 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Funit::TestSuite</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Funit::TestSuite</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/funit/test_suite_rb.html">
59
+ lib/funit/test_suite.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ File
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+
82
+
83
+ </div>
84
+
85
+ <div id="method-list">
86
+ <h3 class="section-bar">Methods</h3>
87
+
88
+ <div class="name-list">
89
+ <a href="#M000032">aTest</a>&nbsp;&nbsp;
90
+ <a href="#M000029">addtoSetup</a>&nbsp;&nbsp;
91
+ <a href="#M000030">addtoTeardown</a>&nbsp;&nbsp;
92
+ <a href="#M000033">close</a>&nbsp;&nbsp;
93
+ <a href="#M000028">expand</a>&nbsp;&nbsp;
94
+ <a href="#M000031">ignoreTest</a>&nbsp;&nbsp;
95
+ <a href="#M000026">new</a>&nbsp;&nbsp;
96
+ <a href="#M000027">topWrapper</a>&nbsp;&nbsp;
97
+ </div>
98
+ </div>
99
+
100
+ </div>
101
+
102
+
103
+ <!-- if includes -->
104
+ <div id="includes">
105
+ <h3 class="section-bar">Included Modules</h3>
106
+
107
+ <div id="includes-list">
108
+ <span class="include-name"><a href="../Funit.html">Funit</a></span>
109
+ </div>
110
+ </div>
111
+
112
+ <div id="section">
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ <!-- if method_list -->
122
+ <div id="methods">
123
+ <h3 class="section-bar">Public Class methods</h3>
124
+
125
+ <div id="method-M000026" class="method-detail">
126
+ <a name="M000026"></a>
127
+
128
+ <div class="method-heading">
129
+ <a href="#M000026" class="method-signature">
130
+ <span class="method-name">new</span><span class="method-args">(suiteName)</span>
131
+ </a>
132
+ </div>
133
+
134
+ <div class="method-description">
135
+ <p><a class="source-toggle" href="#"
136
+ onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
137
+ <div class="method-source-code" id="M000026-source">
138
+ <pre>
139
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 9</span>
140
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">suiteName</span>
141
+ <span class="ruby-ivar">@lineNumber</span> = <span class="ruby-value str">'blank'</span>
142
+ <span class="ruby-ivar">@suiteName</span> = <span class="ruby-identifier">suiteName</span>
143
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ftkExists?</span>(<span class="ruby-identifier">suiteName</span>)
144
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">suiteName</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;MT.f90&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">suiteName</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;MT.f90&quot;</span>)
145
+ <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">suiteName</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;MT.f90&quot;</span>,<span class="ruby-value str">&quot;w&quot;</span>)
146
+ <span class="ruby-ivar">@tests</span>, <span class="ruby-ivar">@setup</span>, <span class="ruby-ivar">@teardown</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>, <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>, <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
147
+ <span class="ruby-identifier">topWrapper</span>
148
+ <span class="ruby-identifier">expand</span>
149
+ <span class="ruby-identifier">close</span>
150
+ <span class="ruby-keyword kw">end</span>
151
+ </pre>
152
+ </div>
153
+ </div>
154
+ </div>
155
+
156
+ <h3 class="section-bar">Public Instance methods</h3>
157
+
158
+ <div id="method-M000032" class="method-detail">
159
+ <a name="M000032"></a>
160
+
161
+ <div class="method-heading">
162
+ <a href="#M000032" class="method-signature">
163
+ <span class="method-name">aTest</span><span class="method-args">(testName, ftk)</span>
164
+ </a>
165
+ </div>
166
+
167
+ <div class="method-description">
168
+ <p><a class="source-toggle" href="#"
169
+ onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
170
+ <div class="method-source-code" id="M000032-source">
171
+ <pre>
172
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 109</span>
173
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">aTest</span> <span class="ruby-identifier">testName</span>, <span class="ruby-identifier">ftk</span>
174
+ <span class="ruby-ivar">@testName</span> = <span class="ruby-identifier">testName</span>
175
+ <span class="ruby-ivar">@tests</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">testName</span>
176
+ <span class="ruby-identifier">syntaxError</span>(<span class="ruby-value str">&quot;test name #@testName not unique&quot;</span>,<span class="ruby-ivar">@suiteName</span>) <span class="ruby-keyword kw">if</span> (<span class="ruby-ivar">@tests</span>.<span class="ruby-identifier">uniq!</span>)
177
+
178
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot; subroutine Test#{testName}\n\n&quot;</span>
179
+
180
+ <span class="ruby-identifier">numOfAsserts</span> = <span class="ruby-value">0</span>
181
+
182
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/endTest/i</span>
183
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">line</span>
184
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">$commentLine</span>
185
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">line</span>
186
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/Is(RealEqual|False|True|EqualWithin|Equal)/i</span>
187
+ <span class="ruby-ivar">@lineNumber</span> = <span class="ruby-ivar">@ftkTotalLines</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">length</span>
188
+ <span class="ruby-identifier">numOfAsserts</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
189
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">send</span>( <span class="ruby-identifier">$&amp;</span>.<span class="ruby-identifier">downcase!</span>, <span class="ruby-identifier">line</span> )
190
+ <span class="ruby-keyword kw">else</span>
191
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">line</span>
192
+ <span class="ruby-keyword kw">end</span>
193
+ <span class="ruby-keyword kw">end</span>
194
+ <span class="ruby-identifier">warning</span>(<span class="ruby-value str">&quot;no asserts in test&quot;</span>, <span class="ruby-ivar">@suiteName</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">numOfAsserts</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
195
+
196
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\n numTests = numTests + 1\n\n&quot;</span>
197
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot; end subroutine Test#{testName}\n\n&quot;</span>
198
+ <span class="ruby-keyword kw">end</span>
199
+ </pre>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ <div id="method-M000029" class="method-detail">
205
+ <a name="M000029"></a>
206
+
207
+ <div class="method-heading">
208
+ <a href="#M000029" class="method-signature">
209
+ <span class="method-name">addtoSetup</span><span class="method-args">(ftk)</span>
210
+ </a>
211
+ </div>
212
+
213
+ <div class="method-description">
214
+ <p><a class="source-toggle" href="#"
215
+ onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
216
+ <div class="method-source-code" id="M000029-source">
217
+ <pre>
218
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 92</span>
219
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addtoSetup</span> <span class="ruby-identifier">ftk</span>
220
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/endSetup/i</span>
221
+ <span class="ruby-ivar">@setup</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">line</span>
222
+ <span class="ruby-keyword kw">end</span>
223
+ <span class="ruby-keyword kw">end</span>
224
+ </pre>
225
+ </div>
226
+ </div>
227
+ </div>
228
+
229
+ <div id="method-M000030" class="method-detail">
230
+ <a name="M000030"></a>
231
+
232
+ <div class="method-heading">
233
+ <a href="#M000030" class="method-signature">
234
+ <span class="method-name">addtoTeardown</span><span class="method-args">(ftk)</span>
235
+ </a>
236
+ </div>
237
+
238
+ <div class="method-description">
239
+ <p><a class="source-toggle" href="#"
240
+ onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
241
+ <div class="method-source-code" id="M000030-source">
242
+ <pre>
243
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 98</span>
244
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">addtoTeardown</span> <span class="ruby-identifier">ftk</span>
245
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/endTeardown/i</span>
246
+ <span class="ruby-ivar">@teardown</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">line</span>
247
+ <span class="ruby-keyword kw">end</span>
248
+ <span class="ruby-keyword kw">end</span>
249
+ </pre>
250
+ </div>
251
+ </div>
252
+ </div>
253
+
254
+ <div id="method-M000033" class="method-detail">
255
+ <a name="M000033"></a>
256
+
257
+ <div class="method-heading">
258
+ <a href="#M000033" class="method-signature">
259
+ <span class="method-name">close</span><span class="method-args">()</span>
260
+ </a>
261
+ </div>
262
+
263
+ <div class="method-description">
264
+ <p><a class="source-toggle" href="#"
265
+ onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
266
+ <div class="method-source-code" id="M000033-source">
267
+ <pre>
268
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 136</span>
269
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close</span>
270
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\n subroutine Setup&quot;</span>
271
+ <span class="ruby-identifier">puts</span> <span class="ruby-ivar">@setup</span>
272
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot; noAssertFailed = .true.&quot;</span>
273
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot; end subroutine Setup\n\n&quot;</span>
274
+
275
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\n subroutine Teardown&quot;</span>
276
+ <span class="ruby-identifier">puts</span> <span class="ruby-ivar">@teardown</span>
277
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot; end subroutine Teardown\n\n&quot;</span>
278
+
279
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\nsubroutine MT\#{@suiteName}( nTests, nAsserts, nAssertsTested, nFailures )\n\ninteger :: nTests\ninteger :: nAsserts\ninteger :: nAssertsTested\ninteger :: nFailures\n\ncontinue\n&quot;</span>
280
+
281
+ <span class="ruby-ivar">@tests</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">testName</span><span class="ruby-operator">|</span>
282
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\n call Setup&quot;</span>
283
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot; call Test#{testName}&quot;</span>
284
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot; call Teardown&quot;</span>
285
+ <span class="ruby-keyword kw">end</span>
286
+
287
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;\nnTests = numTests\nnAsserts = numAsserts\nnAssertsTested = numAssertsTested\nnFailures = numFailures\n\nend subroutine MT\#{@suiteName}\n\nend module \#{@suiteName}MT\n&quot;</span>
288
+ <span class="ruby-keyword kw">super</span>
289
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">chmod</span>(<span class="ruby-value">0444</span>,<span class="ruby-ivar">@suiteName</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;MT.f90&quot;</span>)
290
+ <span class="ruby-keyword kw">end</span>
291
+ </pre>
292
+ </div>
293
+ </div>
294
+ </div>
295
+
296
+ <div id="method-M000028" class="method-detail">
297
+ <a name="M000028"></a>
298
+
299
+ <div class="method-heading">
300
+ <a href="#M000028" class="method-signature">
301
+ <span class="method-name">expand</span><span class="method-args">()</span>
302
+ </a>
303
+ </div>
304
+
305
+ <div class="method-description">
306
+ <p><a class="source-toggle" href="#"
307
+ onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
308
+ <div class="method-source-code" id="M000028-source">
309
+ <pre>
310
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 49</span>
311
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expand</span>
312
+
313
+ <span class="ruby-identifier">ftkFile</span> = <span class="ruby-ivar">@suiteName</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;MT.ftk&quot;</span>
314
+ <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;parsing #{ftkFile}&quot;</span>
315
+
316
+ <span class="ruby-identifier">ftk</span> = <span class="ruby-constant">IO</span>.<span class="ruby-identifier">readlines</span>(<span class="ruby-identifier">ftkFile</span>)
317
+ <span class="ruby-ivar">@ftkTotalLines</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">length</span>
318
+
319
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">!~</span> <span class="ruby-identifier">$keyword</span>
320
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">line</span>
321
+ <span class="ruby-keyword kw">end</span>
322
+
323
+ <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">unshift</span> <span class="ruby-identifier">line</span>
324
+
325
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot; contains\n\n&quot;</span>
326
+
327
+ <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span>)
328
+ <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">line</span>
329
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">$commentLine</span>
330
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">line</span>
331
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/beginSetup/i</span>
332
+ <span class="ruby-identifier">addtoSetup</span> <span class="ruby-identifier">ftk</span>
333
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/beginTeardown/i</span>
334
+ <span class="ruby-identifier">addtoTeardown</span> <span class="ruby-identifier">ftk</span>
335
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/XbeginTest\s+(\w+)/i</span>
336
+ <span class="ruby-identifier">ignoreTest</span>(<span class="ruby-identifier">$1</span>,<span class="ruby-identifier">ftk</span>)
337
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/beginTest\s+(\w+)/i</span>
338
+ <span class="ruby-identifier">aTest</span>(<span class="ruby-identifier">$1</span>,<span class="ruby-identifier">ftk</span>)
339
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/beginTest/i</span>
340
+ <span class="ruby-identifier">syntaxError</span> <span class="ruby-value str">&quot;no name given for beginTest&quot;</span>, <span class="ruby-ivar">@suiteName</span>
341
+ <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/end(Setup|Teardown|Test)/i</span>
342
+ <span class="ruby-identifier">syntaxError</span> <span class="ruby-value str">&quot;no matching begin#$1 for an #$&amp;&quot;</span>, <span class="ruby-ivar">@suiteName</span>
343
+ <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">$assertRegEx</span>
344
+ <span class="ruby-identifier">syntaxError</span> <span class="ruby-value str">&quot;#$1 assert not in a test block&quot;</span>, <span class="ruby-ivar">@suiteName</span>
345
+ <span class="ruby-keyword kw">else</span>
346
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">line</span>
347
+ <span class="ruby-keyword kw">end</span>
348
+ <span class="ruby-keyword kw">end</span> <span class="ruby-comment cmt"># while</span>
349
+
350
+ <span class="ruby-identifier">$stderr</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;completed #{ftkFile}&quot;</span>
351
+
352
+ <span class="ruby-keyword kw">end</span>
353
+ </pre>
354
+ </div>
355
+ </div>
356
+ </div>
357
+
358
+ <div id="method-M000031" class="method-detail">
359
+ <a name="M000031"></a>
360
+
361
+ <div class="method-heading">
362
+ <a href="#M000031" class="method-signature">
363
+ <span class="method-name">ignoreTest</span><span class="method-args">(testName, ftk)</span>
364
+ </a>
365
+ </div>
366
+
367
+ <div class="method-description">
368
+ <p><a class="source-toggle" href="#"
369
+ onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
370
+ <div class="method-source-code" id="M000031-source">
371
+ <pre>
372
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 104</span>
373
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ignoreTest</span> <span class="ruby-identifier">testName</span>, <span class="ruby-identifier">ftk</span>
374
+ <span class="ruby-identifier">warning</span>(<span class="ruby-node">&quot;Ignoring test: #{testName}&quot;</span>, <span class="ruby-ivar">@suiteName</span>)
375
+ <span class="ruby-identifier">line</span> = <span class="ruby-identifier">ftk</span>.<span class="ruby-identifier">shift</span> <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp re">/endTest/i</span>
376
+ <span class="ruby-keyword kw">end</span>
377
+ </pre>
378
+ </div>
379
+ </div>
380
+ </div>
381
+
382
+ <div id="method-M000027" class="method-detail">
383
+ <a name="M000027"></a>
384
+
385
+ <div class="method-heading">
386
+ <a href="#M000027" class="method-signature">
387
+ <span class="method-name">topWrapper</span><span class="method-args">()</span>
388
+ </a>
389
+ </div>
390
+
391
+ <div class="method-description">
392
+ <p><a class="source-toggle" href="#"
393
+ onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
394
+ <div class="method-source-code" id="M000027-source">
395
+ <pre>
396
+ <span class="ruby-comment cmt"># File lib/funit/test_suite.rb, line 21</span>
397
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">topWrapper</span>
398
+ <span class="ruby-identifier">puts</span> <span class="ruby-value str">&quot;! \#{@suiteName}MT.f90 - a Fortran mobility test suite for \#{@suiteName}.f90\n!\n! [dynamically generated from \#{@suiteName}MT.ftk\n! by \#{File.basename $0} Ruby script \#{Time.now}]\n\nmodule \#{@suiteName}MT\n\nuse \#{@suiteName}\n\nimplicit none\n\nprivate\n\npublic :: MT\#{@suiteName}\n\nlogical :: noAssertFailed\n\ninteger :: numTests = 0\ninteger :: numAsserts = 0\ninteger :: numAssertsTested = 0\ninteger :: numFailures = 0\n\n&quot;</span>
399
+ <span class="ruby-keyword kw">end</span>
400
+ </pre>
401
+ </div>
402
+ </div>
403
+ </div>
404
+
405
+
406
+ </div>
407
+
408
+
409
+ </div>
410
+
411
+
412
+ <div id="validator-badges">
413
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
414
+ </div>
415
+
416
+ </body>
417
+ </html>
@@ -0,0 +1 @@
1
+ Sun Apr 09 01:04:11 EDT 2006
@@ -0,0 +1,563 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: COPYING</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>COPYING</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>COPYING
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Sat Apr 08 08:57:06 EDT 2006</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+ <div id="description">
72
+ <p>
73
+ NASA OPEN SOURCE AGREEMENT VERSION 1.3
74
+ </p>
75
+ <p>
76
+ THIS OPEN SOURCE AGREEMENT (&quot;AGREEMENT&quot;) DEFINES THE RIGHTS OF
77
+ USE, REPRODUCTION, DISTRIBUTION, MODIFICATION AND REDISTRIBUTION OF CERTAIN
78
+ COMPUTER SOFTWARE ORIGINALLY RELEASED BY THE UNITED STATES GOVERNMENT AS
79
+ REPRESENTED BY THE GOVERNMENT AGENCY LISTED BELOW (&quot;GOVERNMENT
80
+ AGENCY&quot;). THE UNITED STATES GOVERNMENT, AS REPRESENTED BY GOVERNMENT
81
+ AGENCY, IS AN INTENDED THIRD-PARTY BENEFICIARY OF ALL SUBSEQUENT
82
+ DISTRIBUTIONS OR REDISTRIBUTIONS OF THE SUBJECT SOFTWARE. ANYONE WHO USES,
83
+ REPRODUCES, DISTRIBUTES, MODIFIES OR REDISTRIBUTES THE SUBJECT SOFTWARE, AS
84
+ DEFINED HEREIN, OR ANY PART THEREOF, IS, BY THAT ACTION, ACCEPTING IN FULL
85
+ THE RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS AGREEMENT.
86
+ </p>
87
+ <p>
88
+ Government Agency: NASA Langley Research Center Government Agency Original
89
+ Software Designation: LAR-17081-1 Government Agency Original Software
90
+ Title: fUnit User Registration Requested: please see clause 3.F. Government
91
+ Agency Point of Contact: funit-support@rubyforge.org
92
+ </p>
93
+ <ol>
94
+ <li>DEFINITIONS
95
+
96
+ </li>
97
+ </ol>
98
+ <ol>
99
+ <li type="A">&quot;Contributor&quot; means Government Agency, as the developer of the
100
+
101
+ </li>
102
+ </ol>
103
+ <p>
104
+ Original Software, and any entity that makes a Modification.
105
+ </p>
106
+ <ol>
107
+ <li type="A">&quot;Covered Patents&quot; mean patent claims licensable by a Contributor
108
+
109
+ </li>
110
+ </ol>
111
+ <p>
112
+ that are necessarily infringed by the use or sale of its Modification alone
113
+ or when combined with the Subject Software.
114
+ </p>
115
+ <ol>
116
+ <li type="A">&quot;Display&quot; means the showing of a copy of the Subject Software,
117
+
118
+ </li>
119
+ </ol>
120
+ <p>
121
+ either directly or by means of an image, or any other device.
122
+ </p>
123
+ <ol>
124
+ <li type="A">&quot;Distribution&quot; means conveyance or transfer of the Subject
125
+
126
+ </li>
127
+ </ol>
128
+ <p>
129
+ Software, regardless of means, to another.
130
+ </p>
131
+ <ol>
132
+ <li type="A">&quot;Larger Work&quot; means computer software that combines Subject
133
+
134
+ </li>
135
+ </ol>
136
+ <p>
137
+ Software, or portions thereof, with software separate from the Subject
138
+ Software that is not governed by the terms of this Agreement.
139
+ </p>
140
+ <ol>
141
+ <li type="A">&quot;Modification&quot; means any alteration of, including addition to or
142
+
143
+ </li>
144
+ </ol>
145
+ <p>
146
+ deletion from, the substance or structure of either the Original Software
147
+ or Subject Software, and includes derivative works, as that term is defined
148
+ in the Copyright Statute, 17 USC 101. However, the act of including Subject
149
+ Software as part of a Larger Work does not in and of itself constitute a
150
+ Modification.
151
+ </p>
152
+ <ol>
153
+ <li type="A">&quot;Original Software&quot; means the computer software first released
154
+
155
+ </li>
156
+ </ol>
157
+ <p>
158
+ under this Agreement by Government Agency with Government Agency
159
+ designation NASA and entitled fUnit, including source code, object code and
160
+ accompanying documentation, if any.
161
+ </p>
162
+ <ol>
163
+ <li type="A">&quot;Recipient&quot; means anyone who acquires the Subject Software under
164
+
165
+ </li>
166
+ </ol>
167
+ <p>
168
+ this Agreement, including all Contributors.
169
+ </p>
170
+ <ol>
171
+ <li type="A">&quot;Redistribution&quot; means Distribution of the Subject Software after
172
+ a
173
+
174
+ </li>
175
+ </ol>
176
+ <p>
177
+ Modification has been made.
178
+ </p>
179
+ <ol>
180
+ <li type="A">&quot;Reproduction&quot; means the making of a counterpart, image or copy
181
+ of
182
+
183
+ </li>
184
+ </ol>
185
+ <p>
186
+ the Subject Software.
187
+ </p>
188
+ <ol>
189
+ <li type="A">&quot;Sale&quot; means the exchange of the Subject Software for money or
190
+
191
+ </li>
192
+ </ol>
193
+ <p>
194
+ equivalent value.
195
+ </p>
196
+ <ol>
197
+ <li type="A">&quot;Subject Software&quot; means the Original Software, Modifications, or
198
+
199
+ </li>
200
+ </ol>
201
+ <p>
202
+ any respective parts thereof.
203
+ </p>
204
+ <ol>
205
+ <li type="A">&quot;Use&quot; means the application or employment of the Subject Software
206
+
207
+ </li>
208
+ </ol>
209
+ <p>
210
+ for any purpose.
211
+ </p>
212
+ <ol>
213
+ <li>GRANT OF RIGHTS
214
+
215
+ </li>
216
+ </ol>
217
+ <ol>
218
+ <li type="A">Under Non-Patent Rights: Subject to the terms and conditions of
219
+
220
+ </li>
221
+ </ol>
222
+ <p>
223
+ this Agreement, each Contributor, with respect to its own contribution to
224
+ the Subject Software, hereby grants to each Recipient a non-exclusive,
225
+ world-wide, royalty-free license to engage in the following activities
226
+ pertaining to the Subject Software:
227
+ </p>
228
+ <pre>
229
+ 1. Use
230
+ 2. Distribution
231
+ 3. Reproduction
232
+ 4. Modification
233
+ 5. Redistribution
234
+ 6. Display
235
+ </pre>
236
+ <ol>
237
+ <li type="A">Under Patent Rights: Subject to the terms and conditions of this
238
+
239
+ </li>
240
+ </ol>
241
+ <p>
242
+ Agreement, each Contributor, with respect to its own contribution to the
243
+ Subject Software, hereby grants to each Recipient under Covered Patents a
244
+ non-exclusive, world-wide, royalty-free license to engage in the following
245
+ activities pertaining to the Subject Software:
246
+ </p>
247
+ <pre>
248
+ 1. Use
249
+ 2. Distribution
250
+ 3. Reproduction
251
+ 4. Sale
252
+ 5. Offer for Sale
253
+ </pre>
254
+ <ol>
255
+ <li type="A">The rights granted under Paragraph B. also apply to the combination
256
+
257
+ </li>
258
+ </ol>
259
+ <p>
260
+ of a Contributor&#8217;s Modification and the Subject Software if, at the
261
+ time the Modification is added by the Contributor, the addition of such
262
+ Modification causes the combination to be covered by the Covered Patents.
263
+ It does not apply to any other combinations that include a Modification.
264
+ </p>
265
+ <ol>
266
+ <li type="A">The rights granted in Paragraphs A. and B. allow the Recipient to
267
+
268
+ </li>
269
+ </ol>
270
+ <p>
271
+ sublicense those same rights. Such sublicense must be under the same terms
272
+ and conditions of this Agreement.
273
+ </p>
274
+ <ol>
275
+ <li>OBLIGATIONS OF RECIPIENT
276
+
277
+ </li>
278
+ </ol>
279
+ <ol>
280
+ <li type="A">Distribution or Redistribution of the Subject Software must be made
281
+
282
+ </li>
283
+ </ol>
284
+ <p>
285
+ under this Agreement except for additions covered under paragraph 3H.
286
+ </p>
287
+ <ol>
288
+ <li>Whenever a Recipient distributes or redistributes the Subject
289
+
290
+ <pre>
291
+ Software, a copy of this Agreement must be included with each copy
292
+ of the Subject Software; and
293
+ </pre>
294
+ </li>
295
+ <li>If Recipient distributes or redistributes the Subject Software in
296
+
297
+ <pre>
298
+ any form other than source code, Recipient must also make the
299
+ source code freely available, and must provide with each copy of
300
+ the Subject Software information on how to obtain the source code
301
+ in a reasonable manner on or through a medium customarily used for
302
+ software exchange.
303
+ </pre>
304
+ </li>
305
+ </ol>
306
+ <ol>
307
+ <li type="A">Each Recipient must ensure that the following copyright notice
308
+
309
+ </li>
310
+ </ol>
311
+ <p>
312
+ appears prominently in the Subject Software:
313
+ </p>
314
+ <pre>
315
+ Copyright 2006 United States Government as represented by
316
+ NASA Langley Research Center. No copyright is claimed in
317
+ the United States under Title 17, U.S. Code. All Other Rights
318
+ Reserved.
319
+ </pre>
320
+ <ol>
321
+ <li type="A">Each Contributor must characterize its alteration of the Subject
322
+
323
+ </li>
324
+ </ol>
325
+ <p>
326
+ Software as a Modification and must identify itself as the originator of
327
+ its Modification in a manner that reasonably allows subsequent Recipients
328
+ to identify the originator of the Modification. In fulfillment of these
329
+ requirements, Contributor must include a file (e.g., a change log file)
330
+ that describes the alterations made and the date of the alterations,
331
+ identifies Contributor as originator of the alterations, and consents to
332
+ characterization of the alterations as a Modification, for example, by
333
+ including a statement that the Modification is derived, directly or
334
+ indirectly, from Original Software provided by Government Agency. Once
335
+ consent is granted, it may not thereafter be revoked.
336
+ </p>
337
+ <ol>
338
+ <li type="A">A Contributor may add its own copyright notice to the Subject
339
+
340
+ </li>
341
+ </ol>
342
+ <p>
343
+ Software. Once a copyright notice has been added to the Subject Software, a
344
+ Recipient may not remove it without the express permission of the
345
+ Contributor who added the notice.
346
+ </p>
347
+ <ol>
348
+ <li type="A">A Recipient may not make any representation in the Subject Software
349
+
350
+ </li>
351
+ </ol>
352
+ <p>
353
+ or in any promotional, advertising or other material that may be construed
354
+ as an endorsement by Government Agency or by any prior Recipient of any
355
+ product or service provided by Recipient, or that may seek to obtain
356
+ commercial advantage by the fact of Government Agency&#8217;s or a prior
357
+ Recipient&#8217;s participation in this Agreement.
358
+ </p>
359
+ <ol>
360
+ <li type="A">In an effort to track usage and maintain accurate records of the
361
+
362
+ </li>
363
+ </ol>
364
+ <p>
365
+ Subject Software, each Recipient, upon receipt of the Subject Software, is
366
+ requested to provide Government Agency, by e-mail to the Government Agency
367
+ Point of Contact listed in clause 5.F., the following information: name,
368
+ institution (if applicable), postal code, and country. Recipient&#8217;s
369
+ name and personal information shall be used for statistical purposes only.
370
+ Once a Recipient makes a Modification available, it is requested that the
371
+ Recipient inform Government Agency, by e-mail to the Government Agency
372
+ Point of Contact listed in clause 5.F., how to access the Modification.
373
+ </p>
374
+ <ol>
375
+ <li type="A">Each Contributor represents that that its Modification is believed
376
+
377
+ </li>
378
+ </ol>
379
+ <p>
380
+ to be Contributor&#8217;s original creation and does not violate any
381
+ existing agreements, regulations, statutes or rules, and further that
382
+ Contributor has sufficient rights to grant the rights conveyed by this
383
+ Agreement.
384
+ </p>
385
+ <ol>
386
+ <li type="A">A Recipient may choose to offer, and to charge a fee for, warranty,
387
+
388
+ </li>
389
+ </ol>
390
+ <p>
391
+ support, indemnity and/or liability obligations to one or more other
392
+ Recipients of the Subject Software. A Recipient may do so, however, only on
393
+ its own behalf and not on behalf of Government Agency or any other
394
+ Recipient. Such a Recipient must make it absolutely clear that any such
395
+ warranty, support, indemnity and/or liability obligation is offered by that
396
+ Recipient alone. Further, such Recipient agrees to indemnify Government
397
+ Agency and every other Recipient for any liability incurred by them as a
398
+ result of warranty, support, indemnity and/or liability offered by such
399
+ Recipient.
400
+ </p>
401
+ <ol>
402
+ <li type="A">A Recipient may create a Larger Work by combining Subject Software
403
+
404
+ </li>
405
+ </ol>
406
+ <p>
407
+ with separate software not governed by the terms of this agreement and
408
+ distribute the Larger Work as a single product. In such case, the Recipient
409
+ must make sure Subject Software, or portions thereof, included in the
410
+ Larger Work is subject to this Agreement.
411
+ </p>
412
+ <ol>
413
+ <li type="A">Notwithstanding any provisions contained herein, Recipient is
414
+
415
+ </li>
416
+ </ol>
417
+ <p>
418
+ hereby put on notice that export of any goods or technical data from the
419
+ United States may require some form of export license from the U.S.
420
+ Government. Failure to obtain necessary export licenses may result in
421
+ criminal liability under U.S. laws. Government Agency neither represents
422
+ that a license shall not be required nor that, if required, it shall be
423
+ issued. Nothing granted herein provides any such export license.
424
+ </p>
425
+ <ol>
426
+ <li>DISCLAIMER OF WARRANTIES AND LIABILITIES; WAIVER AND INDEMNIFICATION
427
+
428
+ </li>
429
+ </ol>
430
+ <ol>
431
+ <li type="A">No Warranty: THE SUBJECT SOFTWARE IS PROVIDED &quot;AS IS&quot; WITHOUT ANY
432
+
433
+ </li>
434
+ </ol>
435
+ <p>
436
+ WARRANTY OF ANY KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING,
437
+ BUT NOT LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
438
+ SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
439
+ PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT THE
440
+ SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT DOCUMENTATION, IF
441
+ PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE. THIS AGREEMENT DOES NOT, IN
442
+ ANY MANNER, CONSTITUTE AN ENDORSEMENT BY GOVERNMENT AGENCY OR ANY PRIOR
443
+ RECIPIENT OF ANY RESULTS, RESULTING DESIGNS, HARDWARE, SOFTWARE PRODUCTS OR
444
+ ANY OTHER APPLICATIONS RESULTING FROM USE OF THE SUBJECT SOFTWARE. FURTHER,
445
+ GOVERNMENT AGENCY DISCLAIMS ALL WARRANTIES AND LIABILITIES REGARDING
446
+ THIRD-PARTY SOFTWARE, IF PRESENT IN THE ORIGINAL SOFTWARE, AND DISTRIBUTES
447
+ IT &quot;AS IS.&quot;
448
+ </p>
449
+ <ol>
450
+ <li type="A">Waiver and Indemnity: RECIPIENT AGREES TO WAIVE ANY AND ALL CLAIMS
451
+
452
+ </li>
453
+ </ol>
454
+ <p>
455
+ AGAINST THE UNITED STATES GOVERNMENT, ITS CONTRACTORS AND SUBCONTRACTORS,
456
+ AS WELL AS ANY PRIOR RECIPIENT. IF RECIPIENT&#8216;S USE OF THE SUBJECT
457
+ SOFTWARE RESULTS IN ANY LIABILITIES, DEMANDS, DAMAGES, EXPENSES OR LOSSES
458
+ ARISING FROM SUCH USE, INCLUDING ANY DAMAGES FROM PRODUCTS BASED ON, OR
459
+ RESULTING FROM, RECIPIENT&#8216;S USE OF THE SUBJECT SOFTWARE, RECIPIENT
460
+ SHALL INDEMNIFY AND HOLD HARMLESS THE UNITED STATES GOVERNMENT, ITS
461
+ CONTRACTORS AND SUBCONTRACTORS, AS WELL AS ANY PRIOR RECIPIENT, TO THE
462
+ EXTENT PERMITTED BY LAW. RECIPIENT&#8216;S SOLE REMEDY FOR ANY SUCH MATTER
463
+ SHALL BE THE IMMEDIATE, UNILATERAL TERMINATION OF THIS AGREEMENT.
464
+ </p>
465
+ <ol>
466
+ <li>GENERAL TERMS
467
+
468
+ </li>
469
+ </ol>
470
+ <ol>
471
+ <li type="A">Termination: This Agreement and the rights granted hereunder will
472
+
473
+ </li>
474
+ </ol>
475
+ <p>
476
+ terminate automatically if a Recipient fails to comply with these terms and
477
+ conditions, and fails to cure such noncompliance within thirty (30) days of
478
+ becoming aware of such noncompliance. Upon termination, a Recipient agrees
479
+ to immediately cease use and distribution of the Subject Software. All
480
+ sublicenses to the Subject Software properly granted by the breaching
481
+ Recipient shall survive any such termination of this Agreement.
482
+ </p>
483
+ <ol>
484
+ <li type="A">Severability: If any provision of this Agreement is invalid or
485
+
486
+ </li>
487
+ </ol>
488
+ <p>
489
+ unenforceable under applicable law, it shall not affect the validity or
490
+ enforceability of the remainder of the terms of this Agreement.
491
+ </p>
492
+ <ol>
493
+ <li type="A">Applicable Law: This Agreement shall be subject to United States
494
+
495
+ </li>
496
+ </ol>
497
+ <p>
498
+ federal law only for all purposes, including, but not limited to,
499
+ determining the validity of this Agreement, the meaning of its provisions
500
+ and the rights, obligations and remedies of the parties.
501
+ </p>
502
+ <ol>
503
+ <li type="A">Entire Understanding: This Agreement constitutes the entire
504
+
505
+ </li>
506
+ </ol>
507
+ <p>
508
+ understanding and agreement of the parties relating to release of the
509
+ Subject Software and may not be superseded, modified or amended except by
510
+ further written agreement duly executed by the parties.
511
+ </p>
512
+ <ol>
513
+ <li type="A">Binding Authority: By accepting and using the Subject Software
514
+
515
+ </li>
516
+ </ol>
517
+ <p>
518
+ under this Agreement, a Recipient affirms its authority to bind the
519
+ Recipient to all terms and conditions of this Agreement and that that
520
+ Recipient hereby agrees to all terms and conditions herein.
521
+ </p>
522
+ <ol>
523
+ <li type="A">Point of Contact: Any Recipient contact with Government Agency is
524
+
525
+ </li>
526
+ </ol>
527
+ <p>
528
+ to be directed to the designated representative as follows:
529
+ funit-support@rubyforge.org.
530
+ </p>
531
+
532
+ </div>
533
+
534
+
535
+ </div>
536
+
537
+
538
+ </div>
539
+
540
+
541
+ <!-- if includes -->
542
+
543
+ <div id="section">
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+ <!-- if method_list -->
553
+
554
+
555
+ </div>
556
+
557
+
558
+ <div id="validator-badges">
559
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
560
+ </div>
561
+
562
+ </body>
563
+ </html>