/// <summary>
 /// Loads the class definitions
 /// </summary>
 protected override void SetupClassDefs()
 {
     if (LoadClassDefs)
     {
         ClassDef.ClassDefs.Add(GetXmlClassDefsLoader().LoadClassDefs());
         ClassDefValidator validator = new ClassDefValidator(new DefClassFactory());
         validator.ValidateClassDefs(ClassDef.ClassDefs);
     }
 }
Exemplo n.º 2
0
        public void Test_Invalid_Relationship_SingleSingleRelationships_BothSetAsOwning_NeitherIsPrimaryKey()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<property  name=""ForeignKeyProp"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" owningBOHasForeignKey=""true"" reverseRelationship=""TestClass"">
								<relatedProperty property=""ForeignKeyProp"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
							<relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" owningBOHasForeignKey=""true"" reverseRelationship=""TestRelatedClass"">
								<relatedProperty property=""TestClassID"" relatedProperty=""ForeignKeyProp"" />
							</relationship>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader    = CreateXmlClassDefsLoader();
            ClassDefCol        classDefs = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator = new ClassDefValidator(GetDefClassFactory());

            //--------------------Execute Test-------------------------
            try
            {
                validator.ValidateClassDefs(classDefs);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (InvalidXmlDefinitionException ex)
            {
                StringAssert.Contains(
                    "The relationship 'TestRelatedClass' could not be loaded because the reverse relationship 'TestClass' ",
                    ex.Message);
                StringAssert.Contains("are both set up as owningBOHasForeignKey = true", ex.Message);
            }
        }
Exemplo n.º 3
0
        public void Test_Valid_Relationship_1_M_Relationships_CanDetermine_OwningBOHasForeignKey_SecondClass_NotSetUp()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""multiple"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" 
											reverseRelationship=""TestClass"" owningBOHasForeignKey=""true"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
							<relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" 
											reverseRelationship=""TestRelatedClass"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader                 = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList           = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator              = new ClassDefValidator(GetDefClassFactory());
            IClassDef          classDef               = classDefList.FindByClassName("TestClass");
            IRelationshipDef   relationshipDef        = classDef.RelationshipDefCol["TestRelatedClass"];
            IClassDef          reverseClassDef        = classDefList.FindByClassName("TestRelatedClass");
            IRelationshipDef   reverseRelationshipDef = reverseClassDef.RelationshipDefCol["TestClass"];

            //---------------Assert PreConditions---------------
            Assert.IsFalse(relationshipDef.OwningBOHasForeignKey);
            Assert.IsTrue(reverseRelationshipDef.OwningBOHasForeignKey);
            //--------------------Execute Test-------------------------
            validator.ValidateClassDefs(classDefList);
            //---------------Test Result -----------------------
            Assert.IsFalse(relationshipDef.OwningBOHasForeignKey);
            Assert.IsTrue(reverseRelationshipDef.OwningBOHasForeignKey);
        }
