tarantula 0.1.4 → 0.1.5
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/README.rdoc +3 -3
- data/VERSION.yml +1 -1
- data/examples/relevance/tarantula/html_report_helper_example.rb +3 -3
- data/examples/relevance/tarantula/html_reporter_example.rb +3 -3
- data/laf/images/button_active.png +0 -0
- data/laf/images/button_hover.png +0 -0
- data/laf/images/button_inactive.png +0 -0
- data/laf/images/header_bg.jpg +0 -0
- data/laf/images/logo.png +0 -0
- data/laf/images/tagline.png +0 -0
- data/laf/javascripts/tarantula.js +1 -1
- data/laf/stylesheets/tarantula.css +252 -82
- data/lib/relevance/tarantula/detail.html.erb +71 -80
- data/lib/relevance/tarantula/html_report_helper.rb +12 -19
- data/lib/relevance/tarantula/index.html.erb +32 -48
- data/lib/relevance/tarantula/test_report.html.erb +16 -18
- metadata +7 -11
- data/laf/images/background.jpg +0 -0
- data/laf/images/relevance-os-logo.gif +0 -0
- data/laf/images/tab.png +0 -0
- data/laf/images/table-sort.gif +0 -0
- data/laf/images/tarantula-sprites.png +0 -0
- data/laf/stylesheets/NiftyLayout.css +0 -47
- data/laf/stylesheets/niftyCorners.css +0 -35
- data/laf/stylesheets/old.css +0 -638
- data/laf/stylesheets/tarantula.v2.css +0 -48
- data/laf/stylesheets/ui.tabs.css +0 -113
data/README.rdoc
CHANGED
@@ -33,10 +33,10 @@ Tarantula into your Rails app.
|
|
33
33
|
cd vendor/gems
|
34
34
|
gem unpack relevance-tarantula
|
35
35
|
|
36
|
-
You can then add the following line into your Rakefile,
|
37
|
-
|
36
|
+
You can then add the following line into your Rakefile, which will allow your application to discover
|
37
|
+
Tarantula's rake tasks.
|
38
38
|
|
39
|
-
|
39
|
+
load File.join(RAILS_ROOT, Dir["vendor/gems/relevance-tarantula-*/tasks/*.rake"])
|
40
40
|
|
41
41
|
=== Crawling Your App
|
42
42
|
|
data/VERSION.yml
CHANGED
@@ -12,10 +12,10 @@ end
|
|
12
12
|
|
13
13
|
describe 'Relevance::Tarantula::HtmlReportHelper#wrap_in_line_number_table' do
|
14
14
|
include HtmlReportHelperSpec
|
15
|
-
it "can wrap text in a line
|
16
|
-
html = @reporter.
|
15
|
+
it "can wrap text in a table row used for displaying lines and line numbers" do
|
16
|
+
html = @reporter.wrap_in_line_number_table_row("Line 1\nLine 2")
|
17
17
|
html.should == <<-END.strip
|
18
|
-
<
|
18
|
+
<tr><td class=\"numbers\"><span class=\"line number\">1</span><span class=\"line number\">2</span></td><td class=\"lines\"><span class=\"line\">Line 1</span><span class=\"line\">Line 2</span></td></tr>
|
19
19
|
END
|
20
20
|
end
|
21
21
|
end
|
@@ -12,7 +12,7 @@ describe "Relevance::Tarantula::HtmlReporter file output" do
|
|
12
12
|
:success => true,
|
13
13
|
:method => "get",
|
14
14
|
:url => "/widgets/#{index}",
|
15
|
-
:response => stub(:code => 200, :body => "<h1>header</h1>\n<p>text</p>"),
|
15
|
+
:response => stub(:code => "200", :body => "<h1>header</h1>\n<p>text</p>"),
|
16
16
|
:referrer => "/random/#{rand(100)}",
|
17
17
|
:test_name => @test_name,
|
18
18
|
:log => <<-END,
|
@@ -30,7 +30,7 @@ blah blah blah
|
|
30
30
|
:success => false,
|
31
31
|
:method => "get",
|
32
32
|
:url => "/widgets/#{index}",
|
33
|
-
:response => stub(:code => 500, :body => "<h1>header</h1>\n<p>text</p>"),
|
33
|
+
:response => stub(:code => "500", :body => "<h1>header</h1>\n<p>text</p>"),
|
34
34
|
:referrer => "/random/#{rand(100)}",
|
35
35
|
:test_name => @test_name,
|
36
36
|
:log => <<-END,
|
@@ -66,7 +66,7 @@ blah blah blah
|
|
66
66
|
reporter.finish_report(@test_name)
|
67
67
|
links = Hpricot(File.read(@index)).search('.left a')
|
68
68
|
links.each do |link|
|
69
|
-
link['href'].should
|
69
|
+
link['href'].should match(/#{@test_name}\/\d+\.html/)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/laf/images/logo.png
ADDED
Binary file
|
Binary file
|
@@ -1,3 +1,4 @@
|
|
1
|
+
/* RESET */
|
1
2
|
html, body, div, span, applet, object, iframe,
|
2
3
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
3
4
|
a, abbr, acronym, address, big, cite, code,
|
@@ -7,85 +8,232 @@ b, u, i, center,
|
|
7
8
|
dl, dt, dd, ol, ul, li,
|
8
9
|
fieldset, form, label, legend,
|
9
10
|
table, caption, tbody, tfoot, thead, tr, th, td {
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
margin: 0;
|
12
|
+
padding: 0;
|
13
|
+
border: 0;
|
14
|
+
outline: 0;
|
15
|
+
font-size: 100%;
|
16
|
+
vertical-align: baseline;
|
17
|
+
background: transparent;
|
18
|
+
}
|
19
|
+
body {
|
20
|
+
line-height: 1;
|
21
|
+
}
|
22
|
+
ol, ul {
|
23
|
+
list-style: none;
|
24
|
+
}
|
25
|
+
blockquote, q {
|
26
|
+
quotes: none;
|
27
|
+
}
|
28
|
+
|
29
|
+
/* remember to define focus styles! */
|
30
|
+
:focus {
|
31
|
+
outline: 0;
|
32
|
+
}
|
33
|
+
|
34
|
+
/* remember to highlight inserts somehow! */
|
35
|
+
ins {
|
36
|
+
text-decoration: none;
|
37
|
+
}
|
38
|
+
del {
|
39
|
+
text-decoration: line-through;
|
40
|
+
}
|
41
|
+
|
42
|
+
/* tables still need 'cellspacing="0"' in the markup */
|
43
|
+
table {
|
44
|
+
border-collapse: collapse;
|
45
|
+
border-spacing: 0;
|
17
46
|
}
|
18
47
|
|
19
48
|
body {
|
20
|
-
|
21
|
-
|
49
|
+
line-height: 1em;
|
50
|
+
font-family: Tahoma, Arial, Helvetica, sans-serif;
|
51
|
+
color: #050505;
|
22
52
|
}
|
23
53
|
|
54
|
+
/* header */
|
24
55
|
#header {
|
25
|
-
|
26
|
-
|
27
|
-
|
56
|
+
background: #37302e url(../images/header_bg.jpg) no-repeat top left;
|
57
|
+
height: 70px;
|
58
|
+
border-bottom: 2px solid #d0d0d0;
|
28
59
|
}
|
29
60
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
61
|
+
#header h1 {
|
62
|
+
width:206px;
|
63
|
+
height:56px;
|
64
|
+
text-indent: -9999em;
|
65
|
+
background: transparent url(../images/logo.png) no-repeat top center;
|
66
|
+
position: absolute;
|
67
|
+
top: 7px;
|
68
|
+
left: 42px;
|
34
69
|
}
|
35
70
|
|
36
|
-
#
|
37
|
-
|
38
|
-
|
71
|
+
#header h2 {
|
72
|
+
width:196px;
|
73
|
+
height:34px;
|
74
|
+
text-indent: -9999em;
|
75
|
+
background: transparent url(../images/tagline.png) no-repeat top center;
|
76
|
+
position: absolute;
|
77
|
+
top: 15px;
|
78
|
+
left: 257px;
|
39
79
|
}
|
40
80
|
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
81
|
+
#header p {
|
82
|
+
display: block;
|
83
|
+
position: absolute;
|
84
|
+
right: 42px;
|
85
|
+
width: 315px;
|
86
|
+
padding: 8px;
|
87
|
+
color: #fff;
|
88
|
+
font-size: 13px;
|
89
|
+
line-height: 15px;
|
47
90
|
}
|
48
91
|
|
49
|
-
#
|
50
|
-
|
51
|
-
width: 300px;
|
52
|
-
margin-right: 20px;
|
53
|
-
margin-top: 10px;
|
54
|
-
font-size: 12px;
|
55
|
-
padding: 20px;
|
56
|
-
background-color: #fff;
|
92
|
+
#header a:link, #header a:visited, #header a {
|
93
|
+
color: #70b1ca;
|
57
94
|
}
|
58
95
|
|
59
|
-
|
60
|
-
|
96
|
+
#header a:hover {
|
97
|
+
text-decoration: none;
|
61
98
|
}
|
62
99
|
|
63
|
-
|
64
|
-
|
65
|
-
font-size: 12px;
|
100
|
+
#header hr {
|
101
|
+
display: none;
|
66
102
|
}
|
67
103
|
|
68
|
-
|
69
|
-
|
104
|
+
.left { text-align: left !important; }
|
105
|
+
.right { text-align: right !important; }
|
106
|
+
.center { text-align: center !important; }
|
107
|
+
|
108
|
+
/* page */
|
109
|
+
|
110
|
+
#page {
|
111
|
+
padding: 55px 10px 0 10px;
|
112
|
+
width: 1000px;
|
113
|
+
margin: auto;
|
114
|
+
position: relative;
|
70
115
|
}
|
71
116
|
|
72
|
-
.
|
73
|
-
|
117
|
+
div#page ul.tabs {
|
118
|
+
|
119
|
+
clear: both;
|
74
120
|
}
|
75
121
|
|
76
|
-
.
|
122
|
+
div#page ul.tabs li{
|
123
|
+
display: block;
|
124
|
+
float: left;
|
125
|
+
}
|
77
126
|
|
127
|
+
div#page ul.tabs li a {
|
128
|
+
display: block;
|
129
|
+
float: left;
|
130
|
+
clear: right;
|
131
|
+
margin-right: 5px;
|
78
132
|
}
|
79
133
|
|
80
|
-
|
134
|
+
div#page ul.tabs li a.active, .ui-tabs-selected a {
|
135
|
+
background: transparent url(../images/button_active.png) no-repeat top left !important;
|
136
|
+
color: #050505 !important;
|
137
|
+
}
|
138
|
+
|
139
|
+
div#page ul.tabs li a {
|
140
|
+
background: transparent url(../images/button_inactive.png) no-repeat top left;
|
141
|
+
height: 38px;
|
142
|
+
width: 110px;
|
143
|
+
color: #fff;
|
144
|
+
padding: 8px 0 0 12px;
|
145
|
+
font-size: 14px;
|
146
|
+
line-height: 18px;
|
147
|
+
text-decoration: none;
|
148
|
+
}
|
149
|
+
|
150
|
+
div#page ul.tabs li a:hover {
|
151
|
+
background: transparent url(../images/button_hover.png) no-repeat top left;
|
152
|
+
color: #613005;
|
153
|
+
}
|
154
|
+
|
155
|
+
div#page ul.tabs {
|
156
|
+
position: absolute;
|
157
|
+
top: 7px;
|
158
|
+
left: 7px;
|
159
|
+
}
|
160
|
+
|
161
|
+
.list {
|
162
|
+
width: 100%;
|
163
|
+
}
|
164
|
+
|
165
|
+
.list th {
|
166
|
+
cursor:pointer;
|
167
|
+
}
|
168
|
+
|
169
|
+
.list th, .list th a, .list tfoot td {
|
170
|
+
background: #b9b9a9;
|
171
|
+
color: #463c38;
|
172
|
+
text-decoration: none;
|
173
|
+
|
174
|
+
}
|
175
|
+
|
176
|
+
.sort {
|
177
|
+
font-size: 75%;
|
178
|
+
filter:alpha(opacity=50);
|
179
|
+
-moz-opacity:0.5;
|
180
|
+
-khtml-opacity: 0.5;
|
181
|
+
opacity: 0.5;
|
182
|
+
}
|
183
|
+
|
184
|
+
.list th, .list th a:hover span {
|
185
|
+
filter:alpha(opacity=100);
|
186
|
+
-moz-opacity:1;
|
187
|
+
-khtml-opacity: 1;
|
188
|
+
opacity: 1;
|
189
|
+
}
|
190
|
+
|
191
|
+
.list td, .list th {
|
81
192
|
text-align: center;
|
82
|
-
|
193
|
+
padding: 4px;
|
194
|
+
font-size: 14px;
|
195
|
+
}
|
196
|
+
|
197
|
+
.list .sort.asc .sort:after {
|
198
|
+
content: "\25BC";
|
199
|
+
}
|
200
|
+
|
201
|
+
.list .sort.desc .sort:after {
|
202
|
+
content: "\25B2";
|
203
|
+
}
|
204
|
+
|
205
|
+
|
206
|
+
div#page tbody a {
|
207
|
+
color: #6699cc;
|
208
|
+
}
|
209
|
+
|
210
|
+
div#page tbody a:hover {
|
211
|
+
text-decoration: none;
|
212
|
+
}
|
213
|
+
|
214
|
+
div#page table caption {
|
215
|
+
text-align: left;
|
216
|
+
padding: 7px;
|
217
|
+
background: #d0d0c4;
|
218
|
+
border-bottom: 2px solid #aba7a1;
|
219
|
+
-moz-border-radius-topleft: 2px;
|
220
|
+
-moz-border-radius-topright: 2px;
|
221
|
+
}
|
222
|
+
|
223
|
+
.list tbody td {
|
224
|
+
background: #f2f2eb;
|
83
225
|
}
|
84
226
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
227
|
+
.list tfoot td {
|
228
|
+
line-height: 18px;
|
229
|
+
}
|
230
|
+
|
231
|
+
.list .method {
|
232
|
+
width: 6em;
|
233
|
+
}
|
234
|
+
|
235
|
+
tr.even td {
|
236
|
+
background: #e9e9e2 !important;
|
89
237
|
}
|
90
238
|
|
91
239
|
/* Response Codes */
|
@@ -127,49 +275,71 @@ span.r5 {
|
|
127
275
|
border: 1px solid #dc0000;
|
128
276
|
}
|
129
277
|
|
130
|
-
/*
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
}
|
137
|
-
|
138
|
-
/*\*/
|
139
|
-
html*#header ul.navigation {
|
140
|
-
top: 30px;
|
141
|
-
} /**/
|
278
|
+
/* Detail */
|
279
|
+
#report h3 {
|
280
|
+
background: #D0D0C4; font-weight: normal;
|
281
|
+
border-bottom: 2px solid #ABA7A1;
|
282
|
+
-moz-border-radius-topleft: 2px; -moz-border-radius-topright: 2px;
|
283
|
+
-webkit-border-top-left-radius: 2px; -webkit-border-top-right-radius: 2px;
|
284
|
+
}
|
142
285
|
|
143
|
-
#
|
144
|
-
|
286
|
+
#report h3,
|
287
|
+
#report p {
|
288
|
+
width: 50%;
|
289
|
+
padding:6px 8px;
|
290
|
+
margin: 1px 0;
|
145
291
|
}
|
146
292
|
|
293
|
+
#report a {
|
294
|
+
color: #70B1CA
|
295
|
+
}
|
147
296
|
|
148
|
-
#
|
149
|
-
|
150
|
-
|
151
|
-
background-color: #003366;
|
152
|
-
}
|
297
|
+
#report a:hover {
|
298
|
+
text-decoration: none;
|
299
|
+
}
|
153
300
|
|
154
|
-
#
|
155
|
-
|
156
|
-
|
157
|
-
width: 100%;
|
301
|
+
#report p b {
|
302
|
+
color: #050505;
|
303
|
+
font-weight: normal;
|
158
304
|
}
|
159
305
|
|
160
|
-
#
|
161
|
-
|
162
|
-
|
306
|
+
#report p {
|
307
|
+
color: #463C38;
|
308
|
+
background: #f2f2eb;
|
309
|
+
line-height: 22px;
|
163
310
|
}
|
164
|
-
|
165
|
-
#
|
166
|
-
|
311
|
+
|
312
|
+
#report p span {
|
313
|
+
display: inline-block;
|
314
|
+
display: -moz-inline-block;
|
315
|
+
margin: 0;
|
316
|
+
padding: 2px 6px;
|
317
|
+
line-height: 16px;
|
167
318
|
}
|
168
319
|
|
169
|
-
#
|
170
|
-
|
171
|
-
|
172
|
-
|
320
|
+
#report h3 em {
|
321
|
+
display: block;
|
322
|
+
font-family: Consolas, Lucida Console, Monaco, monospace;
|
323
|
+
font-size: 75%;
|
324
|
+
font-style: normal;
|
325
|
+
font-weight: normal;
|
326
|
+
color: #463C38;
|
327
|
+
line-height: 22px;
|
173
328
|
}
|
174
329
|
|
330
|
+
/* Output */
|
331
|
+
.output {margin: 10px 0; width: 100%; font-size: 82.5%;}
|
332
|
+
.output th { background: #b9b9a9; text-align: left; padding-left: 2.25em; font-weight: normal; line-height: 18px; color: #463C38; border-bottom: 1px solid #fff;
|
333
|
+
-moz-border-radius-topleft: 2px; -moz-border-radius-topright: 2px;
|
334
|
+
-webkit-border-top-left-radius: 2px; -webkit-border-top-right-radius: 2px;
|
335
|
+
}
|
336
|
+
.output td { background: #f2f2eb; padding: 1px; line-height: 18px; }
|
337
|
+
.output { font-family: Consolas, Lucida Console, Monaco, monospace; }
|
338
|
+
.output .numbers { width: 3em; text-align: right; border-right: 1px solid #fff;}
|
339
|
+
.output .lines { width: auto; text-align: left;}
|
340
|
+
.output .line { display: block; text-align: left; padding: 1px 4px;}
|
341
|
+
.output .line.number { text-align: right; color: #585850; }
|
175
342
|
|
343
|
+
/* Tabs */
|
344
|
+
.ui-tabs-panel {display: block;}
|
345
|
+
.ui-tabs-panel.ui-tabs-hide {display: none !important;}
|
@@ -1,91 +1,82 @@
|
|
1
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
3
|
|
4
|
-
<html>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
</head>
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
+
<link rel="stylesheet" href="../stylesheets/tarantula.css" type="text/css" media="screen" title="no title" charset="utf-8" />
|
8
|
+
<title>Detail</title>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="container">
|
12
|
+
<div id="header">
|
13
|
+
<h1>Tarantula by Relevance</h1>
|
14
|
+
<h2>Eight legs, two fangs ... and an attitude</h2>
|
15
|
+
<p>Tarantula is an open source tool for testing Rails web
|
16
|
+
applications. Tarantula is developed by <a href="http://thinkrelevance.com">Relevance, Inc.</a>
|
17
|
+
and lives at <a href="http://github.com/relevance/tarantula">http://github.com/relevance/tarantula</a>.</p>
|
18
|
+
<hr/>
|
19
|
+
</div>
|
20
|
+
<div id="page">
|
21
|
+
<ul class="tabs">
|
22
|
+
<li><a href="../index.html">« Back</a></li>
|
23
|
+
<!-- TODO dynamically hide/show body/log sections based on selected "tab" - dynamically assign the "active" class to the selected tab -->
|
24
|
+
<li><a href="#fragment-1" class="active">Body</a></li>
|
25
|
+
<li><a href="#fragment-2" class="active">Log</a></li>
|
26
|
+
</ul>
|
28
27
|
|
29
|
-
|
28
|
+
<div id="report">
|
29
|
+
<h3>Detail of <%= short_description %> <em>Generated on <%= Time.now %></em></h3>
|
30
|
+
<p><b>Resource</b> <a href="<%= full_url %>"><%= full_url %></a></p>
|
31
|
+
<p><b>Response</b> <span class="r<%= code.first %>"><%= code %></span></p>
|
32
|
+
<p><b>Referrer</b> <%= referrer || "" %></p>
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
<
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
<table class="output">
|
35
|
+
<tbody>
|
36
|
+
<tr>
|
37
|
+
<th colspan="2"># Data</th>
|
38
|
+
</tr>
|
39
|
+
<% if data %>
|
40
|
+
<%= wrap_in_line_number_table_row(data) %>
|
41
|
+
<% else %>
|
42
|
+
<tr>
|
43
|
+
<td colspan="2">No Data</td>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
<
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
<table class="output" id="fragment-1">
|
50
|
+
<tbody>
|
51
|
+
<tr>
|
52
|
+
<th colspan="2"># Body</th>
|
53
|
+
</tr>
|
54
|
+
<% if body %>
|
55
|
+
<%= wrap_in_line_number_table_row(body) %>
|
56
|
+
<% else %>
|
57
|
+
<tr>
|
58
|
+
<td colspan="2">No Body</td>
|
59
|
+
</tr>
|
60
|
+
<% end %>
|
61
|
+
</tbody>
|
62
|
+
</table>
|
52
63
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
<p>No Data</p>
|
59
|
-
<% end %>
|
60
|
-
</div>
|
61
|
-
<div id="fragment-2">
|
62
|
-
<% if body %>
|
63
|
-
<%= wrap_in_line_number_table(body) %>
|
64
|
-
<% else %>
|
65
|
-
<p>No Body</p>
|
66
|
-
<% end %>
|
67
|
-
</div>
|
68
|
-
<div id="fragment-3">
|
64
|
+
<table class="output" id="fragment-2">
|
65
|
+
<tbody>
|
66
|
+
<tr>
|
67
|
+
<th colspan="2"># Log</th>
|
68
|
+
</tr>
|
69
69
|
<% if log %>
|
70
|
-
<%=
|
70
|
+
<%= wrap_in_line_number_table_row(log) {|line| wrap_stack_trace_line(line)} %>
|
71
71
|
<% else %>
|
72
|
-
<
|
72
|
+
<tr>
|
73
|
+
<td colspan="2">No Log</td>
|
74
|
+
</tr>
|
73
75
|
<% end %>
|
74
|
-
</
|
75
|
-
|
76
|
+
</tbody>
|
77
|
+
</table>
|
76
78
|
</div>
|
77
|
-
|
78
|
-
<div id="sidebar">
|
79
|
-
Tarantula is an open-source tool for testing Rails web applications. Tarantula is developed by
|
80
|
-
<a href="http://thinkrelevance.com">Relevance, Inc.</a>
|
81
|
-
and lives at <a href="http://github.com/relevance/tarantula">http://github.com/relevance/tarantula</a>.
|
82
|
-
</div>
|
83
|
-
|
84
|
-
<div class="clearer"></div>
|
85
|
-
|
86
79
|
</div>
|
87
|
-
</
|
88
|
-
|
89
|
-
</html>
|
90
|
-
|
91
|
-
|
80
|
+
</div>
|
81
|
+
</body>
|
82
|
+
</html>
|