public string Generate(ConcreteClass _concreteClass, List<Constraint> constraints) { var text = new StringBuilder(); var count = constraints.Count; for (var i = 0; i < count; i++) { var constraint = constraints[i]; var property = constraint.Property; if (constraint.ConcreteClassPropertyMapping != null) { var classes = constraint.ConcreteClassPropertyMapping.ConcreteClasses; var properties = constraint.ConcreteClassPropertyMapping.Properties; var @operator = constraint.Operators[0].Value; var assert = string.Empty; if (@operator.Contains("contains")) { var boolQualifier = @operator.ToLower() == "contains" ? "" : "!"; if (properties.Count() > 1 && properties[1].GetRelationQualifiedEnum() == RelationQualifiedEnum.LinqSubset) { assert = string.Format("{0}{1}.{2}.Any(x => x.{3} == {4}.{3})", boolQualifier, classes[0].Instance.Value, properties[0].Name, properties[1].Name, classes[1].Instance.Value); } else { assert = string.Format("{0}{1}.{2}.Contains({3})", boolQualifier, classes[0].Instance.Value, properties[0].Name, classes[1].Instance.Value); } } else { assert = string.Format("{0}.{1} {2} {3}.{4}", classes[0].Instance.Value, properties[0].Name, @operator, classes[1].Instance.Value, properties[1].Name); } text.AppendLine(AssertText.Replace("##clause##", WriteAssertMessage(assert))); } else { GenerateSingleAssert(property, _concreteClass, text); } } return text.ToString(); }
private void GenerateSingleAssert(Property property, ConcreteClass _concreteClass, StringBuilder text) { if (string.IsNullOrEmpty(property.Relation)) { var assert = string.Empty; var assertBody = string.Empty; if (property.Count != null && property.Value == null) { var countValue = Int32.Parse(property.Count.Value); var countOperator = property.Count.Operators.Count > 0 ? property.Count.Operators[0].Value : "=="; assert = string.Format("{0}.{1}.Count {2} {3}", _concreteClass.Instance.Value, property.Name, countOperator, countValue); assertBody = AssertText.Replace("##clause##", WriteAssertMessage(assert)); } else if (RegexUtility.IsBool(property.Value)) { var value = Boolean.Parse(property.Value); var boolQualifier = value ? string.Empty : "!"; assert = string.Format("{0}{1}.{2}", boolQualifier, _concreteClass.Instance.Value, property.Name); assertBody = AssertText.Replace("##clause##", WriteAssertMessage(assert)); } else if (RegexUtility.IsDateTime(property.Value)) { var dtInstance = "dateTime" + InstanceIdentifier; var dateTimeStatement = new Dictionary<string, object> {{"instance", dtInstance}, {"value", property.Value}}. AsNVelocityTemplate(TemplateEnum.DateTimeVariable); text.AppendLine(dateTimeStatement); assert = string.Format("{0}.{1} {2} {3}", _concreteClass.Instance.Value, property.Name, property.Operators[0].Value, dtInstance); assertBody = AssertText.Replace("##clause##", WriteAssertMessage(assert)); InstanceIdentifier++; } else if (property.Operators[0].Value.Contains("contains")) { assertBody = AssertText.Replace("##clause##", WriteAssertMessage(GetContainsAssert(property.Operators[0].Value, _concreteClass, property))); } else { assert = string.Format("{0}.{1} {2} {3}", _concreteClass.Instance.Value, property.Name, property.Operators[0].Value, property.Value); assertBody = AssertText.Replace("##clause##", WriteAssertMessage(assert)); } text.AppendLine(assertBody); } }
private string GetContainsAssert(string @operator, ConcreteClass _concreteClass, Property property) { string assert; var boolQualifier = @operator.ToLower() == "contains" ? "" : "!"; assert = string.Format("{0}{1}.{2}.Contains({3})", boolQualifier, _concreteClass.Instance.Value, property.Name, property.Value); return assert; }
public Property() { ConcreteClass = new ConcreteClass(); Operators = new List<Operator>(); DefaultValue = new DefaultValue(); }