Exemplo n.º 4
0
        public void Test_Valid_Relationship_SingleSingleRelationships_OnlyOneHasOwningBOHasForeignKey()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" owningBOHasForeignKey=""true"" reverseRelationship=""TestClass"">
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
							<relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" reverseRelationship=""TestRelatedClass"" owningBOHasForeignKey=""false"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator    = new ClassDefValidator(GetDefClassFactory());
            //--------------------Assert PreConditions---------------
            IClassDef        classDef        = classDefList.FindByClassName("TestClass");
            IRelationshipDef relationshipDef = classDef.RelationshipDefCol["TestRelatedClass"];

            Assert.IsTrue(relationshipDef.OwningBOHasForeignKey, "This defaults to true");
            IClassDef        revesreclassDef        = classDefList.FindByClassName("TestClass");
            IRelationshipDef reverserelationshipDef = revesreclassDef.RelationshipDefCol["TestRelatedClass"];

            Assert.IsTrue(reverserelationshipDef.OwningBOHasForeignKey, "This defaults to true");

            //--------------------Execute Test-------------------------
            validator.ValidateClassDefs(classDefList);
            //---------------Test Result -----------------------
            Assert.IsFalse(relationshipDef.OwningBOHasForeignKey, "Should have converted this to false");
            Assert.IsFalse(reverserelationshipDef.OwningBOHasForeignKey, "Should have converted this to false");
        }
        public void TestAccept_Validate_WhenAllClassDefsLoaded_ShouldBeTrue()
        {
            //---------------Set up test pack-------------------
            Func <TypeWrapper, bool> whereClause = type
                                                   => (type.Namespace == "Habanero.Smooth.Test.ValidFakeBOs");
            AppDomainTypeSource  source = new AppDomainTypeSource(whereClause);
            AllClassesAutoMapper allClassesAutoMapper = new AllClassesAutoMapper(source);
            ClassDefCol          classDefCol          = allClassesAutoMapper.Map();
            ClassDefValidator    validator            = new ClassDefValidator(new DefClassFactory());

            //---------------Assert Precondition----------------
            Assert.Greater(classDefCol.Count, 0);
            //---------------Execute Test ----------------------
            validator.ValidateClassDefs(classDefCol);
            //---------------Test Result -----------------------
            Assert.IsNotNull(classDefCol);
            //Should Validate without Error if it gets here then it has validated
        }
Exemplo n.º 6
0
        public void Test_Invalid_Relationship_PropDefForReverseRelationshipNotSameAsRelationship()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<property  name=""OtherFieldID"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" owningBOHasForeignKey=""true"" reverseRelationship=""TestClass"">
								<relatedProperty property=""OtherFieldID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
							<relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" reverseRelationship=""TestRelatedClass"" owningBOHasForeignKey=""false"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader    = CreateXmlClassDefsLoader();
            ClassDefCol        classDefs = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator = new ClassDefValidator(GetDefClassFactory());

            //--------------------Execute Test-------------------------
            try
            {
                validator.ValidateClassDefs(classDefs);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (InvalidXmlDefinitionException ex)
            {
                StringAssert.Contains("do not have the same properties defined as the relationship keys", ex.Message);
            }
        }
Exemplo n.º 7
0
        public void Test_Invalid_Relationship_RelatedClassDefDoesNotExist()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""RelatedClassDoesNotExist"" relatedAssembly=""Habanero.Test.BO.Loaders"">
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator    = new ClassDefValidator(GetDefClassFactory());

            //--------------------Execute Test-------------------------
            try
            {
                validator.ValidateClassDefs(classDefList);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (InvalidXmlDefinitionException ex)
            {
                StringAssert.Contains(
                    "The relationship 'TestRelatedClass' could not be loaded because when trying to retrieve its related class the folllowing",
                    ex.Message);
            }
        }
Exemplo n.º 8
0
        public void Test_Invalid_Relationship_PropDefDoesNotExistOnOwningClassDef()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"">
								<relatedProperty property=""PropDefDoesNonExist"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader    = CreateXmlClassDefsLoader();
            ClassDefCol        classDefs = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  validator = new ClassDefValidator(GetDefClassFactory());

            //--------------------Execute Test-------------------------
            try
            {
                validator.ValidateClassDefs(classDefs);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (InvalidXmlDefinitionException ex)
            {
                StringAssert.Contains(
                    "In a 'relatedProperty' element for the 'TestRelatedClass' relationship of the 'TestClass' class, " +
                    "the property 'PropDefDoesNonExist' given in the 'property' attribute does not exist", ex.Message);
            }
        }
