예제 #1
0
        public void Test_Validate_PrimaryKey_IsObjectID_True_MultipleProps()
        {
            //-------------Setup Test Pack ------------------
            const string       xml    = @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property name=""TestClassID"" type=""Guid""/>
						<property name=""TestRelatedClassID"" type=""Guid"" />
                        <primaryKey isObjectID=""true"">
                            <prop name=""TestClassID""/>
                            <prop name=""TestRelatedClassID""/>
                        </primaryKey>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader = CreateXmlClassDefsLoader();

            //-------------Execute test ---------------------
            try
            {
                loader.LoadClassDefs(xml);
                //---------------Test Result -----------------------
                Assert.Fail("Should have thrown an InvalidPropertyException");
            }
            catch (RecordedExceptionsException ex)
            {
                StringAssert.Contains("class definition for the class 'TestClass", ex.Message);
                StringAssert.Contains("You cannot have more than one property for a primary key that represents an object's Guid ID", ex.Message);
            }
        }
예제 #2
0
        public void Test_Valid_Relationship_ShouldSetOwningClassDef()
        {
            //----------------------Test Setup ----------------------
            const string       classDefsString = @"
					<classes>

						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey isObjectID=""false"">
                                <prop name=""TestRelatedClassID""/>
                                <prop name=""TestClassID""/>
                            </primaryKey>
					        <relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" 
                                            owningBOHasForeignKey=""true"" >
						        <relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
					        </relationship>
						</class>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClassID""/>
                            </primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader          = CreateXmlClassDefsLoader();
            //--------------------Execute Test-------------------------
            ClassDefCol classDefList = loader.LoadClassDefs(classDefsString);
            //---------------Test Result -----------------------
            IClassDef        reverseClassDef = classDefList.FindByClassName("TestRelatedClass");
            IRelationshipDef reverseRelDef   = reverseClassDef.RelationshipDefCol["TestClass"];

            Assert.AreSame(reverseClassDef, reverseRelDef.OwningClassDef);
        }
예제 #3
0
        public void Test_Force_PrimaryKey_IsObjectID_False_AsCompulsoryWriteOnce_WithReadWriteRule_ReadWrite()
        {
            //-------------Setup Test Pack ------------------
            const string       xml    = @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property name=""TestClassID"" type=""string"" readWriteRule=""ReadWrite""/>
                        <primaryKey isObjectID=""false"">
                            <prop name=""TestClassID""/>
                        </primaryKey>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader = CreateXmlClassDefsLoader();
            //-------------Execute test ---------------------
            ClassDefCol classDefs = loader.LoadClassDefs(xml);

            //---------------Test Result -----------------------
            Assert.AreEqual(1, classDefs.Count);
            Assert.IsTrue(classDefs.Contains("Habanero.Test.BO.Loaders", "TestClass"), "Class 'TestClass' should have been loaded.");
            IClassDef classDef = classDefs["Habanero.Test.BO.Loaders", "TestClass"];

            Assert.AreEqual(1, classDef.PrimaryKeyDef.Count);
            IPropDef keyPropDef = classDef.PrimaryKeyDef[0];

            Assert.IsFalse(keyPropDef.Compulsory);
            Assert.AreEqual(PropReadWriteRule.ReadWrite, keyPropDef.ReadWriteRule);
        }
예제 #4
0
        public void TestLoadClassDefs_WithParameterLessConstructor_ShouldLoadTwoClasses()
        {
            const string     classDefsXml = @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClassID""/>
                            </primaryKey>
						</class>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestRelatedClassID""/>
                            </primaryKey>
						</class>
					</classes>
			"            ;
            IClassDefsLoader loader       = new XmlClassDefsLoader(classDefsXml, new DtdLoader(), GetDefClassFactory());
            ClassDefCol      classDefList =
                loader.LoadClassDefs();

            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.");
        }
