middleman 2.0.4 → 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. data/CHANGELOG +8 -0
  2. data/lib/middleman.rb +7 -1
  3. data/lib/middleman/vendor/padrino-core-0.10.0/.document +5 -0
  4. data/lib/middleman/vendor/padrino-core-0.10.0/.gitignore +22 -0
  5. data/lib/middleman/vendor/padrino-core-0.10.0/LICENSE +20 -0
  6. data/lib/middleman/vendor/padrino-core-0.10.0/README.rdoc +294 -0
  7. data/lib/middleman/vendor/padrino-core-0.10.0/Rakefile +5 -0
  8. data/lib/middleman/vendor/padrino-core-0.10.0/bin/padrino +9 -0
  9. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core.rb +119 -0
  10. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application.rb +259 -0
  11. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/rendering.rb +228 -0
  12. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/routing.rb +821 -0
  13. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/application/showexceptions.rb +18 -0
  14. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/caller.rb +45 -0
  15. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/adapter.rb +24 -0
  16. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/base.rb +152 -0
  17. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/console.rb +20 -0
  18. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake.rb +24 -0
  19. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/cli/rake_tasks.rb +59 -0
  20. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/command.rb +27 -0
  21. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/404.png +0 -0
  22. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/images/500.png +0 -0
  23. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/loader.rb +182 -0
  24. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/cz.yml +30 -0
  25. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/da.yml +30 -0
  26. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/de.yml +30 -0
  27. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/en.yml +30 -0
  28. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/es.yml +30 -0
  29. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/fr.yml +30 -0
  30. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/hu.yml +30 -0
  31. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/it.yml +37 -0
  32. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ja.yml +30 -0
  33. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/nl.yml +30 -0
  34. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/no.yml +31 -0
  35. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pl.yml +30 -0
  36. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/pt_br.yml +37 -0
  37. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/ru.yml +30 -0
  38. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/tr.yml +30 -0
  39. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/uk.yml +30 -0
  40. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_cn.yml +30 -0
  41. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/locale/zh_tw.yml +30 -0
  42. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/logger.rb +344 -0
  43. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/mounter.rb +192 -0
  44. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/reloader.rb +247 -0
  45. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/router.rb +79 -0
  46. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/server.rb +70 -0
  47. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/support_lite.rb +135 -0
  48. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/tasks.rb +23 -0
  49. data/lib/middleman/vendor/padrino-core-0.10.0/lib/padrino-core/version.rb +15 -0
  50. data/lib/middleman/vendor/padrino-core-0.10.0/padrino-core.gemspec +38 -0
  51. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.components +6 -0
  52. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/.gitignore +7 -0
  53. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/complex.rb +27 -0
  54. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/apps/simple.rb +33 -0
  55. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/a.rb +9 -0
  56. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/b.rb +4 -0
  57. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/c.rb +1 -0
  58. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/e.rb +13 -0
  59. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/f.rb +2 -0
  60. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/circular/g.rb +2 -0
  61. data/lib/middleman/vendor/padrino-core-0.10.0/test/fixtures/dependencies/d.rb +4 -0
  62. data/lib/middleman/vendor/padrino-core-0.10.0/test/helper.rb +101 -0
  63. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_application.rb +83 -0
  64. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_core.rb +79 -0
  65. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_dependencies.rb +44 -0
  66. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_filters.rb +266 -0
  67. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_logger.rb +91 -0
  68. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_mounter.rb +176 -0
  69. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_complex.rb +66 -0
  70. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_reloader_simple.rb +97 -0
  71. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_rendering.rb +437 -0
  72. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_router.rb +146 -0
  73. data/lib/middleman/vendor/padrino-core-0.10.0/test/test_routing.rb +1491 -0
  74. data/lib/middleman/vendor/padrino-helpers-0.10.0/.document +5 -0
  75. data/lib/middleman/vendor/padrino-helpers-0.10.0/.gitignore +21 -0
  76. data/lib/middleman/vendor/padrino-helpers-0.10.0/LICENSE +20 -0
  77. data/lib/middleman/vendor/padrino-helpers-0.10.0/README.rdoc +239 -0
  78. data/lib/middleman/vendor/padrino-helpers-0.10.0/Rakefile +5 -0
  79. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers.rb +51 -0
  80. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/asset_tag_helpers.rb +288 -0
  81. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
  82. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  83. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/form_helpers.rb +446 -0
  84. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/format_helpers.rb +260 -0
  85. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/cz.yml +103 -0
  86. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/da.yml +91 -0
  87. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/de.yml +78 -0
  88. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/en.yml +103 -0
  89. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/es.yml +103 -0
  90. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/fr.yml +79 -0
  91. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/hu.yml +103 -0
  92. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/it.yml +85 -0
  93. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ja.yml +103 -0
  94. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/nl.yml +78 -0
  95. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/no.yml +91 -0
  96. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pl.yml +95 -0
  97. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/pt_br.yml +103 -0
  98. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/ru.yml +103 -0
  99. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/tr.yml +103 -0
  100. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/uk.yml +103 -0
  101. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_cn.yml +103 -0
  102. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  103. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/number_helpers.rb +273 -0
  104. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers.rb +128 -0
  105. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/abstract_handler.rb +103 -0
  106. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  107. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/haml_handler.rb +64 -0
  108. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/output_helpers/slim_handler.rb +82 -0
  109. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/render_helpers.rb +40 -0
  110. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/tag_helpers.rb +59 -0
  111. data/lib/middleman/vendor/padrino-helpers-0.10.0/lib/padrino-helpers/translation_helpers.rb +21 -0
  112. data/lib/middleman/vendor/padrino-helpers-0.10.0/padrino-helpers.gemspec +27 -0
  113. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/app.rb +73 -0
  114. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  115. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  116. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  117. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.erb +11 -0
  118. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.haml +9 -0
  119. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_for.slim +9 -0
  120. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.erb +11 -0
  121. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.haml +9 -0
  122. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/content_tag.slim +9 -0
  123. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.erb +5 -0
  124. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.haml +5 -0
  125. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/current_engine.slim +5 -0
  126. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.erb +20 -0
  127. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.haml +15 -0
  128. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/fields_for.slim +15 -0
  129. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.erb +56 -0
  130. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.haml +47 -0
  131. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_for.slim +47 -0
  132. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.erb +56 -0
  133. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.haml +45 -0
  134. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/form_tag.slim +45 -0
  135. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.erb +5 -0
  136. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.haml +4 -0
  137. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/link_to.slim +4 -0
  138. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.erb +3 -0
  139. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.haml +3 -0
  140. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/mail_to.slim +3 -0
  141. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  142. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  143. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  144. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  145. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  146. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  147. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  148. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  149. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  150. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/app.rb +45 -0
  151. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engine.haml +5 -0
  152. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  153. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  154. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  155. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/erb/test.erb +1 -0
  156. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  157. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/haml/test.haml +1 -0
  158. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/_user.haml +7 -0
  159. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  160. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/fixtures/render_app/views/template/some_template.haml +2 -0
  161. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/helper.rb +78 -0
  162. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_asset_tag_helpers.rb +320 -0
  163. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_builder.rb +998 -0
  164. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_form_helpers.rb +645 -0
  165. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_format_helpers.rb +227 -0
  166. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_number_helpers.rb +136 -0
  167. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_output_helpers.rb +133 -0
  168. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_render_helpers.rb +69 -0
  169. data/lib/middleman/vendor/padrino-helpers-0.10.0/test/test_tag_helpers.rb +100 -0
  170. data/lib/middleman/version.rb +1 -1
  171. data/middleman.gemspec +6 -2
  172. metadata +218 -67
