User: roelofb
Date: 2008/09/07 11:42 AM
Modified:
/trunk/MonoRail/Castle.MonoRail.Framework.Tests/Helpers/Validations/
JQueryFormValidationTestCase.cs
/trunk/MonoRail/Castle.MonoRail.Framework/Helpers/ValidationStrategy/
JQueryValidator.cs
Log:
Fixed MR-ISSUE-478. Patch submitted by John Simons.
File Changes:
Directory: /trunk/MonoRail/Castle.MonoRail.Framework/Helpers/ValidationStrategy/
================================================================================
File [modified]: JQueryValidator.cs
Delta lines: +177 -104
===================================================================
---
trunk/MonoRail/Castle.MonoRail.Framework.Tests/Helpers/Validations/JQueryFormValidationTestCase.cs
2008-09-05 14:49:35 UTC (rev 5306)
+++
trunk/MonoRail/Castle.MonoRail.Framework.Tests/Helpers/Validations/JQueryFormValidationTestCase.cs
2008-09-07 18:42:36 UTC (rev 5307)
@@ -16,18 +16,13 @@
{
#region Using Directives
- using System;
- using System.Collections.Generic;
using System.Globalization;
- using System.Text;
using System.Threading;
-
using NUnit.Framework;
+ using Framework.Helpers;
+ using Framework.Helpers.ValidationStrategy;
+ using Controllers;
- using Castle.MonoRail.Framework.Helpers;
- using Castle.MonoRail.Framework.Helpers.ValidationStrategy;
- using Castle.MonoRail.Framework.Tests.Controllers;
-
#endregion Using Directives
[TestFixture]
@@ -39,190 +34,268 @@
[SetUp]
public void Init()
{
- CultureInfo en = CultureInfo.CreateSpecificCulture(
"en" );
+ CultureInfo en =
CultureInfo.CreateSpecificCulture("en");
Thread.CurrentThread.CurrentCulture = en;
Thread.CurrentThread.CurrentUICulture = en;
helper = new FormHelper();
- helper.UseWebValidatorProvider( new JQueryValidator() );
+ helper.UseWebValidatorProvider(new JQueryValidator());
model = new ModelWithValidation();
HomeController controller = new HomeController();
ControllerContext controllerContext = new
ControllerContext();
- controllerContext.PropertyBag.Add( "model", model );
+ controllerContext.PropertyBag.Add("model", model);
- helper.SetController( controller, controllerContext );
+ helper.SetController(controller, controllerContext);
}
[Test]
public void ValidationIsGeneratedForModel()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
+ helper.FormTag(DictHelper.Create("noaction=true"));
- Assert.AreEqual( "<input type=\"text\"
id=\"model_nonemptyfield\" " +
- "name=\"model.nonemptyfield\" value=\"\"
class=\"required\" " +
- "title=\"This is a required field.\" />",
helper.TextField( "model.nonemptyfield" ) );
+ helper.TextField("model.nonemptyfield");
+ helper.TextField("model.emailfield");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_emailfield\" " +
- "name=\"model.emailfield\" value=\"\"
class=\"email\" " +
- "title=\"Email doesnt look right.\" />",
helper.TextField( "model.emailfield" ) );
-
// Attribute order cannot be guaranted, so this test
may fail ocasionally
// Assert.AreEqual("<input type=\"text\"
id=\"model_nonemptyemailfield\" " +
// "name=\"model.nonemptyemailfield\" value=\"\"
class=\"validate-email required\" " +
// "title=\"Please enter a valid email address.
For example [EMAIL PROTECTED], This is a required field\" />",
helper.TextField("model.nonemptyemailfield"));
- helper.EndFormTag();
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.nonemptyfield\":{ required: true
}, \"model.emailfield\":{ email: true }}, messages:{\"model.nonemptyfield\":{
required: \"This is a required field\" }, \"model.emailfield\":{ email: \"Email
doesnt look right\" }}} );\r\njQuery.validator.addMethod('notEqualTo',
function(value, element, param) { return value != jQuery(param).val(); }, 'Must
not be equal to {0}.' );\r\njQuery.validator.addMethod('greaterThan',
function(value, element, param) { return ( IsNaN( value ) && IsNaN(
jQuery(param).val() ) ) || ( value > jQuery(param).val() ); }, 'Must be greater
than {0}.' );\r\njQuery.validator.addMethod('lesserThan', function(value,
element, param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) ||
( value < jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void UsingScopes()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
- helper.Push( "model" );
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_nonemptyfield\" " +
- "name=\"model.nonemptyfield\" value=\"\"
class=\"required\" " +
- "title=\"This is a required field.\" />",
helper.TextField( "nonemptyfield" ) );
+ helper.TextField("nonemptyfield");
+ helper.TextField("emailfield");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_emailfield\" " +
- "name=\"model.emailfield\" value=\"\"
class=\"email\" " +
- "title=\"Email doesnt look right.\" />",
helper.TextField( "emailfield" ) );
-
// Attribute order cannot be guaranted, so this test
may fail ocasionally
// Assert.AreEqual("<input type=\"text\"
id=\"model_nonemptyemailfield\" " +
// "name=\"model.nonemptyemailfield\" value=\"\"
class=\"validate-email required\" " +
// "title=\"Please enter a valid email address.
For example [EMAIL PROTECTED], This is a required field\" />",
helper.TextField("nonemptyemailfield"));
helper.Pop();
- helper.EndFormTag();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.nonemptyfield\":{ required: true
}, \"model.emailfield\":{ email: true }}, messages:{\"model.nonemptyfield\":{
required: \"This is a required field\" }, \"model.emailfield\":{ email: \"Email
doesnt look right\" }}} );\r\njQuery.validator.addMethod('notEqualTo',
function(value, element, param) { return value != jQuery(param).val(); }, 'Must
not be equal to {0}.' );\r\njQuery.validator.addMethod('greaterThan',
function(value, element, param) { return ( IsNaN( value ) && IsNaN(
jQuery(param).val() ) ) || ( value > jQuery(param).val() ); }, 'Must be greater
than {0}.' );\r\njQuery.validator.addMethod('lesserThan', function(value,
element, param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) ||
( value < jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void SameAsUsingScopes()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
- helper.Push( "model" );
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_EmailField\" " +
- "name=\"model.EmailField\" value=\"\"
class=\"email\" " +
- "title=\"Email doesnt look right.\" />",
helper.TextField( "EmailField" ) );
+ helper.TextField("EmailField");
+ helper.TextField("ConfirmedEmailField");
- Assert.AreEqual("<input type=\"text\"
id=\"model_ConfirmedEmailField\" " +
- "name=\"model.ConfirmedEmailField\" value=\"\"
class=\"equalTo\" " +
- "equalto=\"#model_EmailField\" " +
- "title=\"Fields do not match.\" />",
helper.TextField("ConfirmedEmailField"));
-
helper.Pop();
- helper.EndFormTag();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.EmailField\":{ email: true },
\"model.ConfirmedEmailField\":{ equalTo: \"#model_EmailField\" }},
messages:{\"model.EmailField\":{ email: \"Email doesnt look right\" },
\"model.ConfirmedEmailField\":{ equalTo: \"Fields do not match\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void LessThenUsingScopes()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
- helper.Push( "model" );
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_FirstValue\" " +
- "name=\"model.FirstValue\" value=\"0\"
class=\"digits\" " +
- "title=\"Please enter a valid integer in this
field.\" />", helper.TextField( "FirstValue" ) );
+ helper.TextField("FirstValue");
+ helper.TextField("SecondValue");
- Assert.AreEqual("<input type=\"text\"
id=\"model_SecondValue\" " +
- "name=\"model.SecondValue\" value=\"0\"
class=\"lesserThan\" " +
- "lesserthan=\"#model_FirstValue\" " +
- "title=\"This field value must be lesser than
the other field value.\" />", helper.TextField("SecondValue"));
-
helper.Pop();
- helper.EndFormTag();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.FirstValue\":{ digits: true },
\"model.SecondValue\":{ lesserThan: \"#model_FirstValue\" }},
messages:{\"model.FirstValue\":{ digits: \"Please enter a valid integer in this
field\" }, \"model.SecondValue\":{ lesserThan: \"This field value must be
lesser than the other field value.\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void GreaterThenUsingScopes()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
- helper.Push( "model" );
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
- Assert.AreEqual( "<input type=\"text\"
id=\"model_ThirdValue\" " +
- "name=\"model.ThirdValue\" value=\"0\"
class=\"digits\" " +
- "title=\"Please enter a valid integer in this
field.\" />", helper.TextField( "ThirdValue" ) );
+ helper.TextField("ThirdValue");
+ helper.TextField("ForthValue");
- Assert.AreEqual("<input type=\"text\"
id=\"model_ForthValue\" " +
- "name=\"model.ForthValue\" value=\"0\"
class=\"greaterThan\" " +
- "greaterthan=\"#model_ThirdValue\" " +
- "title=\"This field value must be greater than
the other field value.\" />", helper.TextField("ForthValue"));
-
helper.Pop();
- helper.EndFormTag();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.ThirdValue\":{ digits: true },
\"model.ForthValue\":{ greaterThan: \"#model_ThirdValue\" }},
messages:{\"model.ThirdValue\":{ digits: \"Please enter a valid integer in this
field\" }, \"model.ForthValue\":{ greaterThan: \"This field value must be
greater than the other field value.\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void GroupValidationUsingScopes()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
- helper.Push( "model" );
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
- Assert.AreEqual("<input type=\"text\"
id=\"model_GroupValue1\" " +
- "name=\"model.GroupValue1\" value=\"\"
class=\"requiredmygroup1\" />", helper.TextField("GroupValue1"));
+ helper.TextField("GroupValue1");
+ helper.TextField("GroupValue2");
+ helper.TextField("GroupValue3");
+ helper.TextField("GroupValue4");
- Assert.AreEqual("<input type=\"text\"
id=\"model_GroupValue2\" " +
- "name=\"model.GroupValue2\" value=\"\"
class=\"requiredmygroup1\" />", helper.TextField("GroupValue2"));
+ helper.Pop();
- Assert.AreEqual("<input type=\"text\"
id=\"model_GroupValue3\" " +
- "name=\"model.GroupValue3\" value=\"\"
class=\"requiredmygroup2\" />", helper.TextField("GroupValue3"));
-
- Assert.AreEqual("<input type=\"text\"
id=\"model_GroupValue4\" " +
- "name=\"model.GroupValue4\" value=\"\"
class=\"requiredmygroup2\" />", helper.TextField("GroupValue4"));
-
- helper.Pop();
Assert.AreEqual(
- "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {groups:{mygroup1: \"model.GroupValue1
model.GroupValue2 \",\r\nmygroup2: \"model.GroupValue3 model.GroupValue4
\",\r\n}} );\r\njQuery.validator.addMethod('notEqualTo', function(value,
element, param) { return value != jQuery(param).val(); }, 'Must not be equal to
{0}.' );\r\njQuery.validator.addMethod('greaterThan', function(value, element,
param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_GroupValue1\").val()!='' || $(\"#model_GroupValue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_GroupValue3\").val()!='' || $(\"#model_GroupValue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>"
- ,helper.EndFormTag());
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {groups:{mygroup1: \"model.GroupValue1
model.GroupValue2 \",\r\nmygroup2: \"model.GroupValue3 model.GroupValue4
\",\r\n}, rules:{\"model.GroupValue1\":{ requiredmygroup1: true },
\"model.GroupValue2\":{ requiredmygroup1: true }, \"model.GroupValue3\":{
requiredmygroup2: true }, \"model.GroupValue4\":{ requiredmygroup2: true }},
messages:{\"model.GroupValue1\":{ requiredmygroup1: \"At least one of the
values should not be empty\" }, \"model.GroupValue2\":{ requiredmygroup1: \"At
least one of the values should not be empty\" }, \"model.GroupValue3\":{
requiredmygroup2: \"At least one of the values should not be empty\" },
\"model.GroupValue4\":{ requiredmygroup2: \"At least one of the values should
not be empty\" }}} );\r\njQuery.validator.addMethod('notEqualTo',
function(value, element, param) { return value != jQuery(param).val(); }, 'Must
not be equal to {0}.' );\r\njQuery.validator.addMethod('greaterThan',
function(value, element, param) { return ( IsNaN( value ) && IsNaN(
jQuery(param).val() ) ) || ( value > jQuery(param).val() ); }, 'Must be greater
than {0}.' );\r\njQuery.validator.addMethod('lesserThan', function(value,
element, param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) ||
( value < jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_GroupValue1\").val()!='' || $(\"#model_GroupValue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_GroupValue3\").val()!='' || $(\"#model_GroupValue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>",
+ helper.EndFormTag());
}
-
+
[Test]
public void ValidationForSelects()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
+ helper.FormTag(DictHelper.Create("noaction=true"));
- Assert.AreEqual( "<select id=\"model_city\" " +
- "name=\"model.city\" class=\"required\" " +
- "title=\"This is a required field.\" >\r\n" +
- "<option value=\"0\">---</option>\r\n" +
- "<option value=\"Sao Paulo\">Sao
Paulo</option>\r\n" +
- "<option value=\"Sao Carlos\">Sao
Carlos</option>\r\n" +
- "</select>",
- helper.Select( "model.city",
- new string[] { "Sao Paulo", "Sao
Carlos" }, DictHelper.Create( "firstoption=---" ) ) );
- helper.EndFormTag();
+ helper.Select("model.city",
+ new string[] {"Sao Paulo", "Sao Carlos"},
DictHelper.Create("firstoption=---"));
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.city\":{ required: true }},
messages:{\"model.city\":{ required: \"This is a required field\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
public void ValidationAreInherited()
{
- helper.FormTag( DictHelper.Create( "noaction=true" ) );
+ helper.FormTag(DictHelper.Create("noaction=true"));
- Assert.AreEqual( "<select id=\"model_city_id\" " +
- "name=\"model.city.id\" class=\"required\" " +
- "title=\"This is a required field.\" >\r\n" +
- "<option value=\"0\">---</option>\r\n" +
- "<option value=\"1\">1</option>\r\n" +
- "<option value=\"2\">2</option>\r\n" +
- "</select>",
- helper.Select( "model.city.id",
- new string[] { "1", "2" },
DictHelper.Create( "firstoption=---" ) ) );
+ helper.Select("model.city.id",
+ new string[] {"1", "2"},
DictHelper.Create("firstoption=---"));
- helper.EndFormTag();
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {rules:{\"model.city.id\":{ required: true }},
messages:{\"model.city.id\":{ required: \"This is a required field\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
[Test]
+ public void FullValidationSameAsUsingScopes()
+ {
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
+
+ helper.TextField("NonEmptyField");
+ helper.TextField("EmailField");
+ helper.TextField("NonEmptyEmailField");
+ helper.TextField("FirstValue");
+ helper.TextField("SecondValue");
+ helper.TextField("ThirdValue");
+ helper.TextField("ForthValue");
+ helper.TextField("GroupValue1");
+ helper.TextField("GroupValue2");
+ helper.TextField("GroupValue3");
+ helper.TextField("GroupValue4");
+ helper.Select("City", new string[] {"Sao Paulo", "Sao
Carlos"}, DictHelper.Create("firstoption=---"));
+ helper.Select("Country.Id", new string[] {"1", "2"},
DictHelper.Create("firstoption=---"));
+
+ helper.Pop();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {groups:{mygroup1: \"model.GroupValue1
model.GroupValue2 \",\r\nmygroup2: \"model.GroupValue3 model.GroupValue4
\",\r\n}, rules:{\"model.NonEmptyField\":{ required: true },
\"model.EmailField\":{ email: true }, \"model.NonEmptyEmailField\":{ required:
true , email: true }, \"model.FirstValue\":{ digits: true },
\"model.SecondValue\":{ lesserThan: \"#model_FirstValue\" },
\"model.ThirdValue\":{ digits: true }, \"model.ForthValue\":{ greaterThan:
\"#model_ThirdValue\" }, \"model.GroupValue1\":{ requiredmygroup1: true },
\"model.GroupValue2\":{ requiredmygroup1: true }, \"model.GroupValue3\":{
requiredmygroup2: true }, \"model.GroupValue4\":{ requiredmygroup2: true },
\"model.City\":{ required: true }, \"model.Country.Id\":{ required: true }},
messages:{\"model.NonEmptyField\":{ required: \"This is a required field\" },
\"model.EmailField\":{ email: \"Email doesnt look right\" },
\"model.NonEmptyEmailField\":{ required: \"This is a required field\" , email:
\"Please enter a valid email address. For example [EMAIL PROTECTED]" },
\"model.FirstValue\":{ digits: \"Please enter a valid integer in this field\"
}, \"model.SecondValue\":{ lesserThan: \"This field value must be lesser than
the other field value.\" }, \"model.ThirdValue\":{ digits: \"Please enter a
valid integer in this field\" }, \"model.ForthValue\":{ greaterThan: \"This
field value must be greater than the other field value.\" },
\"model.GroupValue1\":{ requiredmygroup1: \"At least one of the values should
not be empty\" }, \"model.GroupValue2\":{ requiredmygroup1: \"At least one of
the values should not be empty\" }, \"model.GroupValue3\":{ requiredmygroup2:
\"At least one of the values should not be empty\" }, \"model.GroupValue4\":{
requiredmygroup2: \"At least one of the values should not be empty\" },
\"model.City\":{ required: \"This is a required field\" },
\"model.Country.Id\":{ required: \"This is a required field\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_GroupValue1\").val()!='' || $(\"#model_GroupValue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_GroupValue3\").val()!='' || $(\"#model_GroupValue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>"
+ , helper.EndFormTag());
+ }
+
+ [Test]
+ public void FullValidationUsingScopes()
+ {
+ helper.FormTag(DictHelper.Create("noaction=true"));
+ helper.Push("model");
+
+ helper.TextField("nonemptyfield");
+ helper.TextField("emailfield");
+ helper.TextField("nonemptyemailfield");
+ helper.TextField("firstvalue");
+ helper.TextField("secondvalue");
+ helper.TextField("thirdvalue");
+ helper.TextField("forthvalue");
+ helper.TextField("groupvalue1");
+ helper.TextField("groupvalue2");
+ helper.TextField("groupvalue3");
+ helper.TextField("groupvalue4");
+ helper.Select("city", new string[] {"Sao Paulo", "Sao
Carlos"}, DictHelper.Create("firstoption=---"));
+ helper.Select("country.id", new string[] {"1", "2"},
DictHelper.Create("firstoption=---"));
+
+ helper.Pop();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {groups:{mygroup1: \"model.groupvalue1
model.groupvalue2 \",\r\nmygroup2: \"model.groupvalue3 model.groupvalue4
\",\r\n}, rules:{\"model.nonemptyfield\":{ required: true },
\"model.emailfield\":{ email: true }, \"model.nonemptyemailfield\":{ required:
true , email: true }, \"model.firstvalue\":{ digits: true },
\"model.secondvalue\":{ lesserThan: \"#model_FirstValue\" },
\"model.thirdvalue\":{ digits: true }, \"model.forthvalue\":{ greaterThan:
\"#model_ThirdValue\" }, \"model.groupvalue1\":{ requiredmygroup1: true },
\"model.groupvalue2\":{ requiredmygroup1: true }, \"model.groupvalue3\":{
requiredmygroup2: true }, \"model.groupvalue4\":{ requiredmygroup2: true },
\"model.city\":{ required: true }, \"model.country.id\":{ required: true }},
messages:{\"model.nonemptyfield\":{ required: \"This is a required field\" },
\"model.emailfield\":{ email: \"Email doesnt look right\" },
\"model.nonemptyemailfield\":{ required: \"This is a required field\" , email:
\"Please enter a valid email address. For example [EMAIL PROTECTED]" },
\"model.firstvalue\":{ digits: \"Please enter a valid integer in this field\"
}, \"model.secondvalue\":{ lesserThan: \"This field value must be lesser than
the other field value.\" }, \"model.thirdvalue\":{ digits: \"Please enter a
valid integer in this field\" }, \"model.forthvalue\":{ greaterThan: \"This
field value must be greater than the other field value.\" },
\"model.groupvalue1\":{ requiredmygroup1: \"At least one of the values should
not be empty\" }, \"model.groupvalue2\":{ requiredmygroup1: \"At least one of
the values should not be empty\" }, \"model.groupvalue3\":{ requiredmygroup2:
\"At least one of the values should not be empty\" }, \"model.groupvalue4\":{
requiredmygroup2: \"At least one of the values should not be empty\" },
\"model.city\":{ required: \"This is a required field\" },
\"model.country.id\":{ required: \"This is a required field\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_groupvalue1\").val()!='' || $(\"#model_groupvalue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_groupvalue3\").val()!='' || $(\"#model_groupvalue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>"
+ , helper.EndFormTag());
+ }
+
+ [Test]
+ public void FullValidationNotUsingScopes()
+ {
+ helper.FormTag(DictHelper.Create("noaction=true"));
+
+ helper.TextField("model.nonemptyfield");
+ helper.TextField("model.emailfield");
+ helper.TextField("model.nonemptyemailfield");
+ helper.TextField("model.firstvalue");
+ helper.TextField("model.secondvalue");
+ helper.TextField("model.thirdvalue");
+ helper.TextField("model.forthvalue");
+ helper.TextField("model.groupvalue1");
+ helper.TextField("model.groupvalue2");
+ helper.TextField("model.groupvalue3");
+ helper.TextField("model.groupvalue4");
+ helper.Select("model.city", new string[] {"Sao Paulo",
"Sao Carlos"}, DictHelper.Create("firstoption=---"));
+ helper.Select("model.country.id", new string[] {"1",
"2"}, DictHelper.Create("firstoption=---"));
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {groups:{mygroup1: \"model.groupvalue1
model.groupvalue2 \",\r\nmygroup2: \"model.groupvalue3 model.groupvalue4
\",\r\n}, rules:{\"model.nonemptyfield\":{ required: true },
\"model.emailfield\":{ email: true }, \"model.nonemptyemailfield\":{ required:
true , email: true }, \"model.firstvalue\":{ digits: true },
\"model.secondvalue\":{ lesserThan: \"#model_FirstValue\" },
\"model.thirdvalue\":{ digits: true }, \"model.forthvalue\":{ greaterThan:
\"#model_ThirdValue\" }, \"model.groupvalue1\":{ requiredmygroup1: true },
\"model.groupvalue2\":{ requiredmygroup1: true }, \"model.groupvalue3\":{
requiredmygroup2: true }, \"model.groupvalue4\":{ requiredmygroup2: true },
\"model.city\":{ required: true }, \"model.country.id\":{ required: true }},
messages:{\"model.nonemptyfield\":{ required: \"This is a required field\" },
\"model.emailfield\":{ email: \"Email doesnt look right\" },
\"model.nonemptyemailfield\":{ required: \"This is a required field\" , email:
\"Please enter a valid email address. For example [EMAIL PROTECTED]" },
\"model.firstvalue\":{ digits: \"Please enter a valid integer in this field\"
}, \"model.secondvalue\":{ lesserThan: \"This field value must be lesser than
the other field value.\" }, \"model.thirdvalue\":{ digits: \"Please enter a
valid integer in this field\" }, \"model.forthvalue\":{ greaterThan: \"This
field value must be greater than the other field value.\" },
\"model.groupvalue1\":{ requiredmygroup1: \"At least one of the values should
not be empty\" }, \"model.groupvalue2\":{ requiredmygroup1: \"At least one of
the values should not be empty\" }, \"model.groupvalue3\":{ requiredmygroup2:
\"At least one of the values should not be empty\" }, \"model.groupvalue4\":{
requiredmygroup2: \"At least one of the values should not be empty\" },
\"model.city\":{ required: \"This is a required field\" },
\"model.country.id\":{ required: \"This is a required field\" }}}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_groupvalue1\").val()!='' || $(\"#model_groupvalue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_groupvalue3\").val()!='' || $(\"#model_groupvalue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>"
+ , helper.EndFormTag());
+ }
+
+ [Test]
public void TestIsAjaxOption()
{
- helper.FormTag( DictHelper.CreateN( "isAjax", true ).N(
"noaction", true ) );
+ helper.FormTag(DictHelper.CreateN("isAjax",
true).N("noaction", true));
- Assert.AreEqual( "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {submitHandler:function( form ) { jQuery( form
).ajaxSubmit(); }} );\r\njQuery.validator.addMethod('notEqualTo',
function(value, element, param) { return value != jQuery(param).val(); }, 'Must
not be equal to {0}.' );\r\njQuery.validator.addMethod('greaterThan',
function(value, element, param) { return ( IsNaN( value ) && IsNaN(
jQuery(param).val() ) ) || ( value > jQuery(param).val() ); }, 'Must be greater
than {0}.' );\r\njQuery.validator.addMethod('lesserThan', function(value,
element, param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) ||
( value < jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>", helper.EndFormTag() );
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {submitHandler:function( form ) { jQuery( form
).ajaxSubmit(); }} );\r\njQuery.validator.addMethod('notEqualTo',
function(value, element, param) { return value != jQuery(param).val(); }, 'Must
not be equal to {0}.' );\r\njQuery.validator.addMethod('greaterThan',
function(value, element, param) { return ( IsNaN( value ) && IsNaN(
jQuery(param).val() ) ) || ( value > jQuery(param).val() ); }, 'Must be greater
than {0}.' );\r\njQuery.validator.addMethod('lesserThan', function(value,
element, param) { return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) ||
( value < jQuery(param).val() ); }, 'Must be lesser than {0}.' );
});</script>\r\n</form>",
+ helper.EndFormTag());
}
+
+ [Test]
+ public void TestIsAjaxOptionAndValidation()
+ {
+ helper.FormTag(DictHelper.CreateN("isAjax",
true).N("noaction", true));
+ helper.Push("model");
+
+ helper.TextField("NonEmptyField");
+ helper.TextField("EmailField");
+ helper.TextField("NonEmptyEmailField");
+ helper.TextField("FirstValue");
+ helper.TextField("SecondValue");
+ helper.TextField("ThirdValue");
+ helper.TextField("ForthValue");
+ helper.TextField("GroupValue1");
+ helper.TextField("GroupValue2");
+ helper.TextField("GroupValue3");
+ helper.TextField("GroupValue4");
+ helper.Select("City", new string[] {"Sao Paulo", "Sao
Carlos"}, DictHelper.Create("firstoption=---"));
+ helper.Select("Country.Id", new string[] {"1", "2"},
DictHelper.Create("firstoption=---"));
+
+ helper.Pop();
+
+ Assert.AreEqual(
+ "\r\n<script
type=\"text/javascript\">\r\njQuery( document ).ready( function() {
jQuery(\"#form1\").validate( {messages:{\"model.NonEmptyField\":{ required:
\"This is a required field\" }, \"model.EmailField\":{ email: \"Email doesnt
look right\" }, \"model.NonEmptyEmailField\":{ required: \"This is a required
field\" , email: \"Please enter a valid email address. For example [EMAIL
PROTECTED]" }, \"model.FirstValue\":{ digits: \"Please enter a valid integer in
this field\" }, \"model.SecondValue\":{ lesserThan: \"This field value must be
lesser than the other field value.\" }, \"model.ThirdValue\":{ digits: \"Please
enter a valid integer in this field\" }, \"model.ForthValue\":{ greaterThan:
\"This field value must be greater than the other field value.\" },
\"model.GroupValue1\":{ requiredmygroup1: \"At least one of the values should
not be empty\" }, \"model.GroupValue2\":{ requiredmygroup1: \"At least one of
the values should not be empty\" }, \"model.GroupValue3\":{ requiredmygroup2:
\"At least one of the values should not be empty\" }, \"model.GroupValue4\":{
requiredmygroup2: \"At least one of the values should not be empty\" },
\"model.City\":{ required: \"This is a required field\" },
\"model.Country.Id\":{ required: \"This is a required field\" }},
groups:{mygroup1: \"model.GroupValue1 model.GroupValue2 \",\r\nmygroup2:
\"model.GroupValue3 model.GroupValue4 \",\r\n},
rules:{\"model.NonEmptyField\":{ required: true }, \"model.EmailField\":{
email: true }, \"model.NonEmptyEmailField\":{ required: true , email: true },
\"model.FirstValue\":{ digits: true }, \"model.SecondValue\":{ lesserThan:
\"#model_FirstValue\" }, \"model.ThirdValue\":{ digits: true },
\"model.ForthValue\":{ greaterThan: \"#model_ThirdValue\" },
\"model.GroupValue1\":{ requiredmygroup1: true }, \"model.GroupValue2\":{
requiredmygroup1: true }, \"model.GroupValue3\":{ requiredmygroup2: true },
\"model.GroupValue4\":{ requiredmygroup2: true }, \"model.City\":{ required:
true }, \"model.Country.Id\":{ required: true }}, submitHandler:function( form
) { jQuery( form ).ajaxSubmit(); }}
);\r\njQuery.validator.addMethod('notEqualTo', function(value, element, param)
{ return value != jQuery(param).val(); }, 'Must not be equal to {0}.'
);\r\njQuery.validator.addMethod('greaterThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value >
jQuery(param).val() ); }, 'Must be greater than {0}.'
);\r\njQuery.validator.addMethod('lesserThan', function(value, element, param)
{ return ( IsNaN( value ) && IsNaN( jQuery(param).val() ) ) || ( value <
jQuery(param).val() ); }, 'Must be lesser than {0}.'
);\r\njQuery.validator.addMethod('mygroup1', function() {
if($(\"#model_GroupValue1\").val()!='' || $(\"#model_GroupValue2\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addMethod('mygroup2', function() {
if($(\"#model_GroupValue3\").val()!='' || $(\"#model_GroupValue4\").val()!='')
{ return true } else { return false; } }, 'At least one of the values should
not be empty' );\r\njQuery.validator.addClassRules({requiredmygroup1:
{mygroup1:true}});\r\njQuery.validator.addClassRules({requiredmygroup2:
{mygroup2:true}}); });</script>\r\n</form>",
+ helper.EndFormTag());
+ }
}
Directory: /trunk/MonoRail/Castle.MonoRail.Framework.Tests/Helpers/Validations/
===============================================================================
File [modified]: JQueryFormValidationTestCase.cs
Delta lines: +0 -0
===================================================================
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Castle Project Commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/castle-project-commits?hl=en
-~----------~----~----~----~------~----~------~--~---