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