public void Minimal()
        {
            this.testCaseSwitch = TestCaseSwitch.Minimal;

            this.Explorer.AddRepository(this.Repository);

            this.domain.SendChangedEvent();

            this.TreeViewTester.SelectNode(this.DomainNode);

            var addType = new MenuItemTester(Constants.AddObjectType);

            Assert.IsTrue(addType.Target.Visible);

            addType.Click();

            Assert.AreEqual(1, this.domain.CompositeObjectTypes.Length);
            var objectType = this.domain.CompositeObjectTypes[0];

            Assert.AreEqual("MyType", objectType.SingularName);

            Assert.AreEqual(1, DomainNode.Target.Nodes.Count);

            Assert.AreEqual("MyType", TypeNode.Target.Text);
            Assert.AreEqual(new ObjectTypeTag(this.Repository, objectType), TypeNode.Target.Tag);
        }
예제 #2
0
        public void OpenRepository()
        {
            this.testCaseSwitch = TestCaseSwitch.OpenRepository;

            this.Explorer.RemoveRepository(this.Repository);

            var repositories = this.Explorer.Repositories;

            Assert.AreEqual(0, repositories.Length);

            this.TreeViewTester.SelectNode(this.RepositoriesNode);

            var openRepository = new MenuItemTester(Constants.OpenRepository);

            Assert.IsTrue(openRepository.Target.Visible);

            openRepository.Click();

            Assert.IsTrue(openRepository.Target.Visible);

            Assert.IsTrue(RepositoriesNode.Target.IsExpanded);

            repositories = this.Explorer.Repositories;
            Assert.AreEqual(1, repositories.Length);

            this.Repository = repositories[0];
            Assert.AreEqual(RepositoryDirectory.FullName, this.Repository.DirectoryInfo.FullName);
        }
예제 #3
0
        public void Minimal()
        {
            this.testCaseSwitch = TestCaseSwitch.Minimal;

            this.SaveTemplate();

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";
            domain.SendChangedEvent();

            this.Explorer.AddRepository(this.Repository);

            this.ExtendedView = true;

            this.TreeViewTester.SelectNode(this.ExtendedViewTemplatesNode);

            var addTemplate = new MenuItemTester(Constants.AddTemplate);

            addTemplate.Target.PerformClick();

            Assert.AreEqual(1, this.Repository.Templates.Length);
            var template = this.Repository.Templates[0];

            Assert.AreEqual("MyConfig", template.Name);
            Assert.AreEqual(domain, template.Domain);
        }