예제 #5
0
        public void Test_Force_PrimaryKey_IsObjectID_AsCompulsoryWriteOnce_WithReadWriteRule_WriteNew()
        {
            //-------------Setup Test Pack ------------------
            const string xml =
                @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property name=""TestClassID"" type=""Guid"" readWriteRule=""WriteNew""/>
						<primaryKey isObjectID=""true"">
							<prop name=""TestClassID""/>
						</primaryKey>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList = loader.LoadClassDefs(xml);
            ClassDefValidator  validator    = new ClassDefValidator(GetDefClassFactory());
            IClassDef          classDef     = classDefList["Habanero.Test.BO.Loaders", "TestClass"];
            IPropDef           keyPropDef   = classDef.PrimaryKeyDef[0];

            //---------------Assert PreConditions---------------
            Assert.IsFalse(keyPropDef.Compulsory);
            Assert.AreEqual(PropReadWriteRule.WriteNew, keyPropDef.ReadWriteRule);
            //-------------Execute test ---------------------
            validator.ValidateClassDefs(classDefList);
            //---------------Test Result -----------------------
            Assert.IsTrue(keyPropDef.Compulsory);
            Assert.AreEqual(PropReadWriteRule.WriteNew, keyPropDef.ReadWriteRule);
        }
예제 #6
0
        public void Test_Validate_PrimaryKey_IsObjectID_True_NonGuidProp()
        {
            //-------------Setup Test Pack ------------------
            const string xml =
                @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property name=""TestClassID""/>
						<primaryKey isObjectID=""true"">
							<prop name=""TestClassID""/>
						</primaryKey>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList = loader.LoadClassDefs(xml);
            ClassDefValidator  validator    = new ClassDefValidator(GetDefClassFactory());

            //-------------Execute test ---------------------
            try
            {
                validator.ValidateClassDefs(classDefList);
                //---------------Test Result -----------------------
                Assert.Fail("Should have thrown an InvalidXmlDefinitionException");
            }
            catch (InvalidXmlDefinitionException ex)
            {
                Assert.AreEqual(
                    "In the class called 'TestClass', the primary key is set as IsObjectID but the property 'TestClassID' " +
                    "defined as part of the ObjectID primary key is not a Guid.", ex.Message);
            }
        }
예제 #7
0
        public void Test_Validate_PrimaryKey_HasNoProps_IsNotObjectGuid()
        {
            //-------------Setup Test Pack ------------------
            const string       xml    = @"
				<classes>
					<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
						<property name=""TestClassID""/>
                        <primaryKey isObjectID=""false"">
                        </primaryKey>
					</class>
				</classes>
			"            ;
            XmlClassDefsLoader loader = CreateXmlClassDefsLoader();

            //-------------Execute test ---------------------
            try
            {
                loader.LoadClassDefs(xml);
                //---------------Test Result -----------------------
                Assert.Fail("Should have thrown an InvalidXmlDefinitionException");
            }
            catch (RecordedExceptionsException ex)
            {
                StringAssert.Contains("class definition for the class 'TestClass", ex.Message);
                StringAssert.Contains("A primaryKey node must have one or more prop nodes", ex.Message);
                //Assert.AreEqual("In the class called 'TestClass', the primary key has no properties defined.", ex.Message);
                //TODO Mark: 09 Feb 2009 - Improve this error message to something similar to above
            }
        }
예제 #8
0
        public void Test_Valid_Relationship_1_M_Relationships_PrimaryAndForeignKeyDoesNotMatchRelationshipCardinality()
        {
            //----------------------Test Setup ----------------------
            const string classDefsString =
                @"
					<classes>

						<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=""multiple"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" 
											reverseRelationship=""TestRelatedClass"" owningBOHasForeignKey=""true"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
						<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"" 
											reverseRelationship=""TestClass"" owningBOHasForeignKey=""true"" >
								<relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
							</relationship>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader = CreateXmlClassDefsLoader();
            //--------------------Execute Test-------------------------
            ClassDefCol classDefList = loader.LoadClassDefs(classDefsString);

            //---------------Test Result -----------------------
            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.");

            Assert.Fail("wRITE TEST THSI should throw validation error");

            IClassDef        classDef               = classDefList.FindByClassName("TestClass");
            IRelationshipDef relationshipDef        = classDef.RelationshipDefCol["TestRelatedClass"];
            IClassDef        reverseClassDef        = classDefList.FindByClassName("TestRelatedClass");
            IRelationshipDef reverseRelationshipDef = reverseClassDef.RelationshipDefCol["TestClass"];

            Assert.IsFalse(relationshipDef.OwningBOHasForeignKey);
            Assert.IsTrue(reverseRelationshipDef.OwningBOHasForeignKey);
        }
