예제 #1
0
        public void ProjectChooseElementModify()
        {
            var pair    = GetNewInMemoryProject("temp.prj");
            var xmlPair = new ProjectXmlPair(pair);

            // slightly more verbose to validate some Create/Append intended semantic.
            var chooseCreataed = xmlPair.CreateWithVerify <ProjectChooseElement>((p) => p.CreateChooseElement());

            xmlPair.QueryChildrenWithValidation <ProjectChooseElement>((pc) => true, 0);

            xmlPair.View.AppendChild(chooseCreataed.View);
            var choose = xmlPair.QuerySingleChildrenWithValidation <ProjectChooseElement>((pc) => true);

            Assert.Same(choose.View, chooseCreataed.View);
            // "real" must be different, the chooseCreated real is the same remote object as the View, and chooseReal is just the second created element
            // we did for validation.
            Assert.NotSame(choose.Real, chooseCreataed.Real);

            Assert.ThrowsAny <InvalidOperationException>(() => choose.View.Condition = "ccc");

            Assert.Empty(choose.View.WhenElements);
            choose.Append2NewLabeledChildrenWithVerify <ProjectWhenElement>("when", (p, l) => p.CreateWhenElement($"'$(c)' == '{l}'"), out var when1, out var when2);
            Assert.Equal(2, choose.View.WhenElements.Count);
            when1.VerifySame(choose.QuerySingleChildrenWithValidation <ProjectWhenElement>((ch) => ch.Label == when1.View.Label));
            when2.VerifySame(choose.QuerySingleChildrenWithValidation <ProjectWhenElement>((ch) => ch.Label == when2.View.Label));

            Assert.Null(choose.View.OtherwiseElement);

            var otherWise = choose.AppendNewChaildWithVerify <ProjectOtherwiseElement>(ObjectType.View, "when", (p, l) => p.CreateOtherwiseElement(), (p, l) => true);

            Assert.Same(otherWise.View, choose.View.OtherwiseElement);
            Assert.Same(otherWise.Real, choose.Real.OtherwiseElement);

            choose.Verify();

            choose.View.RemoveChild(when2.View);
            Assert.Equal(1, choose.View.WhenElements.Count);
            when1.VerifySame(choose.QuerySingleChildrenWithValidation <ProjectWhenElement>((ch) => ch.Label == when1.View.Label));

            choose.View.RemoveChild(otherWise.View);
            Assert.Null(choose.View.OtherwiseElement);
            choose.Verify();
        }
