Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
ff56f3d5
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ff56f3d5
编写于
10月 07, 2009
作者:
J
Joshua Peek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rewrite ActiveModel::Lint as a simple TU mixin
上级
4df96338
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
80 deletion
+38
-80
activemodel/lib/active_model/lint.rb
activemodel/lib/active_model/lint.rb
+30
-48
activemodel/test/cases/lint_test.rb
activemodel/test/cases/lint_test.rb
+8
-32
未找到文件。
activemodel/lib/active_model/lint.rb
浏览文件 @
ff56f3d5
# You can test whether an object is compliant with the ActiveModel API by
#
calling ActiveModel::Lint.test(object). It will emit a Test::Unit
#
output that tells
you whether your object is fully compliant, or if not,
#
including ActiveModel::Lint::Tests in your TestCase. It will included
#
tests that tell
you whether your object is fully compliant, or if not,
# which aspects of the API are not implemented.
#
# These tests do not attempt to determine the semantic correctness of the
...
...
@@ -12,36 +12,15 @@
# call to to_model. It is perfectly fine for to_model to return self.
module
ActiveModel
module
Lint
def
self
.
test
(
object
,
verbosity
=
2
,
output
=
STDOUT
)
require
"test/unit"
require
"test/unit/ui/console/testrunner"
test_class
=
Class
.
new
(
::
Test
::
Unit
::
TestCase
)
do
include
Test
define_method
(
:setup
)
do
assert
object
.
respond_to?
(
:to_model
),
"The object should respond_to :to_model"
@object
=
object
.
to_model
super
end
end
::
Test
::
Unit
::
UI
::
Console
::
TestRunner
.
new
(
test_class
,
verbosity
,
output
).
start
end
module
Test
def
assert_boolean
(
name
,
result
)
assert
result
==
true
||
result
==
false
,
"
#{
name
}
should be a boolean"
end
module
Tests
# valid?
# ------
#
# Returns a boolean that specifies whether the object is in a valid or invalid
# state.
def
test_valid?
assert
@object
.
respond_to?
(
:valid?
),
"The model should respond to valid?"
assert_boolean
"valid?"
,
@object
.
valid?
assert
model
.
respond_to?
(
:valid?
),
"The model should respond to valid?"
assert_boolean
model
.
valid?
,
"valid?"
end
# new_record?
...
...
@@ -53,13 +32,13 @@ def test_valid?
# collection. If it is persisted, a form for the object will put PUTed to the
# URL for the object.
def
test_new_record?
assert
@object
.
respond_to?
(
:new_record?
),
"The model should respond to new_record?"
assert_boolean
"new_record?"
,
@object
.
new_record?
assert
model
.
respond_to?
(
:new_record?
),
"The model should respond to new_record?"
assert_boolean
model
.
new_record?
,
"new_record?"
end
def
test_destroyed?
assert
@object
.
respond_to?
(
:destroyed?
),
"The model should respond to destroyed?"
assert_boolean
"destroyed?"
,
@object
.
destroyed?
assert
model
.
respond_to?
(
:destroyed?
),
"The model should respond to destroyed?"
assert_boolean
model
.
destroyed?
,
"destroyed?"
end
# errors
...
...
@@ -67,29 +46,32 @@ def test_destroyed?
#
# Returns an object that has :[] and :full_messages defined on it. See below
# for more details.
def
setup
assert
@object
.
respond_to?
(
:errors
),
"The model should respond to errors"
@errors
=
@object
.
errors
# Returns an Array of Strings that are the errors for the attribute in
# question. If localization is used, the Strings should be localized
# for the current locale. If no error is present, this method should
# return an empty Array.
def
test_errors_aref
assert
model
.
respond_to?
(
:errors
),
"The model should respond to errors"
assert
model
.
errors
[
:hello
].
is_a?
(
Array
),
"errors#[] should return an Array"
end
# This module tests the #errors object
module
Errors
# Returns an Array of Strings that are the errors for the attribute in
# question. If localization is used, the Strings should be localized
# for the current locale. If no error is present, this method should
# return an empty Array.
def
test_errors_aref
assert
@errors
[
:hello
].
is_a?
(
Array
),
"errors#[] should return an Array"
end
# Returns an Array of all error messages for the object. Each message
# should contain information about the field, if applicable.
def
test_errors_full_messages
assert
model
.
respond_to?
(
:errors
),
"The model should respond to errors"
assert
model
.
errors
.
full_messages
.
is_a?
(
Array
),
"errors#full_messages should return an Array"
end
# Returns an Array of all error messages for the object. Each messag
e
# should contain information about the field, if applicable.
def
test_errors_full_messages
assert
@errors
.
full_messages
.
is_a?
(
Array
),
"errors#full_messages should return an Array"
privat
e
def
model
assert
@model
.
respond_to?
(
:to_model
),
"The object should respond_to to_model"
@model
.
to_model
end
end
include
Errors
def
assert_boolean
(
result
,
name
)
assert
result
==
true
||
result
==
false
,
"
#{
name
}
should be a boolean"
end
end
end
end
activemodel/test/cases/lint_test.rb
浏览文件 @
ff56f3d5
require
"cases/helper"
class
TestLint
<
ActiveModel
::
TestCase
class
CompliantObject
class
LintTest
<
ActiveModel
::
TestCase
include
ActiveModel
::
Lint
::
Tests
class
CompliantModel
def
to_model
self
end
def
valid?
()
true
end
def
new_record?
()
true
end
def
destroyed?
()
true
end
def
errors
obj
=
Object
.
new
def
obj
.
[]
(
key
)
[]
end
...
...
@@ -17,34 +19,8 @@ def obj.full_messages() [] end
obj
end
end
def
assert_output
(
object
,
failures
,
errors
,
*
test_names
)
ActiveModel
::
Lint
.
test
(
object
,
3
,
output
=
StringIO
.
new
)
regex
=
%r{
#{
failures
}
failures,
#{
errors
}
errors}
assert_match
regex
,
output
.
string
test_names
.
each
do
|
test_name
|
assert_match
test_name
,
output
.
string
end
end
def
test_valid
assert_output
(
CompliantObject
.
new
,
0
,
0
,
/test_valid/
)
end
def
test_new_record
assert_output
(
CompliantObject
.
new
,
0
,
0
,
/test_new_record?/
)
end
def
test_destroyed
assert_output
(
CompliantObject
.
new
,
0
,
0
,
/test_destroyed/
)
end
def
test_errors_aref
assert_output
(
CompliantObject
.
new
,
0
,
0
,
/test_errors_aref/
)
end
def
test_errors_full_messages
assert_output
(
CompliantObject
.
new
,
0
,
0
,
/test_errors_aref/
)
def
setup
@model
=
CompliantModel
.
new
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录