rails-dom-testing 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/rails/dom/testing/assertions.rb +2 -0
- data/lib/rails/dom/testing/assertions/tag_assertions.rb +155 -0
- data/lib/rails/dom/testing/version.rb +1 -1
- data/test/tag_assertions_test.rb +218 -0
- metadata +21 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25916970c49a8bacd1a2153cedaf2474cdceb73a
|
4
|
+
data.tar.gz: a3ce7d48ccb543f0abf1bd2354493a3281a38a04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c3389884b69ad22df708e36656e72cafa18b71868d6aadab3e47d0f8228ec885c84f06bde22424a6e84c9a2612ccb210b951e3fbbb3f4fa863dd26def4d5f0d
|
7
|
+
data.tar.gz: 3340db215cba92832210bc2847ebb043c855461fc76fcaaa39e70463599a6b5fd2fa3030795a805ada92e9a2cf72e37cfab2d724bb865feae056ac835878540d
|
data/CHANGELOG.md
CHANGED
@@ -7,11 +7,13 @@ module Rails
|
|
7
7
|
module Assertions
|
8
8
|
autoload :DomAssertions, 'rails/dom/testing/assertions/dom_assertions'
|
9
9
|
autoload :SelectorAssertions, 'rails/dom/testing/assertions/selector_assertions'
|
10
|
+
autoload :TagAssertions, 'rails/dom/testing/assertions/tag_assertions'
|
10
11
|
|
11
12
|
extend ActiveSupport::Concern
|
12
13
|
|
13
14
|
include DomAssertions
|
14
15
|
include SelectorAssertions
|
16
|
+
include TagAssertions
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'active_support/deprecation'
|
2
|
+
require 'rails/deprecated_sanitizer/html-scanner'
|
3
|
+
|
4
|
+
module Rails
|
5
|
+
module Dom
|
6
|
+
module Testing
|
7
|
+
module Assertions
|
8
|
+
# Pair of assertions to testing elements in the HTML output of the response.
|
9
|
+
module TagAssertions
|
10
|
+
# Asserts that there is a tag/node/element in the body of the response
|
11
|
+
# that meets all of the given conditions. The +conditions+ parameter must
|
12
|
+
# be a hash of any of the following keys (all are optional):
|
13
|
+
#
|
14
|
+
# * <tt>:tag</tt>: the node type must match the corresponding value
|
15
|
+
# * <tt>:attributes</tt>: a hash. The node's attributes must match the
|
16
|
+
# corresponding values in the hash.
|
17
|
+
# * <tt>:parent</tt>: a hash. The node's parent must match the
|
18
|
+
# corresponding hash.
|
19
|
+
# * <tt>:child</tt>: a hash. At least one of the node's immediate children
|
20
|
+
# must meet the criteria described by the hash.
|
21
|
+
# * <tt>:ancestor</tt>: a hash. At least one of the node's ancestors must
|
22
|
+
# meet the criteria described by the hash.
|
23
|
+
# * <tt>:descendant</tt>: a hash. At least one of the node's descendants
|
24
|
+
# must meet the criteria described by the hash.
|
25
|
+
# * <tt>:sibling</tt>: a hash. At least one of the node's siblings must
|
26
|
+
# meet the criteria described by the hash.
|
27
|
+
# * <tt>:after</tt>: a hash. The node must be after any sibling meeting
|
28
|
+
# the criteria described by the hash, and at least one sibling must match.
|
29
|
+
# * <tt>:before</tt>: a hash. The node must be before any sibling meeting
|
30
|
+
# the criteria described by the hash, and at least one sibling must match.
|
31
|
+
# * <tt>:children</tt>: a hash, for counting children of a node. Accepts
|
32
|
+
# the keys:
|
33
|
+
# * <tt>:count</tt>: either a number or a range which must equal (or
|
34
|
+
# include) the number of children that match.
|
35
|
+
# * <tt>:less_than</tt>: the number of matching children must be less
|
36
|
+
# than this number.
|
37
|
+
# * <tt>:greater_than</tt>: the number of matching children must be
|
38
|
+
# greater than this number.
|
39
|
+
# * <tt>:only</tt>: another hash consisting of the keys to use
|
40
|
+
# to match on the children, and only matching children will be
|
41
|
+
# counted.
|
42
|
+
# * <tt>:content</tt>: the textual content of the node must match the
|
43
|
+
# given value. This will not match HTML tags in the body of a
|
44
|
+
# tag--only text.
|
45
|
+
#
|
46
|
+
# Conditions are matched using the following algorithm:
|
47
|
+
#
|
48
|
+
# * if the condition is a string, it must be a substring of the value.
|
49
|
+
# * if the condition is a regexp, it must match the value.
|
50
|
+
# * if the condition is a number, the value must match number.to_s.
|
51
|
+
# * if the condition is +true+, the value must not be +nil+.
|
52
|
+
# * if the condition is +false+ or +nil+, the value must be +nil+.
|
53
|
+
#
|
54
|
+
# # Assert that there is a "span" tag
|
55
|
+
# assert_tag tag: "span"
|
56
|
+
#
|
57
|
+
# # Assert that there is a "span" tag with id="x"
|
58
|
+
# assert_tag tag: "span", attributes: { id: "x" }
|
59
|
+
#
|
60
|
+
# # Assert that there is a "span" tag using the short-hand
|
61
|
+
# assert_tag :span
|
62
|
+
#
|
63
|
+
# # Assert that there is a "span" tag with id="x" using the short-hand
|
64
|
+
# assert_tag :span, attributes: { id: "x" }
|
65
|
+
#
|
66
|
+
# # Assert that there is a "span" inside of a "div"
|
67
|
+
# assert_tag tag: "span", parent: { tag: "div" }
|
68
|
+
#
|
69
|
+
# # Assert that there is a "span" somewhere inside a table
|
70
|
+
# assert_tag tag: "span", ancestor: { tag: "table" }
|
71
|
+
#
|
72
|
+
# # Assert that there is a "span" with at least one "em" child
|
73
|
+
# assert_tag tag: "span", child: { tag: "em" }
|
74
|
+
#
|
75
|
+
# # Assert that there is a "span" containing a (possibly nested)
|
76
|
+
# # "strong" tag.
|
77
|
+
# assert_tag tag: "span", descendant: { tag: "strong" }
|
78
|
+
#
|
79
|
+
# # Assert that there is a "span" containing between 2 and 4 "em" tags
|
80
|
+
# # as immediate children
|
81
|
+
# assert_tag tag: "span",
|
82
|
+
# children: { count: 2..4, only: { tag: "em" } }
|
83
|
+
#
|
84
|
+
# # Get funky: assert that there is a "div", with an "ul" ancestor
|
85
|
+
# # and an "li" parent (with "class" = "enum"), and containing a
|
86
|
+
# # "span" descendant that contains text matching /hello world/
|
87
|
+
# assert_tag tag: "div",
|
88
|
+
# ancestor: { tag: "ul" },
|
89
|
+
# parent: { tag: "li",
|
90
|
+
# attributes: { class: "enum" } },
|
91
|
+
# descendant: { tag: "span",
|
92
|
+
# child: /hello world/ }
|
93
|
+
#
|
94
|
+
# <b>Please note</b>: +assert_tag+ and +assert_no_tag+ only work
|
95
|
+
# with well-formed XHTML. They recognize a few tags as implicitly self-closing
|
96
|
+
# (like br and hr and such) but will not work correctly with tags
|
97
|
+
# that allow optional closing tags (p, li, td). <em>You must explicitly
|
98
|
+
# close all of your tags to use these assertions.</em>
|
99
|
+
def assert_tag(*opts)
|
100
|
+
ActiveSupport::Deprecation.warn("assert_tag is deprecated and will be removed at Rails 5. Use assert_select to get the same feature.")
|
101
|
+
|
102
|
+
opts = opts.size > 1 ? opts.last.merge({ tag: opts.first.to_s }) : opts.first
|
103
|
+
tag = _find_tag(opts)
|
104
|
+
|
105
|
+
assert tag, "expected tag, but no tag found matching #{opts.inspect} in:\n#{@response.body.inspect}"
|
106
|
+
end
|
107
|
+
|
108
|
+
# Identical to +assert_tag+, but asserts that a matching tag does _not_
|
109
|
+
# exist. (See +assert_tag+ for a full discussion of the syntax.)
|
110
|
+
#
|
111
|
+
# # Assert that there is not a "div" containing a "p"
|
112
|
+
# assert_no_tag tag: "div", descendant: { tag: "p" }
|
113
|
+
#
|
114
|
+
# # Assert that an unordered list is empty
|
115
|
+
# assert_no_tag tag: "ul", descendant: { tag: "li" }
|
116
|
+
#
|
117
|
+
# # Assert that there is not a "p" tag with between 1 to 3 "img" tags
|
118
|
+
# # as immediate children
|
119
|
+
# assert_no_tag tag: "p",
|
120
|
+
# children: { count: 1..3, only: { tag: "img" } }
|
121
|
+
def assert_no_tag(*opts)
|
122
|
+
ActiveSupport::Deprecation.warn("assert_no_tag is deprecated and will be removed at Rails 5. Use assert_select to get the same feature.")
|
123
|
+
|
124
|
+
opts = opts.size > 1 ? opts.last.merge({ tag: opts.first.to_s }) : opts.first
|
125
|
+
tag = _find_tag(opts)
|
126
|
+
|
127
|
+
assert !tag, "expected no tag, but found tag matching #{opts.inspect} in:\n#{@response.body.inspect}"
|
128
|
+
end
|
129
|
+
|
130
|
+
def find_tag(conditions)
|
131
|
+
ActiveSupport::Deprecation.warn("find_tag is deprecated and will be removed at Rails 5 without replacement.")
|
132
|
+
|
133
|
+
_find_tag(conditions)
|
134
|
+
end
|
135
|
+
|
136
|
+
def find_all_tag(conditions)
|
137
|
+
ActiveSupport::Deprecation.warn("find_all_tag is deprecated and will be removed at Rails 5 without replacement. Use assert_select to get the same feature.")
|
138
|
+
|
139
|
+
html_scanner_document.find_all(conditions)
|
140
|
+
end
|
141
|
+
|
142
|
+
private
|
143
|
+
def _find_tag(conditions)
|
144
|
+
html_scanner_document.find(conditions)
|
145
|
+
end
|
146
|
+
|
147
|
+
def html_scanner_document
|
148
|
+
xml = @response.content_type =~ /xml$/
|
149
|
+
@html_document ||= HTML::Document.new(@response.body, false, xml)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,218 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'rails/dom/testing/assertions/tag_assertions'
|
3
|
+
|
4
|
+
HTML_TEST_OUTPUT = <<HTML
|
5
|
+
<html>
|
6
|
+
<body>
|
7
|
+
<a href="/"><img src="/images/button.png" /></a>
|
8
|
+
<div id="foo">
|
9
|
+
<ul>
|
10
|
+
<li class="item">hello</li>
|
11
|
+
<li class="item">goodbye</li>
|
12
|
+
</ul>
|
13
|
+
</div>
|
14
|
+
<div id="bar">
|
15
|
+
<form action="/somewhere">
|
16
|
+
Name: <input type="text" name="person[name]" id="person_name" />
|
17
|
+
</form>
|
18
|
+
</div>
|
19
|
+
</body>
|
20
|
+
</html>
|
21
|
+
HTML
|
22
|
+
|
23
|
+
class AssertTagTest < ActiveSupport::TestCase
|
24
|
+
include Rails::Dom::Testing::Assertions::TagAssertions
|
25
|
+
|
26
|
+
class FakeResponse
|
27
|
+
attr_accessor :content_type, :body
|
28
|
+
|
29
|
+
def initialize(content_type, body)
|
30
|
+
@content_type, @body = content_type, body
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
setup do
|
35
|
+
@response = FakeResponse.new 'html', HTML_TEST_OUTPUT
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_assert_tag_tag
|
39
|
+
assert_deprecated do
|
40
|
+
# there is a 'form' tag
|
41
|
+
assert_tag tag: 'form'
|
42
|
+
# there is not an 'hr' tag
|
43
|
+
assert_no_tag tag: 'hr'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_assert_tag_attributes
|
48
|
+
assert_deprecated do
|
49
|
+
# there is a tag with an 'id' of 'bar'
|
50
|
+
assert_tag attributes: { id: "bar" }
|
51
|
+
# there is no tag with a 'name' of 'baz'
|
52
|
+
assert_no_tag attributes: { name: "baz" }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_assert_tag_parent
|
57
|
+
assert_deprecated do
|
58
|
+
# there is a tag with a parent 'form' tag
|
59
|
+
assert_tag parent: { tag: "form" }
|
60
|
+
# there is no tag with a parent of 'input'
|
61
|
+
assert_no_tag parent: { tag: "input" }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_assert_tag_child
|
66
|
+
assert_deprecated do
|
67
|
+
# there is a tag with a child 'input' tag
|
68
|
+
assert_tag child: { tag: "input" }
|
69
|
+
# there is no tag with a child 'strong' tag
|
70
|
+
assert_no_tag child: { tag: "strong" }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_assert_tag_ancestor
|
75
|
+
assert_deprecated do
|
76
|
+
# there is a 'li' tag with an ancestor having an id of 'foo'
|
77
|
+
assert_tag ancestor: { attributes: { id: "foo" } }, tag: "li"
|
78
|
+
# there is no tag of any kind with an ancestor having an href matching 'foo'
|
79
|
+
assert_no_tag ancestor: { attributes: { href: /foo/ } }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_assert_tag_descendant
|
84
|
+
assert_deprecated do
|
85
|
+
# there is a tag with a descendant 'li' tag
|
86
|
+
assert_tag descendant: { tag: "li" }
|
87
|
+
# there is no tag with a descendant 'html' tag
|
88
|
+
assert_no_tag descendant: { tag: "html" }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_assert_tag_sibling
|
93
|
+
assert_deprecated do
|
94
|
+
# there is a tag with a sibling of class 'item'
|
95
|
+
assert_tag sibling: { attributes: { class: "item" } }
|
96
|
+
# there is no tag with a sibling 'ul' tag
|
97
|
+
assert_no_tag sibling: { tag: "ul" }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_assert_tag_after
|
102
|
+
assert_deprecated do
|
103
|
+
# there is a tag following a sibling 'div' tag
|
104
|
+
assert_tag after: { tag: "div" }
|
105
|
+
# there is no tag following a sibling tag with id 'bar'
|
106
|
+
assert_no_tag after: { attributes: { id: "bar" } }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_assert_tag_before
|
111
|
+
assert_deprecated do
|
112
|
+
# there is a tag preceding a tag with id 'bar'
|
113
|
+
assert_tag before: { attributes: { id: "bar" } }
|
114
|
+
# there is no tag preceding a 'form' tag
|
115
|
+
assert_no_tag before: { tag: "form" }
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_assert_tag_children_count
|
120
|
+
assert_deprecated do
|
121
|
+
# there is a tag with 2 children
|
122
|
+
assert_tag children: { count: 2 }
|
123
|
+
# in particular, there is a <ul> tag with two children (a nameless pair of <li>s)
|
124
|
+
assert_tag tag: 'ul', children: { count: 2 }
|
125
|
+
# there is no tag with 4 children
|
126
|
+
assert_no_tag children: { count: 4 }
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_assert_tag_children_less_than
|
131
|
+
assert_deprecated do
|
132
|
+
# there is a tag with less than 5 children
|
133
|
+
assert_tag children: { less_than: 5 }
|
134
|
+
# there is no 'ul' tag with less than 2 children
|
135
|
+
assert_no_tag children: { less_than: 2 }, tag: "ul"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_assert_tag_children_greater_than
|
140
|
+
assert_deprecated do
|
141
|
+
# there is a 'body' tag with more than 1 children
|
142
|
+
assert_tag children: { greater_than: 1 }, tag: "body"
|
143
|
+
# there is no tag with more than 10 children
|
144
|
+
assert_no_tag children: { greater_than: 10 }
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_assert_tag_children_only
|
149
|
+
assert_deprecated do
|
150
|
+
# there is a tag containing only one child with an id of 'foo'
|
151
|
+
assert_tag children: { count: 1,
|
152
|
+
only: { attributes: { id: "foo" } } }
|
153
|
+
# there is no tag containing only one 'li' child
|
154
|
+
assert_no_tag children: { count: 1, only: { tag: "li" } }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_assert_tag_content
|
159
|
+
assert_deprecated do
|
160
|
+
# the output contains the string "Name"
|
161
|
+
assert_tag content: /Name/
|
162
|
+
# the output does not contain the string "test"
|
163
|
+
assert_no_tag content: /test/
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_assert_tag_multiple
|
168
|
+
assert_deprecated do
|
169
|
+
# there is a 'div', id='bar', with an immediate child whose 'action'
|
170
|
+
# attribute matches the regexp /somewhere/.
|
171
|
+
assert_tag tag: "div", attributes: { id: "bar" },
|
172
|
+
child: { attributes: { action: /somewhere/ } }
|
173
|
+
|
174
|
+
# there is no 'div', id='foo', with a 'ul' child with more than
|
175
|
+
# 2 "li" children.
|
176
|
+
assert_no_tag tag: "div", attributes: { id: "foo" },
|
177
|
+
child: { tag: "ul",
|
178
|
+
children: { greater_than: 2, only: { tag: "li" } } }
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_assert_tag_children_without_content
|
183
|
+
assert_deprecated do
|
184
|
+
# there is a form tag with an 'input' child which is a self closing tag
|
185
|
+
assert_tag tag: "form",
|
186
|
+
children: { count: 1,
|
187
|
+
only: { tag: "input" } }
|
188
|
+
|
189
|
+
# the body tag has an 'a' child which in turn has an 'img' child
|
190
|
+
assert_tag tag: "body",
|
191
|
+
children: { count: 1,
|
192
|
+
only: { tag: "a",
|
193
|
+
children: { count: 1,
|
194
|
+
only: { tag: "img" } } } }
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_assert_tag_attribute_matching
|
199
|
+
assert_deprecated do
|
200
|
+
@response.body = '<input type="text" name="my_name">'
|
201
|
+
assert_tag tag: 'input',
|
202
|
+
attributes: { name: /my/, type: 'text' }
|
203
|
+
assert_no_tag tag: 'input',
|
204
|
+
attributes: { name: 'my', type: 'text' }
|
205
|
+
assert_no_tag tag: 'input',
|
206
|
+
attributes: { name: /^my$/, type: 'text' }
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_assert_tag_content_matching
|
211
|
+
assert_deprecated do
|
212
|
+
@response.body = "<p>hello world</p>"
|
213
|
+
assert_tag tag: "p", content: "hello world"
|
214
|
+
assert_tag tag: "p", content: /hello/
|
215
|
+
assert_no_tag tag: "p", content: "hello"
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-dom-testing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Mendonça França
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-08-
|
12
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rails-deprecated_sanitizer
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 1.0.1
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.0.1
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: bundler
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,9 +112,11 @@ files:
|
|
98
112
|
- lib/rails/dom/testing/assertions/selector_assertions.rb
|
99
113
|
- lib/rails/dom/testing/assertions/selector_assertions/html_selector.rb
|
100
114
|
- lib/rails/dom/testing/assertions/selector_assertions/substitution_context.rb
|
115
|
+
- lib/rails/dom/testing/assertions/tag_assertions.rb
|
101
116
|
- lib/rails/dom/testing/version.rb
|
102
117
|
- test/dom_assertions_test.rb
|
103
118
|
- test/selector_assertions_test.rb
|
119
|
+
- test/tag_assertions_test.rb
|
104
120
|
- test/test_helper.rb
|
105
121
|
homepage: https://github.com/kaspth/rails-dom-testing
|
106
122
|
licenses:
|
@@ -122,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
138
|
version: '0'
|
123
139
|
requirements: []
|
124
140
|
rubyforge_project:
|
125
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.3.0
|
126
142
|
signing_key:
|
127
143
|
specification_version: 4
|
128
144
|
summary: This gem can compare doms and assert certain elements exists in doms using
|
@@ -130,4 +146,6 @@ summary: This gem can compare doms and assert certain elements exists in doms us
|
|
130
146
|
test_files:
|
131
147
|
- test/dom_assertions_test.rb
|
132
148
|
- test/selector_assertions_test.rb
|
149
|
+
- test/tag_assertions_test.rb
|
133
150
|
- test/test_helper.rb
|
151
|
+
has_rdoc:
|