private static ProjectInstance CreateTestProjectInstance(string fileName)
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create(fileName);

#pragma warning disable SA1118 // Parameter should not span multiple lines. Justification: Used to help match formatting in real projects
            projectRootElement.AddItemDefinitionGroup()
            .AddItemDefinition(AdditionalIncludeDirectoriesPredictor.ClCompileItemName)
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\ClCompileIncludes
                    ;%(AdditionalIncludeDirectories)");
            projectRootElement.AddItemDefinitionGroup()
            .AddItemDefinition(AdditionalIncludeDirectoriesPredictor.FxCompileItemName)
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\FxCompileIncludes
                    ;%(AdditionalIncludeDirectories)");
            projectRootElement.AddItemDefinitionGroup()
            .AddItemDefinition(AdditionalIncludeDirectoriesPredictor.MidlItemName)
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\MidlIncludes
                    ;%(AdditionalIncludeDirectories)");
            projectRootElement.AddItemDefinitionGroup()
            .AddItemDefinition(AdditionalIncludeDirectoriesPredictor.ResourceCompileItemName)
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\ResourceCompileIncludes
                    ;%(AdditionalIncludeDirectories)");
#pragma warning restore SA1118 // Parameter should not span multiple lines

            // No change to AdditionalIncludeDirectories
            projectRootElement.AddItem(AdditionalIncludeDirectoriesPredictor.ClCompileItemName, "foo.cpp");

            // Overrieds AdditionalIncludeDirectories
            projectRootElement.AddItem(AdditionalIncludeDirectoriesPredictor.FxCompileItemName, "foo.fx")
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\ReplacedFxCompileIncludes");

            // Appends to AdditionalIncludeDirectories
            projectRootElement.AddItem(AdditionalIncludeDirectoriesPredictor.MidlItemName, "foo.idl")
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"..\AnotherMidlIncludes;%(AdditionalIncludeDirectories)");

            // Has duplicates and spaces
            projectRootElement.AddItem(AdditionalIncludeDirectoriesPredictor.ResourceCompileItemName, "foo.rc")
            .AddMetadata(
                AdditionalIncludeDirectoriesPredictor.AdditionalIncludeDirectoriesMetadata,
                @"%(AdditionalIncludeDirectories); ;;%(AdditionalIncludeDirectories);..\AnotherResourceCompileIncludes;%(AdditionalIncludeDirectories)");

            return(TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement));
        }
コード例 #2
0
        public void UpdateMetadataImported()
        {
            Assert.Throws <InvalidOperationException>(() =>
            {
                string file = null;

                try
                {
                    file = Microsoft.Build.Shared.FileUtilities.GetTemporaryFile();
                    ProjectRootElement import = ProjectRootElement.Create(file);
                    import.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");
                    import.Save();

                    ProjectRootElement main = ProjectRootElement.Create();
                    Project project         = new Project(main);
                    main.AddImport(file);
                    project.ReevaluateIfNecessary();

                    ProjectItemDefinition definition = project.ItemDefinitions["i"];
                    definition.SetMetadataValue("m", "m1");
                }
                finally
                {
                    File.Delete(file);
                }
            }
                                                      );
        }
コード例 #3
0
        public void SetCondition()
        {
            ProjectRootElement           project        = ProjectRootElement.Create();
            ProjectItemDefinitionElement itemDefinition = project.AddItemDefinitionGroup().AddItemDefinition("i");

            Helpers.ClearDirtyFlag(project);

            itemDefinition.Condition = "c";

            Assert.AreEqual("c", itemDefinition.Condition);
            Assert.AreEqual(true, project.HasUnsavedChanges);
        }
コード例 #4
0
        public void SetLabel()
        {
            ProjectRootElement project = ProjectRootElement.Create();
            project.AddItemDefinitionGroup();
            Helpers.ClearDirtyFlag(project);

            ProjectItemDefinitionGroupElement itemDefinitionGroup = Helpers.GetFirst(project.ItemDefinitionGroups);
            itemDefinitionGroup.Label = "c";

            Assert.Equal("c", itemDefinitionGroup.Label);
            Assert.True(project.HasUnsavedChanges);
        }