@@ -0,0 +1,91 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ class TestPadrinoLogger < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Padrino::Logger::Config[:test][:stream] = :null # The default
7
+ Padrino::Logger.setup!
8
+ end
9
+
10
+ def setup_logger(options={})
11
+ @log = StringIO.new
12
+ @logger = Padrino::Logger.new(options.merge(:stream => @log))
13
+ end
14
+
15
+ context 'for logger functionality' do
16
+
17
+ context 'check stream config' do
18
+
19
+ should 'use stdout if stream is nil' do
20
+ Padrino::Logger::Config[:test][:stream] = nil
21
+ Padrino::Logger.setup!
22
+ assert_equal $stdout, Padrino.logger.log
23
+ end
24
+
25
+ should 'use StringIO as default for test' do
26
+ assert_instance_of StringIO, Padrino.logger.log
27
+ end
28
+
29
+ should 'use a custom stream' do
30
+ my_stream = StringIO.new
31
+ Padrino::Logger::Config[:test][:stream] = my_stream
32
+ Padrino::Logger.setup!
33
+ assert_equal my_stream, Padrino.logger.log
34
+ end
35
+ end
36
+
37
+ should 'log something' do
38
+ setup_logger(:log_level => :error)
39
+ @logger.error "You log this error?"
40
+ assert_match(/You log this error?/, @log.string)
41
+ @logger.debug "You don't log this error!"
42
+ assert_no_match(/You don't log this error!/, @log.string)
43
+ @logger << "Yep this can be logged"
44
+ assert_match(/Yep this can be logged/, @log.string)
45
+ end
46
+
47
+ should 'respond to #write for Rack::CommonLogger' do
48
+ setup_logger(:log_level => :error)
49
+ @logger.error "Error message"
50
+ assert_match /Error message/, @log.string
51
+ @logger << "logged anyways"
52
+ assert_match /logged anyways/, @log.string
53
+ @logger.write "log via alias"
54
+ assert_match /log via alias/, @log.string
55
+ end
56
+
57
+ should 'log an application' do
58
+ mock_app do
59
+ enable :logging
60
+ get("/"){ "Foo" }
61
+ end
62
+ get "/"
63
+ assert_equal "Foo", body
64
+ assert_match /GET/, Padrino.logger.log.string
65
+ end
66
+
67
+ context "static asset logging" do
68
+ should 'not log static assets by default' do
69
+ mock_app do
70
+ enable :logging
71
+ get("/images/something.png"){ env["sinatra.static_file"] = '/public/images/something.png'; "Foo" }
72
+ end
73
+ get "/images/something.png"
74
+ assert_equal "Foo", body
75
+ assert_match "", Padrino.logger.log.string
76
+ end
77
+
78
+ should 'allow turning on static assets logging' do
79
+ Padrino.logger.instance_eval{ @log_static = true }
80
+ mock_app do
81
+ enable :logging
82
+ get("/images/something.png"){ env["sinatra.static_file"] = '/public/images/something.png'; "Foo" }
83
+ end
84
+ get "/images/something.png"
85
+ assert_equal "Foo", body
86
+ assert_match /GET/, Padrino.logger.log.string
87
+ Padrino.logger.instance_eval{ @log_static = false }
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,176 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ class TestMounter < Test::Unit::TestCase
4
+
5
+ def setup
6
+ $VERBOSE, @_verbose_was = nil, $VERBOSE
7
+ Padrino.clear!
8
+ end
9
+
10
+ def teardown
11
+ $VERBOSE = @_verbose_was
12
+ end
13
+
14
+ context 'for mounter functionality' do
15
+
16
+ should 'check methods' do
17
+ mounter = Padrino::Mounter.new("test", :app_file => "/path/to/test.rb")
18
+ mounter.to("/test")
19
+ assert_kind_of Padrino::Mounter, mounter
20
+ assert_respond_to Padrino::Mounter, :new
21
+ assert_respond_to mounter, :to
22
+ assert_respond_to mounter, :map_onto
23
+ assert_equal "test", mounter.name
24
+ assert_equal "Test", mounter.app_class
25
+ assert_equal "/path/to/test.rb", mounter.app_file
26
+ assert_equal "/test", mounter.uri_root
27
+ assert_equal File.dirname(mounter.app_file), mounter.app_root
28
+ end
29
+
30
+ should 'check locate_app_file with __FILE__' do
31
+ mounter = Padrino::Mounter.new("test", :app_file => __FILE__)
32
+ mounter.to("/test")
33
+ assert_equal "test", mounter.name
34
+ assert_equal "Test", mounter.app_class
35
+ assert_equal __FILE__, mounter.app_file
36
+ assert_equal "/test", mounter.uri_root
37
+ assert_equal File.dirname(mounter.app_file), mounter.app_root
38
+ end
39
+
40
+ should 'mount an app' do
41
+ class ::AnApp < Padrino::Application; end
42
+ Padrino.mount("an_app").to("/")
43
+ assert_equal AnApp, Padrino.mounted_apps.first.app_obj
44
+ assert_equal ["an_app"], Padrino.mounted_apps.map(&:name)
45
+ end
46
+
47
+ should 'correctly mount an app in a namespace' do
48
+ module ::SomeNamespace
49
+ class AnApp < Padrino::Application; end
50
+ end
51
+ Padrino.mount("some_namespace/an_app").to("/")
52
+ assert_equal SomeNamespace::AnApp, Padrino.mounted_apps.first.app_obj
53
+ assert_equal ["some_namespace/an_app"], Padrino.mounted_apps.map(&:name)
54
+ end
55
+
56
+ should 'mount a primary app to root uri' do
57
+ mounter = Padrino.mount("test", :app_file => __FILE__).to("/")
58
+ assert_equal "test", mounter.name
59
+ assert_equal "Test", mounter.app_class
60
+ assert_equal Test, mounter.app_obj
61
+ assert_equal __FILE__, mounter.app_file
62
+ assert_equal "/", mounter.uri_root
63
+ assert_equal File.dirname(mounter.app_file), mounter.app_root
64
+ end
65
+
66
+ should 'mount a primary app to sub_uri' do
67
+ mounter = Padrino.mount("test", :app_file => __FILE__).to('/me')
68
+ assert_equal "test", mounter.name
69
+ assert_equal "Test", mounter.app_class
70
+ assert_equal Test, mounter.app_obj
71
+ assert_equal __FILE__, mounter.app_file
72
+ assert_equal "/me", mounter.uri_root
73
+ assert_equal File.dirname(mounter.app_file), mounter.app_root
74
+ end
75
+
76
+ should "raise error when app has no located file" do
77
+ assert_raise(Padrino::Mounter::MounterException) { Padrino.mount("tester_app").to('/test') }
78
+ assert_equal 0, Padrino.mounted_apps.size
79
+ end
80
+
81
+ should "raise error when app has no located object" do
82
+ assert_raise(Padrino::Mounter::MounterException) { Padrino.mount("tester_app", :app_file => "/path/to/file.rb").to('/test') }
83
+ assert_equal 0, Padrino.mounted_apps.size
84
+ end
85
+
86
+ should 'mount multiple apps' do
87
+ class ::OneApp < Padrino::Application; end
88
+ class ::TwoApp < Padrino::Application; end
89
+
90
+ Padrino.mount("one_app").to("/one_app")
91
+ Padrino.mount("two_app").to("/two_app")
92
+ # And testing no duplicates
93
+ Padrino.mount("one_app").to("/one_app")
94
+ Padrino.mount("two_app").to("/two_app")
95
+
96
+ assert_equal OneApp, Padrino.mounted_apps[0].app_obj
97
+ assert_equal TwoApp, Padrino.mounted_apps[1].app_obj
98
+ assert_equal 2, Padrino.mounted_apps.size, "should not mount duplicate apps"
99
+ assert_equal ["one_app", "two_app"], Padrino.mounted_apps.map(&:name)
100
+ end
101
+
102
+ should 'change mounted_root' do
103
+ Padrino.mounted_root = "fixtures"
104
+ assert_equal Padrino.root("fixtures", "test", "app.rb"), Padrino.mounted_root("test", "app.rb")
105
+ Padrino.mounted_root = "apps"
106
+ assert_equal Padrino.root("apps", "test", "app.rb"), Padrino.mounted_root("test", "app.rb")
107
+ Padrino.mounted_root = nil
108
+ assert_equal Padrino.root("test", "app.rb"), Padrino.mounted_root("test", "app.rb")
109
+ end
110
+
111
+ should "be able to access routes data for mounted apps" do
112
+ class ::OneApp < Padrino::Application
113
+ get("/test") { "test" }
114
+ get(:index, :provides => [:js, :json]) { "index" }
115
+ controllers :posts do
116
+ get(:index) { "index" }
117
+ get(:new, :provides => :js) { "new" }
118
+ get(:show, :provides => [:js, :html], :with => :id) { "show" }
119
+ post(:create, :provides => :js, :with => :id) { "create" }
120
+ end
121
+ end
122
+ class ::TwoApp < Padrino::Application
123
+ controllers :users do
124
+ get(:index) { "users" }
125
+ get(:new) { "users new" }
126
+ post(:create) { "users create" }
127
+ put(:update) { "users update" }
128
+ delete(:destroy) { "users delete" }
129
+ end
130
+ end
131
+
132
+ Padrino.mount("one_app").to("/")
133
+ Padrino.mount("two_app").to("/two_app")
134
+
135
+ assert_equal 11, Padrino.mounted_apps[0].routes.size
136
+ assert_equal 7, Padrino.mounted_apps[1].routes.size
137
+ assert_equal 5, Padrino.mounted_apps[0].named_routes.size
138
+ assert_equal 5, Padrino.mounted_apps[1].named_routes.size
139
+
140
+ first_route = Padrino.mounted_apps[0].named_routes[3]
141
+ assert_equal "posts_show", first_route.identifier.to_s
142
+ assert_equal "(:posts, :show)", first_route.name
143
+ assert_equal "GET", first_route.verb
144
+ assert_equal "/posts/show/:id(.:format)", first_route.path
145
+ another_route = Padrino.mounted_apps[1].named_routes[2]
146
+ assert_equal "users_create", another_route.identifier.to_s
147
+ assert_equal "(:users, :create)", another_route.name
148
+ assert_equal "POST", another_route.verb
149
+ assert_equal "/two_app/users/create", another_route.path
150
+ end
151
+
152
+ should 'correctly instantiate a new padrino application' do
153
+ mock_app do
154
+ get("/demo_1"){ "Im Demo 1" }
155
+ get("/demo_2"){ "Im Demo 2" }
156
+ end
157
+
158
+ get '/demo_1'
159
+ assert_equal "Im Demo 1", body
160
+ get '/demo_2'
161
+ assert_equal "Im Demo 2", body
162
+ end
163
+
164
+ should "not clobber the public setting when mounting an app" do
165
+ class ::PublicApp < Padrino::Application
166
+ set :root, "/root"
167
+ set :public, File.expand_path(File.dirname(__FILE__))
168
+ end
169
+
170
+ Padrino.mount("public_app").to("/public")
171
+ res = Rack::MockRequest.new(Padrino.application).get("/public/test_mounter.rb")
172
+ assert res.ok?
173
+ assert_equal File.read(__FILE__), res.body
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,66 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/complex')
3
+
4
+ class TestComplexReloader < Test::Unit::TestCase
5
+
6
+ context 'for complex reload functionality' do
7
+
8
+ should 'correctly instantiate Complex(1-2)Demo fixture' do
9
+ Padrino.clear!
10
+ Padrino.mount("complex_1_demo").to("/complex_1_demo")
11
+ Padrino.mount("complex_2_demo").to("/complex_2_demo")
12
+ assert_equal ["/complex_1_demo", "/complex_2_demo"], Padrino.mounted_apps.map(&:uri_root)
13
+ assert_equal ["complex_1_demo", "complex_2_demo"], Padrino.mounted_apps.map(&:name)
14
+ assert Complex1Demo.reload?
15
+ assert Complex2Demo.reload?
16
+ assert_match %r{fixtures/apps/complex.rb}, Complex1Demo.app_file
17
+ assert_match %r{fixtures/apps/complex.rb}, Complex2Demo.app_file
18
+ end
19
+
20
+ should 'correctly reload Complex(1-2)Demo fixture' do
21
+ assert_match %r{fixtures/apps/complex.rb}, Complex1Demo.app_file
22
+ @app = Padrino.application
23
+
24
+ get "/"
25
+ assert_equal 404, status
26
+
27
+ get "/complex_1_demo"
28
+ assert_equal "Given random #{LibDemo.give_me_a_random}", body
29
+
30
+ get "/complex_2_demo"
31
+ assert_equal 200, status
32
+
33
+ get "/complex_1_demo/old"
34
+ assert_equal 200, status
35
+
36
+ get "/complex_2_demo/old"
37
+ assert_equal 200, status
38
+
39
+ new_phrase = "The magick number is: #{rand(2**255)}!"
40
+ buffer = File.read(Complex1Demo.app_file)
41
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
42
+ begin
43
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(new_buffer) }
44
+ sleep 1.2 # We need at least a cooldown of 1 sec.
45
+ get "/complex_2_demo"
46
+ assert_equal new_phrase, body
47
+
48
+ # Re-Check that we didn't forget any route
49
+ get "/complex_1_demo"
50
+ assert_equal "Given random #{LibDemo.give_me_a_random}", body
51
+
52
+ get "/complex_2_demo"
53
+ assert_equal 200, status
54
+
55
+ get "/complex_1_demo/old"
56
+ assert_equal 200, status
57
+
58
+ get "/complex_2_demo/old"
59
+ assert_equal 200, status
60
+ ensure
61
+ # Now we need to prevent to commit a new changed file so we revert it
62
+ File.open(Complex1Demo.app_file, "w") { |f| f.write(buffer) }
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,97 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/simple')
3
+
4
+ class TestSimpleReloader < Test::Unit::TestCase
5
+
6
+ context 'for simple reset functionality' do
7
+
8
+ should 'reset routes' do
9
+ mock_app do
10
+ (1..10).each do |i|
11
+ get("/#{i}") { "Foo #{i}" }
12
+ end
13
+ end
14
+ (1..10).each do |i|
15
+ get "/#{i}"
16
+ assert_equal "Foo #{i}", body
17
+ end
18
+ @app.reset_routes!
19
+ (1..10).each do |i|
20
+ get "/#{i}"
21
+ assert_equal 404, status
22
+ end
23
+ end
24
+
25
+ should 'keep sinatra routes on development' do
26
+ mock_app do
27
+ set :environment, :development
28
+ get("/"){ "ok" }
29
+ end
30
+ assert_equal :development, @app.environment
31
+ get "/"
32
+ assert_equal 200, status
33
+ get "/__sinatra__/404.png"
34
+ assert_equal 200, status
35
+ assert_match /image\/png/, response["Content-Type"]
36
+ @app.reset_routes!
37
+ get "/"
38
+ assert_equal 404, status
39
+ get "/__sinatra__/404.png"
40
+ assert_equal 200, status
41
+ assert_match /image\/png/, response["Content-Type"]
42
+ end
43
+ end
44
+
45
+ context 'for simple reload functionality' do
46
+
47
+ should 'correctly instantiate SimpleDemo fixture' do
48
+ Padrino.clear!
49
+ Padrino.mount("simple_demo").to("/")
50
+ assert_equal ["simple_demo"], Padrino.mounted_apps.map(&:name)
51
+ assert SimpleDemo.reload?
52
+ assert_match %r{fixtures/apps/simple.rb}, SimpleDemo.app_file
53
+ end
54
+
55
+ should 'correctly reload SimpleDemo fixture' do
56
+ @app = SimpleDemo
57
+ get "/"
58
+ assert ok?
59
+ new_phrase = "The magick number is: #{rand(2**255)}!"
60
+ buffer = File.read(SimpleDemo.app_file)
61
+ new_buffer = buffer.gsub(/The magick number is: \d+!/, new_phrase)
62
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(new_buffer) }
63
+ sleep 1.2 # We need at least a cooldown of 1 sec.
64
+ get "/"
65
+ assert_equal new_phrase, body
66
+
67
+ # Now we need to prevent to commit a new changed file so we revert it
68
+ File.open(SimpleDemo.app_file, "w") { |f| f.write(buffer) }
69
+ Padrino.reload!
70
+ end
71
+
72
+ should 'correctly reset SimpleDemo fixture' do
73
+ @app = SimpleDemo
74
+ @app.reload!
75
+ get "/rand"
76
+ assert ok?
77
+ last_body = body
78
+ assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type
79
+ assert_equal 1, @app.errors.size
80
+ assert_equal 1, @app.filters[:after].size
81
+ assert_equal 1, @app.middleware.size # [Padrino::Reloader::Rack]
82
+ assert_equal 4, @app.routes.size # GET+HEAD of "/" + GET+HEAD of "/rand" = 4
83
+ assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering]
84
+ assert_equal 0, @app.templates.size
85
+ @app.reload!
86
+ get "/rand"
87
+ assert_not_equal last_body, body
88
+ assert_equal 2, @app.filters[:before].size # one is ours the other is default_filter for content type
89
+ assert_equal 1, @app.errors.size
90
+ assert_equal 1, @app.filters[:after].size
91
+ assert_equal 1, @app.middleware.size
92
+ assert_equal 4, @app.routes.size # GET+HEAD of "/" = 2
93
+ assert_equal 2, @app.extensions.size # [Padrino::Routing, Padrino::Rendering]
94
+ assert_equal 0, @app.templates.size
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,437 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require 'i18n'
3
+
4
+ class TestRendering < Test::Unit::TestCase
5
+ def setup
6
+ Padrino::Application.send(:register, Padrino::Rendering)
7
+ end
8
+
9
+ def teardown
10
+ remove_views
11
+ end
12
+
13
+ context 'for application layout functionality' do
14
+
15
+ should 'get no layout' do
16
+ mock_app do
17
+ get("/"){ "no layout" }
18
+ end
19
+
20
+ get "/"
21
+ assert_equal "no layout", body
22
+ end
23
+
24
+ should 'be compatible with sinatra layout' do
25
+ mock_app do
26
+ layout do
27
+ "this is a <%= yield %>"
28
+ end
29
+
30
+ get("/"){ render :erb, "sinatra layout" }
31
+ end
32
+
33
+ get "/"
34
+ assert_equal "this is a sinatra layout", body
35
+ end
36
+
37
+ should 'use rails way layout' do
38
+ with_layout :application, "this is a <%= yield %>" do
39
+ mock_app do
40
+ get("/"){ render :erb, "rails way layout" }
41
+ end
42
+
43
+ get "/"
44
+ assert_equal "this is a rails way layout", body
45
+ end
46
+ end
47
+
48
+ should 'use rails way for a custom layout' do
49
+ with_layout "layouts/custom", "this is a <%= yield %>" do
50
+ mock_app do
51
+ layout :custom
52
+ get("/"){ render :erb, "rails way custom layout" }
53
+ end
54
+
55
+ get "/"
56
+ assert_equal "this is a rails way custom layout", body
57
+ end
58
+ end
59
+
60
+ should 'not use layout' do
61
+ with_layout :application, "this is a <%= yield %>" do
62
+ with_view :index, "index" do
63
+ mock_app do
64
+ get("/with/layout"){ render :index }
65
+ get("/without/layout"){ render :index, :layout => false }
66
+ end
67
+ get "/with/layout"
68
+ assert_equal "this is a index", body
69
+ get "/without/layout"
70
+ assert_equal "index", body
71
+ end
72
+ end
73
+ end
74
+
75
+ should 'not use layout with js format' do
76
+ create_layout :application, "this is an <%= yield %>"
77
+ create_view :foo, "erb file"
78
+ create_view :foo, "js file", :format => :js
79
+ mock_app do
80
+ get('/layout_test', :provides => [:html, :js]){ render :foo }
81
+ end
82
+ get "/layout_test"
83
+ assert_equal "this is an erb file", body
84
+ get "/layout_test.js"
85
+ assert_equal "js file", body
86
+ end
87
+
88
+ should 'use correct layout for each format' do
89
+ create_layout :application, "this is an <%= yield %>"
90
+ create_layout :application, "document start <%= yield %> end", :format => :xml
91
+ create_view :foo, "erb file"
92
+ create_view :foo, "xml file", :format => :xml
93
+ mock_app do
94
+ get('/layout_test', :provides => [:html, :xml]){ render :foo }
95
+ end
96
+ get "/layout_test"
97
+ assert_equal "this is an erb file", body
98
+ get "/layout_test.xml"
99
+ assert_equal "document start xml file end", body
100
+ end
101
+
102
+ should 'by default use html file when no other is given' do
103
+ create_layout :foo, "html file", :format => :html
104
+
105
+ mock_app do
106
+ get('/content_type_test', :provides => [:html, :xml]) { render :foo }
107
+ end
108
+
109
+ get "/content_type_test"
110
+ assert_equal "html file", body
111
+ get "/content_type_test.xml"
112
+ assert_equal "html file", body
113
+ end
114
+
115
+ should 'not use html file when DEFAULT_RENDERING_OPTIONS[:strict_format] == true' do
116
+ create_layout :foo, "html file", :format => :html
117
+
118
+ mock_app do
119
+ get('/default_rendering_test', :provides => [:html, :xml]) { render :foo }
120
+ end
121
+
122
+ @save = Padrino::Rendering::DEFAULT_RENDERING_OPTIONS
123
+ Padrino::Rendering::DEFAULT_RENDERING_OPTIONS[:strict_format] = true
124
+
125
+ get "/default_rendering_test"
126
+ assert_equal "html file", body
127
+ assert_raise Padrino::Rendering::TemplateNotFound do
128
+ get "/default_rendering_test.xml"
129
+ end
130
+
131
+ Padrino::Rendering::DEFAULT_RENDERING_OPTIONS.merge(@save)
132
+ end
133
+
134
+ should 'use correct layout with each controller' do
135
+ create_layout :foo, "foo layout at <%= yield %>"
136
+ create_layout :bar, "bar layout at <%= yield %>"
137
+ create_layout :application, "default layout at <%= yield %>"
138
+ mock_app do
139
+ get("/"){ render :erb, "application" }
140
+ controller :foo do
141
+ layout :foo
142
+ get("/"){ render :erb, "foo" }
143
+ end
144
+ controller :bar do
145
+ layout :bar
146
+ get("/"){ render :erb, "bar" }
147
+ end
148
+ controller :none do
149
+ get("/") { render :erb, "none" }
150
+ get("/with_foo_layout") { render :erb, "none with layout", :layout => :foo }
151
+ end
152
+ end
153
+ get "/foo"
154
+ assert_equal "foo layout at foo", body
155
+ get "/bar"
156
+ assert_equal "bar layout at bar", body
157
+ get "/none"
158
+ assert_equal "default layout at none", body
159
+ get "/none/with_foo_layout"
160
+ assert_equal "foo layout at none with layout", body
161
+ get "/"
162
+ assert_equal "default layout at application", body
163
+ end
164
+ end
165
+
166
+ should 'solve layout in layouts paths' do
167
+ create_layout :foo, "foo layout <%= yield %>"
168
+ create_layout :"layouts/bar", "bar layout <%= yield %>"
169
+ mock_app do
170
+ get("/") { render :erb, "none" }
171
+ get("/foo") { render :erb, "foo", :layout => :foo }
172
+ get("/bar") { render :erb, "bar", :layout => :bar }
173
+ end
174
+ get "/"
175
+ assert_equal "none", body
176
+ get "/foo"
177
+ assert_equal "foo layout foo", body
178
+ get "/bar"
179
+ assert_equal "bar layout bar", body
180
+ end
181
+
182
+ should 'render correctly if layout was not found or not exist' do
183
+ create_layout :application, "application layout for <%= yield %>"
184
+ create_view :foo, "index", :format => :html
185
+ create_view :foo, "xml.rss", :format => :rss
186
+ mock_app do
187
+ get("/foo", :provides => [:html, :rss]) { render('foo') }
188
+ get("/baz", :provides => :js) { render(:erb, 'baz') }
189
+ get("/bar") { render :haml, "haml" }
190
+ end
191
+ get "/foo"
192
+ assert_equal "application layout for index", body
193
+ get "/foo.rss"
194
+ assert_equal "<rss/>", body.chomp
195
+ get "/baz.js"
196
+ assert_equal "baz", body
197
+ get "/bar"
198
+ assert_equal "haml", body.chomp
199
+ end
200
+
201
+ context 'for application render functionality' do
202
+
203
+ should 'be compatible with sinatra render' do
204
+ mock_app do
205
+ get("/"){ render :erb, "<%= 1+2 %>" }
206
+ end
207
+ get "/"
208
+ assert_equal "3", body
209
+ end
210
+
211
+ should "support passing locals into render" do
212
+ create_layout :application, "layout <%= yield %>"
213
+ create_view :index, "<%= foo %>"
214
+ mock_app do
215
+ get("/") { render "index", { :layout => true }, { :foo => "bar" } }
216
+ end
217
+ get "/"
218
+ assert_equal "layout bar", body
219
+ end
220
+
221
+ should "support passing locals into sinatra render" do
222
+ create_layout :application, "layout <%= yield %>"
223
+ create_view :index, "<%= foo %>"
224
+ mock_app do
225
+ get("/") { render :erb, :index, { :layout => true }, { :foo => "bar" } }
226
+ end
227
+ get "/"
228
+ assert_equal "layout bar", body
229
+ end
230
+
231
+ should "support passing locals into special nil engine render" do
232
+ create_layout :application, "layout <%= yield %>"
233
+ create_view :index, "<%= foo %>"
234
+ mock_app do
235
+ get("/") { render nil, :index, { :layout => true }, { :foo => "bar" } }
236
+ end
237
+ get "/"
238
+ assert_equal "layout bar", body
239
+ end
240
+
241
+ should 'be compatible with sinatra views' do
242
+ with_view :index, "<%= 1+2 %>" do
243
+ mock_app do
244
+ get("/foo") { render :erb, :index }
245
+ get("/bar") { erb :index }
246
+ get("/dir") { "3" }
247
+ get("/inj") { erb "<%= 2+1 %>" }
248
+ get("/rnj") { render :erb, "<%= 2+1 %>" }
249
+ end
250
+ get "/foo"
251
+ assert_equal "3", body
252
+ get "/bar"
253
+ assert_equal "3", body
254
+ get "/dir"
255
+ assert_equal "3", body
256
+ get "/inj"
257
+ assert_equal "3", body
258
+ get "/rnj"
259
+ assert_equal "3", body
260
+ end
261
+ end
262
+
263
+ should 'resolve template engine' do
264
+ with_view :index, "<%= 1+2 %>" do
265
+ mock_app do
266
+ get("/foo") { render :index }
267
+ get("/bar") { render "/index" }
268
+ end
269
+ get "/foo"
270
+ assert_equal "3", body
271
+ get "/bar"
272
+ assert_equal "3", body
273
+ end
274
+ end
275
+
276
+ should 'resolve template content type' do
277
+ create_view :foo, "Im Js", :format => :js
278
+ create_view :foo, "Im Erb"
279
+ mock_app do
280
+ get("/foo", :provides => :js) { render :foo }
281
+ get("/bar.js") { render :foo }
282
+ end
283
+ get "/foo.js"
284
+ assert_equal "Im Js", body
285
+ # TODO: implement this!
286
+ # get "/bar.js"
287
+ # assert_equal "Im Js", body
288
+ end
289
+
290
+ should 'resolve with explicit template format' do
291
+ create_view :foo, "Im Js", :format => :js
292
+ create_view :foo, "Im Haml", :format => :haml
293
+ create_view :foo, "Im Xml", :format => :xml
294
+ mock_app do
295
+ get("/foo_normal", :provides => :js) { render 'foo' }
296
+ get("/foo_haml", :provides => :js) { render 'foo.haml' }
297
+ get("/foo_xml", :provides => :js) { render 'foo.xml' }
298
+ end
299
+ get "/foo_normal.js"
300
+ assert_equal "Im Js", body
301
+ get "/foo_haml.js"
302
+ assert_equal "Im Haml\n", body
303
+ get "/foo_xml.js"
304
+ assert_equal "Im Xml", body
305
+ end
306
+
307
+ should 'resolve without explict template format' do
308
+ create_view :foo, "Im Html"
309
+ create_view :foo, "xml.rss", :format => :rss
310
+ mock_app do
311
+ get(:index, :map => "/", :provides => [:html, :rss]){ render 'foo' }
312
+ end
313
+ get "/", {}, { 'HTTP_ACCEPT' => 'text/html;q=0.9' }
314
+ assert_equal "Im Html", body
315
+ get ".rss"
316
+ assert_equal "<rss/>\n", body
317
+ end
318
+
319
+ should "ignore files ending in tilde and not render them" do
320
+ create_view :foo, "Im Wrong", :format => 'haml~'
321
+ create_view :foo, "Im Haml", :format => :haml
322
+ create_view :bar, "Im Haml backup", :format => 'haml~'
323
+ mock_app do
324
+ get('/foo') { render 'foo' }
325
+ get('/bar') { render 'bar' }
326
+ end
327
+ get '/foo'
328
+ assert_equal "Im Haml\n", body
329
+ assert_raises(Padrino::Rendering::TemplateNotFound) { get '/bar' }
330
+ end
331
+
332
+ should 'resolve template locale' do
333
+ create_view :foo, "Im English", :locale => :en
334
+ create_view :foo, "Im Italian", :locale => :it
335
+ mock_app do
336
+ get("/foo") { render :foo }
337
+ end
338
+ I18n.locale = :en
339
+ get "/foo"
340
+ assert_equal "Im English", body
341
+ I18n.locale = :it
342
+ get "/foo"
343
+ assert_equal "Im Italian", body
344
+ end
345
+
346
+ should 'resolve template content_type and locale' do
347
+ create_view :foo, "Im Js", :format => :js
348
+ create_view :foo, "Im Erb"
349
+ create_view :foo, "Im English Erb", :locale => :en
350
+ create_view :foo, "Im Italian Erb", :locale => :it
351
+ create_view :foo, "Im English Js", :format => :js, :locale => :en
352
+ create_view :foo, "Im Italian Js", :format => :js, :locale => :it
353
+ mock_app do
354
+ get("/foo", :provides => [:html, :js]) { render :foo }
355
+ end
356
+ I18n.locale = :none
357
+ get "/foo.js"
358
+ assert_equal "Im Js", body
359
+ get "/foo"
360
+ assert_equal "Im Erb", body
361
+ I18n.locale = :en
362
+ get "/foo"
363
+ assert_equal "Im English Erb", body
364
+ I18n.locale = :it
365
+ get "/foo"
366
+ assert_equal "Im Italian Erb", body
367
+ I18n.locale = :en
368
+ get "/foo.js"
369
+ assert_equal "Im English Js", body
370
+ I18n.locale = :it
371
+ get "/foo.js"
372
+ assert_equal "Im Italian Js", body
373
+ I18n.locale = :en
374
+ get "/foo.pk"
375
+ assert_equal 405, status
376
+ end
377
+
378
+ should 'resolve template content_type and locale with layout' do
379
+ create_layout :foo, "Hello <%= yield %> in a Js layout", :format => :js
380
+ create_layout :foo, "Hello <%= yield %> in a Js-En layout", :format => :js, :locale => :en
381
+ create_layout :foo, "Hello <%= yield %> in a Js-It layout", :format => :js, :locale => :it
382
+ create_layout :foo, "Hello <%= yield %> in a Erb-En layout", :locale => :en
383
+ create_layout :foo, "Hello <%= yield %> in a Erb-It layout", :locale => :it
384
+ create_layout :foo, "Hello <%= yield %> in a Erb layout"
385
+ create_view :bar, "Im Js", :format => :js
386
+ create_view :bar, "Im Erb"
387
+ create_view :bar, "Im English Erb", :locale => :en
388
+ create_view :bar, "Im Italian Erb", :locale => :it
389
+ create_view :bar, "Im English Js", :format => :js, :locale => :en
390
+ create_view :bar, "Im Italian Js", :format => :js, :locale => :it
391
+ create_view :bar, "Im a json", :format => :json
392
+ mock_app do
393
+ layout :foo
394
+ get("/bar", :provides => [:html, :js, :json]) { render :bar }
395
+ end
396
+ I18n.locale = :none
397
+ get "/bar.js"
398
+ assert_equal "Hello Im Js in a Js layout", body
399
+ get "/bar"
400
+ assert_equal "Hello Im Erb in a Erb layout", body
401
+ I18n.locale = :en
402
+ get "/bar"
403
+ assert_equal "Hello Im English Erb in a Erb-En layout", body
404
+ I18n.locale = :it
405
+ get "/bar"
406
+ assert_equal "Hello Im Italian Erb in a Erb-It layout", body
407
+ I18n.locale = :en
408
+ get "/bar.js"
409
+ assert_equal "Hello Im English Js in a Js-En layout", body
410
+ I18n.locale = :it
411
+ get "/bar.js"
412
+ assert_equal "Hello Im Italian Js in a Js-It layout", body
413
+ I18n.locale = :en
414
+ get "/bar.json"
415
+ assert_equal "Im a json", body
416
+ get "/bar.pk"
417
+ assert_equal 405, status
418
+ end
419
+
420
+ should 'renders erb with blocks' do
421
+ mock_app do
422
+ def container
423
+ @_out_buf << "THIS."
424
+ yield
425
+ @_out_buf << "SPARTA!"
426
+ end
427
+ def is; "IS."; end
428
+ get '/' do
429
+ render :erb, '<% container do %> <%= is %> <% end %>'
430
+ end
431
+ end
432
+ get '/'
433
+ assert ok?
434
+ assert_equal 'THIS. IS. SPARTA!', body
435
+ end
436
+ end
437
+ end