예제 #9
0
        public void Test_Add_WithCollection_ShouldAddEachItem()
        {
            //---------------Set up test pack-------------------
            XmlClassDefsLoader loader      = new XmlClassDefsLoader(GetTestClassDefinition(""), new DtdLoader(), new DefClassFactory());
            ClassDefCol        classDefCol = new ClassDefCol();
            ClassDefCol        classDefs   = loader.LoadClassDefs();

            //---------------Assert PreConditions---------------
            Assert.AreEqual(2, classDefs.Count);
            //---------------Execute Test ----------------------
            classDefCol.Add(classDefs);
            //---------------Test Result -----------------------
            Assert.AreEqual(2, classDefCol.Count);
        }
예제 #10
0
        public void TestNoRootNodeException()
        {
            XmlClassDefsLoader loader = CreateXmlClassDefsLoader();

            try
            {
                loader.LoadClassDefs(@"<invalidRootNode>");
                Assert.Fail("Expected to throw an EXCEPTION");
            }
            //---------------Test Result -----------------------
            catch (XmlException ex)
            {
                StringAssert.Contains("has no root element", ex.Message);
            }
        }
예제 #11
0
        public void Test_Load_ShouldSetUIDefsClassDef()
        {
            //---------------Set up test pack-------------------
            XmlClassDefsLoader loader = new XmlClassDefsLoader("", new DtdLoader(), new DefClassFactory());
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            ClassDefCol classDefs =
                loader.LoadClassDefs(TestClassWithUIDef);
            //---------------Test Result -----------------------
            IClassDef classDef = classDefs["Habanero.Test", "Sample"];
            var       uiDef    = classDef.UIDefCol.FirstOrDefault();

            Assert.IsNotNull(uiDef);
            Assert.AreSame(classDef, uiDef.ClassDef);
        }
예제 #12
0
        public void Test_Load_WhenClassWithRelatedClassXml_OnlyOneReverseRelationshipIndicated_ShouldLoadEachRel()
        {
            //---------------Set up test pack-------------------
            XmlClassDefsLoader loader = new XmlClassDefsLoader("", new DtdLoader(), new DefClassFactory());
            //---------------Assert Precondition----------------
            //---------------Execute Test ----------------------
            ClassDefCol classDefs =
                loader.LoadClassDefs(TestClassWithRelatedClassXml_OnlyOneReverseRelationshipIndicated);
            //---------------Test Result -----------------------
            IClassDef classDef        = classDefs["FireStarter.Test.Logic", "FireStarter.Test.Logic.Loaders.TestClass"];
            IClassDef relatedClassDef =
                classDefs["FireStarter.Test.Logic", "FireStarter.Test.Logic.Loaders.TestRelatedClass"];

            Assert.AreEqual(1, classDef.RelationshipDefCol.Count);
            Assert.AreEqual(1, relatedClassDef.RelationshipDefCol.Count);
        }
예제 #13
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);
            }
        }
예제 #14
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");
        }
예제 #15
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);
        }
