Esempio n. 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);
        }
Esempio n. 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))]");
        }
Esempio n. 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);
        }
Esempio n. 4
0
        public CodeMemberShareKind GetTypeShareKind(string typeName)
        {
            string fullName = MockSharedCodeService.AssemblyQualifiedTypeNameToFullTypeName(typeName);

            if (this._unknowableTypes.Any(t => string.Equals(t.FullName, fullName)))
            {
                return(CodeMemberShareKind.Unknown);
            }

            if (this._unsharedTypes.Any(t => string.Equals(t.FullName, fullName)))
            {
                return(CodeMemberShareKind.NotShared);
            }

            if (this._sharedTypes.Any(t => string.Equals(t.FullName, fullName)))
            {
                return(CodeMemberShareKind.SharedBySource);
            }

            // Check for file sharing needs fully qualified name
            if (this.IsTypeSharedInFile(typeName))
            {
                return(CodeMemberShareKind.SharedBySource);
            }

            if (IsSharedFrameworkType(typeName))
            {
                return(CodeMemberShareKind.SharedByReference);
            }

            return(CodeMemberShareKind.NotShared);
        }
        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_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");
        }
Esempio n. 7
0
        private static bool IsSharedFrameworkType(string typeName)
        {
            // If this isn't a system assembly, we know immediately that
            // it's not a shared framework type
            Type systemType = Type.GetType(typeName, /*throwOnError*/ false);

            if (systemType != null)
            {
                if (!TypeUtility.IsSystemAssembly(systemType.Assembly))
                {
                    return(false);
                }
                // Mock matches the real shared assemblies in allowing all mscorlib to match
                if (AssemblyUtilities.IsAssemblyMsCorlib(systemType.Assembly.GetName()))
                {
                    return(true);
                }
                // The mock declares that anything in System is also shared
                // Anything in EntityFramework.dll is not shared.
                string assemblyName = systemType.Assembly.FullName;
                int    comma        = assemblyName.IndexOf(',');
                if (comma >= 0)
                {
                    assemblyName = assemblyName.Substring(0, comma);
                    if (string.Equals("System", assemblyName, StringComparison.OrdinalIgnoreCase))
                    {
                        return(true);
                    }
                    if (string.Equals("EntityFramework", assemblyName, StringComparison.OrdinalIgnoreCase))
                    {
                        return(false);
                    }
                }
            }
            typeName = MockSharedCodeService.AssemblyQualifiedTypeNameToFullTypeName(typeName);

            int    dot           = typeName.LastIndexOf('.');
            string namespaceName = dot < 0 ? string.Empty : typeName.Substring(0, dot);
            string shortTypeName = typeName.Substring(dot + 1);

            if (string.Equals("System.ComponentModel.DataAnnotations", namespaceName, StringComparison.OrdinalIgnoreCase))
            {
                return(true);
            }

            foreach (Type t in MockSharedCodeService._knownSharedAttributeTypes)
            {
                if (string.Equals(t.FullName, typeName))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 8
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))]");
        }
Esempio n. 9
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"")]");
        }
Esempio n. 10
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);
        }
Esempio n. 11
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)]");
        }
Esempio n. 12
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");
        }
Esempio n. 13
0
        // Creates a MockSharedCodeService with some common files and types considered as shared
        internal static MockSharedCodeService CreateCommonMockSharedCodeService()
        {
            IEnumerable <Type> sharedTypes = new Type[] {
                // Known test types
                typeof(Mock_CG_Attr_Entity_StringLength_ResourceType),
                typeof(Mock_CG_DisplayAttr_Shared_ResourceType),
                typeof(DifferentNamespace.Mock_CG_DisplayAttr_Shared_ResourceType_DifferentNamespace),
                //typeof(Tests.SharedResource)
            };
            IEnumerable <MethodBase> sharedMethods = new MethodBase[] {
                // Known test methods.
                typeof(Mock_CG_Attr_Entity_StringLength_ResourceType).GetProperty("TheResource").GetGetMethod(),
                //typeof(Tests.SharedResource).GetProperty("String").GetGetMethod()
            };
            IEnumerable <string>  sharedFiles           = new string[] { };
            MockSharedCodeService mockSharedCodeService = new MockSharedCodeService(sharedTypes, sharedMethods, sharedFiles);

            return(mockSharedCodeService);
        }