Exemple #1
0
        public void CodeGen_CustomAttrGen_AttributeType_Shared_Unknowable()
        {
            var logger = new ConsoleLogger();

            // Create a shared type service that says the entity's attribute is "unknowable" when asked whether it is shared
            var mockSts = new MockSharedCodeService(
                new Type[] { typeof(Mock_CG_Attr_Gen_Type) },
                new MethodBase[0],
                new string[0]);

            mockSts.AddUnknowableType(typeof(Mock_CG_Attr_Gen_TestAttribute));

            var generatedCode = TestHelper.GenerateCode("C#", new[] { typeof(Mock_CG_Attr_Gen_Entity) }, logger, mockSts);

            TestHelper.AssertNoErrorsOrWarnings(logger);

            var warningComment = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_RequiresShared_NoPDB,
                typeof(Mock_CG_Attr_Gen_TestAttribute),
                typeof(Mock_CG_Attr_Gen_TestAttribute).Assembly.GetName().Name,
                "MockProject");

            // CodeDom injects comments after line breaks
            warningComment = warningComment.Replace("\r\n ", "\r\n        // ");

            TestHelper.AssertGeneratedCodeContains(generatedCode, warningComment);
        }
Exemple #2
0
        public void CodeGen_CustomAttrGen_Attribute_References_Type_NotShared()
        {
            ConsoleLogger logger = new ConsoleLogger();


            // Create a shared type service that says the entity's attribute is "shared" when asked whether it is shared
            MockSharedCodeService mockSts = new MockSharedCodeService(
                new Type[] { typeof(Mock_CG_Attr_Gen_TestAttribute) },
                new MethodBase[0],
                new string[0]);

            // Explicitly make the typeof() ref in the attribute say it is unshared
            mockSts.AddUnsharedType(typeof(Mock_CG_Attr_Gen_Type));

            string generatedCode = TestHelper.GenerateCode("C#", new Type[] { typeof(Mock_CG_Attr_Gen_Entity) }, logger, mockSts);

            TestHelper.AssertNoErrorsOrWarnings(logger);

            string warningComment = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_RequiresShared,
                typeof(Mock_CG_Attr_Gen_TestAttribute),
                "MockProject");

            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Mock_CG_Attr_Gen_Test(typeof(global::Luma.SimpleEntity.Tests.Mock_CG_Attr_Gen_Type))]");
        }
Exemple #3
0
        public void CodeGen_CustomAttrGen_AttributeType_NotShared()
        {
            ConsoleLogger logger = new ConsoleLogger();

            // Create a shared type service that says the entity's attribute is "unshared" when asked whether it is shared
            MockSharedCodeService mockSts = new MockSharedCodeService(
                new Type[] { typeof(Mock_CG_Attr_Gen_Type) },
                new MethodBase[0],
                new string[0]);

            mockSts.AddUnsharedType(typeof(Mock_CG_Attr_Gen_TestAttribute));

            string generatedCode = TestHelper.GenerateCode("C#", new Type[] { typeof(Mock_CG_Attr_Gen_Entity) }, logger, mockSts);

            string expectedWarning = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_RequiresDataAnnotations,
                typeof(Mock_CG_Attr_Gen_TestAttribute),
                "MockProject");

            TestHelper.AssertContainsWarnings(logger, expectedWarning);

            string warningComment = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_RequiresShared,
                typeof(Mock_CG_Attr_Gen_TestAttribute),
                "MockProject");

            TestHelper.AssertGeneratedCodeContains(generatedCode, warningComment);
        }
        public void CodeGen_DictionaryProperty()
        {
            var logger        = new ConsoleLogger();
            var generatedCode = TestHelper.GenerateCode("C#", typeof(Mock_CG_Entity_DictionaryMember), logger);

            TestHelper.AssertGeneratedCodeContains(generatedCode, "public Dictionary<string, List<string>> DictionaryProperty");
        }
        public void CodeGen_Attribute_DisplayAttribute_Resourced_DifferentNamespace()
        {
            MockSharedCodeService sts = TestHelper.CreateCommonMockSharedCodeService();
            string generatedCode      = TestHelper.GenerateCodeAssertSuccess("C#", new Type[] { typeof(Mock_CG_DisplayAttr_Entity_Shared_ResourceType_DifferentNamespace) }, null, sts);

            TestHelper.AssertGeneratedCodeContains(generatedCode, @"[Display(Description=""Resource4"", Name=""Resource2"", Prompt=""Resource3"", ResourceType=typeof(Mock_CG_DisplayAttr_Shared_ResourceType_DifferentNamespace), ShortName=""Resource1"")]");
            TestHelper.AssertGeneratedCodeContains(generatedCode, @"[Display(Description=""Literal4"", Name=""Literal2"", Prompt=""Literal3"", ShortName=""Literal1"")]");
        }
        public void CodeGen_Attribute_StringLength_Fail_No_ResourceType()
        {
            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_StringLength_Missing_ResourceType));

            TestHelper.AssertGeneratedCodeContains(
                generatedCode,
                Resource.ClientCodeGen_Attribute_FailedToGenerate,
                string.Format(Resource.ClientCodeGen_ValidationAttribute_Requires_ResourceType_And_Name, typeof(StringLengthAttribute), "<unspecified>", "TheResource"));
        }
