waw 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. data/LICENCE.rdoc +25 -0
  2. data/README.rdoc +32 -0
  3. data/bin/waw +32 -0
  4. data/bin/waw-profile +26 -0
  5. data/bin/waw-start +26 -0
  6. data/bin/wspec +33 -0
  7. data/layouts/empty/Rakefile +14 -0
  8. data/layouts/empty/config.ru +5 -0
  9. data/layouts/empty/config/commons.cfg +31 -0
  10. data/layouts/empty/config/devel.cfg +21 -0
  11. data/layouts/empty/ignore +7 -0
  12. data/layouts/empty/logs/dontforgetme +0 -0
  13. data/layouts/empty/resources/messages.rs +1 -0
  14. data/layouts/empty/test/wspec/site_respond.wspec +3 -0
  15. data/layouts/empty/test/wspec/test_all.rb +13 -0
  16. data/layouts/empty/waw.deploy +1 -0
  17. data/layouts/empty/waw.routing +6 -0
  18. data/layouts/static/dependencies +1 -0
  19. data/layouts/static/public/.wawaccess +18 -0
  20. data/layouts/static/public/css/style.css +0 -0
  21. data/layouts/static/public/images/dontforgetme +0 -0
  22. data/layouts/static/public/js/project.js +0 -0
  23. data/layouts/static/public/pages/.wawaccess +30 -0
  24. data/layouts/static/public/pages/404.wtpl +1 -0
  25. data/layouts/static/public/pages/index.wtpl +5 -0
  26. data/layouts/static/public/templates/.wawaccess +9 -0
  27. data/layouts/static/public/templates/layout.wtpl +17 -0
  28. data/layouts/static/test/wspec/static_pages_are_served.wspec +21 -0
  29. data/layouts/static/waw.routing +8 -0
  30. data/lib/waw.rb +99 -0
  31. data/lib/waw/commands/command.rb +115 -0
  32. data/lib/waw/commands/profile_command.rb +66 -0
  33. data/lib/waw/commands/start_command.rb +59 -0
  34. data/lib/waw/config.rb +110 -0
  35. data/lib/waw/controller.rb +25 -0
  36. data/lib/waw/controllers/action/action.rb +91 -0
  37. data/lib/waw/controllers/action/action_utils.rb +30 -0
  38. data/lib/waw/controllers/action/js_generation.rb +116 -0
  39. data/lib/waw/controllers/action_controller.rb +133 -0
  40. data/lib/waw/controllers/error/backtrace.rb +54 -0
  41. data/lib/waw/controllers/error_handler.rb +62 -0
  42. data/lib/waw/controllers/json_controller.rb +31 -0
  43. data/lib/waw/controllers/no_cache.rb +22 -0
  44. data/lib/waw/controllers/static/match.rb +80 -0
  45. data/lib/waw/controllers/static/waw_access.rb +235 -0
  46. data/lib/waw/controllers/static/waw_access_dsl.rb +48 -0
  47. data/lib/waw/controllers/static_controller.rb +37 -0
  48. data/lib/waw/default_config.cfg +14 -0
  49. data/lib/waw/environment_utils.rb +57 -0
  50. data/lib/waw/errors.rb +4 -0
  51. data/lib/waw/ext.rb +3 -0
  52. data/lib/waw/ext/core.rb +4 -0
  53. data/lib/waw/ext/core/hash.rb +47 -0
  54. data/lib/waw/ext/core/logger.rb +10 -0
  55. data/lib/waw/ext/core/module.rb +20 -0
  56. data/lib/waw/ext/core/object.rb +29 -0
  57. data/lib/waw/ext/rack.rb +19 -0
  58. data/lib/waw/ext/rack/builder.rb +43 -0
  59. data/lib/waw/ext/rack/delegator.rb +51 -0
  60. data/lib/waw/ext/rack/urlmap.rb +55 -0
  61. data/lib/waw/ext/wlang.rb +1 -0
  62. data/lib/waw/ext/wlang/hosted_language.rb +21 -0
  63. data/lib/waw/fullstate.rb +8 -0
  64. data/lib/waw/fullstate/on_class.rb +37 -0
  65. data/lib/waw/fullstate/on_instance.rb +27 -0
  66. data/lib/waw/fullstate/variable.rb +36 -0
  67. data/lib/waw/kern.rb +6 -0
  68. data/lib/waw/kern/app.rb +48 -0
  69. data/lib/waw/kern/empty/waw.deploy +0 -0
  70. data/lib/waw/kern/empty/waw.routing +1 -0
  71. data/lib/waw/kern/freezed_state.rb +32 -0
  72. data/lib/waw/kern/hooks.rb +53 -0
  73. data/lib/waw/kern/lifecycle.rb +248 -0
  74. data/lib/waw/kern/living_state.rb +87 -0
  75. data/lib/waw/kern/utils.rb +27 -0
  76. data/lib/waw/resource_collection.rb +100 -0
  77. data/lib/waw/restart.rb +32 -0
  78. data/lib/waw/routing.rb +43 -0
  79. data/lib/waw/routing/action_routing.rb +78 -0
  80. data/lib/waw/routing/dsl.rb +45 -0
  81. data/lib/waw/routing/feedback.rb +23 -0
  82. data/lib/waw/routing/form_validation_feedback.rb +36 -0
  83. data/lib/waw/routing/javascript.rb +17 -0
  84. data/lib/waw/routing/redirect.rb +26 -0
  85. data/lib/waw/routing/refresh.rb +17 -0
  86. data/lib/waw/routing/routing_rule.rb +16 -0
  87. data/lib/waw/scope_utils.rb +69 -0
  88. data/lib/waw/session.rb +51 -0
  89. data/lib/waw/testing.rb +1 -0
  90. data/lib/waw/tools/mail.rb +4 -0
  91. data/lib/waw/tools/mail/mail.rb +119 -0
  92. data/lib/waw/tools/mail/mail_agent.rb +123 -0
  93. data/lib/waw/tools/mail/mailbox.rb +62 -0
  94. data/lib/waw/tools/mail/template.rb +38 -0
  95. data/lib/waw/utils/dsl_helper.rb +116 -0
  96. data/lib/waw/validation.rb +175 -0
  97. data/lib/waw/validation/and_validator.rb +27 -0
  98. data/lib/waw/validation/array_validations.rb +38 -0
  99. data/lib/waw/validation/boolean_validator.rb +32 -0
  100. data/lib/waw/validation/comparison_validations.rb +45 -0
  101. data/lib/waw/validation/date_validator.rb +31 -0
  102. data/lib/waw/validation/default_validator.rb +30 -0
  103. data/lib/waw/validation/dsl_ruby_extensions.rb +11 -0
  104. data/lib/waw/validation/errors.rb +17 -0
  105. data/lib/waw/validation/ext.rb +3 -0
  106. data/lib/waw/validation/file_validator.rb +30 -0
  107. data/lib/waw/validation/float_validator.rb +19 -0
  108. data/lib/waw/validation/helpers.rb +67 -0
  109. data/lib/waw/validation/integer_validator.rb +16 -0
  110. data/lib/waw/validation/isin_validator.rb +24 -0
  111. data/lib/waw/validation/mandatory_validator.rb +17 -0
  112. data/lib/waw/validation/missing_validator.rb +17 -0
  113. data/lib/waw/validation/not_validator.rb +20 -0
  114. data/lib/waw/validation/or_validator.rb +34 -0
  115. data/lib/waw/validation/regexp_validator.rb +29 -0
  116. data/lib/waw/validation/same_validator.rb +16 -0
  117. data/lib/waw/validation/signature.rb +157 -0
  118. data/lib/waw/validation/size_validations.rb +44 -0
  119. data/lib/waw/validation/string_validator.rb +15 -0
  120. data/lib/waw/validation/validator.rb +48 -0
  121. data/lib/waw/wawgen.rb +2 -0
  122. data/lib/waw/wawgen/create.rb +166 -0
  123. data/lib/waw/wawgen/project.rb +25 -0
  124. data/lib/waw/wspec.rb +5 -0
  125. data/lib/waw/wspec/browser.rb +240 -0
  126. data/lib/waw/wspec/dsl.rb +201 -0
  127. data/lib/waw/wspec/html_analysis.rb +136 -0
  128. data/lib/waw/wspec/html_analysis/tag.rb +56 -0
  129. data/lib/waw/wspec/runner.rb +70 -0
  130. data/lib/waw/wspec/scenario.rb +35 -0
  131. data/lib/waw/wspec/suite.rb +54 -0
  132. data/test/bricks/error_handler/config/test.cfg +2 -0
  133. data/test/bricks/error_handler/logs/webapp.log +1411 -0
  134. data/test/bricks/error_handler/test/error_handler.wspec +16 -0
  135. data/test/bricks/error_handler/waw.deploy +1 -0
  136. data/test/bricks/error_handler/waw.routing +27 -0
  137. data/test/integration/waw_create_integration_test.rb +24 -0
  138. data/test/spec/assumptions_spec.rb +30 -0
  139. data/test/spec/controllers/action_controller_spec.rb +14 -0
  140. data/test/spec/controllers/static/waw_access_spec.rb +112 -0
  141. data/test/spec/environment_utils_spec.rb +15 -0
  142. data/test/spec/ext/core/hash_spec.rb +58 -0
  143. data/test/spec/fixtures.rb +41 -0
  144. data/test/spec/fixtures/action/config/default.cfg +2 -0
  145. data/test/spec/fixtures/action/lib/action_controller_test.rb +12 -0
  146. data/test/spec/fixtures/action/waw.deploy +1 -0
  147. data/test/spec/fixtures/action/waw.routing +6 -0
  148. data/test/spec/fixtures/empty/waw.deploy +0 -0
  149. data/test/spec/fixtures/empty/waw.routing +0 -0
  150. data/test/spec/fullstate/on_class_spec.rb +59 -0
  151. data/test/spec/fullstate/on_instance_spec.rb +59 -0
  152. data/test/spec/fullstate/session_spec.rb +43 -0
  153. data/test/spec/fullstate/variable_spec.rb +55 -0
  154. data/test/spec/resource_collection_spec.rb +50 -0
  155. data/test/spec/test_all.rb +9 -0
  156. data/test/spec/tools/mail/mail_agent_spec.rb +116 -0
  157. data/test/spec/tools/mail/mail_spec.rb +56 -0
  158. data/test/spec/tools/mail/mailbox_spec.rb +57 -0
  159. data/test/spec/tools/mail/template_spec.rb +47 -0
  160. data/test/spec/validation/array_validation_spec.rb +63 -0
  161. data/test/spec/validation/array_validator_spec.rb +17 -0
  162. data/test/spec/validation/date_validation_spec.rb +35 -0
  163. data/test/spec/validation/default_validation_spec.rb +37 -0
  164. data/test/spec/validation/disjuctive_validation_spec.rb +33 -0
  165. data/test/spec/validation/errors_spec.rb +37 -0
  166. data/test/spec/validation/file_validator_spec.rb +34 -0
  167. data/test/spec/validation/mail_validation_spec.rb +51 -0
  168. data/test/spec/validation/missing_validation_spec.rb +43 -0
  169. data/test/spec/validation/same_validation_spec.rb +24 -0
  170. data/test/spec/validation/signature_intuition_spec.rb +37 -0
  171. data/test/spec/validation/signature_spec.rb +164 -0
  172. data/test/spec/validation/validation_spec.rb +28 -0
  173. data/test/spec/wspec/html_analysis/tag_spec.rb +38 -0
  174. data/test/spec/wspec/html_analysis_spec.rb +170 -0
  175. data/test/unit/test_all.rb +8 -0
  176. data/test/unit/waw/app_test.rb +126 -0
  177. data/test/unit/waw/app_test/config/commons.cfg +2 -0
  178. data/test/unit/waw/app_test/config/devel.cfg +1 -0
  179. data/test/unit/waw/config_test.rb +54 -0
  180. data/test/unit/waw/controllers/action_controller_test.rb +76 -0
  181. data/test/unit/waw/controllers/action_test.rb +35 -0
  182. data/test/unit/waw/controllers/example_action_controller_test.rb +24 -0
  183. data/test/unit/waw/controllers/multiple_action_controller_test.rb +78 -0
  184. data/test/unit/waw/controllers/static/example/css/example.css +1 -0
  185. data/test/unit/waw/controllers/static/example/index.html +1 -0
  186. data/test/unit/waw/controllers/static/example/js/example.js +1 -0
  187. data/test/unit/waw/controllers/static/example/pages/hello.wtpl +1 -0
  188. data/test/unit/waw/controllers/static/waw_access_test.rb +76 -0
  189. data/test/unit/waw/ext/rack_test.rb +74 -0
  190. data/test/unit/waw/resource_collection_test.rb +49 -0
  191. data/test/unit/waw/resources.txt +4 -0
  192. data/test/unit/waw/routing/routing_test.rb +26 -0
  193. data/test/unit/waw/utils/dsl_helper_test.rb +79 -0
  194. data/test/unit/waw/utils/dsl_helper_test_extensions1.rb +4 -0
  195. data/test/unit/waw/validation/signature_test.rb +193 -0
  196. data/test/unit/waw/validation_test.rb +319 -0
  197. data/test/unit/waw/wspec/html_analysis_test.html +81 -0
  198. data/test/unit/waw/wspec/html_analysis_test.rb +26 -0
  199. metadata +272 -0