예제 #16
0
        public void TestLoadClassDefs_InheritedClassWithNoPrimaryKey_WithRelationship()
        {
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList =
                loader.LoadClassDefs(
                    @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClassID""/>
                            </primaryKey>
						</class>
						<class name=""TestClass2"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClass2ID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClass2ID""/>
                            </primaryKey>
						</class>
						<class name=""TestClassInherited"" assembly=""Habanero.Test.BO.Loaders"" >							
                            <superClass class=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" />
					        <property name=""RelatedTestClassID"" type=""Guid"" />    
                            <relationship name=""TestRelationship"" type=""single"" 
						        relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"">
						        <relatedProperty property=""RelatedTestClassID"" relatedProperty=""TestClassID"" />
					        </relationship>                
						</class>
					</classes>
			"            );

            Assert.AreEqual(3, 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", "TestClass2"), "Class 'TestClass2' should have been loaded.");
            Assert.IsTrue(classDefList.Contains("Habanero.Test.BO.Loaders", "TestClassInherited"), "Class 'TestClassInherited' should have been loaded.");
            IClassDef classDefTestClass = classDefList["Habanero.Test.BO.Loaders", "TestClass"];
            IClassDef classDefInherited = classDefList["Habanero.Test.BO.Loaders", "TestClassInherited"];

            Assert.IsNotNull(classDefTestClass);
            Assert.IsNotNull(classDefInherited.SuperClassDef);
            Assert.IsNull(classDefInherited.PrimaryKeyDef);
            IRelationshipDefCol relDefCol = classDefInherited.RelationshipDefCol;

            Assert.AreEqual(1, relDefCol.Count, "There should be one relationship def from the given xml definition");
            Assert.IsNotNull(relDefCol["TestRelationship"], "'TestRelationship' should be the name of the relationship created");
        }
예제 #17
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);
            }
        }
예제 #18
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);
            }
        }
예제 #19
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);
            }
        }
예제 #20
0
        public void Test_Add_WithNewClassDefs_ShouldAddThem()
        {
            //---------------Set up test pack-------------------
            XmlClassDefsLoader loader1     = new XmlClassDefsLoader(GetTestClassDefinition(""), new DtdLoader(), new DefClassFactory());
            ClassDefCol        classDefCol = new ClassDefCol();
            ClassDefCol        classDefs1  = loader1.LoadClassDefs();

            classDefCol.Add(classDefs1);

            XmlClassDefsLoader loader2    = new XmlClassDefsLoader(GetTestClassDefinition("Other"), new DtdLoader(), new DefClassFactory());
            ClassDefCol        classDefs2 = loader2.LoadClassDefs();

            //---------------Assert PreConditions---------------
            Assert.AreEqual(2, classDefCol.Count);
            Assert.AreEqual(2, classDefs2.Count);
            //---------------Execute Test ----------------------
            classDefCol.Add(classDefs2);
            //---------------Test Result -----------------------
            Assert.AreEqual(4, classDefCol.Count);
        }
예제 #21
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.");
        }
예제 #22
0
        public void Test_Valid_Relationship_1_1_NoReverse_RelatatedProp_IsPartOfCompositePrimaryKey()
        {
            //----------------------Test Setup ----------------------
            const string       classDefsString = @"
					<classes>

						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestRelatedClassID"" type=""Guid"" />
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey isObjectID=""false"">
                                <prop name=""TestRelatedClassID""/>
                                <prop name=""TestClassID""/>
                            </primaryKey>
					        <relationship name=""TestClass"" type=""single"" relatedClass=""TestClass"" relatedAssembly=""Habanero.Test.BO.Loaders"" 
                                            owningBOHasForeignKey=""true"" >
						        <relatedProperty property=""TestClassID"" relatedProperty=""TestClassID"" />
					        </relationship>
						</class>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClassID""/>
                            </primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader          = CreateXmlClassDefsLoader();
            //--------------------Execute Test-------------------------
            ClassDefCol classDefList = loader.LoadClassDefs(classDefsString);

            //---------------Test Result -----------------------
            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.");

            IClassDef        reverseClassDef = classDefList.FindByClassName("TestRelatedClass");
            IRelationshipDef relationshipDef = reverseClassDef.RelationshipDefCol["TestClass"];

            Assert.IsTrue(relationshipDef.OwningBOHasForeignKey);
        }
