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_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); }
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"); }
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); }
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)"); }
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'."); }
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); }
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"); }
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); }