예제 #4
0
        public void Composite()
        {
            testCaseSwitch = TestCaseSwitch.Composite;

            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);

            extensionWizard.ShowDialog();

            Assert.AreEqual(DialogResult.OK, extensionWizard.DialogResult);

            ExtensionRelation extensionRelation = extensionWizard.ExtensionRelation;

            Assert.IsNotNull(extensionRelation);
            Assert.AreEqual("MyExtension", extensionRelation.Name);
            Assert.IsTrue(extensionRelation.ExistExtensionRole);
            Assert.AreEqual(ExtensionRoleKind.Composite, extensionRelation.ExtensionRoleKind);
            Assert.AreEqual(typeof(ExtensionComposite), extensionRelation.ExtensionRoleValue.GetType());

            ExtensionComposite extensionComposite = (ExtensionComposite)extensionRelation.ExtensionRoleValue;

            Assert.AreNotEqual(extensionAssociation, extensionComposite);

            Assert.AreEqual(1, this.extensionAssociation.ExtensionRelations.Length);
            Assert.AreEqual(extensionRelation, this.extensionAssociation.ExtensionRelations[0]);
        }
        public void IncorrectName()
        {
            testCaseSwitch = TestCaseSwitch.IncorrectName;
            onShownCount   = 0;

            explorer.Repositories.Add(repository);

            TreeNodeTester repositoryNodeTester = treeViewTester.FindNode(Constants.RepositoryTreeNodeIndeces);

            repositoryNodeTester.Select();

            MenuItemTester addDomain = new MenuItemTester(Constants.ADD_DOMAIN);

            Assert.IsTrue(addDomain.Target.Enabled);
            Assert.IsTrue(addDomain.Target.Visible);

            addDomain.Click();

            Assert.AreEqual(0, repositoryNodeTester.TreeNode.Nodes.Count);
            Assert.AreEqual(0, repository.MetaDomains.Count);

            Assert.IsTrue(DomainsDirectory.Exists);
            Assert.AreEqual(0, DomainsDirectory.GetFiles().Length);
            Assert.AreEqual(0, TypesDirectory.GetFiles().Length);
            Assert.AreEqual(0, RelationsDirectory.GetFiles().Length);
        }
        public void Minimal()
        {
            testCaseSwitch = TestCaseSwitch.Minimal;

            explorer.Repositories.Add(repository);

            TreeNodeTester repositoryNodeTester = treeViewTester.FindNode(0, 0);

            repositoryNodeTester.Select();

            MenuItemTester addDomain = new MenuItemTester(Constants.ADD_DOMAIN);

            Assert.IsTrue(addDomain.Target.Enabled);
            Assert.IsTrue(addDomain.Target.Visible);

            addDomain.Click();

            Assert.AreEqual(1, repositoryNodeTester.TreeNode.Nodes.Count);
            Assert.AreEqual(1, repository.MetaDomains.Count);

            Assert.IsTrue(repositoryNodeTester.TreeNode.IsExpanded);

            MetaDomain metaDomain = repository.MetaDomains[0];

            Assert.AreEqual("MyDomain", metaDomain.Name);
        }
예제 #7
0
        public void Minimal()
        {
            this.testCaseSwitch = TestCaseSwitch.Create;

            var repositoriesNodeTester = this.TreeViewTester.FindNode(0);

            repositoriesNodeTester.Select();

            var createRepository = new MenuItemTester(Constants.AddRepository);

            Assert.IsTrue(createRepository.Target.Visible);

            createRepository.Click();

            var repositories = this.Explorer.Repositories;

            Assert.AreEqual(1, repositories.Length);

            this.Repository = repositories[0];
            Assert.AreEqual(RepositoryDirectory.FullName, this.Repository.DirectoryInfo.FullName);

            Assert.AreEqual("MyDomain", this.Repository.Domain.Name);

            var duplicateRepository = new Repository(this.Repository.DirectoryInfo);

            Assert.AreEqual("MyDomain", duplicateRepository.Domain.Name);
        }
예제 #8
0
        public void AddSuperDomain()
        {
            this.testCaseSwitch = TestCaseSwitch.AddSuperDomain;

            var superDomainRepository = new Repository(this.SuperDomainDirectoryInfo, true);
            var superDomainDomain     = superDomainRepository.Domain;

            superDomainDomain.Name = "SuperDomain";

            var superDomainClass = superDomainDomain.AddDeclaredObjectType(Guid.NewGuid());

            superDomainClass.SingularName = "SuperDomainClass";
            superDomainClass.PluralName   = "SuperDomainClasses";

            var superDomainAbstractClass = superDomainDomain.AddDeclaredObjectType(Guid.NewGuid());

            superDomainAbstractClass.SingularName = "SuperDomainAbstractClass";
            superDomainAbstractClass.PluralName   = "SuperDomainAbstractClasses";

            superDomainDomain.Validate();
            Assert.IsTrue(superDomainDomain.IsValid);

            superDomainClass.SendChangedEvent();
            superDomainAbstractClass.SendChangedEvent();
            superDomainDomain.SendChangedEvent();

            this.Explorer.AddRepository(this.Repository);

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";
            domain.SendChangedEvent();

            this.ExtendedView = true;

            this.TreeViewTester.SelectNode(this.ExtendedViewSuperDomainsNode);

            var addSuperDomain = new MenuItemTester(Constants.AddSuperDomain);

            Assert.IsTrue(addSuperDomain.Target.Visible);

            addSuperDomain.Click();

            Assert.AreEqual(1, this.ExtendedViewSuperDomainsNode.Target.Nodes.Count);

            // TODO: remove to Constants
            var superDomainTester = this.TreeViewTester.FindNode(0, 0, 3);

            Assert.AreEqual("SuperDomain", superDomainTester.Target.Text);
            Assert.AreEqual(2, superDomainTester.Target.Nodes.Count);

            var superDomainAbstractClassNodeTester = superDomainTester[0];
            var superDomainClassNodeTester         = superDomainTester[1];

            Assert.AreEqual("SuperDomainAbstractClass", superDomainAbstractClassNodeTester.Target.Text);
            Assert.AreEqual("SuperDomainClass", superDomainClassNodeTester.Target.Text);
        }
