public void Matching_Successful()
        {
            CodeRootMap map = new CodeRootMap();

            CodeRoot userroot = CreateBasicRoot();

            map.AddCodeRoot(userroot, Version.User);

            CodeRoot prevroot = CreateBasicRoot();

            map.AddCodeRoot(prevroot, Version.PrevGen);

            CodeRoot templateroot = CreateBasicRoot();

            map.AddCodeRoot(templateroot, Version.NewGen);

            string result = map.GetMergedCodeRoot().ToString();

            Assertions.StringContains(result, "class Class1", 1);
            Assertions.StringContains(result, "namespace ArchAngel.Tests", 1);

            map.MatchConstructs(map.GetExactNode(userroot.Namespaces[0]), userroot.Namespaces[0].Classes[0], null, prevroot.Namespaces[0].Classes[0]);
            map.Diff();

            Assert.That(map.ChildNodes[0].ChildNodes, Has.Count(2));
            Assert.That(map.ChildNodes[0].ChildNodes[0].DetermineMissingConstructs(), Is.EqualTo(MissingObject.User | MissingObject.PrevGen));
            Assert.That(map.ChildNodes[0].ChildNodes[1].DetermineMissingConstructs(), Is.EqualTo(MissingObject.NewGen));

            ICodeRoot merged = map.GetMergedCodeRoot();

            result = merged.ToString();
            Assertions.StringContains(result, "class Class1", 2);
            Assertions.StringContains(result, "namespace ArchAngel.Tests", 1);
        }
        public void Diff_Does_Not_Modify_Base_Constructs()
        {
            string original = Path.Combine(ResourcePath, "Class1.cs");
            string changed  = Path.Combine(ResourcePath, "Class1_WithConstructor.cs");

            ICodeRoot userCR    = GetCodeRoot(original);
            ICodeRoot newgenCR  = GetCodeRoot(changed);
            ICodeRoot prevgenCR = GetCodeRoot(changed);

            CodeRootMap map = new CodeRootMap();

            map.AddCodeRoot(userCR, Version.User);
            map.AddCodeRoot(newgenCR, Version.NewGen);
            map.AddCodeRoot(prevgenCR, Version.PrevGen);

            map.Diff();

            ICodeRoot withoutDiff = GetCodeRoot(changed);

            Assert.That(map.PrevGenCodeRoot.ToString(), Is.EqualTo(withoutDiff.ToString()));
            Assert.That(map.NewGenCodeRoot.ToString(), Is.EqualTo(withoutDiff.ToString()));
        }