コード例 #5
0
        public void EmptyMetadataCollection()
        {
            ProjectRootElement xml = ProjectRootElement.Create();

            xml.AddItemDefinitionGroup().AddItemDefinition("i");
            Project project = new Project(xml);

            ProjectItemDefinition         itemDefinition     = project.ItemDefinitions["i"];
            IEnumerable <ProjectMetadata> metadataCollection = itemDefinition.Metadata;

            List <ProjectMetadata> metadataList = Helpers.MakeList(metadataCollection);

            Assert.Equal(0, metadataList.Count);

            Assert.Equal(null, itemDefinition.GetMetadata("m"));
        }
コード例 #6
0
        public void SetMetadata()
        {
            ProjectRootElement xml = ProjectRootElement.Create();

            xml.AddProperty("p", "v");
            xml.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");
            xml.AddItem("i", "i1");

            Project project = new Project(xml);

            ProjectMetadata metadatum = project.ItemDefinitions["i"].GetMetadata("m");

            metadatum.UnevaluatedValue = "$(p)";

            Assert.Equal("v", Helpers.GetFirst(project.GetItems("i")).GetMetadataValue("m"));
        }
コード例 #7
0
        public void GetMetadataCollection()
        {
            ProjectRootElement xml = ProjectRootElement.Create();

            xml.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");

            Project project = new Project(xml);

            IEnumerable <ProjectMetadata> metadataCollection = project.ItemDefinitions["i"].Metadata;

            List <ProjectMetadata> metadataList = Helpers.MakeList(metadataCollection);

            Assert.Equal(1, metadataList.Count);
            Assert.Equal("m", metadataList[0].Name);
            Assert.Equal("m0", metadataList[0].EvaluatedValue);
        }
        private static ProjectInstance CreateTestProjectInstance(string fileName)
        {
            ProjectRootElement projectRootElement = ProjectRootElement.Create(fileName);

            projectRootElement.AddItemDefinitionGroup()
            .AddItemDefinition(ModuleDefinitionFilePredictor.LinkItemName)
            .AddMetadata(ModuleDefinitionFilePredictor.ModuleDefinitionFileMetadata, @".\Link.def");
            projectRootElement.AddItem(ModuleDefinitionFilePredictor.LinkItemName, "Link.lib");

            projectRootElement.AddItem(ModuleDefinitionFilePredictor.LibItemName, "Lib.lib")
            .AddMetadata(ModuleDefinitionFilePredictor.ModuleDefinitionFileMetadata, @".\Lib.def");

            // Has spaces
            projectRootElement.AddItem(ModuleDefinitionFilePredictor.ImpLibItemName, "ImpLib.lib")
            .AddMetadata(ModuleDefinitionFilePredictor.ModuleDefinitionFileMetadata, @" .\ImpLib.def ");

            return(TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement));
        }
コード例 #9
0
        public void SetMetadataImported()
        {
            string file = null;

            try
            {
                file = Microsoft.Build.Shared.FileUtilities.GetTemporaryFile();
                ProjectRootElement import = ProjectRootElement.Create(file);
                import.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");
                import.Save();

                ProjectRootElement main    = ProjectRootElement.Create();
                Project            project = new Project(main);
                main.AddImport(file);
                project.ReevaluateIfNecessary();

                ProjectItemDefinition definition = project.ItemDefinitions["i"];
                definition.SetMetadataValue("n", "n0");

                string expected = String.Format
                                  (
                    ObjectModelHelpers.CleanupFileContents(
                        @"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
  <ItemDefinitionGroup>
    <i>
      <n>n0</n>
    </i>
  </ItemDefinitionGroup>
  <Import Project=""{0}"" />
</Project>"),
                    file
                                  );

                Helpers.VerifyAssertProjectContent(expected, project.Xml);
            }
            finally
            {
                File.Delete(file);
            }
        }
コード例 #10
0
        public void AddMetadataExistingItemDefinitionGroup()
        {
            ProjectRootElement xml = ProjectRootElement.Create();

            xml.AddItemDefinitionGroup().AddItemDefinition("i").AddMetadata("m", "m0");

            Project project = new Project(xml);

            project.ItemDefinitions["i"].SetMetadataValue("n", "n0");

            string expected = ObjectModelHelpers.CleanupFileContents(
                @"<Project ToolsVersion=""msbuilddefaulttoolsversion"" xmlns=""msbuildnamespace"">
  <ItemDefinitionGroup>
    <i>
      <m>m0</m>
    </i>
    <i>
      <n>n0</n>
    </i>
  </ItemDefinitionGroup>
</Project>");

            Helpers.VerifyAssertProjectContent(expected, project.Xml);
        }