예제 #9
0
        public void MetaObjectNotFound()
        {
            testCaseSwitch = TestCaseSwitch.MetaObjectNotFound;

            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);

            extensionWizard.ShowDialog();

            Assert.AreEqual(DialogResult.Cancel, extensionWizard.DialogResult);
            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);
        }
예제 #10
0
        public void TitleAndLabels()
        {
            testCaseSwitch = TestCaseSwitch.TitleAndLabels;

            Assert.AreEqual("Allors Extension Wizard", extensionWizard.Text);

            LabelTester titleLabel            = new LabelTester(Constants.TITLE_LABEL);
            LabelTester titleExplanationLabel = new LabelTester(Constants.TITLE_EXPLANATION_LABEL);

            Assert.AreEqual("Welcome to the Allors Add Extension Wizard", titleLabel.Target.Text);
            Assert.AreEqual("This wizard adds an extension.", titleExplanationLabel.Target.Text);
        }
예제 #11
0
        public void DeleteRelation()
        {
            this.testCaseSwitch = TestCaseSwitch.DeleteRelation;

            this.Explorer.AddRepository(this.Repository);

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";

            var objectType = domain.AddDeclaredObjectType(Guid.NewGuid());

            objectType.SingularName = "Singular";
            objectType.PluralName   = "Plural";

            var relationType = domain.AddDeclaredRelationType(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            relationType.AssociationType.ObjectType = objectType;
            relationType.RoleType.ObjectType        = (ObjectType)domain.Domain.Find(UnitTypeIds.StringId);

            var relation2 = domain.AddDeclaredRelationType(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            relation2.AssociationType.ObjectType    = objectType;
            relation2.RoleType.ObjectType           = (ObjectType)domain.Domain.Find(UnitTypeIds.StringId);
            relation2.RoleType.AssignedSingularName = "AllorsString2";
            relation2.RoleType.AssignedPluralName   = "AllorsStrings2";
            relation2.RoleType.Size = -1;

            objectType.SendChangedEvent();
            relationType.SendChangedEvent();
            relation2.SendChangedEvent();
            domain.SendChangedEvent();

            TypeNode.Target.Expand();

            this.TreeViewTester.SelectNode(this.RelationNode);

            var deleteRelation = new MenuItemTester(Constants.Delete);

            Assert.IsTrue(deleteRelation.Target.Visible);

            Assert.AreEqual(2, domain.RelationTypes.Length);

            deleteRelation.Click();

            Assert.IsTrue(domain.IsValid);

            Assert.AreEqual(1, domain.RelationTypes.Length);

            Assert.AreEqual(2, TypeNode.Target.Nodes.Count);
        }
예제 #12
0
        public void CompositeCancel()
        {
            testCaseSwitch = TestCaseSwitch.CompositeCancel;

            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);

            extensionWizard.ShowDialog();
            ExtensionRelation extensionRelation = extensionWizard.ExtensionRelation;

            Assert.AreEqual(DialogResult.Cancel, extensionWizard.DialogResult);

            Assert.IsNull(extensionRelation);
            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);
        }
