public void Should_find_no_difference_between_original_Scrum_project_and_Agile_project_converted_to_Scrum()
        {
            PrepareTestEnvironment.ResetCollectionOnce();

            TfsConnection.ClientSettingsDirectory = Path.Combine(TestContext.TestRunResultsDirectory, "TfsClient");

            var factory = new ProcessTemplateFactory();

            var unconverted = factory.FromActiveTeamProject(TestCollectionUri, "Agile-6.1");
            var goal = factory.FromActiveTeamProject(TestCollectionUri, "Scrum-2.1");

            var agileToScrumDiffEngine = new DiffEngine(ProcessTemplateMaps.Agile61ToScrum21());

            var initialDifferences = agileToScrumDiffEngine.CompareProcessTemplates(unconverted, goal);

            var morphEngine = new MorphEngine();
            var actions = morphEngine.GenerateActions(initialDifferences);

            morphEngine.Apply(TestCollectionUri, "Agile-6.1", actions, TestContext.TestRunResultsDirectory);

            var emptyMapDiffEngine = new DiffEngine(ProcessTemplateMap.Empty());

            var converted = factory.FromActiveTeamProject(TestCollectionUri, "Agile-6.1");

            var finalDifferences = emptyMapDiffEngine.CompareProcessTemplates(converted, goal);

            var reportBuilder = new ReportBuilder();
            var report = reportBuilder.WriteDifferencesToXml(finalDifferences);
            report.Save(Path.Combine(TestContext.TestRunResultsDirectory, TestContext.TestName + ".xml"));

            Assert.AreEqual(0, finalDifferences.Count(), "Should be zero differences between new Scrum 2.1 project and the converted Agile 6.1 project.");
        }
Example #2
0
        static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                System.Console.WriteLine("usage: {0} <collection uri> <project name to morph> <project name to use as template>",
                    Process.GetCurrentProcess().ProcessName);
                return;
            }

            var collectionUri = new Uri(args[0]);
            var projectName = args[1];
            var templateProjectName = args[2];

            var factory = new ProcessTemplateFactory();

            var currentTemplate = factory.FromActiveTeamProject(collectionUri, projectName);
            var goalTemplate = factory.FromActiveTeamProject(collectionUri, templateProjectName);

            // TODO test for project property showing process template used and update after conversion

            var diffEngine = new DiffEngine(ProcessTemplateMap.ConvertScrum2ToAgile6());
            var differences = diffEngine.CompareProcessTemplates(currentTemplate, goalTemplate);

            var engine = new MorphEngine();

            var actions = engine.GenerateActions(differences);
            foreach (var action in actions)
            {
                System.Console.WriteLine(action.ToString());
            }

            //var filteredActions = actions.Where(a => !(a is DestroyWitdMorphAction)); // TODO optionally skip deleting extra work item items

            engine.Apply(collectionUri, projectName, actions, Path.GetTempPath()); //TODO replace temp path with something useful
        }
Example #3
0
 public void SetEngines(MorphEngine engine)
 {
     if (engine != null)
     {
         m_EngineRu = engine;
         m_EngineEn = engine;
         m_EngineUa = engine;
         m_EngineBy = engine;
     }
 }
Example #4
0
        internal void DeserializeLazy(ByteArrayWrapper str, MorphEngine me, ref int pos)
        {
            this._deserializeBase(str, ref pos);
            int cou = str.DeserializeShort(ref pos);

            if (cou > 0)
            {
                Nodes = new Dictionary <short, MorphTreeNode>();
                for (; cou > 0; cou--)
                {
                    int           i     = str.DeserializeShort(ref pos);
                    int           pp    = str.DeserializeInt(ref pos);
                    MorphTreeNode child = new MorphTreeNode();
                    child.LazyPos = pos;
                    Nodes.Add((short)i, child);
                    pos = pp;
                }
            }
            int p = pos;

            if (RuleIds != null)
            {
                foreach (int rid in RuleIds)
                {
                    MorphRule r = me.GetMutRule(rid);
                    if (r.LazyPos > 0)
                    {
                        pos = r.LazyPos;
                        r.Deserialize(str, ref pos);
                        r.LazyPos = 0;
                    }
                }
                pos = p;
            }
            if (ReverceVariants != null)
            {
                foreach (MorphRuleVariantRef rv in ReverceVariants)
                {
                    MorphRule r = me.GetMutRule(rv.RuleId);
                    if (r.LazyPos > 0)
                    {
                        pos = r.LazyPos;
                        r.Deserialize(str, ref pos);
                        r.LazyPos = 0;
                    }
                }
                pos = p;
            }
        }
        protected static List<MorphAction> GenerateActionsViaDiffEngine()
        {
            if (_actionsViaDiffEngine != null) return _actionsViaDiffEngine;

            using (var agileTemplate = EmbeddedProcessTemplate.Agile6())
            using (var scrumTemplate = EmbeddedProcessTemplate.Scrum2())
            {
                var agileReader = new ProcessTemplateReader(agileTemplate.TemplatePath);
                var scrumReader = new ProcessTemplateReader(scrumTemplate.TemplatePath);

                var processTemplateMap = ProcessTemplateMap.ConvertScrum2ToAgile6();

                var currentProcessTemplate = new ProcessTemplate {WorkItemTypeDefinitions = new ReadOnlyCollection<WorkItemTypeDefinition>(scrumReader.WorkItemTypeDefinitions.ToArray())};
                var goalProcessTemplate = new ProcessTemplate {WorkItemTypeDefinitions = new ReadOnlyCollection<WorkItemTypeDefinition>(agileReader.WorkItemTypeDefinitions.ToArray())};

                var diffEngine = new DiffEngine(processTemplateMap);
                var differences = diffEngine.CompareProcessTemplates(currentProcessTemplate, goalProcessTemplate);

                var morphEngine = new MorphEngine();
                _actionsViaDiffEngine = morphEngine.GenerateActions(differences).ToList();
            }

            return _actionsViaDiffEngine;
        }
Example #6
0
 internal void UnloadLanguages(Pullenti.Morph.MorphLang langs)
 {
     if (langs.IsRu && m_EngineRu.Language.IsRu)
     {
         m_EngineRu = new MorphEngine();
     }
     if (langs.IsEn && m_EngineEn.Language.IsEn)
     {
         m_EngineEn = new MorphEngine();
     }
     if (langs.IsUa && m_EngineUa.Language.IsUa)
     {
         m_EngineUa = new MorphEngine();
     }
     if (langs.IsBy && m_EngineBy.Language.IsBy)
     {
         m_EngineBy = new MorphEngine();
     }
     if (langs.IsKz && m_EngineKz.Language.IsKz)
     {
         m_EngineKz = new MorphEngine();
     }
     GC.Collect();
 }
 private void GenerateActions()
 {
     SetupDifferences();
     var morphEngine = new MorphEngine();
     _actions = morphEngine.GenerateActions(_differences);
 }