@@ -0,0 +1,28 @@
1
+ require 'waw'
2
+
3
+ module Waw::Validation
4
+ validator :my_validator, validator{|s| s=="I'm my_validator"}
5
+ end
6
+ class SomeDSL
7
+ include Waw::Validation
8
+ end
9
+ describe ::Waw::Validation do
10
+
11
+ it "should respond to installed validators" do
12
+ Waw::Validation.should respond_to(:my_validator)
13
+ end
14
+
15
+ it "should allow other classes/modules (like DSLs) to include it and to get validators for free (issue #260)" do
16
+ SomeDSL.new.should respond_to(:my_validator)
17
+ SomeDSL.new.my_validator.convert_and_validate(nil).should == [false, [nil]]
18
+ end
19
+
20
+ it "should support being reopened later" do
21
+ module Waw::Validation
22
+ validator :second_validator_test, validator{|arg| Integer===arg}
23
+ end
24
+ SomeDSL.new.should respond_to(:second_validator_test)
25
+ SomeDSL.new.second_validator_test.convert_and_validate(12).should == [true, [12]]
26
+ end
27
+
28
+ end
@@ -0,0 +1,38 @@
1
+ require 'waw'
2
+ require 'waw/wspec'
3
+
4
+ describe Waw::WSpec::HTMLAnalysis::Tag do
5
+
6
+ def tag(name, attributes = {})
7
+ Waw::WSpec::HTMLAnalysis::Tag.new(nil, name, attributes)
8
+ end
9
+
10
+ it "should give access to its name" do
11
+ tag('a').name.should == 'a'
12
+ tag('div').name.should == 'div'
13
+ end
14
+
15
+ it "should give access to its attributes" do
16
+ tag = tag('a', :id => "link", :class => "current")
17
+ tag.attributes.should == {:id => "link", :class => "current"}
18
+ tag[:id].should == "link"
19
+ tag[:class].should == "current"
20
+ end
21
+
22
+ it "should provide a helper for matching an attribute specification" do
23
+ tag = tag('a', :id => "link", :class => "current")
24
+ tag.matches?(:id => 'link').should be_true
25
+ tag.matches?(:id => 'link', :class => "current").should be_true
26
+ tag.matches?(:id => 'link', :class => "current", :noone => "something").should be_false
27
+ tag.matches?(:id => 'nolink').should be_false
28
+ tag.matches?(:id => 'link', :class => "notthegoodone").should be_false
29
+ tag.matches?(:noone => 'something').should be_false
30
+ end
31
+
32
+ it 'should allow expression regular expressions in the matching helper' do
33
+ tag = tag('a', :id => "link", :class => "current")
34
+ tag.matches?(:id => /^([a-z]+)$/).should be_true
35
+ tag.matches?(:id => /^([0-9]+)$/).should be_false
36
+ end
37
+
38
+ end
@@ -0,0 +1,170 @@
1
+ require 'waw'
2
+ require 'waw/wspec'
3
+
4
+ class ServicesController < ::Waw::ActionController
5
+
6
+ def self.url
7
+ '/services'
8
+ end
9
+
10
+ signature {}
11
+ def say_hello(params)
12
+ :ok
13
+ end
14
+
15
+ end
16
+
17
+ describe Waw::WSpec::HTMLAnalysis do
18
+ include Waw::WSpec::HTMLAnalysis
19
+
20
+ def browser_contents
21
+ <<-HTML
22
+ <html>
23
+ <head>
24
+ <title>This is a WSpec rspec test</title>
25
+ <link rel="stylesheet" type="text/css" href="/css/style.css" />
26
+ <link rel="stylesheet" type="text/css" href="/css/olympiades.css" />
27
+ <link rel="stylesheet" type="text/css" href="/css/scienceinfuse" />
28
+ <script type="text/javascript" src="/js/jquery-1.3.2.min.js"></script>
29
+ <script type="text/javascript" src="/js/waw.js"></script>
30
+ <script type="text/javascript" src="/js/acmscw.js"></script>
31
+ <script type="text/javascript" src="/js/acmscw_generated.js"></script>
32
+ </head>
33
+ <body>
34
+ <div id="menu">
35
+ <a href="/hello" class="current">Hello</a>
36
+ <a href="/world">World</a>
37
+ </div>
38
+ <div id="main">
39
+ <link href="service?key=value"/>
40
+ <form id="services_say_hello" class="say-hello">
41
+ </form>
42
+ <form action="/say/hello" id="say_hello2">
43
+ </form>
44
+ </div>
45
+ <div id="footer">
46
+ <a href="http://github.com/blambeau/waw">waw</a>
47
+ </div>
48
+ </body>
49
+ </html>
50
+ HTML
51
+ end
52
+
53
+ it "should correctly decode attributes" do
54
+ decode_attributes_string("").should == {}
55
+ decode_attributes_string('href="http://www.google.com"').should == {:href => 'http://www.google.com'}
56
+ decode_attributes_string("href='http://www.google.com'").should == {:href => 'http://www.google.com'}
57
+ decode_attributes_string('href="http://www.google.com" src="/images/test.jpg"').should == {
58
+ :href => 'http://www.google.com',
59
+ :src => "/images/test.jpg"
60
+ }
61
+ end
62
+
63
+ it "should provide a useful tags helper, returning an array of tags" do
64
+ links = tags('a')
65
+ links.size.should == 3
66
+ links[0].name.should == 'a'
67
+ links[0][:href].should == '/hello'
68
+ links[0][:class].should == 'current'
69
+ links[1].name.should == 'a'
70
+ links[1][:href].should == '/world'
71
+ links[1][:class].should be_nil
72
+ end
73
+
74
+ it "should allow passing a block to the tags helper method" do
75
+ links = []
76
+ tags('a') {|tag| links << tag}
77
+ links.size.should == 3
78
+ links[0].name.should == 'a'
79
+ links[0][:href].should == '/hello'
80
+ links[0][:class].should == 'current'
81
+ links[1].name.should == 'a'
82
+ links[1][:href].should == '/world'
83
+ links[1][:class].should be_nil
84
+ end
85
+
86
+ it "should provide a each_tag friendly method" do
87
+ links = []
88
+ each_tag('a') {|tag| links << tag}
89
+ links.size.should == 3
90
+ end
91
+
92
+ it "should support a tags helper method allowing to express constraints" do
93
+ tags('div').size.should == 3
94
+ tags('div', :id => 'menu').size.should == 1
95
+ tags('div', :id => 'main').size.should == 1
96
+ tags('div', :id => 'none').size.should == 0
97
+ end
98
+
99
+ it "should support a tags helper method supporting regexp constraints" do
100
+ tags('link', :rel => "stylesheet", :href => /\.css$/).size.should == 2
101
+ end
102
+
103
+ it "should support a tags helper method allowing complex uris, as href attributes for example" do
104
+ tags = tags('link', :href => "service?key=value")
105
+ tags.size.should == 1
106
+ tags[0][:href].should == 'service?key=value'
107
+ end
108
+
109
+ it "should support a non plural form for the tags helper method" do
110
+ tag = tag('a')
111
+ (Waw::WSpec::HTMLAnalysis::Tag===tag).should be_true
112
+ tag[:href].should == '/hello'
113
+ tag('nothing').should be_nil
114
+ end
115
+
116
+ it "should correctly implement has_tag?" do
117
+ has_tag?("title").should be_true
118
+ has_tag?("a").should be_true
119
+ has_tag?("div").should be_true
120
+ has_tag?("div", :id => 'menu').should be_true
121
+ has_tag?("div", :id => 'notmenu').should be_false
122
+ has_tag?("p").should be_false
123
+ end
124
+
125
+ it "should provide shortcuts for links" do
126
+ all_links.size.should == 3
127
+ links.size.should == 3
128
+ links(:href => '/hello').size.should == 1
129
+ links(:href => '/none').size.should == 0
130
+ links(:class => 'current').size.should == 1
131
+ links(:class => /.*/).size.should == 1
132
+ links(:class => 'nothing').size.should == 0
133
+
134
+ link(:href => '/hello').should_not be_nil
135
+ first_link(:href => '/hello').should_not be_nil
136
+
137
+ link(:nohing => true).should be_nil
138
+
139
+ has_link?(:href => '/hello').should be_true
140
+ has_link?(:nohing => true).should be_false
141
+ end
142
+
143
+ it "should provide shortcuts for internal links" do
144
+ all_internal_links.size.should == 2
145
+ internal_links.size.should == 2
146
+ end
147
+
148
+ it "should provide shortcuts for external links" do
149
+ all_external_links.size.should == 1
150
+ external_links.size.should == 1
151
+ end
152
+
153
+ it "should provide shortcuts for forms" do
154
+ form(:id => 'services_say_hello').should_not be_nil
155
+ form(:id => 'say_hello2').should_not be_nil
156
+ form(:action => '/say/hello').should_not be_nil
157
+ form(:id => 'say_hello2', :action => '/say/hello').should_not be_nil
158
+ form(:id => 'nothing').should be_nil
159
+ end
160
+
161
+ it "should support looking forms through Action instances" do
162
+ ServicesController.say_hello.id.should == "services_say_hello"
163
+ form = form(:action => ServicesController.say_hello)
164
+ form.should_not be_nil
165
+ form[:action].should == ServicesController.say_hello
166
+ form[:class].should == 'say-hello'
167
+ form[:id].should == ServicesController.say_hello.id
168
+ end
169
+
170
+ end
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
2
+ require 'waw'
3
+ require 'test/unit'
4
+ test_files = Dir[File.join(File.dirname(__FILE__), '**/*_test.rb')]
5
+ test_files.each { |file|
6
+ require(file)
7
+ }
8
+
@@ -0,0 +1,126 @@
1
+ require 'fileutils'
2
+ require 'test/unit'
3
+ require 'waw'
4
+ module Waw
5
+ class AppTest < Test::Unit::TestCase
6
+ include ::Waw::Kern::FreezedState
7
+ include ::Waw::Kern::Hooks
8
+ include ::Waw::Kern::Utils
9
+ include ::Waw::Kern::Lifecycle
10
+ attr_reader :folder
11
+
12
+ # Thrash class for the logger
13
+ class Trash
14
+ def self.write(*args) end
15
+ def self.close(*args) end
16
+ end
17
+
18
+ def setup
19
+ @folder = File.join(File.dirname(__FILE__), 'app_test')
20
+ wawrouting(nil, "nil")
21
+ end
22
+
23
+ def teardown
24
+ FileUtils.rm_rf File.join('logs')
25
+ FileUtils.rm_rf File.join(@folder, 'wawdeploy')
26
+ FileUtils.rm_rf File.join(@folder, 'waw.deploy')
27
+ FileUtils.rm_rf File.join(@folder, 'waw.routing')
28
+ FileUtils.rm_rf File.join(@folder, 'waw.commons.routing')
29
+ FileUtils.rm_rf File.join(@folder, 'waw.devel.routing')
30
+ end
31
+
32
+ def wawdeploy(words, old=false)
33
+ File.open(File.join(@folder, old ? "wawdeploy" : "waw.deploy"), 'w') do |io|
34
+ io << "# It supports comments\n"
35
+ io << words.join(' ') << "\n"
36
+ io << "# And here too\n"
37
+ end
38
+ yield
39
+ end
40
+
41
+ def wawrouting(name, value)
42
+ file = name ? "waw.#{name}.routing" : "waw.routing"
43
+ File.open(File.join(@folder, file), 'w') do |io|
44
+ io << "'#{value}'"
45
+ end
46
+ end
47
+
48
+ def test_it_supports_empty_config
49
+ assert_nothing_raised do
50
+ wawdeploy %w{} do
51
+ load_application(folder)
52
+ end
53
+ end
54
+ end
55
+
56
+ def test_it_load_config_in_good_order
57
+ wawdeploy %w{commons devel} do
58
+ load_application(folder)
59
+ assert_equal 2, config.test_value
60
+ assert_equal %w{commons devel}, deploy_words
61
+ end
62
+ wawdeploy %w{devel commons} do
63
+ load_application(folder)
64
+ assert_equal 1, config.test_value
65
+ assert_equal %w{devel commons}, deploy_words
66
+ end
67
+ end
68
+
69
+ def test_it_supports_old_wawdeploy
70
+ wawdeploy %w{commons devel}, true do
71
+ load_application(folder)
72
+ assert_equal 2, config.test_value
73
+ assert_equal %w{commons devel}, deploy_words
74
+ end
75
+ end
76
+
77
+ def test_it_loads_correct_routing
78
+ wawdeploy %w{commons devel} do
79
+ wawrouting nil, "This is the standard routing"
80
+ wawrouting "commons", "This is the commons routing"
81
+ wawrouting "devel", "This is the devel routing"
82
+ load_application(folder)
83
+ assert_equal "This is the devel routing", app
84
+ end
85
+ end
86
+
87
+ def test_it_loads_correct_routing_2
88
+ wawdeploy %w{commons devel} do
89
+ wawrouting nil, "This is the standard routing"
90
+ wawrouting "commons", "This is the commons routing"
91
+ load_application(folder)
92
+ assert_equal "This is the commons routing", app
93
+ end
94
+ end
95
+
96
+ def test_it_loads_correct_routing_3
97
+ wawdeploy %w{devel} do
98
+ wawrouting nil, "This is the standard routing"
99
+ wawrouting "commons", "This is the commons routing"
100
+ load_application(folder)
101
+ assert_equal "This is the standard routing", app
102
+ end
103
+ end
104
+
105
+ def test_it_loads_correct_routing_4
106
+ wawdeploy %w{} do
107
+ wawrouting nil, "This is the standard routing"
108
+ wawrouting "commons", "This is the commons routing"
109
+ wawrouting "devel", "This is the commons routing"
110
+ load_application(folder)
111
+ assert_equal "This is the standard routing", app
112
+ end
113
+ end
114
+
115
+ def test_it_loads_correct_routing_4
116
+ wawdeploy %w{devel commons} do
117
+ wawrouting nil, "This is the standard routing"
118
+ wawrouting "commons", "This is the commons routing"
119
+ wawrouting "devel", "This is the commons routing"
120
+ load_application(folder)
121
+ assert_equal "This is the commons routing", app
122
+ end
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,2 @@
1
+ log_io ::Waw::AppTest::Trash
2
+ test_value 1
@@ -0,0 +1 @@
1
+ test_value 2
@@ -0,0 +1,54 @@
1
+ require 'waw'
2
+ require 'test/unit'
3
+ module Waw
4
+ class ConfigTest < Test::Unit::TestCase
5
+
6
+ def root_folder
7
+ File.dirname(__FILE__)
8
+ end
9
+
10
+ def test_default_config
11
+ c = Config.new(self, false).merge <<-EOF
12
+ log_dir 'logs'
13
+ log_frequency 'weekly'
14
+ log_level Logger::DEBUG
15
+ EOF
16
+ assert_equal 'logs', c.log_dir
17
+ assert_equal 'weekly', c.log_frequency
18
+ assert_equal Logger::DEBUG, c.log_level
19
+ assert_equal ['logs'], c.log_dir(true)
20
+ end
21
+
22
+ def test_config_allows_future_references
23
+ c = Config.new(self, false)
24
+ c.merge <<-EOF
25
+ first 12
26
+ second first
27
+ EOF
28
+ assert_equal 12, c.second
29
+ end
30
+
31
+ def test_config_allows_block
32
+ c = Config.new(self, false)
33
+ c.merge <<-EOF
34
+ help 12
35
+ jsgeneration { true }
36
+ EOF
37
+ assert_equal 12, c.help
38
+ assert_equal true, c.jsgeneration
39
+ end
40
+
41
+ def test_config_allows_block_referencing_others
42
+ c = Config.new(self, false)
43
+ c.merge <<-EOF
44
+ mode 'devel'
45
+ jsgeneration { mode=='devel' }
46
+ sendmails { mode=='production' }
47
+ EOF
48
+ assert_equal 'devel', c.mode
49
+ assert_equal true, c.jsgeneration
50
+ assert_equal false, c.sendmails
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,76 @@
1
+ require 'test/unit'
2
+ require 'waw'
3
+ module Waw
4
+ class ActionControllerTest < Test::Unit::TestCase
5
+
6
+ class MyMailController < Waw::ActionController
7
+
8
+ def this_is_possible
9
+ end
10
+
11
+ signature {
12
+ validation :mail, mandatory, :missing_email
13
+ validation :mail, mail, :invalid_email
14
+ }
15
+ def subscribe(params)
16
+ this_is_possible
17
+ :ok
18
+ end
19
+
20
+ signature {
21
+ validation :age, integer & (is>18), :bad_age
22
+ }
23
+ def say_hello_to_adult(params)
24
+ params[:age]
25
+ end
26
+
27
+ def not_an_action
28
+ end
29
+
30
+ end
31
+
32
+ def controller
33
+ MyMailController.instance
34
+ end
35
+
36
+ def test_singleton_pattern
37
+ assert_equal false, MyMailController.respond_to?(:new)
38
+ assert_equal true, MyMailController.respond_to?(:instance)
39
+ end
40
+
41
+ def test_installed_method_on_instance
42
+ assert MyMailController.instance.respond_to?(:subscribe)
43
+ end
44
+
45
+ def test_installed_method_on_class
46
+ assert MyMailController.respond_to?(:subscribe)
47
+ assert ::Waw::ActionController::Action===MyMailController.subscribe
48
+ end
49
+
50
+ def test_js_generation_has_seen_new_controller
51
+ assert ::Waw::ActionController.controllers.include?(MyMailController)
52
+ end
53
+
54
+ def test_controller_installation
55
+ assert controller.respond_to?(:subscribe)
56
+ assert controller.respond_to?(:not_an_action)
57
+ assert_equal false, controller.respond_to?(:action_not_an_action)
58
+ assert controller.has_action?(:subscribe)
59
+ assert controller.has_action?("/services/subscribe")
60
+ end
61
+
62
+ def test_controller_subscribe
63
+ assert_equal [:success, :ok], controller.subscribe(:mail => "blambeau@gmail.com")
64
+ assert_equal [:"validation-ko", [:invalid_email]], controller.subscribe(:mail => "blambeau_gmail.com")
65
+ assert_equal [:"validation-ko", [:missing_email, :invalid_email]], controller.subscribe(:mail => nil)
66
+ end
67
+
68
+ def test_controller_say_hello_to_adult
69
+ assert_equal [:success, 20], controller.say_hello_to_adult(:age => 20)
70
+ assert_equal [:success, 20], controller.say_hello_to_adult(:age => "20")
71
+ assert_equal [:success, 20], controller.say_hello_to_adult(:age => " 20 ")
72
+ assert_equal [:"validation-ko", [:bad_age]], controller.say_hello_to_adult(:age => "18")
73
+ end
74
+
75
+ end
76
+ end