예제 #13
0
        public void Generate()
        {
            this.testCaseSwitch = TestCaseSwitch.Generate;

            this.Explorer.AddRepository(this.Repository);

            this.ExtendedView = true;

            this.TreeViewTester.SelectNode(this.RepositoryNode);
            var generate = new MenuItemTester(Constants.Generate);

            Assert.IsTrue(generate.Target.Visible);

            generate.Click();
        }
예제 #14
0
        public void NameAlreadyExists()
        {
            testCaseSwitch = TestCaseSwitch.NameAlreadyExists;

            extensionAssociation["Same"] = "Same";

            extensionWizard.ShowDialog();

            ExtensionRelation extensionRelation = extensionWizard.ExtensionRelation;

            Assert.AreEqual(DialogResult.Cancel, extensionWizard.DialogResult);

            Assert.IsNull(extensionRelation);
            Assert.AreEqual(1, this.extensionAssociation.ExtensionRelations.Length);
            Assert.AreEqual("Same", this.extensionAssociation["Same"]);
        }
        public void Maximal()
        {
            this.testCaseSwitch = TestCaseSwitch.Maximal;

            this.Explorer.AddRepository(this.Repository);

            var company = this.domain.AddDeclaredObjectType(Guid.NewGuid());

            company.SingularName = "Company";
            company.PluralName   = "Companies";

            var person = this.domain.AddDeclaredObjectType(Guid.NewGuid());

            person.SingularName = "Person";
            person.PluralName   = "Persons";

            company.SendChangedEvent();
            person.SendChangedEvent();
            this.domain.SendChangedEvent();

            this.TreeViewTester.SelectNode(TypeNode);

            var addRelation = new MenuItemTester(Constants.AddRelationType);

            Assert.IsTrue(addRelation.Target.Visible);

            addRelation.Click();

            Assert.AreEqual(1, this.domain.RelationTypes.Length);
            var relationType = this.domain.RelationTypes[0];

            Assert.AreEqual("EmployerEmployee", relationType.Name);
            Assert.IsTrue(relationType.AssociationType.IsOne);
            Assert.IsTrue(relationType.RoleType.IsMany);
            Assert.IsTrue(relationType.IsIndexed);

            this.TreeViewTester.Target.ExpandAll();

            Assert.AreEqual(1, TypeNode.FindByTagType(typeof(RelationTypeTag)).Length);

            Assert.AreEqual("Employees", RelationNode.Target.Text);
            Assert.AreEqual(new RelationTypeTag(this.Repository, relationType), this.RelationNode.Target.Tag);
        }
예제 #16
0
        public void Boolean()
        {
            testCaseSwitch = TestCaseSwitch.Boolean;

            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);

            extensionWizard.ShowDialog();

            Assert.AreEqual(DialogResult.OK, extensionWizard.DialogResult);

            ExtensionRelation extensionRelation = extensionWizard.ExtensionRelation;

            Assert.IsNotNull(extensionRelation);
            Assert.AreEqual("MyExtension", extensionRelation.Name);
            Assert.IsTrue(extensionRelation.ExistExtensionRole);
            Assert.AreEqual(ExtensionRoleKind.Unit, extensionRelation.ExtensionRoleKind);
            Assert.AreEqual(true, extensionRelation.ExtensionRoleValue);

            Assert.AreEqual(1, this.extensionAssociation.ExtensionRelations.Length);
            Assert.AreEqual(extensionRelation, this.extensionAssociation.ExtensionRelations[0]);
        }