Exemplo n.º 9
0
        public void TestLoadClassDefs_KeyDefinedWithInheritedProperties()
        {
            //-------------Setup Test Pack ------------------
            const string xml =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<property  name=""TestClassName"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
						</class>
						<class name=""TestClassInherited"" assembly=""Habanero.Test.BO.Loaders"" >							
							<superClass class=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" />
							<key>
								<prop name=""TestClassName""/>
							</key>
						</class>
					</classes>
			"            ;
            var loader       = new XmlClassDefsLoader("", new DtdLoader(), GetDefClassFactory());
            var classDefList = loader.LoadClassDefs(xml);
            var validator    = new ClassDefValidator(GetDefClassFactory());
            //--------------------Assert Preconditions-----------------
            var classDefTestClass = classDefList["Habanero.Test.BO.Loaders", "TestClass"];
            var propDef           = classDefTestClass.PropDefcol["TestClassName"];
            var classDefInherited = classDefList["Habanero.Test.BO.Loaders", "TestClassInherited"];
            var keyDef            = classDefInherited.KeysCol.GetKeyDefAtIndex(0);
            var keyDefPropDef     = keyDef["TestClassName"];

            Assert.AreNotSame(propDef, keyDefPropDef,
                              "The key's property should have been resolved to be the property of the superclass by the validator.");
            //-------------Execute test ---------------------
            validator.ValidateClassDefs(classDefList);
            //-------------Test Result ----------------------
            var keyDefPropDefAfterValidate = keyDef["TestClassName"];

            Assert.AreSame(propDef, keyDefPropDefAfterValidate,
                           "The key's property should have been resolved to be the property of the superclass by the loader.");
        }
Exemplo n.º 10
0
        public void TestLoadClassDefs_KeyDefinedWithNonExistantProperty()
        {
            //-------------Setup Test Pack ------------------
            const string xml =
                @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property  name=""TestClassID"" />
						<property  name=""TestClassName"" />
						<primaryKey>
							<prop name=""TestClassID""/>
						</primaryKey>
					</class>
					<class name=""TestClassInherited"" assembly=""Habanero.Test.BO.Loaders"" >							
						<superClass class=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" />
						<key>
							<prop name=""DoesNotExist""/>
						</key>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader    = new XmlClassDefsLoader("", new DtdLoader(), GetDefClassFactory());
            ClassDefCol        classDefs = loader.LoadClassDefs(xml);
            ClassDefValidator  validator = new ClassDefValidator(GetDefClassFactory());

            //-------------Execute test ---------------------
            try
            {
                validator.ValidateClassDefs(classDefs);
                Assert.Fail("expected Err");
            }
            //---------------Test Result -----------------------
            catch (InvalidXmlDefinitionException ex)
            {
                StringAssert.Contains("In a 'prop' element for the '' key of the 'TestClassInherited' class, " +
                                      "the propery 'DoesNotExist' given in the 'name' attribute does not exist for the class or " +
                                      "for any of it's superclasses. Either add the property definition or check the spelling and " +
                                      "capitalisation of the specified property", ex.Message);
            }
        }
Exemplo n.º 11
0
        public void Test_Valid_Relationship()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
							<primaryKey>
								<prop name=""TestClassID""/>
							</primaryKey>
							<relationship name=""TestRelatedClass"" type=""single"" relatedClass=""TestRelatedClass"" relatedAssembly=""Habanero.Test.BO.Loaders"">
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID""  type=""Guid"" />
							<property  name=""TestClassID"" />
							<primaryKey>
								<prop name=""TestRelatedClassID""/>
							</primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader       = new XmlClassDefsLoader("", new DtdLoader(), GetDefClassFactory());
            ClassDefCol        classDefList = loader.LoadClassDefs(classDefsString);
            ClassDefValidator  defValidator = new ClassDefValidator(GetDefClassFactory());

            //--------------------Assert Preconditions-----------------
            Assert.AreEqual(2, classDefList.Count);
            Assert.IsTrue(classDefList.Contains("Habanero.Test.BO.Loaders", "TestClass"),
                          "Class 'TestClass' should have been loaded.");
            Assert.IsTrue(classDefList.Contains("Habanero.Test.BO.Loaders", "TestRelatedClass"),
                          "Class 'TestRelatedClass' should have been loaded.");
            //--------------------Execute Test-------------------------
            defValidator.ValidateClassDefs(classDefList);
            //--------------------Assert Results ----------------------
        }