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 ----------------------
		}
        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);
        }
 public void Test_Add_WithDuplicateClassDefs_ShouldNotAddAgain()
 {
     //---------------Set up test pack-------------------
     XmlClassDefsLoader loader = new XmlClassDefsLoader(GetTestClassDefinition(""), new DtdLoader(), new DefClassFactory());
     ClassDefCol classDefCol = new ClassDefCol();
     ClassDefCol classDefs = loader.LoadClassDefs();
     classDefCol.Add(classDefs);
     //---------------Assert PreConditions---------------   
     Assert.AreEqual(2, classDefs.Count);
     Assert.AreEqual(2, classDefCol.Count);
      //---------------Execute Test ----------------------
     classDefCol.Add(classDefs);
      //---------------Test Result -----------------------
     Assert.AreEqual(2, classDefCol.Count);
 }
		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.");
		}
Exemple #5
0
 public void TestLoadClassDefs()
 {
     //---------------Set up test pack-------------------
     XmlClassDefsLoader loader = new XmlClassDefsLoader(
             GetTestClassDefinition(""),
             new DtdLoader(), new DefClassFactory());
     //---------------Execute Test ----------------------
     ClassDefCol classDefs = loader.LoadClassDefs();
     //---------------Test Result -----------------------
     Assert.AreEqual(2, classDefs.Count);
 }
		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);
			}
		}
		public void TestAutoMap_WithTwoSingleRelationshipToTheSameBO_WhereReverseRelsAreDefined_WithPropAndRelNameMatching()
		{
			//---------------Set up test pack-------------------
			const string parentClassDefXML = @"<classes> 
						<class name=""FakeBOWithTwoRelToSameProp"" assembly=""Habanero.Smooth.Test"">
							<property name =""FakeBOWithTwoRelToSamePropID"" type=""Guid""/>
							<primaryKey isObjectID=""true"">
								<prop name=""FakeBOWithTwoRelToSamePropID"" />
							</primaryKey>
							<relationship name=""FakeBOWithTwoSingleRelToSamePropWithSameNames"" type=""multiple"" relatedClass=""FakeBOWithTwoSingleRelToSamePropWithSameName"" reverseRelationship=""FakeBOWithTwoRelToSameProp"" relatedAssembly=""Habanero.Smooth.Test"">
							<relatedProperty property=""FakeBOWithTwoRelToSamePropID"" relatedProperty=""FakeBOWithTwoRelToSamePropID"" />
							</relationship>
							<relationship name=""FakeBORel2"" type=""multiple"" relatedClass=""FakeBOWithTwoSingleRelToSamePropWithSameName"" reverseRelationship=""SingleRel2"" relatedAssembly=""Habanero.Smooth.Test"">
							<relatedProperty property=""FakeBOWithTwoRelToSamePropID"" relatedProperty=""SingleRel2ID"" />
							</relationship>
						</class>
					</classes>";	

			//---------------Assert Precondition----------------
			//---------------Execute Test ----------------------
			var xmlClassDefsLoader = new XmlClassDefsLoader(parentClassDefXML, new DtdLoader());
			var loadedClassDefs = xmlClassDefsLoader.LoadClassDefs();
			var relatedClassType = typeof(FakeBOWithTwoSingleRelToSamePropWithSameName);
			var allClassesAutoMapper = new AllClassesAutoMapper(new CustomTypeSource(new[] { relatedClassType }));
			AllClassesAutoMapper.ClassDefCol = loadedClassDefs;
			allClassesAutoMapper.Map();
			//---------------Test Result -----------------------
			Assert.AreEqual(2, AllClassesAutoMapper.ClassDefCol.Count);
			var relationshipDefCol = AllClassesAutoMapper.ClassDefCol[relatedClassType].RelationshipDefCol;
			Assert.AreEqual(2, relationshipDefCol.Count);
			var relationshipDef = relationshipDefCol["FakeBOWithTwoRelToSameProp"];
			Assert.AreEqual("FakeBOWithTwoSingleRelToSamePropWithSameNames", relationshipDef.ReverseRelationshipName);
			var relationshipDef2 = relationshipDefCol["SingleRel2"];
			Assert.AreEqual("FakeBORel2", relationshipDef2.ReverseRelationshipName);
			var validator = new ClassDefValidator(new DefClassFactory());
			validator.ValidateClassDefs(AllClassesAutoMapper.ClassDefCol);
		}
 public void Test_Load_ShouldSetUIGridDefColumnClassDef()
 {
     //---------------Set up test pack-------------------
     XmlClassDefsLoader loader = new XmlClassDefsLoader("", new DtdLoader(), new DefClassFactory());
     //---------------Assert Precondition----------------
     //---------------Execute Test ----------------------
     ClassDefCol classDefs =
         loader.LoadClassDefs(TestClassWithUIGridDef);
     //---------------Test Result -----------------------
     IClassDef classDef = classDefs["Habanero.Test", "Sample"];
     var uiDef = classDef.UIDefCol.FirstOrDefault();
     Assert.IsNotNull(uiDef.UIGrid);
     var gridColumn = uiDef.UIGrid.FirstOrDefault();
     Assert.IsNotNull(gridColumn.UIGrid);
     Assert.AreSame(classDef, gridColumn.ClassDef);
 }
        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.");
        }
        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);
        }
        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.");
        }