예제 #17
0
        public void Empty()
        {
            this.testCaseSwitch = TestCaseSwitch.Minimal;

            this.SaveTemplate();

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";
            domain.SendChangedEvent();

            this.Explorer.AddRepository(this.Repository);

            this.ExtendedView = true;

            Assert.AreEqual("Templates", this.ExtendedViewTemplatesNode.Target.Text);

            this.ExtendedViewTemplatesNode.Target.ExpandAll();

            Assert.AreEqual(0, this.ExtendedViewTemplatesNode.Target.Nodes.Count);
        }
        public void IncorrectSingularName()
        {
            this.testCaseSwitch = TestCaseSwitch.IncorrectSingularName;

            this.Explorer.AddRepository(this.Repository);

            this.domain.SendChangedEvent();

            this.TreeViewTester.SelectNode(this.DomainNode);

            var addType = new MenuItemTester(Constants.AddObjectType);

            Assert.IsTrue(addType.Target.Visible);

            addType.Click();

            Assert.AreEqual(0, this.domain.CompositeObjectTypes.Length);

            Assert.AreEqual(0, DomainNode.Target.Nodes.Count);

            Assert.AreEqual(2, this.OnShownCount);
        }
        public void Interfaces()
        {
            this.testCaseSwitch = TestCaseSwitch.Interfaces;

            this.Explorer.AddRepository(this.Repository);

            var person = this.domain.AddDeclaredObjectType(Guid.NewGuid());

            person.SingularName = "Person";
            person.PluralName   = "Persons";

            var role = this.domain.AddDeclaredObjectType(Guid.NewGuid());

            role.IsInterface  = true;
            role.SingularName = "Role";
            role.PluralName   = "RoleTypes";

            role.SendChangedEvent();
            person.SendChangedEvent();
            this.domain.SendChangedEvent();

            // Muldec
            this.TreeViewTester.SelectNode(0, 0, 0, 0);

            var testPropertyGrid = new PropertyGridTester("testPropertyGrid");

            var typeDecorator             = (ObjectTypeDecorator)testPropertyGrid.Target.SelectedObject;
            var editorMock                = new EditorMock(typeDecorator);
            var superinterfacesTypeEditor = new SuperinterfacesTypeEditor();
            var interfaces                =
                (ObjectType[])
                superinterfacesTypeEditor.EditValue(editorMock, editorMock, typeDecorator.PossibleSuperinterfaces);

            typeDecorator.Superinterfaces = interfaces;

            Assert.AreEqual(1, interfaces.Length);
            Assert.AreEqual(role, interfaces[0]);
            Assert.AreEqual(1, person.DirectSuperinterfaces.Length);
        }
예제 #20
0
        public void InheritedTypeNoMenus()
        {
            this.testCaseSwitch = TestCaseSwitch.InheritedTypeNoMenus;

            this.Explorer.AddRepository(this.Repository);

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";

            var myInterface = domain.AddDeclaredObjectType(Guid.NewGuid());

            myInterface.SingularName = "MyInterface";
            myInterface.PluralName   = "MyInterfaces";
            myInterface.IsInterface  = true;

            var myClass = domain.AddDeclaredObjectType(Guid.NewGuid());

            myClass.SingularName = "MyClass";
            myClass.PluralName   = "MyClasses";

            myClass.AddDirectSupertype(myInterface);

            myInterface.SendChangedEvent();
            myClass.SendChangedEvent();
            domain.SendChangedEvent();

            SuperTypesNode.Target.ExpandAll();

            this.TreeViewTester.SelectNode(0, 0, 0, 0, 0, 0);

            var deleteType = new MenuItemTester(Constants.Delete);

            Assert.IsFalse(deleteType.Target.Visible);

            var addRelation = new MenuItemTester(Constants.AddRelationType);

            Assert.IsFalse(addRelation.Target.Visible);
        }
