waw 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENCE.rdoc +25 -0
- data/README.rdoc +32 -0
- data/bin/waw +32 -0
- data/bin/waw-profile +26 -0
- data/bin/waw-start +26 -0
- data/bin/wspec +33 -0
- data/layouts/empty/Rakefile +14 -0
- data/layouts/empty/config.ru +5 -0
- data/layouts/empty/config/commons.cfg +31 -0
- data/layouts/empty/config/devel.cfg +21 -0
- data/layouts/empty/ignore +7 -0
- data/layouts/empty/logs/dontforgetme +0 -0
- data/layouts/empty/resources/messages.rs +1 -0
- data/layouts/empty/test/wspec/site_respond.wspec +3 -0
- data/layouts/empty/test/wspec/test_all.rb +13 -0
- data/layouts/empty/waw.deploy +1 -0
- data/layouts/empty/waw.routing +6 -0
- data/layouts/static/dependencies +1 -0
- data/layouts/static/public/.wawaccess +18 -0
- data/layouts/static/public/css/style.css +0 -0
- data/layouts/static/public/images/dontforgetme +0 -0
- data/layouts/static/public/js/project.js +0 -0
- data/layouts/static/public/pages/.wawaccess +30 -0
- data/layouts/static/public/pages/404.wtpl +1 -0
- data/layouts/static/public/pages/index.wtpl +5 -0
- data/layouts/static/public/templates/.wawaccess +9 -0
- data/layouts/static/public/templates/layout.wtpl +17 -0
- data/layouts/static/test/wspec/static_pages_are_served.wspec +21 -0
- data/layouts/static/waw.routing +8 -0
- data/lib/waw.rb +99 -0
- data/lib/waw/commands/command.rb +115 -0
- data/lib/waw/commands/profile_command.rb +66 -0
- data/lib/waw/commands/start_command.rb +59 -0
- data/lib/waw/config.rb +110 -0
- data/lib/waw/controller.rb +25 -0
- data/lib/waw/controllers/action/action.rb +91 -0
- data/lib/waw/controllers/action/action_utils.rb +30 -0
- data/lib/waw/controllers/action/js_generation.rb +116 -0
- data/lib/waw/controllers/action_controller.rb +133 -0
- data/lib/waw/controllers/error/backtrace.rb +54 -0
- data/lib/waw/controllers/error_handler.rb +62 -0
- data/lib/waw/controllers/json_controller.rb +31 -0
- data/lib/waw/controllers/no_cache.rb +22 -0
- data/lib/waw/controllers/static/match.rb +80 -0
- data/lib/waw/controllers/static/waw_access.rb +235 -0
- data/lib/waw/controllers/static/waw_access_dsl.rb +48 -0
- data/lib/waw/controllers/static_controller.rb +37 -0
- data/lib/waw/default_config.cfg +14 -0
- data/lib/waw/environment_utils.rb +57 -0
- data/lib/waw/errors.rb +4 -0
- data/lib/waw/ext.rb +3 -0
- data/lib/waw/ext/core.rb +4 -0
- data/lib/waw/ext/core/hash.rb +47 -0
- data/lib/waw/ext/core/logger.rb +10 -0
- data/lib/waw/ext/core/module.rb +20 -0
- data/lib/waw/ext/core/object.rb +29 -0
- data/lib/waw/ext/rack.rb +19 -0
- data/lib/waw/ext/rack/builder.rb +43 -0
- data/lib/waw/ext/rack/delegator.rb +51 -0
- data/lib/waw/ext/rack/urlmap.rb +55 -0
- data/lib/waw/ext/wlang.rb +1 -0
- data/lib/waw/ext/wlang/hosted_language.rb +21 -0
- data/lib/waw/fullstate.rb +8 -0
- data/lib/waw/fullstate/on_class.rb +37 -0
- data/lib/waw/fullstate/on_instance.rb +27 -0
- data/lib/waw/fullstate/variable.rb +36 -0
- data/lib/waw/kern.rb +6 -0
- data/lib/waw/kern/app.rb +48 -0
- data/lib/waw/kern/empty/waw.deploy +0 -0
- data/lib/waw/kern/empty/waw.routing +1 -0
- data/lib/waw/kern/freezed_state.rb +32 -0
- data/lib/waw/kern/hooks.rb +53 -0
- data/lib/waw/kern/lifecycle.rb +248 -0
- data/lib/waw/kern/living_state.rb +87 -0
- data/lib/waw/kern/utils.rb +27 -0
- data/lib/waw/resource_collection.rb +100 -0
- data/lib/waw/restart.rb +32 -0
- data/lib/waw/routing.rb +43 -0
- data/lib/waw/routing/action_routing.rb +78 -0
- data/lib/waw/routing/dsl.rb +45 -0
- data/lib/waw/routing/feedback.rb +23 -0
- data/lib/waw/routing/form_validation_feedback.rb +36 -0
- data/lib/waw/routing/javascript.rb +17 -0
- data/lib/waw/routing/redirect.rb +26 -0
- data/lib/waw/routing/refresh.rb +17 -0
- data/lib/waw/routing/routing_rule.rb +16 -0
- data/lib/waw/scope_utils.rb +69 -0
- data/lib/waw/session.rb +51 -0
- data/lib/waw/testing.rb +1 -0
- data/lib/waw/tools/mail.rb +4 -0
- data/lib/waw/tools/mail/mail.rb +119 -0
- data/lib/waw/tools/mail/mail_agent.rb +123 -0
- data/lib/waw/tools/mail/mailbox.rb +62 -0
- data/lib/waw/tools/mail/template.rb +38 -0
- data/lib/waw/utils/dsl_helper.rb +116 -0
- data/lib/waw/validation.rb +175 -0
- data/lib/waw/validation/and_validator.rb +27 -0
- data/lib/waw/validation/array_validations.rb +38 -0
- data/lib/waw/validation/boolean_validator.rb +32 -0
- data/lib/waw/validation/comparison_validations.rb +45 -0
- data/lib/waw/validation/date_validator.rb +31 -0
- data/lib/waw/validation/default_validator.rb +30 -0
- data/lib/waw/validation/dsl_ruby_extensions.rb +11 -0
- data/lib/waw/validation/errors.rb +17 -0
- data/lib/waw/validation/ext.rb +3 -0
- data/lib/waw/validation/file_validator.rb +30 -0
- data/lib/waw/validation/float_validator.rb +19 -0
- data/lib/waw/validation/helpers.rb +67 -0
- data/lib/waw/validation/integer_validator.rb +16 -0
- data/lib/waw/validation/isin_validator.rb +24 -0
- data/lib/waw/validation/mandatory_validator.rb +17 -0
- data/lib/waw/validation/missing_validator.rb +17 -0
- data/lib/waw/validation/not_validator.rb +20 -0
- data/lib/waw/validation/or_validator.rb +34 -0
- data/lib/waw/validation/regexp_validator.rb +29 -0
- data/lib/waw/validation/same_validator.rb +16 -0
- data/lib/waw/validation/signature.rb +157 -0
- data/lib/waw/validation/size_validations.rb +44 -0
- data/lib/waw/validation/string_validator.rb +15 -0
- data/lib/waw/validation/validator.rb +48 -0
- data/lib/waw/wawgen.rb +2 -0
- data/lib/waw/wawgen/create.rb +166 -0
- data/lib/waw/wawgen/project.rb +25 -0
- data/lib/waw/wspec.rb +5 -0
- data/lib/waw/wspec/browser.rb +240 -0
- data/lib/waw/wspec/dsl.rb +201 -0
- data/lib/waw/wspec/html_analysis.rb +136 -0
- data/lib/waw/wspec/html_analysis/tag.rb +56 -0
- data/lib/waw/wspec/runner.rb +70 -0
- data/lib/waw/wspec/scenario.rb +35 -0
- data/lib/waw/wspec/suite.rb +54 -0
- data/test/bricks/error_handler/config/test.cfg +2 -0
- data/test/bricks/error_handler/logs/webapp.log +1411 -0
- data/test/bricks/error_handler/test/error_handler.wspec +16 -0
- data/test/bricks/error_handler/waw.deploy +1 -0
- data/test/bricks/error_handler/waw.routing +27 -0
- data/test/integration/waw_create_integration_test.rb +24 -0
- data/test/spec/assumptions_spec.rb +30 -0
- data/test/spec/controllers/action_controller_spec.rb +14 -0
- data/test/spec/controllers/static/waw_access_spec.rb +112 -0
- data/test/spec/environment_utils_spec.rb +15 -0
- data/test/spec/ext/core/hash_spec.rb +58 -0
- data/test/spec/fixtures.rb +41 -0
- data/test/spec/fixtures/action/config/default.cfg +2 -0
- data/test/spec/fixtures/action/lib/action_controller_test.rb +12 -0
- data/test/spec/fixtures/action/waw.deploy +1 -0
- data/test/spec/fixtures/action/waw.routing +6 -0
- data/test/spec/fixtures/empty/waw.deploy +0 -0
- data/test/spec/fixtures/empty/waw.routing +0 -0
- data/test/spec/fullstate/on_class_spec.rb +59 -0
- data/test/spec/fullstate/on_instance_spec.rb +59 -0
- data/test/spec/fullstate/session_spec.rb +43 -0
- data/test/spec/fullstate/variable_spec.rb +55 -0
- data/test/spec/resource_collection_spec.rb +50 -0
- data/test/spec/test_all.rb +9 -0
- data/test/spec/tools/mail/mail_agent_spec.rb +116 -0
- data/test/spec/tools/mail/mail_spec.rb +56 -0
- data/test/spec/tools/mail/mailbox_spec.rb +57 -0
- data/test/spec/tools/mail/template_spec.rb +47 -0
- data/test/spec/validation/array_validation_spec.rb +63 -0
- data/test/spec/validation/array_validator_spec.rb +17 -0
- data/test/spec/validation/date_validation_spec.rb +35 -0
- data/test/spec/validation/default_validation_spec.rb +37 -0
- data/test/spec/validation/disjuctive_validation_spec.rb +33 -0
- data/test/spec/validation/errors_spec.rb +37 -0
- data/test/spec/validation/file_validator_spec.rb +34 -0
- data/test/spec/validation/mail_validation_spec.rb +51 -0
- data/test/spec/validation/missing_validation_spec.rb +43 -0
- data/test/spec/validation/same_validation_spec.rb +24 -0
- data/test/spec/validation/signature_intuition_spec.rb +37 -0
- data/test/spec/validation/signature_spec.rb +164 -0
- data/test/spec/validation/validation_spec.rb +28 -0
- data/test/spec/wspec/html_analysis/tag_spec.rb +38 -0
- data/test/spec/wspec/html_analysis_spec.rb +170 -0
- data/test/unit/test_all.rb +8 -0
- data/test/unit/waw/app_test.rb +126 -0
- data/test/unit/waw/app_test/config/commons.cfg +2 -0
- data/test/unit/waw/app_test/config/devel.cfg +1 -0
- data/test/unit/waw/config_test.rb +54 -0
- data/test/unit/waw/controllers/action_controller_test.rb +76 -0
- data/test/unit/waw/controllers/action_test.rb +35 -0
- data/test/unit/waw/controllers/example_action_controller_test.rb +24 -0
- data/test/unit/waw/controllers/multiple_action_controller_test.rb +78 -0
- data/test/unit/waw/controllers/static/example/css/example.css +1 -0
- data/test/unit/waw/controllers/static/example/index.html +1 -0
- data/test/unit/waw/controllers/static/example/js/example.js +1 -0
- data/test/unit/waw/controllers/static/example/pages/hello.wtpl +1 -0
- data/test/unit/waw/controllers/static/waw_access_test.rb +76 -0
- data/test/unit/waw/ext/rack_test.rb +74 -0
- data/test/unit/waw/resource_collection_test.rb +49 -0
- data/test/unit/waw/resources.txt +4 -0
- data/test/unit/waw/routing/routing_test.rb +26 -0
- data/test/unit/waw/utils/dsl_helper_test.rb +79 -0
- data/test/unit/waw/utils/dsl_helper_test_extensions1.rb +4 -0
- data/test/unit/waw/validation/signature_test.rb +193 -0
- data/test/unit/waw/validation_test.rb +319 -0
- data/test/unit/waw/wspec/html_analysis_test.html +81 -0
- data/test/unit/waw/wspec/html_analysis_test.rb +26 -0
- metadata +272 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
module Waw
|
|
4
|
+
module Validation
|
|
5
|
+
class SignatureTest < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def test_simple_case
|
|
8
|
+
signature = Signature.new do
|
|
9
|
+
validation :name, Waw::Validation.mandatory, :missing_name
|
|
10
|
+
end
|
|
11
|
+
assert_equal [false, [:missing_name]], signature.apply(:name => nil)
|
|
12
|
+
assert_equal [true, {:name => "blambeau"}], signature.apply(:name => "blambeau")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_supports_multiple_rules
|
|
16
|
+
signature = Signature.new do
|
|
17
|
+
validation :name, Waw::Validation.mandatory, :missing_name
|
|
18
|
+
validation :age, (Waw::Validation.mandatory & Waw::Validation.validator{|v| v>18}), :bad_age
|
|
19
|
+
end
|
|
20
|
+
assert_equal [false, [:missing_name, :bad_age]], signature.apply(:name => nil)
|
|
21
|
+
assert_equal [false, [:bad_age]], signature.apply(:name => "blambeau", :age => nil)
|
|
22
|
+
assert_equal [true, {:name => "blambeau", :age => 20}], signature.apply(:name => "blambeau", :age => 20)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_typical_web_scenario
|
|
26
|
+
signature = Waw::Validation.signature do
|
|
27
|
+
validation :mail, Waw::Validation.mail, :bad_email
|
|
28
|
+
validation [:password, :confirm], Waw::Validation.same, :passwords_dont_match
|
|
29
|
+
validation :age, Waw::Validation.missing | (Waw::Validation.integer & (Waw::Validation.is >= 18)), :bad_age
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29)
|
|
33
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29}, values)
|
|
34
|
+
assert_equal true, ok
|
|
35
|
+
|
|
36
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass2", :age => 29)
|
|
37
|
+
assert_equal false, ok
|
|
38
|
+
assert_equal [:passwords_dont_match], values
|
|
39
|
+
|
|
40
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass")
|
|
41
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => nil}, values)
|
|
42
|
+
assert_equal true, ok
|
|
43
|
+
|
|
44
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => '')
|
|
45
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => nil}, values)
|
|
46
|
+
assert_equal true, ok
|
|
47
|
+
|
|
48
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => "19")
|
|
49
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 19}, values)
|
|
50
|
+
assert_equal true, ok
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_typical_web_scenario_sc2
|
|
54
|
+
signature = Waw::Validation.signature do
|
|
55
|
+
validation :mail, mail, :bad_email
|
|
56
|
+
validation [:password, :confirm], same, :passwords_dont_match
|
|
57
|
+
validation :age, (integer & (is >= 18)) | missing, :bad_age
|
|
58
|
+
validation :newsletter, (boolean | default(false)), :bad_newsletter
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29)
|
|
62
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29, :newsletter => false}, values)
|
|
63
|
+
assert_equal true, ok
|
|
64
|
+
|
|
65
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => '29', :newsletter => nil)
|
|
66
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29, :newsletter => false}, values)
|
|
67
|
+
assert_equal true, ok
|
|
68
|
+
|
|
69
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => '29', :newsletter => 'false')
|
|
70
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29, :newsletter => false}, values)
|
|
71
|
+
assert_equal true, ok
|
|
72
|
+
|
|
73
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => '29', :newsletter => 'true')
|
|
74
|
+
assert_equal({:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => 29, :newsletter => true}, values)
|
|
75
|
+
assert_equal true, ok
|
|
76
|
+
|
|
77
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass", :age => '29', :newsletter => 'hello')
|
|
78
|
+
assert_equal false, ok
|
|
79
|
+
assert_equal [:bad_newsletter], values
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_typical_web_scenario_sc3
|
|
83
|
+
signature = Waw::Validation.signature do
|
|
84
|
+
validation :mail, mandatory & mail, :bad_email
|
|
85
|
+
validation [:password, :confirm], mandatory & same, :passwords_dont_match
|
|
86
|
+
end
|
|
87
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "pass", :confirm => "pass")
|
|
88
|
+
assert_equal true, ok
|
|
89
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => "", :confirm => "")
|
|
90
|
+
assert_equal false, ok
|
|
91
|
+
assert_equal [:passwords_dont_match], values
|
|
92
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com", :password => nil, :confirm => nil)
|
|
93
|
+
assert_equal false, ok
|
|
94
|
+
assert_equal [:passwords_dont_match], values
|
|
95
|
+
ok, values = signature.apply(:mail => "blambeau@gmail.com")
|
|
96
|
+
assert_equal false, ok
|
|
97
|
+
assert_equal [:passwords_dont_match], values
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def assert_signature_passes(expected, signature=nil, &block)
|
|
101
|
+
signature = Waw::Validation.signature(&block) unless signature
|
|
102
|
+
ok, converted = signature.apply(expected)
|
|
103
|
+
assert_equal true, ok
|
|
104
|
+
converted
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def assert_signature_does_not_pass(expected, signature=nil, &block)
|
|
108
|
+
signature = Waw::Validation.signature(&block) unless signature
|
|
109
|
+
ok, converted = signature.apply(expected)
|
|
110
|
+
assert_equal false, ok
|
|
111
|
+
converted
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_missing_and_default_intuition
|
|
115
|
+
# mandatory mail
|
|
116
|
+
get = assert_signature_passes(:mail => "blambeau@gmail.com") {
|
|
117
|
+
validation :mail, mail, :bad_mail
|
|
118
|
+
}
|
|
119
|
+
assert_equal "blambeau@gmail.com", get[:mail]
|
|
120
|
+
get = assert_signature_does_not_pass(:mail => nil) {
|
|
121
|
+
validation :mail, mail, :bad_mail
|
|
122
|
+
}
|
|
123
|
+
assert_equal [:bad_mail], get
|
|
124
|
+
get = assert_signature_does_not_pass(:mail => "") {
|
|
125
|
+
validation :mail, mail, :bad_mail
|
|
126
|
+
}
|
|
127
|
+
assert_equal [:bad_mail], get
|
|
128
|
+
get = assert_signature_does_not_pass(:mail => "blambeaugmail.com") {
|
|
129
|
+
validation :mail, mail, :bad_mail
|
|
130
|
+
}
|
|
131
|
+
assert_equal [:bad_mail], get
|
|
132
|
+
|
|
133
|
+
# optional valid mail
|
|
134
|
+
get = assert_signature_passes(:mail => "blambeau@gmail.com") {
|
|
135
|
+
validation :mail, mail | missing, :bad_mail
|
|
136
|
+
}
|
|
137
|
+
assert_equal "blambeau@gmail.com", get[:mail]
|
|
138
|
+
get = assert_signature_passes(:mail => "blambeau@gmail.com") {
|
|
139
|
+
validation :mail, missing | mail, :bad_mail
|
|
140
|
+
}
|
|
141
|
+
assert_equal "blambeau@gmail.com", get[:mail]
|
|
142
|
+
get = assert_signature_passes(:mail => "") {
|
|
143
|
+
validation :mail, mail | missing, :bad_mail
|
|
144
|
+
}
|
|
145
|
+
assert_equal nil, get[:mail]
|
|
146
|
+
get = assert_signature_passes(:mail => nil) {
|
|
147
|
+
validation :mail, missing | mail, :bad_mail
|
|
148
|
+
}
|
|
149
|
+
assert_equal nil, get[:mail]
|
|
150
|
+
get = assert_signature_passes(:mail => nil) {
|
|
151
|
+
validation :mail, mail | missing, :bad_mail
|
|
152
|
+
}
|
|
153
|
+
assert_equal nil, get[:mail]
|
|
154
|
+
get = assert_signature_does_not_pass(:mail => "blambeaugmail.com") {
|
|
155
|
+
validation :mail, mail | missing, :bad_mail
|
|
156
|
+
}
|
|
157
|
+
assert_equal [:bad_mail], get
|
|
158
|
+
|
|
159
|
+
# optional valid mail, with default
|
|
160
|
+
get = assert_signature_passes(:mail => "blambeau@gmail.com") {
|
|
161
|
+
validation :mail, mail | default("info@gmail.com"), :bad_mail
|
|
162
|
+
}
|
|
163
|
+
assert_equal "blambeau@gmail.com", get[:mail]
|
|
164
|
+
|
|
165
|
+
get = assert_signature_passes(:mail => "blambeau@gmail.com") {
|
|
166
|
+
validation :mail, default("info@gmail.com") | mail, :bad_mail
|
|
167
|
+
}
|
|
168
|
+
assert_equal "blambeau@gmail.com", get[:mail]
|
|
169
|
+
|
|
170
|
+
get = assert_signature_passes(:mail => nil) {
|
|
171
|
+
validation :mail, mail | default("info@gmail.com"), :bad_mail
|
|
172
|
+
}
|
|
173
|
+
assert_equal "info@gmail.com", get[:mail]
|
|
174
|
+
|
|
175
|
+
get = assert_signature_passes(:mail => nil) {
|
|
176
|
+
validation :mail, default("info@gmail.com") | mail, :bad_mail
|
|
177
|
+
}
|
|
178
|
+
assert_equal "info@gmail.com", get[:mail]
|
|
179
|
+
|
|
180
|
+
get = assert_signature_passes(:mail => " ") {
|
|
181
|
+
validation :mail, mail | default("info@gmail.com"), :bad_mail
|
|
182
|
+
}
|
|
183
|
+
assert_equal "info@gmail.com", get[:mail]
|
|
184
|
+
|
|
185
|
+
get = assert_signature_does_not_pass(:mail => "blambeaugmail.com") {
|
|
186
|
+
validation :mail, mail | default("info@gmail.com"), :bad_mail
|
|
187
|
+
}
|
|
188
|
+
assert_equal [:bad_mail], get
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
module Waw
|
|
4
|
+
class ValidationTest < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
MISSING = [nil, "", " ", " "]
|
|
7
|
+
NOT_MISSING = [self, 0, -1, 1, 12.0, -1000, true, false, "hello"]
|
|
8
|
+
MIX = (MISSING + NOT_MISSING)
|
|
9
|
+
|
|
10
|
+
def method_missing(name, *args, &block)
|
|
11
|
+
Waw::Validation.send(name, *args, &block)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_is_missing?
|
|
15
|
+
assert MISSING.all?{|v| is_missing?(v)}
|
|
16
|
+
assert !NOT_MISSING.any?{|v| is_missing?(v)}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_all_missing?
|
|
20
|
+
assert all_missing?(MISSING)
|
|
21
|
+
assert !all_missing?(NOT_MISSING)
|
|
22
|
+
assert !all_missing?(MIX)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_any_missing?
|
|
26
|
+
assert any_missing?(MISSING)
|
|
27
|
+
assert !any_missing?(NOT_MISSING)
|
|
28
|
+
assert any_missing?(MIX)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_no_missing?
|
|
32
|
+
assert no_missing?(NOT_MISSING)
|
|
33
|
+
assert !no_missing?(MISSING)
|
|
34
|
+
assert !no_missing?(MIX)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_missings_to_nil
|
|
38
|
+
assert_equal MISSING.collect{|v| nil}, missings_to_nil(MISSING)
|
|
39
|
+
assert_equal NOT_MISSING, missings_to_nil(NOT_MISSING)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_missing
|
|
43
|
+
assert Waw::Validation::Validator===missing
|
|
44
|
+
assert !NOT_MISSING.any?{|v| missing===v}
|
|
45
|
+
assert MISSING.all?{|v| missing===v}
|
|
46
|
+
NOT_MISSING.each do |val|
|
|
47
|
+
assert_equal [false, [val]], missing =~ val
|
|
48
|
+
end
|
|
49
|
+
MISSING.each do |val|
|
|
50
|
+
assert_equal [true, [nil]], missing =~ val
|
|
51
|
+
end
|
|
52
|
+
assert_equal [false, [self, nil]], missing.=~(self, nil)
|
|
53
|
+
assert_equal [false, [nil, self]], missing.=~(nil, self)
|
|
54
|
+
assert_equal [true, [nil, nil, nil]], missing.=~(" ", " ", nil)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_mandatory
|
|
58
|
+
assert Waw::Validation::Validator===mandatory
|
|
59
|
+
assert NOT_MISSING.all?{|v| mandatory===v}
|
|
60
|
+
assert !MISSING.any?{|v| mandatory===v}
|
|
61
|
+
NOT_MISSING.each do |val|
|
|
62
|
+
assert_equal [true, [val]], mandatory =~ val
|
|
63
|
+
end
|
|
64
|
+
MISSING.each do |val|
|
|
65
|
+
assert_equal [false, [val]], mandatory =~ val
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_default
|
|
70
|
+
assert_raise ::Waw::WawError do
|
|
71
|
+
::Waw::Validation.default
|
|
72
|
+
end
|
|
73
|
+
assert ::Waw::Validation::Validator === default(12)
|
|
74
|
+
assert MISSING.all?{|v| default("ok")===v}
|
|
75
|
+
assert !NOT_MISSING.any?{|v| default("ok")===v}
|
|
76
|
+
NOT_MISSING.each do |val|
|
|
77
|
+
assert_equal [false, [val]], default("ok") =~ val
|
|
78
|
+
end
|
|
79
|
+
MISSING.each do |val|
|
|
80
|
+
assert_equal [true, ["ok"]], default("ok") =~ val
|
|
81
|
+
end
|
|
82
|
+
assert_equal [false, [nil, 12]], default("ok").=~(nil, 12)
|
|
83
|
+
assert_equal [false, ["", 12]], default("ok").=~("", 12)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_same
|
|
87
|
+
assert ::Waw::Validation::Validator === same
|
|
88
|
+
assert NOT_MISSING.all?{|v| same.===(v,v)}
|
|
89
|
+
assert !MISSING.any?{|v| same.===(v,v)}
|
|
90
|
+
assert same.===(12, 12)
|
|
91
|
+
assert same.===(12, 12, 12)
|
|
92
|
+
assert !same.===(12, 13)
|
|
93
|
+
assert !same.===(12, 12, 13)
|
|
94
|
+
assert !same.===(12, nil)
|
|
95
|
+
assert !same.===(nil, nil)
|
|
96
|
+
assert_equal [true, [12, 12]], same.=~(12, 12)
|
|
97
|
+
assert_equal [false, [12, ""]], same.=~(12, "")
|
|
98
|
+
assert_equal [false, [12, nil]], same.=~(12, nil)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_isin
|
|
102
|
+
assert ::Waw::Validation::Validator === isin
|
|
103
|
+
MIX.each do |val|
|
|
104
|
+
assert_equal false, isin(101, "not present", /^$/)===val
|
|
105
|
+
assert_equal true, isin(val)===val
|
|
106
|
+
end
|
|
107
|
+
assert_equal true, isin(nil)===nil
|
|
108
|
+
assert_equal true, isin("hello", "world")==="hello"
|
|
109
|
+
assert_equal true, isin("hello", "world")==="world"
|
|
110
|
+
assert_equal [true, ["hello", "world"]], isin("hello", "world", "happy").=~("hello", "world")
|
|
111
|
+
assert_equal [false, ["hello", "world"]], isin("hell", "world", "happy").=~("hello", "world")
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_boolean
|
|
115
|
+
assert [true, false].all?{|v| boolean===v}
|
|
116
|
+
assert !MISSING.any?{|v| boolean === v}
|
|
117
|
+
assert !NOT_MISSING.all?{|v| boolean === v}
|
|
118
|
+
assert_equal [true, [true, false]], boolean.=~(true, false)
|
|
119
|
+
assert_equal [true, [true, false]], boolean.=~('true', false)
|
|
120
|
+
assert_equal [true, [true, false]], boolean.=~(' true ', false)
|
|
121
|
+
assert_equal [true, [true, false]], boolean.=~(' true ', "false ")
|
|
122
|
+
assert_equal [false, [self]], boolean.=~(self)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_integer
|
|
126
|
+
assert [1, 12, 0].all?{|v| integer===v}
|
|
127
|
+
assert !MISSING.any?{|v| integer===v}
|
|
128
|
+
assert !NOT_MISSING.all?{|v| integer===v}
|
|
129
|
+
assert !["hello", self].any?{|v| integer===v}
|
|
130
|
+
assert_equal [true, [0, 12]], integer.=~(0, 12)
|
|
131
|
+
assert_equal [true, [0, 12]], integer.=~('0', 12)
|
|
132
|
+
assert_equal [true, [0, 12]], integer.=~(' 0 ', 12)
|
|
133
|
+
assert_equal [true, [0, 12]], integer.=~('0', '12')
|
|
134
|
+
assert_equal [true, [0, 12]], integer.=~('+0', '+12')
|
|
135
|
+
assert_equal [true, [0, -12]], integer.=~('+0', '-12')
|
|
136
|
+
assert_equal [false, ['0', nil]], integer.=~('0', nil)
|
|
137
|
+
assert_equal [false, [0, nil]], integer.=~(0, nil)
|
|
138
|
+
assert_equal [false, [0, ""]], integer.=~(0, "")
|
|
139
|
+
assert_equal [false, ['hello']], integer.=~('hello')
|
|
140
|
+
assert_equal [false, ['hello12']], integer.=~('hello12')
|
|
141
|
+
assert_equal [false, [self]], integer.=~(self)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_float
|
|
145
|
+
assert [1.0, 0.0, -10.0].all?{|v| float===v}
|
|
146
|
+
assert !MISSING.any?{|v| float===v}
|
|
147
|
+
assert !NOT_MISSING.all?{|v| float===v}
|
|
148
|
+
assert_equal [true, [0.0, -12.0]], float.=~(0.0, -12.0)
|
|
149
|
+
assert_equal [false, [0.0, nil]], float.=~(0.0, nil)
|
|
150
|
+
assert_equal [true, [0.0, -12.0]], float.=~("0.0", "-12.0")
|
|
151
|
+
assert_equal [true, [0.0, -12.0]], float.=~("0", "-12")
|
|
152
|
+
assert_equal [true, [0.0, -12.0]], float.=~(".0", "-12.0")
|
|
153
|
+
assert_equal [true, [0.2]], float.=~(".2")
|
|
154
|
+
assert_equal [true, [1.2e3]], float.=~(1.2e3)
|
|
155
|
+
assert_equal [true, [1.2e3]], float.=~("1.2e3")
|
|
156
|
+
assert_equal [true, [1.2e3]], float.=~("1.2E3")
|
|
157
|
+
assert_equal [true, [0.2e3]], float.=~(".2E3")
|
|
158
|
+
assert_equal [false, [0.0, "hello"]], float.=~(0.0, "hello")
|
|
159
|
+
assert_equal [false, [0.0, "h12.0"]], float.=~(0.0, "h12.0")
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_mail
|
|
163
|
+
["blambeau@gmail.com",
|
|
164
|
+
" blambeau@gmail.com ",
|
|
165
|
+
"x@fmail.com",
|
|
166
|
+
"blambeau@acm-sc.be",
|
|
167
|
+
"blambeau@info.uclouvain.be",
|
|
168
|
+
"blambeau12@info.uclouvain.be",
|
|
169
|
+
"blambeau12@info.uclouvain.be",
|
|
170
|
+
"llambeau@hit-radio.be"].each do |v|
|
|
171
|
+
assert mail===v, "#{v} is a valid e-mail"
|
|
172
|
+
end
|
|
173
|
+
assert !MIX.any?{|v| mail===v}
|
|
174
|
+
assert !(mail === "blambeuamail")
|
|
175
|
+
assert !(mail === "blambeuamail@")
|
|
176
|
+
assert !(mail === "@gmail.com")
|
|
177
|
+
assert !(mail === "12")
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_weburl
|
|
181
|
+
["http://www.google.com/",
|
|
182
|
+
"https://www.google.com/",
|
|
183
|
+
"http://www.google.com",
|
|
184
|
+
"http://www.google.net",
|
|
185
|
+
"https://www.google.com/some/path",
|
|
186
|
+
"https://www.google.com/some/path?and=a&query=12",
|
|
187
|
+
"https://www.google.com/some/path?and=a&query=12&that=",
|
|
188
|
+
"https://www.google.com:9292/some/path?and=a&query=12&that=",
|
|
189
|
+
" https://www.google.com:9292/some/path?and=a&query=12&that= ",
|
|
190
|
+
].each do |v|
|
|
191
|
+
assert weburl===v, "#{v} is a valid web url"
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def test_size
|
|
196
|
+
# just because it seems that a method size exists in Test::Unit::TestCase
|
|
197
|
+
thesize = ::Waw::Validation.size
|
|
198
|
+
assert_equal ::Waw::Validation::SizeValidations.object_id, thesize.object_id
|
|
199
|
+
|
|
200
|
+
first, second = (::Waw::Validation::SizeValidations == 2), (::Waw::Validation::SizeValidations == 0)
|
|
201
|
+
assert_equal false, first.object_id===second.object_id, "Different size validators"
|
|
202
|
+
|
|
203
|
+
[(thesize == 2), (thesize <= 2), (thesize >= 2), (thesize < 2), (thesize > 2)].all?{|v| ::Waw::Validation::Validator===v}
|
|
204
|
+
|
|
205
|
+
first, second = (thesize.==(2)), (thesize.==(0))
|
|
206
|
+
assert_equal false, first.object_id===second.object_id, "Different size validators"
|
|
207
|
+
|
|
208
|
+
assert ::Waw::Validation::SizeValidations.has_size?([])
|
|
209
|
+
assert [].size <= 2
|
|
210
|
+
|
|
211
|
+
assert (thesize == 0)===[], "Empty array has size == 0"
|
|
212
|
+
[" ", [1, 2]].each do |v|
|
|
213
|
+
assert((thesize == 2).===(v), "|#{v}| has exactly a size of 2")
|
|
214
|
+
assert(!(thesize == 3).===(v), "|#{v}| has not a size of 3")
|
|
215
|
+
assert(((thesize <= 2)===v), "|#{v}| has size <= 2")
|
|
216
|
+
assert(((thesize >= 2)===v), "|#{v}| has size >= 2")
|
|
217
|
+
assert(!((thesize > 2)===v), "|#{v}| has not size > 2")
|
|
218
|
+
assert(!((thesize < 2)===v), "|#{v}| has not size < 2")
|
|
219
|
+
end
|
|
220
|
+
MISSING.each do |v|
|
|
221
|
+
assert_equal false, (thesize==100).===(v)
|
|
222
|
+
#assert_equal false, (thesize<=100).===(v) # not true because of ""
|
|
223
|
+
assert_equal false, (thesize>=100).===(v)
|
|
224
|
+
#assert_equal false, (thesize<100).===(v) # not true because of ""
|
|
225
|
+
assert_equal false, (thesize>100).===(v)
|
|
226
|
+
end
|
|
227
|
+
assert_nothing_raised do
|
|
228
|
+
assert_equal false, Object.new.respond_to?(:size)
|
|
229
|
+
assert_equal false, (thesize>100).===(Object.new)
|
|
230
|
+
assert_equal false, (thesize>self).===(Object.new)
|
|
231
|
+
assert_equal false, (thesize>"hello").===(Object.new)
|
|
232
|
+
assert_equal false, (thesize>self).===(" ")
|
|
233
|
+
assert_equal false, (thesize>"hello").===(" ")
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def test_is
|
|
238
|
+
# Ensure that we are talking about the validator
|
|
239
|
+
assert_equal false, self.respond_to?(:is)
|
|
240
|
+
assert ::Waw::Validation::ComparisonValidations.object_id==is.object_id
|
|
241
|
+
assert ::Waw::Validation::Validator===(is==2)
|
|
242
|
+
MISSING.each do |val|
|
|
243
|
+
assert_equal false, (is==345678)===val
|
|
244
|
+
assert_equal false, (is<=345678)===val
|
|
245
|
+
assert_equal false, (is>=345678)===val
|
|
246
|
+
assert_equal false, (is<345678)===val
|
|
247
|
+
assert_equal false, (is>345678)===val
|
|
248
|
+
end
|
|
249
|
+
assert_equal true, (is == 2)===2
|
|
250
|
+
assert_equal true, (is <= 2)===2
|
|
251
|
+
assert_equal true, (is >= 2)===2
|
|
252
|
+
assert_equal true, (is < 2)===1
|
|
253
|
+
assert_equal true, (is > 2)===3
|
|
254
|
+
assert_equal false, (is > 2)==="hello"
|
|
255
|
+
assert_equal [true, [3]], (is < 10) =~ 3
|
|
256
|
+
assert_equal [false, ["hello"]], (is < 10) =~ "hello"
|
|
257
|
+
assert_equal [false, ["3"]], (is < 10) =~ "3"
|
|
258
|
+
assert_equal true, is.in(1, 2, 3)===3
|
|
259
|
+
assert_equal false, is.in(1, 2, 3)===4
|
|
260
|
+
assert_equal [true, [1, 2]], is.in(1, 2, 3).=~(1, 2)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def test_historical_first
|
|
264
|
+
assert Waw::Validation.mandatory===false, "Waw::Validation.mandatory===false"
|
|
265
|
+
assert Waw::Validation.mandatory===true, "Waw::Validation.mandatory===true"
|
|
266
|
+
assert Waw::Validation.mandatory===0, "Waw::Validation.mandatory===0"
|
|
267
|
+
assert Waw::Validation.mandatory===1, "Waw::Validation.mandatory===1"
|
|
268
|
+
assert Waw::Validation.mandatory.not===nil, "Waw::Validation.mandatory.not===nil"
|
|
269
|
+
|
|
270
|
+
# assert (Waw::Validation.size > 0)==="12", "(Waw::Validation.size > 0)==='12'"
|
|
271
|
+
# assert (Waw::Validation.size > 0).not==="", "(Waw::Validation.size > 0).not==="
|
|
272
|
+
# assert (Waw::Validation.size >= 0)==="12", "(Waw::Validation.size >= 0)==='12'"
|
|
273
|
+
# assert (Waw::Validation.size >= 0)==="", "(Waw::Validation.size >= 0)==="
|
|
274
|
+
#
|
|
275
|
+
# assert (Waw::Validation.size > 0)===[:hello], "(Waw::Validation.size > 0)===[:hello]"
|
|
276
|
+
# assert (Waw::Validation.size > 0).not===[], "(Waw::Validation.size > 0).not===[]"
|
|
277
|
+
#
|
|
278
|
+
# assert (Waw::Validation.size == 0)===[]
|
|
279
|
+
# assert !((Waw::Validation.size == 10)===[])
|
|
280
|
+
|
|
281
|
+
assert Waw::Validation::Array[String] === []
|
|
282
|
+
assert Waw::Validation::Array[String] === ["coucou", "hello"]
|
|
283
|
+
assert !(Waw::Validation::Array[String] === [12])
|
|
284
|
+
assert !(Waw::Validation::Array[String] === ["coucou", 12])
|
|
285
|
+
assert Waw::Validation::Array[Waw::Validation.size>2] === ["coucou", "hello"]
|
|
286
|
+
assert !(Waw::Validation::Array[Waw::Validation.size>2] === ["coucou", "h"])
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def test_validator
|
|
290
|
+
validator = Waw::Validation.validator{|val| Integer===val and val>10}
|
|
291
|
+
assert_equal true, validator===11
|
|
292
|
+
assert_equal false, validator===10
|
|
293
|
+
assert_equal false, validator===7
|
|
294
|
+
assert_equal false, validator==="10"
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
def test_validator_accepts_multiple_arguments
|
|
298
|
+
validator = Waw::Validation.validator{|val1, val2| val1==val2}
|
|
299
|
+
assert_equal true, validator.validate("hello", "hello")
|
|
300
|
+
assert_equal false, validator.validate("hello", 10)
|
|
301
|
+
assert_equal true, validator.validate(10, 10)
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def test_validator_conjunction
|
|
305
|
+
val = (Waw::Validation.mandatory & Waw::Validation.validator{|v| v>10})
|
|
306
|
+
assert_equal true, val===11
|
|
307
|
+
assert_equal false, val===10
|
|
308
|
+
assert_equal false, val===nil
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
def test_validator_disjunction
|
|
312
|
+
val = (Waw::Validation::validator{|v| v<10} | Waw::Validation.validator{|v| v>10})
|
|
313
|
+
assert_equal true, val===11
|
|
314
|
+
assert_equal false, val===10
|
|
315
|
+
assert_equal true, val===9
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
end
|
|
319
|
+
end
|