Beispiel #1
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);
        }
Beispiel #2
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);
        }
Beispiel #3
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))]");
        }
        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");
        }
Beispiel #5
0
        public void CodeGen_Attribute_KeyAttribute_Missing_Pass()
        {
            var    logger        = new ConsoleLogger();
            string generatedCode = TestHelper.GenerateCode("C#", typeof(Mock_CG_Attr_Entity_Missing_Key), logger);

            Assert.IsTrue(!string.IsNullOrEmpty(generatedCode));
            TestHelper.AssertCodeGenSuccess(generatedCode, logger);
        }
Beispiel #6
0
        public void CodeGen_Attribute_CustomValidation_UnsharedValidator()
        {
            ConsoleLogger logger        = new ConsoleLogger();
            string        generatedCode = TestHelper.GenerateCode("C#", typeof(UnsharedValidatorTestEntity), logger);

            TestHelper.AssertNoErrorsOrWarnings(logger);
            Assert.IsFalse(string.IsNullOrEmpty(generatedCode), "Expected generated code");
            TestHelper.AssertGeneratedCodeDoesNotContain(generatedCode, "typeof(UnsharedValidator)");
        }
Beispiel #7
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'.");
        }
Beispiel #8
0
        public void SharedTypes_CodeGen_Warns_Unshared_Property_Type()
        {
            var logger = new ConsoleLogger();

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

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

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

            TestHelper.AssertGeneratedCodeDoesNotContain("XProperty");
            //string entityWarning = String.Format(CultureInfo.CurrentCulture, Resource.ClientCodeGen_PropertyType_Not_Shared, "XProperty", typeof(Mock_CG_Shared_Entity).FullName, typeof(X).FullName, "MockProject");
            //TestHelper.AssertContainsWarnings(logger, entityWarning);
        }
Beispiel #9
0
        public void CodeGen_Attribute_KeyAttribute_SharedAttribute()
        {
            ConsoleLogger logger = new ConsoleLogger();

            // For this test, consider K2 shared and K1 not shared
            ISharedCodeService sts = new MockSharedCodeService(
                new Type[] { typeof(Mock_CG_Attr_Entity_Shared_Key) },
                new MethodInfo[] { typeof(Mock_CG_Attr_Entity_Shared_Key).GetProperty("K2").GetGetMethod() },
                new string[0]);

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

            Assert.IsTrue(!string.IsNullOrEmpty(generatedCode));
            TestHelper.AssertGeneratedCodeDoesNotContain(generatedCode, "GetIdentity");
        }
Beispiel #10
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);
        }