예제 #21
0
        public void MetaObjectWithId()
        {
            testCaseSwitch = TestCaseSwitch.MetaObjectWithId;

            Assert.AreEqual(0, this.extensionAssociation.ExtensionRelations.Length);

            extensionWizard.ShowDialog();

            Assert.AreEqual(DialogResult.OK, extensionWizard.DialogResult);

            ExtensionRelation extensionRelation = extensionWizard.ExtensionRelation;

            Assert.IsNotNull(extensionRelation);
            Assert.AreEqual("MyExtension", extensionRelation.Name);
            Assert.IsTrue(extensionRelation.ExistExtensionRole);
            Assert.AreEqual(ExtensionRoleKind.MetaObject, extensionRelation.ExtensionRoleKind);

            Assert.AreEqual(typeof(Domain), extensionRelation.ExtensionRoleValue.GetType());
            Assert.AreEqual(domain, extensionRelation.ExtensionRoleValue);

            Assert.AreEqual(1, this.extensionAssociation.ExtensionRelations.Length);
            Assert.AreEqual(extensionRelation, this.extensionAssociation.ExtensionRelations[0]);
        }
예제 #22
0
        public void DeleteType()
        {
            this.testCaseSwitch = TestCaseSwitch.DeleteType;

            this.Explorer.AddRepository(this.Repository);

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";

            var objectType = domain.AddDeclaredObjectType(Guid.NewGuid());

            objectType.SingularName = "Singular";
            objectType.PluralName   = "Plural";

            var objectType2 = domain.AddDeclaredObjectType(Guid.NewGuid());

            objectType2.SingularName = "Singular2";
            objectType2.PluralName   = "Plural2";

            objectType.SendChangedEvent();
            objectType2.SendChangedEvent();
            domain.SendChangedEvent();

            this.TreeViewTester.SelectNode(this.TypeNode);

            var deleteType = new MenuItemTester(Constants.Delete);

            Assert.IsTrue(deleteType.Target.Visible);

            Assert.AreEqual(2, domain.CompositeObjectTypes.Length);

            deleteType.Click();

            Assert.AreEqual(1, domain.CompositeObjectTypes.Length);
            Assert.AreEqual(1, DomainNode.Target.Nodes.Count);
        }
예제 #23
0
        public void DeleteSuperDomain()
        {
            this.testCaseSwitch = TestCaseSwitch.DeleteSuperDomain;

            var superDomainRepository = new Repository(this.SuperDomainDirectoryInfo, true);
            var superDomain           = superDomainRepository.Domain;

            superDomain.Name = "SuperDomain";
            superDomain.SendChangedEvent();

            var domain = this.Repository.Domain;

            domain.Name = "Domain";
            domain.SendChangedEvent();

            this.Explorer.AddRepository(this.Repository);

            this.Repository.AddSuper(this.SuperDomainDirectoryInfo);

            this.ExtendedView = true;

            this.ExtendedViewSuperDomainsNode.Target.Expand();

            this.TreeViewTester.SelectNode(0, 0, 0, 0);

            var delete = new MenuItemTester(Constants.Delete);

            Assert.IsTrue(delete.Target.Visible);

            Assert.AreEqual(2, domain.DirectSuperDomains.Length);

            delete.Click();

            domain = this.Repository.Domain;
            Assert.AreEqual(1, domain.DirectSuperDomains.Length);
        }