Exemple #7
0
        public void CodeGen_Attribute_UIHint_ControlParameters()
        {
            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_UIHint_ControlParameters));

            TestHelper.AssertGeneratedCodeContains(generatedCode,
                                                   @"[UIHint(""theUIHint"", ""thePresentationLayer"",",
                                                   @", ""key1"", 100",
                                                   @", ""key2"", ((double)(2D))"); // odd syntax reflect CodeDom workaround
        }
        public void CodeGen_Attribute_StringLength_Valid_ResourceType_And_Name()
        {
            MockSharedCodeService sts = TestHelper.CreateCommonMockSharedCodeService();

            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", new[] { typeof(Mock_CG_Attr_Entity_StringLength_Valid) }, null, sts);

            TestHelper.AssertGeneratedCodeContains(generatedCode,
                                                   "[StringLength(10, ErrorMessageResourceName=\"TheResource\", ErrorMessageResourceType=typeof(Mock_CG_Attr_Entity_StringLength_ResourceType))] " +
                                                   "public string StringProperty");
        }
        public void CodeGen_Attribute_StringLength_Fail_No_ResourceName()
        {
            var generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_StringLength_Missing_ResourceName));

            TestHelper.AssertGeneratedCodeContains(generatedCode,
                                                   " // " + Resource.ClientCodeGen_Attribute_FailedToGenerate +
                                                   " // " +
                                                   " // - " + string.Format(Resource.ClientCodeGen_ValidationAttribute_Requires_ResourceType_And_Name, typeof(StringLengthAttribute), "Mock_CG_Attr_Entity_StringLength_ResourceType", "<unspecified>") +
                                                   " // [StringLengthAttribute(10, ErrorMessageResourceType = typeof(Luma.SimpleEntity.Tests.Mock_CG_Attr_Entity_StringLength_ResourceType))]" +
                                                   " // ");
        }
        public void CodeGen_Attribute_StringLength_Invalid_PropertyName()
        {
            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_StringLength_Invalid_PropertyName));

            TestHelper.AssertGeneratedCodeContains(generatedCode,
                                                   " // " + Resource.ClientCodeGen_Attribute_FailedToGenerate +
                                                   " // " +
                                                   " // - " + string.Format(Resource.ClientCodeGen_ValidationAttribute_ResourcePropertyNotFound, typeof(StringLengthAttribute), "InvalidPropertyName", typeof(Mock_CG_Attr_Entity_StringLength_ResourceType)) +
                                                   " // [StringLengthAttribute(10, ErrorMessageResourceName = \"InvalidPropertyName\", ErrorMessageResourceType = typeof(Luma.SimpleEntity.Tests.Mock_CG_Attr_Entity_StringLength_ResourceType))]" +
                                                   " // [DataMember()] public string StringProperty");
        }
Exemple #11
0
        public void CodeGen_Attribute_UIHint_ControlParameters_Fail_Odd_Count()
        {
            UnitTestHelper.EnsureEnglish();
            var    logger        = new ConsoleLogger();
            string generatedCode = TestHelper.GenerateCode("C#", typeof(Mock_CG_Attr_Entity_UIHint_ControlParameters_Odd), logger);

            TestHelper.AssertContainsWarnings(logger, string.Format(CultureInfo.CurrentCulture, Resource.ClientCodeGen_Attribute_ThrewException_CodeTypeMember,
                                                                    string.Format(CultureInfo.CurrentCulture, Resource.ClientCodeGen_Attribute_ThrewException, typeof(UIHintAttribute), "ControlParameters"),
                                                                    "StringProperty", typeof(Mock_CG_Attr_Entity_UIHint_ControlParameters_Odd).Name, "The number of control parameters must be even."));
            TestHelper.AssertGeneratedCodeContains(generatedCode, "// - An exception occurred generating the 'ControlParameters' property on attribute of type 'System.ComponentModel.DataAnnotations.UIHintAttribute'.");
        }
Exemple #12
0
        public void CodeGen_Attribute_EditableAttribute()
        {
            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_Editable));

            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(true)]  public string EditableTrue");
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(false)] public string EditableFalse");
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(true)]  public string EditableTrue_AllowInitialValueTrue");
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(true, AllowInitialValue=false)] public string EditableTrue_AllowInitialValueFalse");
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(false, AllowInitialValue=true)]  public string EditableFalse_AllowInitialValueTrue");
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Editable(false)] public string EditableFalse_AllowInitialValueFalse");
        }
