This repository has been archived by the owner on Jun 10, 2018. It is now read-only.
forked from rails/sprockets
/
test_performance.rb
139 lines (113 loc) · 3.04 KB
/
test_performance.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require 'sprockets_test'
$file_stat_calls = nil
class << File
alias_method :original_stat, :stat
def stat(filename)
if $file_stat_calls
$file_stat_calls[filename.to_s] ||= 0
$file_stat_calls[filename.to_s] += 1
if $DEBUG && $file_stat_calls[filename.to_s] > 1
warn "Multiple File.stat(#{filename.to_s.inspect}) calls"
warn caller.join("\n")
end
end
original_stat(filename)
end
end
$dir_entires_calls = nil
class << Dir
alias_method :original_entries, :entries
def entries(dirname, *args)
if $dir_entires_calls
$dir_entires_calls[dirname.to_s] ||= 0
$dir_entires_calls[dirname.to_s] += 1
if $DEBUG && $dir_entires_calls[dirname.to_s] > 1
warn "Multiple Dir.entries(#{dirname.to_s.inspect}) calls"
warn caller.join("\n")
end
end
original_entries(dirname, *args)
end
end
class TestPerformance < Sprockets::TestCase
def setup
@env = new_environment
reset_stats!
end
def teardown
$file_stat_calls = nil
$dir_entires_calls = nil
end
test "simple file" do
@env["gallery.js"].to_s
assert_no_redundant_stat_calls
end
test "indexed simple file" do
@env.index["gallery.js"].to_s
assert_no_redundant_stat_calls
end
test "file with deps" do
@env["mobile.js"].to_s
assert_no_redundant_stat_calls
end
test "indexed file with deps" do
@env.index["mobile.js"].to_s
assert_no_redundant_stat_calls
end
test "checking freshness" do
asset = @env["mobile.js"]
reset_stats!
assert asset.fresh?(@env)
assert_no_redundant_stat_calls
end
test "checking freshness of from index" do
index = @env.index
asset = index["mobile.js"]
reset_stats!
assert asset.fresh?(index)
assert_no_stat_calls
end
test "loading from cache" do
env1, env2 = new_environment, new_environment
env1.cache = {}
env2.cache = {}
env1["mobile.js"]
reset_stats!
env2["mobile.js"]
assert_no_redundant_stat_calls
end
test "loading from indexed cache" do
env1, env2 = new_environment, new_environment
env1.cache = {}
env2.cache = {}
env1.index["mobile.js"]
reset_stats!
env2.index["mobile.js"]
assert_no_redundant_stat_calls
end
def new_environment
Sprockets::Environment.new(".") do |env|
env.append_path(fixture_path('default'))
end
end
def reset_stats!
$file_stat_calls = {}
$dir_entires_calls = {}
end
def assert_no_stat_calls
$file_stat_calls.each do |path, count|
assert_equal 0, count, "File.stat(#{path.inspect}) called #{count} times"
end
$dir_entires_calls.each do |path, count|
assert_equal 0, count, "Dir.entries(#{path.inspect}) called #{count} times"
end
end
def assert_no_redundant_stat_calls
$file_stat_calls.each do |path, count|
assert_equal 1, count, "File.stat(#{path.inspect}) called #{count} times"
end
$dir_entires_calls.each do |path, count|
assert_equal 1, count, "Dir.entries(#{path.inspect}) called #{count} times"
end
end
end