public void ProjectBindingOperation_Commit_LegacyProjectSystem_DoesAddFile() { // Arrange ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetCSProjectKind(); this.ruleStore.RegisterConfigFilePath(Language.CSharp, @"c:\Solution\sln.ruleset"); PropertyMock prop = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); testSubject.Initialize(); testSubject.Prepare(CancellationToken.None); this.projectSystemHelper.SetIsLegacyProjectSystem(true); // Act using (new AssertIgnoreScope()) // Ignore that the file is not on disk { testSubject.Commit(); } // Assert string projectFile = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); prop.Value.ToString().Should().Be(Path.GetFileName(projectFile), "Should update the property value"); this.projectMock.Files.ContainsKey(projectFile).Should().BeTrue("Should add the file to the project for the legacy project system"); }
public void ProjectBindingOperation_Prepare_SameDefaultRuleSetsInProject() { // Arrange this.ruleStore.RegisterConfigFilePath(Language.VBNET, @"c:\Solution\sln.ruleset"); ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetVBProjectKind(); PropertyMock defaultRuleSetProperty1 = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); PropertyMock defaultRuleSetProperty2 = CreateProperty(this.projectMock, "config2", ProjectBindingOperation.DefaultProjectRuleSet); testSubject.Initialize(); // Act testSubject.Prepare(CancellationToken.None); // Assert string expectedRuleSetFileForPropertiesWithDefaultRulSets = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); fileSystem.GetFile(expectedRuleSetFileForPropertiesWithDefaultRulSets).Should().Be(null); testSubject.PropertyInformationMap[defaultRuleSetProperty1].NewRuleSetFilePath.Should().Be(expectedRuleSetFileForPropertiesWithDefaultRulSets, "Expected different rule set path for properties with custom rulesets"); testSubject.PropertyInformationMap[defaultRuleSetProperty2].NewRuleSetFilePath.Should().Be(expectedRuleSetFileForPropertiesWithDefaultRulSets, "Expected different rule set path for properties with custom rulesets"); // Act (write pending) this.sccFileSystem.WritePendingNoErrorsExpected(); // Assert that written fileSystem.GetFile(expectedRuleSetFileForPropertiesWithDefaultRulSets).Should().NotBe(null); }
public void ProjectBindingOperation_Prepare_Cancellation() { // Arrange this.ruleStore.RegisterConfigFilePath(Language.CSharp, @"c:\Solution\sln.ruleset"); ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetCSProjectKind(); PropertyMock prop = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); testSubject.Initialize(); using (CancellationTokenSource src = new CancellationTokenSource()) { CancellationToken token = src.Token; src.Cancel(); // Act testSubject.Prepare(token); } // Assert string expectedFile = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); testSubject.PropertyInformationMap[prop].NewRuleSetFilePath.Should().BeNull("Not expecting the new rule set path to be set when canceled"); prop.Value.ToString().Should().Be(ProjectBindingOperation.DefaultProjectRuleSet, "Should not update the property value"); this.projectMock.Files.ContainsKey(expectedFile).Should().BeFalse("Should not be added to the project"); }
public void ProjectBindingOperation_Commit() { // Setup this.serviceProvider.RegisterService(typeof(IProjectSystemHelper), this.projectSystemHelper); ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetCSProjectKind(); this.ruleStore.RegisterRuleSetPath(Language.CSharp, @"c:\Solution\sln.ruleset"); PropertyMock prop = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); testSubject.Initialize(); testSubject.Prepare(CancellationToken.None); // Act using (new AssertIgnoreScope()) // Ignore that the file is not on disk { testSubject.Commit(); } // Verify string expectedFile = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); Assert.AreEqual(Path.GetFileName(expectedFile), prop.Value.ToString(), "Should update the property value"); Assert.IsTrue(this.projectMock.Files.ContainsKey(expectedFile), "Should be added to the project"); }
public void ProjectBindingOperation_Prepare_SameNonDefaultRuleSetsInProject() { // Setup this.ruleStore.RegisterRuleSetPath(Language.VBNET, @"c:\Solution\sln.ruleset"); ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetVBProjectKind(); PropertyMock customRuleSetProperty1 = CreateProperty(this.projectMock, "config1", "Custom.ruleset"); PropertyMock customRuleSetProperty2 = CreateProperty(this.projectMock, "config2", "Custom.ruleset"); testSubject.Initialize(); // Act testSubject.Prepare(CancellationToken.None); // Verify string expectedRuleSetFileForPropertiesWithDefaultRulSets = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); this.sccFileSystem.AssertFileNotExists(expectedRuleSetFileForPropertiesWithDefaultRulSets); Assert.AreEqual(expectedRuleSetFileForPropertiesWithDefaultRulSets, testSubject.PropertyInformationMap[customRuleSetProperty1].NewRuleSetFilePath, "Expected different rule set path for properties with custom rulesets"); Assert.AreEqual(expectedRuleSetFileForPropertiesWithDefaultRulSets, testSubject.PropertyInformationMap[customRuleSetProperty2].NewRuleSetFilePath, "Expected different rule set path for properties with custom rulesets"); // Act (write pending) this.sccFileSystem.WritePendingNoErrorsExpected(); // Verify that written this.sccFileSystem.AssertFileExists(expectedRuleSetFileForPropertiesWithDefaultRulSets); }
public void ProjectBindingOperation_Prepare_VariousRuleSetsInProjects() { // Arrange this.ruleStore.RegisterRuleSetPath(Language.VBNET, @"c:\Solution\sln.ruleset"); ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetVBProjectKind(); PropertyMock customRuleSetProperty1 = CreateProperty(this.projectMock, "config1", "Custom.ruleset"); PropertyMock customRuleSetProperty2 = CreateProperty(this.projectMock, "config2", "Custom.ruleset"); PropertyMock defaultRuleSetProperty1 = CreateProperty(this.projectMock, "config3", ProjectBindingOperation.DefaultProjectRuleSet); PropertyMock defaultRuleSetProperty2 = CreateProperty(this.projectMock, "config4", ProjectBindingOperation.DefaultProjectRuleSet); testSubject.Initialize(); // Act testSubject.Prepare(CancellationToken.None); // Assert string expectedRuleSetFileForPropertiesWithDefaultRulSets = Path.Combine(Path.GetDirectoryName(this.projectMock.FilePath), Path.GetFileNameWithoutExtension(this.projectMock.FilePath) + ".ruleset"); this.sccFileSystem.files.Should().NotContainKey(expectedRuleSetFileForPropertiesWithDefaultRulSets); testSubject.PropertyInformationMap[defaultRuleSetProperty1].NewRuleSetFilePath.Should().Be(expectedRuleSetFileForPropertiesWithDefaultRulSets, "Expected all the properties with default ruleset to have the same new ruleset"); testSubject.PropertyInformationMap[defaultRuleSetProperty2].NewRuleSetFilePath.Should().Be(expectedRuleSetFileForPropertiesWithDefaultRulSets, "Expected all the properties with default ruleset to have the same new ruleset"); string expectedRuleSetForConfig1 = Path.ChangeExtension(expectedRuleSetFileForPropertiesWithDefaultRulSets, "config1.ruleset"); testSubject.PropertyInformationMap[customRuleSetProperty1].NewRuleSetFilePath.Should().Be(expectedRuleSetForConfig1, "Expected different rule set path for properties with custom rulesets"); this.sccFileSystem.files.Should().NotContainKey(expectedRuleSetForConfig1); string expectedRuleSetForConfig2 = Path.ChangeExtension(expectedRuleSetFileForPropertiesWithDefaultRulSets, "config2.ruleset"); testSubject.PropertyInformationMap[customRuleSetProperty2].NewRuleSetFilePath.Should().Be(expectedRuleSetForConfig2, "Expected different rule set path for properties with custom rulesets"); this.sccFileSystem.files.Should().NotContainKey(expectedRuleSetForConfig2); // Act (write pending) this.sccFileSystem.WritePendingNoErrorsExpected(); // Assert that written this.sccFileSystem.files.Should().ContainKey(expectedRuleSetFileForPropertiesWithDefaultRulSets); this.sccFileSystem.files.Should().ContainKey(expectedRuleSetForConfig1); this.sccFileSystem.files.Should().ContainKey(expectedRuleSetForConfig2); }
public void ProjectBindingOperation_Initialize_ConfigurationPropertiesWithVariousValues() { // Arrange ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetCSProjectKind(); PropertyMock prop1 = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); PropertyMock prop2 = CreateProperty(this.projectMock, "config2", "NonDefualtRuleSet.ruleset"); // Act testSubject.Initialize(); // Assert testSubject.ProjectFullPath.Should().Be(@"c:\solution\Project\project.proj"); testSubject.ProjectLanguage.Should().Be(Language.CSharp); CollectionAssert.AreEquivalent(new[] { prop1, prop2 }, testSubject.PropertyInformationMap.Keys.ToArray(), "Unexpected properties"); testSubject.PropertyInformationMap[prop1].CurrentRuleSetFilePath.Should().Be(ProjectBindingOperation.DefaultProjectRuleSet); testSubject.PropertyInformationMap[prop1].TargetRuleSetFileName.Should().Be("project", "Default ruleset - expected project based name to be generated"); testSubject.PropertyInformationMap[prop2].CurrentRuleSetFilePath.Should().Be("NonDefualtRuleSet.ruleset"); testSubject.PropertyInformationMap[prop2].TargetRuleSetFileName.Should().Be("project.config2", "Non default ruleset - expected configuration based rule set name to be generated"); }
public void ProjectBindingOperation_Initialize_ConfigurationPropertyWithDefaultValues() { // Arrange ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetVBProjectKind(); PropertyMock prop1 = CreateProperty(this.projectMock, "config1", ProjectBindingOperation.DefaultProjectRuleSet); PropertyMock prop2 = CreateProperty(this.projectMock, "config2", ProjectBindingOperation.DefaultProjectRuleSet); // Act testSubject.Initialize(); // Assert testSubject.ProjectFullPath.Should().Be(@"c:\solution\Project\project.proj"); testSubject.ProjectLanguage.Should().Be(Language.VBNET); CollectionAssert.AreEquivalent(new[] { prop1, prop2 }, testSubject.PropertyInformationMap.Keys.ToArray(), "Unexpected properties"); foreach (var prop in new[] { prop1, prop2 }) { testSubject.PropertyInformationMap[prop].CurrentRuleSetFilePath.Should().Be(ProjectBindingOperation.DefaultProjectRuleSet); testSubject.PropertyInformationMap[prop].TargetRuleSetFileName.Should().Be("project"); } }
public void ProjectBindingOperation_Initialize_ConfigurationPropertyWithEmptyRuleSets() { // Setup ProjectBindingOperation testSubject = this.CreateTestSubject(); this.projectMock.SetVBProjectKind(); PropertyMock prop1 = CreateProperty(this.projectMock, "config1", null); PropertyMock prop2 = CreateProperty(this.projectMock, "config2", string.Empty); // Act testSubject.Initialize(); // Verify Assert.AreEqual(@"c:\solution\Project\project.proj", testSubject.ProjectFullPath); Assert.AreEqual(Language.VBNET, testSubject.ProjectLanguage); CollectionAssert.AreEquivalent(new[] { prop1, prop2 }, testSubject.PropertyInformationMap.Keys.ToArray(), "Unexpected properties"); foreach (var prop in new[] { prop1, prop2 }) { Assert.IsTrue(string.IsNullOrEmpty(testSubject.PropertyInformationMap[prop].CurrentRuleSetFilePath)); Assert.AreEqual("project", testSubject.PropertyInformationMap[prop].TargetRuleSetFileName); } }