public static void Compare(Project projectA, Project projectB)
        {
            IRepository repositoryA = projectA.Repository;
            IRepository repositoryB = projectB.Repository;

            // Compare versions
            Assert.AreEqual <int>(repositoryA.Version, repositoryB.Version);
            int version = repositoryA.Version;

            // Compare Designs
            RepositoryComparer.Compare(((IStyleSetProvider)projectA).StyleSet, ((IStyleSetProvider)projectB).StyleSet, version);
            Compare(repositoryA.GetDesign(null), repositoryB.GetDesign(null), version);
            CompareObjectCount(repositoryA.GetDesigns(), repositoryB.GetDesigns());
            Compare(repositoryA.GetDesigns(), repositoryB.GetDesigns(), version);

            // Compare Templates including TerminalMappings and ModelMappings
            CompareObjectCount(repositoryA.GetTemplates(), repositoryB.GetTemplates());
            foreach (Template templateA in repositoryA.GetTemplates())
            {
                RepositoryComparer.Compare(templateA, repositoryB.GetTemplate(templateA.Name), version);
            }

            // Compare ModelObjects
            CompareModelObjects(repositoryA, null, repositoryB, null, version);

            // Compare diagrams including layers and shapes
            CompareObjectCount(repositoryA.GetDiagrams(), repositoryB.GetDiagrams());
            foreach (Diagram diagramA in repositoryA.GetDiagrams())
            {
                Diagram diagramB = repositoryB.GetDiagram(diagramA.Name);
                // Shapes must not be loaded after loading the diagram
                if (repositoryB is CachedRepository && ((CachedRepository)repositoryB).Store is AdoNetStore)
                {
                    Assert.IsTrue(diagramB.Shapes.Count == 0);
                }
                // Now load the shapes
                repositoryA.GetDiagramShapes(diagramA);
                repositoryB.GetDiagramShapes(diagramB);
                // Compare
                RepositoryComparer.Compare(diagramA, diagramB, version);
            }
        }
        public static void Compare(Project savedProject, Project loadedProject)
        {
            IRepository savedRepository  = savedProject.Repository;
            IRepository loadedRepository = loadedProject.Repository;

            // Compare versions
            Assert.AreEqual <int>(savedRepository.Version, loadedRepository.Version);
            int version = savedRepository.Version;

            // Compare Designs
            RepositoryComparer.Compare(((IStyleSetProvider)savedProject).StyleSet, ((IStyleSetProvider)loadedProject).StyleSet, version);
            CompareObjectCount(savedRepository.GetDesigns(), loadedRepository.GetDesigns());
            RepositoryComparer.Compare(savedProject.Design, loadedProject.Design, version);
            foreach (Design savedDesign in savedRepository.GetDesigns())
            {
                if (savedDesign == savedProject.Design)
                {
                    continue;
                }
                // ToDo: Clarify if the loaded projectDesign should be returned when calling GetDesigns()
                RepositoryComparer.Compare(savedDesign, loadedRepository.GetDesign(((IEntity)savedDesign).Id), version);
            }

            // Compare Templates including TerminalMappings and ModelMappings
            CompareObjectCount(savedRepository.GetTemplates(), loadedRepository.GetTemplates());
            foreach (Template savedTemplate in savedRepository.GetTemplates())
            {
                RepositoryComparer.Compare(savedTemplate, loadedRepository.GetTemplate(savedTemplate.Id), version);
            }

            // Compare ModelObjects
            CompareModelObjects(savedRepository, null, loadedRepository, null, version);

            // Compare diagrams including layers and shapes
            CompareObjectCount(savedRepository.GetDiagrams(), loadedRepository.GetDiagrams());
            foreach (Diagram savedDiagram in savedRepository.GetDiagrams())
            {
                RepositoryComparer.Compare(savedDiagram, loadedRepository.GetDiagram(((IEntity)savedDiagram).Id), version);
            }
        }