예제 #2
0
        public void ProjectRootElementModify()
        {
            var pair    = GetNewInMemoryProject("temp.prj");
            var xmlPair = new ProjectXmlPair(pair);

            xmlPair.VerifySetter(this.StdGroup.Disk.GetAbsolutePath("tempRenamed"), (p) => p.FullPath, (p, v) => p.FullPath = v);
            xmlPair.VerifySetter("build", (p) => p.DefaultTargets, (p, v) => p.DefaultTargets = v);
            xmlPair.VerifySetter("init", (p) => p.InitialTargets, (p, v) => p.InitialTargets  = v);
            xmlPair.VerifySetter("YetAnotherSDK", (p) => p.Sdk, (p, v) => p.Sdk = v);
            xmlPair.VerifySetter("NonLocalProp", (p) => p.TreatAsLocalProperty, (p, v) => p.TreatAsLocalProperty = v);
            xmlPair.VerifySetter("xmakever", (p) => p.ToolsVersion, (p, v) => p.ToolsVersion = v);

            // Check PRE's Add"Foo" functionality.
            // grab some creation data
            var newImport           = this.StdGroup.Disk.GetAbsolutePath("import");
            var newItem             = this.StdGroup.Disk.GetAbsolutePath("newfile.cpp");
            var newItemWithMetadata = this.StdGroup.Disk.GetAbsolutePath("newfile2.cpp");
            List <KeyValuePair <string, string> > itemMetadata = new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("m1", "v1"),
                new KeyValuePair <string, string>("m2", "v2"),
                new KeyValuePair <string, string>("m3", "v3"),
            };

            // Imports
            xmlPair.Add2NewChildrenWithVerify <ProjectImportElement>(newImport, (p, i) => p.AddImport(i), (pi, i) => pi.Project == i, out var import1, out var import2);
            xmlPair.Add2NewLabeledChildrenWithVerify <ProjectImportGroupElement>("ImportGroupLabel", (p, l) => p.AddImportGroup(), out var importGroup1, out var importGroup2);

            // Items
            xmlPair.Add2NewChildrenWithVerify <ProjectItemElement>(newItem, (p, i) => p.AddItem("cpp", i), (pi, i) => pi.Include == i, out var item1, out var item2);
            xmlPair.Add2NewChildrenWithVerify <ProjectItemElement>(newItemWithMetadata, (p, i) => p.AddItem("cpp", i, itemMetadata), (pi, i) => pi.Include == i, out var itemWithMetadata1, out var itemWithMetadata2);
            ViewValidation.VerifyMetadata(itemMetadata, (k) => itemWithMetadata1.View.Metadata.Where((md) => md.Name == k).FirstOrDefault().Value);
            xmlPair.Add2NewLabeledChildrenWithVerify <ProjectItemGroupElement>("ItemGroup", (p, l) => p.AddItemGroup(), out var itemGroup1, out var itemGroup2);

            // ItemDefs
            xmlPair.Add2NewChildrenWithVerify <ProjectItemDefinitionElement>("cpp", (p, it) => p.AddItemDefinition(it), (pi, it) => pi.ItemType == it, out var itemDefinition1, out var itemDefinition2);
            xmlPair.Add2NewLabeledChildrenWithVerify <ProjectItemDefinitionGroupElement>("ItemDefGroup", (p, l) => p.AddItemDefinitionGroup(), out var itemDefinitionGroup1, out var itemDefinitionGroup2);

            // Property
            xmlPair.Add2NewChildrenWithVerify <ProjectPropertyElement>("NewProp", (p, pn) => p.AddProperty(pn, $"Value{pn}"), (prop, pn) => prop.Name == pn, out var itemProp1, out var itemProp2);
            xmlPair.Add2NewLabeledChildrenWithVerify <ProjectPropertyGroupElement>("NewPropGroup", (p, l) => p.AddPropertyGroup(), out var itemPropretyGroup1, out var itemPropretyGroup2);

            // Target & Tasks
            xmlPair.Add2NewChildrenWithVerify <ProjectTargetElement>("NewTarget", (p, n) => p.AddTarget(n), (t, n) => string.Equals(t.Name, n), out var newTarget1, out var newTarget2);
            xmlPair.Add2NewChildrenWithVerify <ProjectUsingTaskElement>("NewUsingTaskFile", (p, n) => p.AddUsingTask(n, "assemblyFile", null), (ut, n) => ut.TaskName == n, out var newUsinTaskFile1, out var newUsingTaskFile2);
            xmlPair.Add2NewChildrenWithVerify <ProjectUsingTaskElement>("NewUsingTaskName", (p, n) => p.AddUsingTask(n, null, "assemblyName"), (ut, n) => ut.TaskName == n, out var newUsinTaskName1, out var newUsingTaskName2);

            // loose create new element check.

            xmlPair.CreateWithVerify <ProjectChooseElement>((p) => p.CreateChooseElement());
            xmlPair.CreateWithVerify <ProjectImportElement>((p) => p.CreateImportElement("fooImport"));
            xmlPair.CreateWithVerify <ProjectImportGroupElement>((p) => p.CreateImportGroupElement());
            xmlPair.CreateWithVerify <ProjectItemDefinitionElement>((p) => p.CreateItemDefinitionElement("creteItemType"));
            xmlPair.CreateWithVerify <ProjectItemDefinitionGroupElement>((p) => p.CreateItemDefinitionGroupElement());
            xmlPair.CreateWithVerify <ProjectItemElement>((p) => p.CreateItemElement("itemType"));
            xmlPair.CreateWithVerify <ProjectItemElement>((p) => p.CreateItemElement("itemType", "include"));
            xmlPair.CreateWithVerify <ProjectItemGroupElement>((p) => p.CreateItemGroupElement());
            xmlPair.CreateWithVerify <ProjectMetadataElement>((p) => p.CreateMetadataElement("metadataName"));
            xmlPair.CreateWithVerify <ProjectMetadataElement>((p) => p.CreateMetadataElement("metadataName1", "value"));
            xmlPair.CreateWithVerify <ProjectOnErrorElement>((p) => p.CreateOnErrorElement("target"));
            xmlPair.CreateWithVerify <ProjectOtherwiseElement>((p) => p.CreateOtherwiseElement());
            xmlPair.CreateWithVerify <ProjectOutputElement>((p) => p.CreateOutputElement("taskParam", "itemType", null));
            xmlPair.CreateWithVerify <ProjectOutputElement>((p) => p.CreateOutputElement("taskParam", null, "propName"));
            xmlPair.CreateWithVerify <ProjectExtensionsElement>((p) => p.CreateProjectExtensionsElement());
            xmlPair.CreateWithVerify <ProjectSdkElement>((p) => p.CreateProjectSdkElement("sdkkk", "verrr"));
            xmlPair.CreateWithVerify <ProjectPropertyElement>((p) => p.CreatePropertyElement("name"));
            xmlPair.CreateWithVerify <ProjectPropertyGroupElement>((p) => p.CreatePropertyGroupElement());
            xmlPair.CreateWithVerify <ProjectTargetElement>((p) => p.CreateTargetElement("target"));
            xmlPair.CreateWithVerify <ProjectTaskElement>((p) => p.CreateTaskElement("task"));
            xmlPair.CreateWithVerify <ProjectUsingTaskBodyElement>((p) => p.CreateUsingTaskBodyElement("eval", "body"));
            xmlPair.CreateWithVerify <ProjectUsingTaskElement>((p) => p.CreateUsingTaskElement("taskName", "file", null));
            xmlPair.CreateWithVerify <ProjectUsingTaskElement>((p) => p.CreateUsingTaskElement("taskName", null, "name"));
            xmlPair.CreateWithVerify <ProjectUsingTaskElement>((p) => p.CreateUsingTaskElement("taskName", "file", null, "runtime", "arch"));
            xmlPair.CreateWithVerify <ProjectUsingTaskElement>((p) => p.CreateUsingTaskElement("taskName", null, "name", "runtime", "arch"));
            xmlPair.CreateWithVerify <ProjectUsingTaskParameterElement>((p) => p.CreateUsingTaskParameterElement("name", "output", "required", "paramType"));
            xmlPair.CreateWithVerify <UsingTaskParameterGroupElement>((p) => p.CreateUsingTaskParameterGroupElement());
            xmlPair.CreateWithVerify <ProjectWhenElement>((p) => p.CreateWhenElement("condition"));

            // DeepClone
            var clone = xmlPair.View.DeepClone();

            ViewValidation.IsLinkedObject(clone);
            Assert.NotSame(clone, xmlPair.View);
            Assert.True(string.IsNullOrEmpty(clone.FullPath));
        }