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);
        }
Ejemplo n.º 3
0
        public Tuple<string, string> GenerateAPropertyAndItsTests(BindingDescription bindingDescription)
        {
            var propertyAndTests = bindingDescription.BoundAttributeType.Multivalued
                ? GenerateMultiValuedPropertyAndTests(bindingDescription)
                : GenerateSingleValuedPropertyAndTests(bindingDescription);

            return propertyAndTests;
        }
Ejemplo n.º 4
0
 private bool IsObjectTypeSameAsAttributeName(BindingDescription bindingDescription)
 {
     return _objectTypeNames != null && _objectTypeNames.Contains(bindingDescription.BoundAttributeType.Name);
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
 private string GenerateSingleValuedReferenceTests(BindingDescription bindingDescription)
 {
     var tests = string.Format(Templates.SingleValuedReferenceFormatTests,
         GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name),
         GetObjTypeName(bindingDescription));
     return tests;
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 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);
 }
Ejemplo n.º 9
0
 private static string GetDisplayName(BindingDescription bindingDescription)
 {
     return bindingDescription.DisplayName ?? bindingDescription.BoundAttributeType.DisplayName;
 }
Ejemplo n.º 10
0
 private static string GetDescription(BindingDescription bindingDescription)
 {
     return bindingDescription.Description ?? bindingDescription.BoundAttributeType.Description;
 }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        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;
        }
Ejemplo n.º 13
0
 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;
 }
Ejemplo n.º 14
0
 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;
 }
Ejemplo n.º 15
0
 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;
 }
Ejemplo n.º 16
0
 private string GenerateMultiValuedReference(BindingDescription bindingDescription)
 {
     return string.Format(Templates.MultiValuedReferenceFormat,
         GetDisplayName(bindingDescription),
         GetDescription(bindingDescription),
         bindingDescription.BoundAttributeType.Name,
         GetObjTypeName(bindingDescription),
         GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name));
 }
Ejemplo n.º 17
0
 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));
 }
Ejemplo n.º 18
0
        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;
        }
Ejemplo n.º 19
0
 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;
 }
Ejemplo n.º 20
0
 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;
 }
Ejemplo n.º 21
0
 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;
 }
Ejemplo n.º 22
0
 private static string GetNullTestMultivaluedValue(BindingDescription bindingDescription, string validCSharpIdentifier,
     string testValueString)
 {
     string nullTest = bindingDescription.Required == true
         ? ""
         : string.Format(Templates.MultiValuedValueValueNullTestFormat,
             validCSharpIdentifier, testValueString);
     return nullTest;
 }
Ejemplo n.º 23
0
 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;
 }
Ejemplo n.º 24
0
        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;
        }
Ejemplo n.º 25
0
 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);
 }
Ejemplo n.º 26
0
 private static string GetRequired(BindingDescription bindingDescription)
 {
     var required = "";
     if (bindingDescription.Required == true)
         required = $"[Required]{Environment.NewLine}        ";
     return required;
 }
Ejemplo n.º 27
0
 private bool IsObjectTypeListedInJsonFile(BindingDescription bindingDescription)
 {
     return _referenceMap != null && _referenceMap.Any(r => r.AttrName == bindingDescription.BoundAttributeType.Name);
 }
Ejemplo n.º 28
0
 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;
 }
Ejemplo n.º 29
0
 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);
 }
Ejemplo n.º 30
0
        private string GenerateMultiValuedDateTimeTests(BindingDescription bindingDescription)
        {
            var validCSharpIdentifier = GetValidCSharpIdentifier(bindingDescription.BoundAttributeType.Name);
            var nullTest = GetNullTestMultivaluedDateTime(bindingDescription, validCSharpIdentifier);

            return string.Format(Templates.MultiValuedDateTimeFormatTests,
                validCSharpIdentifier,
                nullTest);
        }