Exemple #13
0
        public void CodeGen_CustomAttrGen_AttributeType_Shared()
        {
            // Create a shared type service that says the entity's attribute is "shared" when asked whether it is shared
            var mockSts = new MockSharedCodeService(
                new[] { typeof(Mock_CG_Attr_Gen_Type), typeof(Mock_CG_Attr_Gen_TestAttribute) },
                new MethodBase[0],
                new string[0]);

            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", new[] { typeof(Mock_CG_Attr_Gen_Entity) }, mockSts);

            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Mock_CG_Attr_Gen_Test(typeof(Mock_CG_Attr_Gen_Type))]");
        }
Exemple #14
0
        public void CodeGen_Attribute_CustomValidation_Multiple()
        {
            ISharedCodeService sts = new MockSharedCodeService(
                new Type[] { typeof(Mock_CG_Attr_Validator) },
                new MethodBase[] { typeof(Mock_CG_Attr_Validator).GetMethod("IsValid"),
                                   typeof(Mock_CG_Attr_Validator).GetMethod("IsValid2") },
                new string[0]);

            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", new[] { typeof(Mock_CG_Attr_Entity_Multiple) }, sts);

            TestHelper.AssertGeneratedCodeContains(generatedCode,
                                                   @"[CustomValidation(typeof(Mock_CG_Attr_Validator), ""IsValid"")]",
                                                   @"[CustomValidation(typeof(Mock_CG_Attr_Validator), ""IsValid2"")]");
        }
Exemple #15
0
        public void CodeGen_CustomAttrGen_BindableAttribute()
        {
            // Create a shared type service that says the entity's attribute is "shared" when asked whether it is shared
            MockSharedCodeService mockSts = new MockSharedCodeService(
                new[] { typeof(System.ComponentModel.BindableAttribute) },
                new MethodBase[0],
                new string[0]);

            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", new Type[] { typeof(Mock_CG_Attr_Entity_Bindable) }, new ConsoleLogger(), mockSts, /*useFullNames*/ false);

            TestHelper.AssertGeneratedCodeContains(generatedCode, "[Bindable(true, BindingDirection.TwoWay)]");

            generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", new Type[] { typeof(Mock_CG_Attr_Entity_Bindable) }, new ConsoleLogger(), mockSts, true);
            TestHelper.AssertGeneratedCodeContains(generatedCode, "[global::System.ComponentModel.BindableAttribute(true, global::System.ComponentModel.BindingDirection.TwoWay)]");
        }
Exemple #16
0
        public void CodeGen_CustomAttrGen_EntityAttributeThrows()
        {
            ConsoleLogger logger        = new ConsoleLogger();
            string        generatedCode = TestHelper.GenerateCode("C#", typeof(AttributeThrowingEntity), logger);

            Assert.IsFalse(string.IsNullOrEmpty(generatedCode), "Code should have been generated");

            AttributeBuilderException expectedException = new AttributeBuilderException(
                new ThrowingEntityAttributeException(ThrowingEntityAttribute.ExceptionMessage),
                typeof(ThrowingEntityAttribute),
                ThrowingEntityAttribute.ThrowingPropertyName);

            string expectedBuildWarning = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_ThrewException_CodeType,
                expectedException.Message,
                typeof(AttributeThrowingEntity).Name,
                expectedException.InnerException.Message);

            TestHelper.AssertGeneratedCodeContains(generatedCode, expectedException.Message);
            TestHelper.AssertContainsWarnings(logger, expectedBuildWarning);
        }
        public void CodeGen_Attribute_DisplayAttribute_Fail_Private_ResourceType()
        {
            UnitTestHelper.EnsureEnglish();
            var logger        = new ConsoleLogger();
            var generatedCode = TestHelper.GenerateCode("C#", typeof(Mock_CG_DisplayAttr_Entity_Private_ResourceType), logger);

            var expectedExceptionMessage = "Cannot retrieve property 'Name' because localization failed.  Type 'Luma.SimpleEntity.Tests.Mock_CG_DisplayAttr_Private_ResourceType' is not public or does not contain a public static string property with the name 'Resource2'.";

            var expectedException = new AttributeBuilderException(
                new InvalidOperationException(expectedExceptionMessage),
                typeof(DisplayAttribute),
                "Name");

            string expectedBuildWarning = string.Format(
                CultureInfo.CurrentCulture,
                Resource.ClientCodeGen_Attribute_ThrewException_CodeTypeMember,
                expectedException.Message,
                "TheResourcedProperty",
                typeof(Mock_CG_DisplayAttr_Entity_Private_ResourceType).Name,
                expectedException.InnerException.Message);

            TestHelper.AssertGeneratedCodeContains(generatedCode, expectedException.Message);
            TestHelper.AssertContainsWarnings(logger, expectedBuildWarning);
        }
Exemple #18
0
        public void CodeGen_Attribute_UIHint()
        {
            string generatedCode = TestHelper.GenerateCodeAssertSuccess("C#", typeof(Mock_CG_Attr_Entity_UIHint));

            TestHelper.AssertGeneratedCodeContains(generatedCode, @"[UIHint(""theUIHint"", ""thePresentationLayer"")]");
        }