예제 #24
0
        public void UpdateTemplate()
        {
            this.testCaseSwitch = TestCaseSwitch.UpdateTemplate;

            this.Explorer.AddRepository(this.Repository);

            this.ExtendedView = true;

            var template = this.Repository.AddTemplate();

            template.Name = "MyGeneration";

            var templatesNodeTester = this.TreeViewTester.FindNode(0, 0, 1);

            templatesNodeTester.Target.ExpandAll();

            this.TreeViewTester.SelectNode(0, 0, 1, 0);
            var templateNodeTester = this.TreeViewTester.FindNode(0, 0, 1, 0);

            Assert.IsNotNull(templateNodeTester.Target);

            var updateTemplate = new MenuItemTester(Constants.UpdateTemplate);

            Assert.IsTrue(updateTemplate.Target.Visible);

            var templateFileInfo = SaveTemplate(
                "updated.stg",
                @"group AllorsTemplate;

TemplateId() ::= <<" + Guid.NewGuid() + @">>
TemplateName() ::= <<UpdatedTemplate>>
TemplateVersion() ::= <<1.0.1>>
TemplateAllors() ::= <<" + Domain.Version + @">>
TemplateConfiguration(domain) ::= <<
<generations/>
>>
");

            updateTemplate.Click();

            template.Source = new Uri(templateFileInfo.FullName);
            updateTemplate.Click();
            Assert.AreEqual("UpdatedTemplate", this.Repository.Templates[0].StringTemplate.Name);

            SaveTemplate(
                "updated.stg",
                @"group AllorsTemplate;

TemplateId() ::= <<" + Guid.NewGuid() + @">>
TemplateVersion() ::= <<1.0.1>>
TemplateAllors() ::= <<" + Domain.Version + @">>
TemplateConfiguration(domain) ::= <<
<generations/>
>>
");
            updateTemplate.Click();
            Assert.AreEqual("UpdatedTemplate", this.Repository.Templates[0].StringTemplate.Name);

            File.Delete(templateFileInfo.FullName);
            updateTemplate.Click();
            Assert.AreEqual("UpdatedTemplate", this.Repository.Templates[0].StringTemplate.Name);
        }
예제 #25
0
        public void DeleteTypeWithCascading()
        {
            this.testCaseSwitch = TestCaseSwitch.DeleteTypeWithCascading;

            this.Explorer.AddRepository(this.Repository);

            var domain = this.Repository.Domain;

            domain.Name = "MyDomain";

            var superType = domain.AddDeclaredObjectType(Guid.NewGuid());

            superType.SingularName = "Super";
            superType.PluralName   = "Supers";
            superType.IsInterface  = true;

            var objectType = domain.AddDeclaredObjectType(Guid.NewGuid());

            objectType.SingularName = "Singular";
            objectType.PluralName   = "Plural";
            objectType.AddDirectSupertype(superType);

            var objectType2 = domain.AddDeclaredObjectType(Guid.NewGuid());

            objectType2.SingularName = "Singular2";
            objectType2.PluralName   = "Plural2";

            var superRelationType = domain.AddDeclaredRelationType(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            superRelationType.AssociationType.ObjectType = superType;
            superRelationType.RoleType.ObjectType        = (ObjectType)domain.Domain.Find(UnitTypeIds.StringId);

            var relationType = domain.AddDeclaredRelationType(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            relationType.AssociationType.ObjectType = objectType;
            relationType.RoleType.ObjectType        = (ObjectType)domain.Domain.Find(UnitTypeIds.StringId);

            var relation2 = domain.AddDeclaredRelationType(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

            relation2.AssociationType.ObjectType = objectType2;
            relation2.RoleType.ObjectType        = objectType;

            superType.SendChangedEvent();
            objectType.SendChangedEvent();
            objectType2.SendChangedEvent();
            superRelationType.SendChangedEvent();
            relationType.SendChangedEvent();
            relation2.SendChangedEvent();
            domain.SendChangedEvent();

            this.TreeViewTester.SelectNode(this.TypeNode);

            var deleteType = new MenuItemTester(Constants.Delete);

            Assert.IsTrue(deleteType.Target.Visible);

            Assert.AreEqual(3, domain.CompositeObjectTypes.Length);
            Assert.AreEqual(3, domain.RelationTypes.Length);

            deleteType.Click();

            Assert.AreEqual(2, domain.CompositeObjectTypes.Length);
            Assert.AreEqual(2, domain.RelationTypes.Length);

            Assert.AreEqual(2, DomainNode.Target.Nodes.Count);

            Assert.IsTrue(objectType.IsDeleted);
            Assert.IsFalse(objectType2.IsDeleted);

            Assert.IsFalse(superRelationType.IsDeleted);
            Assert.IsTrue(relationType.IsDeleted);
            Assert.IsFalse(relation2.RoleType.ExistObjectType);
        }