예제 #23
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);
            }
        }
예제 #24
0
        public void Test_Valid_Relationship_Loads_Where_RelatedClass_IsLoaded_After_InitialLoad_NoReverseRelationshipSetup()
        {
            //----------------------Test Setup ----------------------
            XmlClassDefsLoader loader          = new XmlClassDefsLoader("", new DtdLoader(), GetDefClassFactory());
            ClassDefCol        classDefCol     = new ClassDefCol();
            const string       classDefsString = @"
					<classes>
						<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>
			"            ;

            classDefCol.Add(loader.LoadClassDefs(classDefsString));
            //--------------------Execute Test-------------------------
            const string secondClassDefStringToLoad = @"
                    <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>
					</classes>
			"            ;

            classDefCol.Add(loader.LoadClassDefs(secondClassDefStringToLoad));
            //---------------Test Result -----------------------
            Assert.AreEqual(2, classDefCol.Count);
            Assert.IsTrue(classDefCol.Contains("Habanero.Test.BO.Loaders", "TestClass"), "Class 'TestClass' should have been loaded.");
            Assert.IsTrue(classDefCol.Contains("Habanero.Test.BO.Loaders", "TestRelatedClass"), "Class 'TestRelatedClass' should have been loaded.");
        }
예제 #25
0
        public void Test_CheckRelationships_RelationshipWithTypeParameterChecksAgainstCorrectRelatedClassDef()
        {
            //----------------------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"" typeParameter=""Special"">
						        <relatedProperty property=""TestClassID"" relatedProperty=""TestClassSpecialID"" />
					        </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>
						<class name=""TestRelatedClass"" assembly=""Habanero.Test.BO.Loaders"" typeParameter=""Special"">
							<property  name=""TestRelatedClassID"" type=""Guid"" />
                            <property  name=""TestClassID"" type=""Guid"" />
							<property  name=""TestClassSpecialID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestRelatedClassID""/>
                            </primaryKey>
						</class>
					</classes>
			"            ;
            XmlClassDefsLoader loader          = CreateXmlClassDefsLoader();

            //--------------------Execute Test-------------------------
            loader.LoadClassDefs(classDefsString);
            //---------------Test Result -----------------------
        }
예제 #26
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 ----------------------
        }
예제 #27
0
        public void TestLoadClassDefs_InheritedClassWithNoPrimaryKey()
        {
            XmlClassDefsLoader loader       = CreateXmlClassDefsLoader();
            ClassDefCol        classDefList =
                loader.LoadClassDefs(
                    @"
					<classes>
						<class name=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClassID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClassID""/>
                            </primaryKey>
						</class>
						<class name=""TestClass2"" assembly=""Habanero.Test.BO.Loaders"" >
							<property  name=""TestClass2ID"" type=""Guid"" />
                            <primaryKey>
                                <prop name=""TestClass2ID""/>
                            </primaryKey>
						</class>
						<class name=""TestClassInherited"" assembly=""Habanero.Test.BO.Loaders"" >							
                            <superClass class=""TestClass"" assembly=""Habanero.Test.BO.Loaders"" />
						</class>
					</classes>
			"            );

            Assert.AreEqual(3, 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", "TestClass2"), "Class 'TestClass2' should have been loaded.");
            Assert.IsTrue(classDefList.Contains("Habanero.Test.BO.Loaders", "TestClassInherited"), "Class 'TestClassInherited' should have been loaded.");
            IClassDef classDefTestClass = classDefList["Habanero.Test.BO.Loaders", "TestClass"];
            IClassDef classDefInherited = classDefList["Habanero.Test.BO.Loaders", "TestClassInherited"];

            Assert.IsNotNull(classDefTestClass);
            Assert.IsNotNull(classDefInherited.SuperClassDef);
            //This is expecting a null PrimaryKeyDef because the global ClassDef.Classdefs col is not loaded yet.
            Assert.IsNull(classDefInherited.PrimaryKeyDef);
        }