public void It_can_handle_binary_attributes_with_dashes_in_the_name() { // Arrange var bindingDescription = new BindingDescription { DisplayName = "Reference Attrbute", Description = "A standard reference attribute", Required = true, BoundAttributeType = new AttributeTypeDescription { Multivalued = false, DataType = "Binary", DisplayName = "Doesn't matter", Description = "Doesn't matter", Name = "Property-Name" }, }; var it = new IdmCodeGenerator(null); // Act Tuple<string, string> result = it.GenerateAPropertyAndItsTests(bindingDescription); // Assert ExAssert.AreEqual(TestData.BinaryAttributeWithDash, result.Item1); ExAssert.AreEqual(TestData.BinaryAttributeWithDashTests, result.Item2); }
public void It_can_handle_attributes_with_dashes_in_the_name() { // Arrange var bindingDescription = new BindingDescription { DisplayName = "First Choice for Summary Part I", Description = "First Choice for Summary Part II", Required = true, StringRegex = "abc", BoundAttributeType = new AttributeTypeDescription { Multivalued = false, DataType = "String", DisplayName = "Second Choice for Summary Part I", Description = "Second Choice for Summary Part II", Name = "Property-Name", }, }; var it = new IdmCodeGenerator(null); // Act Tuple<string, string> result = it.GenerateAPropertyAndItsTests(bindingDescription); // Assert ExAssert.AreEqual(TestData.StringAttributeWithDashInName, result.Item1); ExAssert.AreEqual(TestData.StringAttributeWithDashInNameTests, result.Item2); }
public Tuple<string, string> GenerateAPropertyAndItsTests(BindingDescription bindingDescription) { var propertyAndTests = bindingDescription.BoundAttributeType.Multivalued ? GenerateMultiValuedPropertyAndTests(bindingDescription) : GenerateSingleValuedPropertyAndTests(bindingDescription); return propertyAndTests; }
private bool IsObjectTypeSameAsAttributeName(BindingDescription bindingDescription) { return _objectTypeNames != null && _objectTypeNames.Contains(bindingDescription.BoundAttributeType.Name); }
private string GetObjectTypeFromJson(BindingDescription bindingDescription, string returnVal) { if (returnVal == null) throw new ArgumentNullException(nameof(returnVal)); returnVal = (from r in _referenceMap where r.AttrName == bindingDescription.BoundAttributeType.Name select r.ObjType).First(); return returnVal; }
private string GenerateSingleValuedReferenceTests(BindingDescription bindingDescription) { var tests = string.Format(Templates.SingleValuedReferenceFormatTests, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), GetObjTypeName(bindingDescription)); return tests; }
private string GenerateMultiValuedValueTests(BindingDescription bindingDescription) { var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name); var testValueString = GetTestValueString(bindingDescription); var nullTest = GetNullTestMultivaluedValue(bindingDescription, validCSharpIdentifier, testValueString); var minTest = GetMinTest(bindingDescription, testValueString, validCSharpIdentifier, Templates.MinTestMultivalued); var maxTest = GetMaxTest(bindingDescription, testValueString, validCSharpIdentifier, Templates.MaxTestMultivalued); return string.Format(Templates.MultiValuedValueFormatTests, validCSharpIdentifier, testValueString, nullTest, minTest + maxTest); }
private string GenerateMultiValuedStringTests(BindingDescription bindingDescription) { var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name); string nullTest = bindingDescription.Required == true ? "" : string.Format(Templates.MultiValuedStringFormatNullTests, validCSharpIdentifier); return string.Format(Templates.MultiValuedStringFormatTests, validCSharpIdentifier, nullTest); }
private static string GetDisplayName(BindingDescription bindingDescription) { return bindingDescription.DisplayName ?? bindingDescription.BoundAttributeType.DisplayName; }
private static string GetDescription(BindingDescription bindingDescription) { return bindingDescription.Description ?? bindingDescription.BoundAttributeType.Description; }
private static string GenerateSingleValuedValue(BindingDescription bindingDescription) { string conversionMethodString; string typeString = bindingDescription.BoundAttributeType.DataType == "Boolean" ? "bool" : "int"; if (bindingDescription.Required == false) { typeString += '?'; conversionMethodString = bindingDescription.BoundAttributeType.DataType == "Boolean" ? "AttrToNullableBool" : "AttrToNullableInteger"; } else { conversionMethodString = bindingDescription.BoundAttributeType.DataType == "Boolean" ? "AttrToBool" : "AttrToInteger"; } var minMax = GetMinMax(bindingDescription); var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name); var propertyCode = string.Format(Templates.SingleValuedValueFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), GetRequired(bindingDescription), bindingDescription.BoundAttributeType.Name, typeString, validCSharpIdentifier, conversionMethodString, minMax); return propertyCode; }
private static string GenerateSingleValuedStringTests(BindingDescription bindingDescription) { var nonMatchTest = ""; var val = "A string"; if (!string.IsNullOrEmpty(bindingDescription.StringRegex)) { var xeger = new Xeger(bindingDescription.StringRegex); val = xeger.Generate(); var nonMatch = @"flkj3332@!!!$ fd333 "; nonMatchTest = string.Format(Templates.NonMatchTest, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), nonMatch); } string tests = string.Format(Templates.SingleValuedStringFormatTests, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), val, nonMatchTest); return tests; }
private static string GenerateSingleValuedDateTimeTests(BindingDescription bindingDescription) { var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name); string nullTest = bindingDescription.Required == true ? "" : string.Format(Templates.SingleValuedDateTimeNullTestFormat, validCSharpIdentifier); var tests = string.Format( Templates.SingleValuedDateTimeFormatTests, validCSharpIdentifier, nullTest); return tests; }
private static string GenerateSingleValuedDateTime(BindingDescription bindingDescription) { var property = string.Format(Templates.SingleValuedDateTimeFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), GetRequired(bindingDescription), bindingDescription.BoundAttributeType.Name, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), bindingDescription.Required == true ? "" : "?", bindingDescription.Required == true ? "" : "Nullable" ); return property; }
private static string GenerateSingleValuedBinary(BindingDescription bindingDescription) { var property = string.Format(Templates.SingleValuedBinaryFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), GetRequired(bindingDescription), bindingDescription.BoundAttributeType.Name, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name)); return property; }
private string GenerateMultiValuedReference(BindingDescription bindingDescription) { return string.Format(Templates.MultiValuedReferenceFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), bindingDescription.BoundAttributeType.Name, GetObjTypeName(bindingDescription), GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name)); }
private string GenerateMultiValuedString(BindingDescription bindingDescription) { return string.Format(Templates.MultiValuedStringFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), GetRequired(bindingDescription), bindingDescription.BoundAttributeType.Name, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), GetRegEx(bindingDescription)); }
private static string GetMinMax(BindingDescription bindingDescription) { var minMax = ""; var min = bindingDescription.IntegerMinimum; var max = bindingDescription.IntegerMaximum; if (min != null) { if (bindingDescription.BoundAttributeType.Multivalued) { var format = @"if (value.Any( v => v < {0})) throw new ArgumentException(""One or more invalid values for {1}. Minimum value for each is {0}""); "; minMax += string.Format(format, min, bindingDescription.BoundAttributeType.Name); } else { var format = @"if (value < {0}) throw new ArgumentException(""Invalid value for {1}. Minimum value is {0}""); "; minMax += string.Format(format, min, bindingDescription.BoundAttributeType.Name); } } if (max != null) { if (bindingDescription.BoundAttributeType.Multivalued) { var format = @"if (value.Any( v => v > {0})) throw new ArgumentException(""One or more invalid values for {1}. Maximum value for each is {0}""); "; minMax += string.Format(format, max, bindingDescription.BoundAttributeType.Name); } else { var format = @"if (value > {0}) throw new ArgumentException(""Invalid value for {1}. Maximum value is {0}""); "; minMax += string.Format(format, max, bindingDescription.BoundAttributeType.Name); } } return minMax; }
private string GenerateMultiValuedValue(BindingDescription bindingDescription) { var minMax = GetMinMax(bindingDescription); var propertyCode = string.Format(Templates.MultiValuedIntegerFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), GetRequired(bindingDescription), bindingDescription.BoundAttributeType.Name, GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name), minMax); return propertyCode; }
private static string GetMinTest(BindingDescription bindingDescription, string testValueString, string validCSharpIdentifier, string format) { string minTest = ""; if (testValueString != "true" && bindingDescription.IntegerMinimum != null) { minTest = string.Format(format, validCSharpIdentifier, bindingDescription.IntegerMinimum - 1); } return minTest; }
private string GenerateSingleValuedReference(BindingDescription bindingDescription) { var property = string.Format(Templates.SingleValuedReferenceFormat, GetDisplayName(bindingDescription), GetDescription(bindingDescription), bindingDescription.BoundAttributeType.Name, GetObjTypeName(bindingDescription), GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name)); return property; }
private static string GetNullTestMultivaluedValue(BindingDescription bindingDescription, string validCSharpIdentifier, string testValueString) { string nullTest = bindingDescription.Required == true ? "" : string.Format(Templates.MultiValuedValueValueNullTestFormat, validCSharpIdentifier, testValueString); return nullTest; }
private string GetObjectTypeFromCustomSchemaJson(BindingDescription bindingDescription, string returnVal) { List<ReferenceToObjectTypeMap> otherMappings = JsonConvert.DeserializeObject<List<ReferenceToObjectTypeMap>>(_customSchemaJson); if (otherMappings.Any(r => r.AttrName == bindingDescription.BoundAttributeType.Name)) { returnVal = (from r in otherMappings where r.AttrName == bindingDescription.BoundAttributeType.Name select r.ObjType).First(); } return returnVal; }
private static string GetRegEx(BindingDescription bindingDescription) { var regEx = ""; if (!string.IsNullOrEmpty(bindingDescription.StringRegex)) { if (bindingDescription.BoundAttributeType.Multivalued) { var regExFormat = @"var regEx = new RegEx(""{0}""); if (value.Any(x => !regEx.IsMatch(x)) throw new ArgumentException(""One or more invalid values for {1}. Each value must match regular expression '{0}'""); "; regEx = string.Format(regExFormat, bindingDescription.StringRegex, bindingDescription.BoundAttributeType.Name); } else { var regExFormat = @"var regEx = new RegEx(""{0}""); if (!regEx.IsMatch(value)) throw new ArgumentException(""Invalid value for {1}. Must match regular expression '{0}'""); "; regEx = string.Format(regExFormat, bindingDescription.StringRegex, bindingDescription.BoundAttributeType.Name); } } return regEx; }
private string GetObjTypeName(BindingDescription bindingDescription) { string returnVal = "IdmResource"; if (IsObjectTypeSameAsAttributeName(bindingDescription)) { returnVal = bindingDescription.BoundAttributeType.Name; } else if (IsObjectTypeListedInJsonFile(bindingDescription)) { returnVal = GetObjectTypeFromJson(bindingDescription, returnVal); } else if (!string.IsNullOrWhiteSpace(_customSchemaJson)) { returnVal = GetObjectTypeFromCustomSchemaJson(bindingDescription, returnVal); } return GetValidCSharpIdentifier(returnVal); }
private static string GetRequired(BindingDescription bindingDescription) { var required = ""; if (bindingDescription.Required == true) required = $"[Required]{Environment.NewLine} "; return required; }
private bool IsObjectTypeListedInJsonFile(BindingDescription bindingDescription) { return _referenceMap != null && _referenceMap.Any(r => r.AttrName == bindingDescription.BoundAttributeType.Name); }
private static string GetTestValueString(BindingDescription bindingDescription) { string testValueString = bindingDescription.BoundAttributeType.DataType == "Boolean" ? "true" : "123"; if (testValueString != "true" && bindingDescription.IntegerMinimum != null) testValueString = bindingDescription.IntegerMinimum.ToString(); if (testValueString != "true" && bindingDescription.IntegerMaximum != null) testValueString = bindingDescription.IntegerMaximum.ToString(); return testValueString; }
public Tuple<string, string> GenerateSingleValuedPropertyAndTests(BindingDescription bindingDescription) { string property; string tests; switch (bindingDescription.BoundAttributeType.DataType) { case "String": case "Text": property = GenerateASingleValuedString(bindingDescription); tests = GenerateSingleValuedStringTests(bindingDescription); break; case "Boolean": case "Integer": property = GenerateSingleValuedValue(bindingDescription); tests = GenerateSingleValuedValueTests(bindingDescription); break; case "Reference": property = GenerateSingleValuedReference(bindingDescription); tests = GenerateSingleValuedReferenceTests(bindingDescription); break; case "DateTime": property = GenerateSingleValuedDateTime(bindingDescription); tests = GenerateSingleValuedDateTimeTests(bindingDescription); break; case "Binary": property = GenerateSingleValuedBinary(bindingDescription); tests = GenerateSingleValuedBinaryTests(bindingDescription); break; default: throw new ApplicationException(); } return new Tuple<string, string>(property, tests); }
private string GenerateMultiValuedDateTimeTests(BindingDescription bindingDescription) { var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name); var nullTest = GetNullTestMultivaluedDateTime(bindingDescription, validCSharpIdentifier); return string.Format(Templates.MultiValuedDateTimeFormatTests, validCSharpIdentifier, nullTest); }