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
140
141
142
143
144
145
146
147
148
|
# frozen_string_literal: true
module ResolverSharedTests
attr_reader :tmpdir
def run(*args)
capture_exceptions do
Dir.mktmpdir(nil, __dir__) { |dir| @tmpdir = dir; super }
end
end
def with_file(filename, source = "File at #{filename}")
path = File.join(tmpdir, filename)
FileUtils.mkdir_p(File.dirname(path))
File.write(path, source)
end
def context
@context ||= ActionView::LookupContext.new(resolver)
end
def test_can_find_with_no_extensions
with_file "test/hello_world", "Hello default!"
templates = resolver.find_all("hello_world", "test", false, locale: [:en], formats: [:html], variants: [:phone], handlers: [:erb])
assert_equal 1, templates.size
assert_equal "Hello default!", templates[0].source
assert_equal "test/hello_world", templates[0].virtual_path
assert_nil templates[0].format
assert_nil templates[0].variant
assert_kind_of ActionView::Template::Handlers::Raw, templates[0].handler
end
def test_can_find_with_just_handler
with_file "test/hello_world.erb", "Hello erb!"
templates = resolver.find_all("hello_world", "test", false, locale: [:en], formats: [:html], variants: [:phone], handlers: [:erb])
assert_equal 1, templates.size
assert_equal "Hello erb!", templates[0].source
assert_equal "test/hello_world", templates[0].virtual_path
assert_nil templates[0].format
assert_nil templates[0].variant
assert_kind_of ActionView::Template::Handlers::ERB, templates[0].handler
end
def test_can_find_with_format_and_handler
with_file "test/hello_world.text.builder", "Hello plain text!"
templates = resolver.find_all("hello_world", "test", false, locale: [:en], formats: [:html, :text], variants: [:phone], handlers: [:erb, :builder])
assert_equal 1, templates.size
assert_equal "Hello plain text!", templates[0].source
assert_equal "test/hello_world", templates[0].virtual_path
assert_equal :text, templates[0].format
assert_nil templates[0].variant
assert_kind_of ActionView::Template::Handlers::Builder, templates[0].handler
end
def test_can_find_with_variant_format_and_handler
with_file "test/hello_world.html+phone.erb", "Hello plain text!"
templates = resolver.find_all("hello_world", "test", false, locale: [:en], formats: [:html], variants: [:phone], handlers: [:erb])
assert_equal 1, templates.size
assert_equal "Hello plain text!", templates[0].source
assert_equal "test/hello_world", templates[0].virtual_path
assert_equal :html, templates[0].format
assert_equal "phone", templates[0].variant
assert_kind_of ActionView::Template::Handlers::ERB, templates[0].handler
end
def test_can_find_with_any_variant_format_and_handler
with_file "test/hello_world.html+phone.erb", "Hello plain text!"
templates = resolver.find_all("hello_world", "test", false, locale: [:en], formats: [:html], variants: :any, handlers: [:erb])
assert_equal 1, templates.size
assert_equal "Hello plain text!", templates[0].source
assert_equal "test/hello_world", templates[0].virtual_path
assert_equal :html, templates[0].format
assert_equal "phone", templates[0].variant
assert_kind_of ActionView::Template::Handlers::ERB, templates[0].handler
end
def test_doesnt_find_template_with_wrong_details
with_file "test/hello_world.html.erb", "Hello plain text!"
templates = resolver.find_all("hello_world", "test", false, locale: [], formats: [:xml], variants: :any, handlers: [:builder])
assert_equal 0, templates.size
templates = resolver.find_all("hello_world", "test", false, locale: [], formats: [:xml], variants: :any, handlers: [:erb])
assert_equal 0, templates.size
end
def test_found_template_is_cached
with_file "test/hello_world.html.erb", "Hello HTML!"
a = context.find("hello_world", "test", false, [], {})
b = context.find("hello_world", "test", false, [], {})
assert_same a, b
end
def test_different_templates_when_cache_disabled
with_file "test/hello_world.html.erb", "Hello HTML!"
a = context.find("hello_world", "test", false, [], {})
b = context.disable_cache { context.find("hello_world", "test", false, [], {}) }
c = context.find("hello_world", "test", false, [], {})
# disable_cache should give us a new object
assert_not_same a, b
# but it should not clear the cache
assert_same a, c
end
def test_same_template_from_different_details_is_same_object
with_file "test/hello_world.html.erb", "Hello HTML!"
a = context.find("hello_world", "test", false, [], locale: [:en])
b = context.find("hello_world", "test", false, [], locale: [:fr])
assert_same a, b
end
def test_templates_with_optional_locale_shares_common_object
with_file "test/hello_world.text.erb", "Generic plain text!"
with_file "test/hello_world.fr.text.erb", "Texte en Francais!"
en = context.find_all("hello_world", "test", false, [], locale: [:en])
fr = context.find_all("hello_world", "test", false, [], locale: [:fr])
assert_equal 1, en.size
assert_equal 2, fr.size
assert_equal "Generic plain text!", en[0].source
assert_equal "Texte en Francais!", fr[0].source
assert_equal "Generic plain text!", fr[1].source
assert_same en[0], fr[1]
end
def test_virtual_path_is_preserved_with_dot
with_file "test/hello_world.html.erb", "Hello html!"
template = context.find("hello_world.html", "test", false, [], {})
assert_equal "test/hello_world.html", template.virtual_path
template = context.find("hello_world", "test", false, [], {})
assert_equal "test/hello_world", template.virtual_path
end
end
|