using System;
using Util.Domain.Biz.Enums;
using Util.Ui.Expressions;
using Util.Ui.Tests.Samples;
using Xunit;
namespace Util.Ui.Tests.Expressions {
///
/// 表达式解析器测试
///
public class ExpressionResolverTest {
///
/// 表达式解析器
///
private readonly ExpressionResolver _resolver;
///
/// 测试初始化
///
public ExpressionResolverTest() {
_resolver = new ExpressionResolver();
}
///
/// 测试解析模型类型
///
[Fact]
public void TestResolve_ModelType() {
var expression = ModelExpressionHelper.Create( "Code",t => t.Code );
var result = _resolver.Resolve( expression );
Assert.Equal( "System.String", result.ModelType?.FullName );
}
///
/// 测试解析原始属性名
///
[Fact]
public void TestResolve_OriginalPropertyName() {
var expression = ModelExpressionHelper.Create( "a" );
var result = _resolver.Resolve( expression );
Assert.Equal( "a", result.OriginalPropertyName );
}
///
/// 测试解析属性名
///
[Fact]
public void TestResolve_PropertyName_1() {
var expression = ModelExpressionHelper.Create( "a" );
var result = _resolver.Resolve( expression );
Assert.Equal( "a", result.PropertyName );
}
///
/// 测试解析属性名 - 修正为首字母小写
///
[Fact]
public void TestResolve_PropertyName_2() {
var expression = ModelExpressionHelper.Create( "CustomerName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "customerName", result.PropertyName );
}
///
/// 测试解析属性名 - 2级对象
///
[Fact]
public void TestResolve_PropertyName_3() {
var expression = ModelExpressionHelper.Create( "Customer.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "customer.userName", result.PropertyName );
}
///
/// 测试解析属性名 - 3级对象
///
[Fact]
public void TestResolve_PropertyName_4() {
var expression = ModelExpressionHelper.Create( "Employee.Department.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "employee.department.userName", result.PropertyName );
}
///
/// 测试解析属性名 - 修正缩写大小写
///
[Fact]
public void TestResolve_PropertyName_5() {
var expression = ModelExpressionHelper.Create( "UIName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "uiName", result.PropertyName );
}
///
/// 测试解析最后一级属性名
///
[Fact]
public void TestResolve_LastPropertyName_1() {
var expression = ModelExpressionHelper.Create( "Code",t => t.Code );
var result = _resolver.Resolve( expression );
Assert.Equal( "code", result.LastPropertyName );
}
///
/// 测试解析最后一级属性名 - 2级对象
///
[Fact]
public void TestResolve_LastPropertyName_2() {
var expression = ModelExpressionHelper.Create( "Employee.Name", t => t.Employee.Name );
var result = _resolver.Resolve( expression );
Assert.Equal( "name", result.LastPropertyName );
}
///
/// 测试解析安全属性名
///
[Fact]
public void TestResolve_GetSafePropertyName_1() {
var expression = ModelExpressionHelper.Create( "CustomerName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.customerName", result.GetSafePropertyName() );
}
///
/// 测试解析安全属性名 - 2级对象
///
[Fact]
public void TestResolve_GetSafePropertyName_2() {
var expression = ModelExpressionHelper.Create( "Customer.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "a.customer&&a.customer.userName", result.GetSafePropertyName("a") );
}
///
/// 测试解析安全属性名 - 3级对象
///
[Fact]
public void TestResolve_GetSafePropertyName_3() {
var expression = ModelExpressionHelper.Create( "Employee.Department.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.employee&&model.employee.department&&model.employee.department.userName", result.GetSafePropertyName() );
}
///
/// 测试解析安全属性名 - 4级对象
///
[Fact]
public void TestResolve_GetSafePropertyName_4() {
var expression = ModelExpressionHelper.Create( "Employee.Department.Customer.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.employee&&model.employee.department&&model.employee.department.customer&&model.employee.department.customer.userName", result.GetSafePropertyName() );
}
///
/// 测试解析安全属性名 - 转换名称大小写
///
[Fact]
public void TestResolve_GetSafePropertyName_5() {
var expression = ModelExpressionHelper.Create( "UIName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.uiName", result.GetSafePropertyName() );
}
///
/// 测试安全属性名
///
[Fact]
public void TestResolve_SafePropertyName_1() {
var expression = ModelExpressionHelper.Create( "CustomerName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.customerName", result.SafePropertyName );
}
///
/// 测试安全属性名- 2级对象
///
[Fact]
public void TestResolve_SafePropertyName_2() {
var expression = ModelExpressionHelper.Create( "Customer.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model.customer&&model.customer.userName", result.SafePropertyName );
}
///
/// 测试安全属性名- 设置模型名称
///
[Fact]
public void TestResolve_SafePropertyName_3() {
var expression = ModelExpressionHelper.Create( "Customer.UserName" );
var result = _resolver.Resolve( expression );
Assert.Equal( "employee.customer&&employee.customer.userName", result.SafePropertyName );
}
///
/// 测试解析模型名称 - 未设置ModelAttribute
///
[Fact]
public void TestResolve_ModelName_1() {
var expression = ModelExpressionHelper.Create( "a" );
var result = _resolver.Resolve( expression );
Assert.Equal( "model", result.ModelName );
}
///
/// 测试解析模型名称 - 设置ModelAttribute
///
[Fact]
public void TestResolve_ModelName_2() {
var expression = ModelExpressionHelper.Create( "a" );
var result = _resolver.Resolve( expression );
Assert.Equal( "employee", result.ModelName );
}
///
/// 测试解析显示名称
///
[Fact]
public void TestResolve_DisplayName_1() {
var expression = ModelExpressionHelper.Create( "a",t => t.Code );
var result = _resolver.Resolve( expression );
Assert.Equal( "编码", result.DisplayName );
}
///
/// 测试解析是否密码类型
///
[Fact]
public void TestResolve_IsPassword() {
var expression = ModelExpressionHelper.Create( "a", t => t.Password );
var result = _resolver.Resolve( expression );
Assert.True( result.IsPassword );
}
///
/// 测试解析是否布尔类型
///
[Fact]
public void TestResolve_IsBool() {
var expression = ModelExpressionHelper.Create( "a", t => t.Enabled );
var result = _resolver.Resolve( expression );
Assert.True( result.IsBool );
}
///
/// 测试解析是否枚举类型
///
[Fact]
public void TestResolve_IsEnum() {
var expression = ModelExpressionHelper.Create( "a", t => t.Gender );
var result = _resolver.Resolve( expression );
Assert.True( result.IsEnum );
}
///
/// 测试解析是否日期类型
///
[Fact]
public void TestResolve_IsDate() {
var expression = ModelExpressionHelper.Create( "a", t => t.Birthday );
var result = _resolver.Resolve( expression );
Assert.True( result.IsDate );
}
///
/// 测试解析是否整型
///
[Fact]
public void TestResolve_IsInt() {
var expression = ModelExpressionHelper.Create( "a", t => t.Tel );
var result = _resolver.Resolve( expression );
Assert.True( result.IsInt );
}
///
/// 测试解析是否数值类型
///
[Fact]
public void TestResolve_IsNumber() {
var expression = ModelExpressionHelper.Create( "a", t => t.Age );
var result = _resolver.Resolve( expression );
Assert.True( result.IsNumber );
}
///
/// 测试解析是否必填项
///
[Fact]
public void TestResolve_IsRequired_1() {
var expression = ModelExpressionHelper.Create( "a", t => t.Code );
var result = _resolver.Resolve( expression );
Assert.True( result.IsRequired );
Assert.Equal( "编码不能是空值", result.RequiredMessage );
}
///
/// 测试解析是否必填项
///
[Fact]
public void TestResolve_IsRequired_2() {
var expression = ModelExpressionHelper.Create( "a", t => t.Name );
var result = _resolver.Resolve( expression );
Assert.False( result.IsRequired );
Assert.Null( result.RequiredMessage );
}
///
/// 测试解析StringLengthAttribute特性
///
[Fact]
public void TestResolve_StringLength() {
var expression = ModelExpressionHelper.Create( "a", t => t.Code );
var result = _resolver.Resolve( expression );
Assert.Equal( 50,result.MaxLength );
Assert.Equal( 5, result.MinLength );
Assert.Equal( "编码不能超过50位,也不能小于5位", result.MaxLengthMessage );
Assert.Equal( "编码不能超过50位,也不能小于5位", result.MinLengthMessage );
}
///
/// 测试解析MaxLengthAttribute特性
///
[Fact]
public void TestResolve_MaxLength() {
var expression = ModelExpressionHelper.Create( "a", t => t.Name );
var result = _resolver.Resolve( expression );
Assert.Equal( 200, result.MaxLength );
Assert.Equal( "姓名不能超过200位", result.MaxLengthMessage );
}
///
/// 测试解析MinLengthAttribute特性
///
[Fact]
public void TestResolve_MinLength() {
var expression = ModelExpressionHelper.Create( "a", t => t.Name );
var result = _resolver.Resolve( expression );
Assert.Equal( 2, result.MinLength );
Assert.Equal( "姓名不能少于2位", result.MinLengthMessage );
}
///
/// 测试解析RangeAttribute特性
///
[Fact]
public void TestResolve_Range() {
var expression = ModelExpressionHelper.Create( "a", t => t.Age );
var result = _resolver.Resolve( expression );
Assert.Equal( 1.1, result.Min );
Assert.Equal( "年龄从1.1到99.99", result.MinMessage );
Assert.Equal( 99.99, result.Max );
Assert.Equal( "年龄从1.1到99.99", result.MaxMessage );
}
///
/// 测试解析EmailAddressAttribute特性
///
[Fact]
public void TestResolve_Email() {
var expression = ModelExpressionHelper.Create( "a", t => t.Email );
var result = _resolver.Resolve( expression );
Assert.True( result.IsEmail );
Assert.Equal( "电子邮件无效", result.EmailMessage );
}
///
/// 测试解析PhoneAttribute特性
///
[Fact]
public void TestResolve_Phone() {
var expression = ModelExpressionHelper.Create( "a", t => t.Phone );
var result = _resolver.Resolve( expression );
Assert.True( result.IsPhone );
Assert.Equal( "手机号无效", result.PhoneMessage );
}
///
/// 测试解析IdCardAttribute特性
///
[Fact]
public void TestResolve_IdCard() {
var expression = ModelExpressionHelper.Create( "a", t => t.IdCard );
var result = _resolver.Resolve( expression );
Assert.True( result.IsIdCard );
Assert.Equal( "身份证无效", result.IdCardMessage );
}
///
/// 测试解析UrlAttribute特性
///
[Fact]
public void TestResolve_Url() {
var expression = ModelExpressionHelper.Create( "a", t => t.Url );
var result = _resolver.Resolve( expression );
Assert.True( result.IsUrl );
Assert.Equal( "网址无效", result.UrlMessage );
}
///
/// 测试解析RegularExpressionAttribute特性
///
[Fact]
public void TestResolve_RegularExpression() {
var expression = ModelExpressionHelper.Create( "a", t => t.Regular );
var result = _resolver.Resolve( expression );
Assert.True( result.IsRegularExpression );
Assert.Equal( "a", result.Pattern );
Assert.Equal( "正则表达式无效", result.RegularExpressionMessage );
}
}
}