Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
eb5b7a8c
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,发现更多精彩内容 >>
提交
eb5b7a8c
编写于
7月 02, 2013
作者:
Y
Yves Senn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
deprecated `ActiveRecord::TestCase` is no longer public.
/cc @tenderlove
上级
e4d064c6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
100 addition
and
99 deletion
+100
-99
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+6
-0
activerecord/lib/active_record.rb
activerecord/lib/active_record.rb
+0
-1
activerecord/lib/active_record/test_case.rb
activerecord/lib/active_record/test_case.rb
+0
-96
activerecord/test/cases/test_case.rb
activerecord/test/cases/test_case.rb
+94
-2
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
eb5b7a8c
*
Move deprecated
`ActiveRecord::TestCase`
into the rails test
suite. The class is no longer public and is only used for internal
Rails tests.
*Yves Senn*
*
Removed support for deprecated option
`:restrict`
for
`:dependent`
in associations.
...
...
activerecord/lib/active_record.rb
浏览文件 @
eb5b7a8c
...
...
@@ -151,7 +151,6 @@ module Tasks
autoload
:OracleDatabaseTasks
,
'active_record/tasks/oracle_database_tasks'
end
autoload
:TestCase
autoload
:TestFixtures
,
'active_record/fixtures'
def
self
.
eager_load!
...
...
activerecord/lib/active_record/test_case.rb
已删除
100644 → 0
浏览文件 @
e4d064c6
require
'active_support/test_case'
ActiveSupport
::
Deprecation
.
warn
(
'ActiveRecord::TestCase is deprecated, please use ActiveSupport::TestCase'
)
module
ActiveRecord
# = Active Record Test Case
#
# Defines some test assertions to test against SQL queries.
class
TestCase
<
ActiveSupport
::
TestCase
#:nodoc:
def
teardown
SQLCounter
.
clear_log
end
def
assert_date_from_db
(
expected
,
actual
,
message
=
nil
)
# SybaseAdapter doesn't have a separate column type just for dates,
# so the time is in the string and incorrectly formatted
if
current_adapter?
(
:SybaseAdapter
)
assert_equal
expected
.
to_s
,
actual
.
to_date
.
to_s
,
message
else
assert_equal
expected
.
to_s
,
actual
.
to_s
,
message
end
end
def
assert_sql
(
*
patterns_to_match
)
SQLCounter
.
clear_log
yield
SQLCounter
.
log_all
ensure
failed_patterns
=
[]
patterns_to_match
.
each
do
|
pattern
|
failed_patterns
<<
pattern
unless
SQLCounter
.
log_all
.
any?
{
|
sql
|
pattern
===
sql
}
end
assert
failed_patterns
.
empty?
,
"Query pattern(s)
#{
failed_patterns
.
map
{
|
p
|
p
.
inspect
}
.join(', ')} not found.
#{
SQLCounter
.
log
.
size
==
0
?
''
:
"
\n
Queries:
\n
#{
SQLCounter
.
log
.
join
(
"
\n
"
)
}
"
}
"
end
def
assert_queries
(
num
=
1
,
options
=
{})
ignore_none
=
options
.
fetch
(
:ignore_none
)
{
num
==
:any
}
SQLCounter
.
clear_log
x
=
yield
the_log
=
ignore_none
?
SQLCounter
.
log_all
:
SQLCounter
.
log
if
num
==
:any
assert_operator
the_log
.
size
,
:
>=
,
1
,
"1 or more queries expected, but none were executed."
else
mesg
=
"
#{
the_log
.
size
}
instead of
#{
num
}
queries were executed.
#{
the_log
.
size
==
0
?
''
:
"
\n
Queries:
\n
#{
the_log
.
join
(
"
\n
"
)
}
"
}
"
assert_equal
num
,
the_log
.
size
,
mesg
end
x
end
def
assert_no_queries
(
&
block
)
assert_queries
(
0
,
:ignore_none
=>
true
,
&
block
)
end
end
class
SQLCounter
class
<<
self
attr_accessor
:ignored_sql
,
:log
,
:log_all
def
clear_log
;
self
.
log
=
[];
self
.
log_all
=
[];
end
end
self
.
clear_log
self
.
ignored_sql
=
[
/^PRAGMA/
,
/^SELECT currval/
,
/^SELECT CAST/
,
/^SELECT @@IDENTITY/
,
/^SELECT @@ROWCOUNT/
,
/^SAVEPOINT/
,
/^ROLLBACK TO SAVEPOINT/
,
/^RELEASE SAVEPOINT/
,
/^SHOW max_identifier_length/
,
/^BEGIN/
,
/^COMMIT/
]
# FIXME: this needs to be refactored so specific database can add their own
# ignored SQL, or better yet, use a different notification for the queries
# instead examining the SQL content.
oracle_ignored
=
[
/^select .*nextval/i
,
/^SAVEPOINT/
,
/^ROLLBACK TO/
,
/^\s*select .* from all_triggers/im
]
mysql_ignored
=
[
/^SHOW TABLES/i
,
/^SHOW FULL FIELDS/
]
postgresql_ignored
=
[
/^\s*select\b.*\bfrom\b.*pg_namespace\b/im
,
/^\s*select\b.*\battname\b.*\bfrom\b.*\bpg_attribute\b/im
,
/^SHOW search_path/i
]
sqlite3_ignored
=
[
/^\s*SELECT name\b.*\bFROM sqlite_master/im
]
[
oracle_ignored
,
mysql_ignored
,
postgresql_ignored
,
sqlite3_ignored
].
each
do
|
db_ignored_sql
|
ignored_sql
.
concat
db_ignored_sql
end
attr_reader
:ignore
def
initialize
(
ignore
=
Regexp
.
union
(
self
.
class
.
ignored_sql
))
@ignore
=
ignore
end
def
call
(
name
,
start
,
finish
,
message_id
,
values
)
sql
=
values
[
:sql
]
# FIXME: this seems bad. we should probably have a better way to indicate
# the query was cached
return
if
'CACHE'
==
values
[
:name
]
self
.
class
.
log_all
<<
sql
self
.
class
.
log
<<
sql
unless
ignore
=~
sql
end
end
ActiveSupport
::
Notifications
.
subscribe
(
'sql.active_record'
,
SQLCounter
.
new
)
end
activerecord/test/cases/test_case.rb
浏览文件 @
eb5b7a8c
ActiveSupport
::
Deprecation
.
silence
do
require
'active_record/test_case'
require
'active_support/test_case'
module
ActiveRecord
# = Active Record Test Case
#
# Defines some test assertions to test against SQL queries.
class
TestCase
<
ActiveSupport
::
TestCase
#:nodoc:
def
teardown
SQLCounter
.
clear_log
end
def
assert_date_from_db
(
expected
,
actual
,
message
=
nil
)
# SybaseAdapter doesn't have a separate column type just for dates,
# so the time is in the string and incorrectly formatted
if
current_adapter?
(
:SybaseAdapter
)
assert_equal
expected
.
to_s
,
actual
.
to_date
.
to_s
,
message
else
assert_equal
expected
.
to_s
,
actual
.
to_s
,
message
end
end
def
assert_sql
(
*
patterns_to_match
)
SQLCounter
.
clear_log
yield
SQLCounter
.
log_all
ensure
failed_patterns
=
[]
patterns_to_match
.
each
do
|
pattern
|
failed_patterns
<<
pattern
unless
SQLCounter
.
log_all
.
any?
{
|
sql
|
pattern
===
sql
}
end
assert
failed_patterns
.
empty?
,
"Query pattern(s)
#{
failed_patterns
.
map
{
|
p
|
p
.
inspect
}
.join(', ')} not found.
#{
SQLCounter
.
log
.
size
==
0
?
''
:
"
\n
Queries:
\n
#{
SQLCounter
.
log
.
join
(
"
\n
"
)
}
"
}
"
end
def
assert_queries
(
num
=
1
,
options
=
{})
ignore_none
=
options
.
fetch
(
:ignore_none
)
{
num
==
:any
}
SQLCounter
.
clear_log
x
=
yield
the_log
=
ignore_none
?
SQLCounter
.
log_all
:
SQLCounter
.
log
if
num
==
:any
assert_operator
the_log
.
size
,
:
>=
,
1
,
"1 or more queries expected, but none were executed."
else
mesg
=
"
#{
the_log
.
size
}
instead of
#{
num
}
queries were executed.
#{
the_log
.
size
==
0
?
''
:
"
\n
Queries:
\n
#{
the_log
.
join
(
"
\n
"
)
}
"
}
"
assert_equal
num
,
the_log
.
size
,
mesg
end
x
end
def
assert_no_queries
(
&
block
)
assert_queries
(
0
,
:ignore_none
=>
true
,
&
block
)
end
end
class
SQLCounter
class
<<
self
attr_accessor
:ignored_sql
,
:log
,
:log_all
def
clear_log
;
self
.
log
=
[];
self
.
log_all
=
[];
end
end
self
.
clear_log
self
.
ignored_sql
=
[
/^PRAGMA/
,
/^SELECT currval/
,
/^SELECT CAST/
,
/^SELECT @@IDENTITY/
,
/^SELECT @@ROWCOUNT/
,
/^SAVEPOINT/
,
/^ROLLBACK TO SAVEPOINT/
,
/^RELEASE SAVEPOINT/
,
/^SHOW max_identifier_length/
,
/^BEGIN/
,
/^COMMIT/
]
# FIXME: this needs to be refactored so specific database can add their own
# ignored SQL, or better yet, use a different notification for the queries
# instead examining the SQL content.
oracle_ignored
=
[
/^select .*nextval/i
,
/^SAVEPOINT/
,
/^ROLLBACK TO/
,
/^\s*select .* from all_triggers/im
]
mysql_ignored
=
[
/^SHOW TABLES/i
,
/^SHOW FULL FIELDS/
]
postgresql_ignored
=
[
/^\s*select\b.*\bfrom\b.*pg_namespace\b/im
,
/^\s*select\b.*\battname\b.*\bfrom\b.*\bpg_attribute\b/im
,
/^SHOW search_path/i
]
sqlite3_ignored
=
[
/^\s*SELECT name\b.*\bFROM sqlite_master/im
]
[
oracle_ignored
,
mysql_ignored
,
postgresql_ignored
,
sqlite3_ignored
].
each
do
|
db_ignored_sql
|
ignored_sql
.
concat
db_ignored_sql
end
attr_reader
:ignore
def
initialize
(
ignore
=
Regexp
.
union
(
self
.
class
.
ignored_sql
))
@ignore
=
ignore
end
def
call
(
name
,
start
,
finish
,
message_id
,
values
)
sql
=
values
[
:sql
]
# FIXME: this seems bad. we should probably have a better way to indicate
# the query was cached
return
if
'CACHE'
==
values
[
:name
]
self
.
class
.
log_all
<<
sql
self
.
class
.
log
<<
sql
unless
ignore
=~
sql
end
end
ActiveSupport
::
Notifications
.
subscribe
(
'sql.active_record'
,
SQLCounter
.
new
)
end
ActiveRecord
::
TestCase
.
class_eval
do
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录